
Range i Date w Ruby on Rails
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_month
, current_month
, previous_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.