Skip to content

fix(datable): lire une borne jour comme la journée entière - #28

Open
Memli-Sheremeti wants to merge 3 commits into
mainfrom
fix/datable-whole-days-on-datetime
Open

fix(datable): lire une borne jour comme la journée entière#28
Memli-Sheremeti wants to merge 3 commits into
mainfrom
fix/datable-whole-days-on-datetime

Conversation

@Memli-Sheremeti

@Memli-Sheremeti Memli-Sheremeti commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Summary

Une borne sans heure était lue comme un instant : le minuit qui ouvre le jour, dans le fuseau du serveur. Sur une colonne t.datetime, elle écartait donc toutes les lignes enregistrées pendant la journée qu'elle nomme, alors qu'un appelant qui envoie un jour parle du jour. Et comme Time.parse lit dans le fuseau système, la coupure se déplaçait d'un serveur à l'autre.

Découvert en passant clones_navs.date de date à datetime dans mosaic. Le symptôme le plus net : une spec before verte en local sous CEST et rouge en CI sous UTC, sur la même donnée.

Changes

  • parse distingue le jour de l'instant avec Date._parse et rend une Date ou un Time
  • chaque filtre compare via un prédicat nommé d'après sa sémantique : on_or_before, strictly_before, on_or_after, strictly_after
  • une journée est bornée à minuit dans Time.zone quand l'application en fixe un, et par jour suivant plutôt qu'en ajoutant 24 h
  • une borne portant une heure reste honorée à la seconde, désormais lue elle aussi dans Time.zone
  • README : section « Datetime columns: a bare day names the whole day »

Impact

Change la sémantique des quatre filtres date pour tout consommateur dont l'attribut datable porte une colonne datetime. Sur une colonne date, les bornes restent équivalentes (< jour + 1 vaut <= jour) et deux exemples le vérifient. Aucun autre projet n'a d'attribut datable sur une colonne datetime aujourd'hui.

How to Test

  1. bundle exec rspec — 209 exemples, 0 échec
  2. TZ=UTC bundle exec rspec puis TZ=America/New_York bundle exec rspec — même résultat, c'est le point du correctif
  3. bundle exec rspec spec/datable_datetime_spec.rb sur la lib de main — 5 des 13 exemples échouent
  4. bundle exec rubocop — aucune offense

…tetime

Sur une colonne qui porte un instant, une borne donnée en jour nu était lue
comme le minuit qui ouvre ce jour : `since=2026-03-01` laissait tomber les
enregistrements de 09:00 et de 17:30, et ne gardait qu'un éventuel minuit.

- `since` admet le jour entier, `after` l'exclut entier, `from`/`to` bornent
  du premier au dernier instant du jour nommé
- une borne portant une heure reste honorée à la seconde
- une colonne `date` garde exactement le comportement qu'elle avait
- les journées sont bornées à minuit dans `Time.zone` quand l'application en
  définit un, et par jour suivant plutôt qu'en ajoutant 24 h, qu'un changement
  d'heure rendrait faux
Copilot AI lite review requested due to automatic review settings September 2, 2026 12:14

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Copilot AI review requested due to automatic review settings September 2, 2026 12:22

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

La détection par expression régulière et introspection du type de colonne ne
voyait pas le filtre before, ne reconnaissait que le format ISO, et coupait la
journée dans le fuseau du serveur alors que les bornes horaires étaient lues
dans celui de l'application.

parse rend désormais une Date pour un jour et un Time pour un instant, via
Date._parse. Chaque filtre porte un prédicat nommé d'après sa sémantique.
Copilot AI review requested due to automatic review settings September 2, 2026 13:55

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@Memli-Sheremeti Memli-Sheremeti changed the title fix(datable): lire un jour nu comme la journée entière sur colonne datetime fix(datable): lire une borne jour comme la journée entière Sep 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants