Range i Date w Ruby on Rails

7 stycznia 2022
ruby

W jednym z poprzednich postów pokazywałem przykład zastosowania obiektu Range w Ruby. Ruby on Rails posiada własne rozszerzenie klasy Date, dzięki czemu bardzo wygodnie pracuje się z datami. Zero parsowania, zero konwersji, piszemy nasze helpery do obsługi dat, jak język naturalny, przez co kod możemy czytać płynnym angielski i momentami zapomnieć, że mamy do czynienia z językiem programowania. Dzisiaj pokażę Ci jak wykorzystać kombinację klas Range i Date w Ruby on Rails, żeby stworzyć czytelne sprawdzanie dat.

Specyfika Ruby pozwala na jeszcze jedną super rzecz – rozszerzanie corowych klas. W tym przykładzie rozszerzymy klasę Date dostarczaną przez Ruby on Rails.

Case:

W różnego rodzaju modułach raportowych lub dashboardach można spotkać się z operacjami polegającymi na porównywaniu dat, filtrowaniu dat z poprzedniego roku, miesiąca, tygodnia. Praca z datami w RoR i tak jest super przyjemna, ale poniższy snippet sprawi, że staje się jeszcze przyjemniejsza.

Rozszerzamy tutaj klasę Date.

W pierwszej kolejności deklaruję metodę instancji, która będzie sprawdzać czy data zawiera się w podanym zakresie. Jest to metoda instancji, czyli będzie wywoływania na instancji lub mówiąc prościej – bezpośrednio na dacie.

Następnie rozszerzam klasę Date o metody statyczne.

Nadpisuję metodę today.

Tworzę metodę previous_year z wykorzystaniem Range, która zwraca zakres dat dla poprzedniego roku.

Następnie tworzę metodę current_year, która zwraca zakres dat dla bieżącego roku.

W dalszej kolejności metody previous_monthcurrent_monthprevious_week i current_week.

Po stworzeniu tych pomocniczych metod możemy z łatwością pisać warunki sprawdzające daty.

Połączenie klas Range i Date w Ruby on Rails to dobry pomysł na poprawę czytelności kodu.

W dokumentacji przeczytasz o klasie Range i o klasie Date.