Ruby on Rails 2.2 (a nawet 2.2.2)

Ruby on Rails 2.2Jako że Ruby on Rails doczekało się kilka dni temu (a dokładniej 21-go listopada) kolejnej odsłony, wypadałoby opisać co ważniejsze lub co ciekawsze rzeczy, które pojawiły się w tej wersji. Poniżej więc są rzeczy, które zwróciły moją uwagę, posortowane w miarę losowo i zdecydowanie nie jest to kompletna lista poprawek, ale moje spojrzenie na to, co uważam za przydatne (lub mniej przydatne, ale warte odnotowania z różnych względów).

Z luźnych i nie związanych z tematem skojarzeń to niedawno oprogramowanie firmware dla iPhone’a też doczekało się wersji 2.2, a wtyczka Akismet do WordPressa trafiła jeszcze dokładniej – aktualnie jest w wersji 2.2.2. Ciekawy zbieg okoliczności.

* i18n (Internationalization)
Jaki jest polski odpowiednik tego? Internacjonalizacja? Brzmi zdecydowanie zbyt sztucznie. Pozostanę więc przy i18n – prostsze, szybsze i bardziej naturalne.
Tak czy owak, Ruby on Rails trochę urosło, wyedukowało się i w efekcie nauczyło się mówić w wielu językach. W tym oczywiście po polsku. Skończą się wreszcie różne dziwne sztuczki i triki, żeby oduczyć swoje aplikacje od angielskiego i przekabacić na polski. Teraz to jest wbudowane we framework i można się skupić na ważniejszych rzeczach. Bardzo duży plus dla wszystkich piszących aplikacje w innych językach. Ze swego doświadczenia wiem jak duży jest komfort kiedy się pisze aplikację po angielsku (praktycznie nic nie trzeba poprawiać i wszystko jest naturalne) i ile się trzeba napoprawiać i o ile rzeczach pamiętać, kiedy się pisze np. po polsku.
Tuż po wyjściu wersji 2.2 nie było jeszcze polskiej lokalizacji, więc ja i oki postanowiliśmy przetłumaczyć co było do przetłumaczenia i wrzucić to do oficjalnego repozytorium Ruby on Rails. Spóźniliśmy się o jakiś dzień lub dwa, bo ubiegł nas Jacek Becela z trix.pl i dzięki temu Rails już nie ma problemu z dogadaniem się po szczebrzeszyńsku.
Dla zainteresowanych – dużo materiałów na temat i18n jest zebranych na oficjalnej stronie: Rails I18n. Warto się zapoznać.

* Zgodność z Ruby 1.9 i JRuby
Z JRuby nie korzystam i w najbliższym czasie prawdopodobnie jeszcze nie skorzystam, ale warto o tym wspomnieć, bo JRuby nabiera coraz bardziej rumieńców i jest już dostatecznie szybkie i stabilne, żeby działać w trybie produkcyjnym.
Bardziej interesuje mnie zgodność z Ruby 1.9. Co prawda nie przesiądę się jeszcze na 1.9, bo nie jest to jeszcze wersja stabilna, ale dobrze wiedzieć, że jak tylko Ruby 1.9 dojdzie do wersji końcowej, to Ruby on Rails już będzie na to gotowe. A jest na co czekać, bo Ruby 1.9 jest dużo, dużo szybsze od Ruby 1.8.x.

* Dokumentacja
Dużo dobrego dzieje się w działce dokumentacji. Jedna z ważniejszych inicjatyw ostatnich miesięcy to uruchomienie Ruby on Rails Guides. Jest to zbiór niby-tutoriali, niby-opisów, niby-zbiorów-informacji o najważniejszych komponentach Ruby on Rails. Trzeba przyznać, że ich jakość jest lepsza, niż się spodziewałem i zdecydowanie warto do nich zajrzeć.
Oprócz tego moim zdaniem najlepsze źródło dla API, czyli APIdock już ma dokumentację dla Ruby on Rails 2.2, więc można śmiało korzystać i się cieszyć.

* Wsparcie dla ETag i last_modified
Od teraz łatwiej będzie unikać zasobochłonnych zapytań poprzez porównywanie ETag i last_modified oraz wysyłania „304 Not Modified”

* Transakcje w migracjach
Koniec z problemami kiedy migracje wywalały się w połowie i mimo iż żadna z migracji po błędzie nie została wykonana, to w bazie została zapisywana nieodpowiednia wersja i albo trzeba było ręcznie zmieniać numer wersji albo kasować wszystko i zaczynać od nowa. Teraz wszystko wygodnie jest pakowane w transakcję i jak coś ma nie działać, to nie zaśmieca to nam bazy częściowymi migracjami i po poprawieniu błędu możemy spokojnie migrować raz jeszcze.

* Łatwiejsza praca z łączonymi tabelami (JOIN)
Teraz do łączonych tabel można dodawać tablicę asocjacyjną (hash) z dodatkowymi warunkami wyszukiwania, co znacznie ułatwi zapytania na skomplikowanie połączonych tabelach.
Prosty przykład dla unaocznienia:

# Znajdź wszystkie książki z twardą okładką
Book.all(:joins => :covers, :conditions => { :covers => { :hard => true }})

Nasuwa mi się od razu tematyczny dowcip. Może i znany, ale niezmiennie dobry:
Zapytanie SQL wchodzi do baru, podchodzi do dwóch tabel i mówi: „Can I join you?”

* find_last_by_<atrybut>
Dopiero niedawno (zdaje się w wersji 2.0 albo 2.1) zostało wprowadzone ‘last’, a już jest find_last_by. Jest to odpowiednik tego kodu:

Model.last(:conditions => {:attribute => value})

# Znajdź ostatnią książkę Gladwella
Book.find_last_by_author['Malcolm Gladwell']

* Układy stron w Action Mailer (layouts)
Kto trochę dłużej pracował z Action Mailerem, ten wie, że generowanie i wysyłanie maili jest delikatnie mówiąc zrobione „trochę naokoło”. Ja przynajmniej zawsze odnosiłem takie wrażenie. Od teraz jest to ułatwione poprzez stosowanie layout’ów. Łatwiej się będzie teraz tym zarządzało, aczkolwiek ciągle uważam, że wysyłanie maili jest niepotrzebnie przekombinowane w Ruby on Rails.

* Pomocne szczególiki
- Dodane metody past?, today? i future? dla klas Date i Time, dla łatwiejszego porównywania czasów i dat
- Time rozpoznaje teraz ułamkowe wartości w konstrukcjach takich jak: 2.3.hours.ago albo 3.6.weeks.since

* Dziwoląg
Stworzono aliasy Array#second do Array#tenth dla Array#[1]Array#[9]
Po co? Nie mam najmniejszego pojęcia. Jak dla mnie to jedynie niepotrzebne zaśmiecanie frameworka. Więcej zachodu niż to jest tego warte.

Dla dalszego zgłębiania szczegółów polecam ten link. Jest tam naprawdę dużo przydatnych rzeczy i szczegółowych opisów.

Podsumowując
Ruby on Rails 2.2 jest – szczególnie dla międzynarodowej części społeczności Ruby on Rails – dużym i ważnym krokiem do przodu. Rails 2.1 był w sieci dość mocno nagłośniony, jednak uważam, że to 2.2 jest większym krokiem do przodu w porównaniu do poprzedniej wersji, niż 2.1 w stosunku do 2.0. Rzeczy wyżej wymienione to tylko część zmian. Dużo więcej się dzieje pod maską, tam gdzie nie jest to tak widoczne, a co jest równie ważne.
W najbliższym czasie mam zamiar napisać prostą aplikację w Rails 2.2.2. Żeby potestować nową wersję i żeby napisać coś użytecznego (tak przynajmniej to postrzegam). Jeśli będą jakieś nietypowe rzeczy, to się nimi podzielę. Jak aplikacja będzie gotowa, to również nie omieszkam o tym wspomnieć.
A teraz zapraszam do kodowania w nowej odsłonie Rails. Miłego klawiaturowego i intelektualnego szaleństwa.

Liczba komentarzy: 5 ↓

#1 Jacek Becela 11.28.08 o 11:07

A propos dziwoląga – aliasy byly wczesniej, rzeczywiscie bez sensu, za to teraz David usunal czesc z nich, i zeby wykorzystac zaoszczedzone miejsce, dodal alias #forty_two, ktory wg mnie jest jedna z bardziej przydantych zmian w tej wersji.

#2 himn1 11.30.08 o 17:16

i18n = umiędzynarodowienie (dodanie do aplikacji możliwości wpisywania, przetwarzania i wyświetlania tekstu w różnych językach)

l10n = lokalizacja (dostosowanie aplikacji do określonych ustawień regionalnych)

#3 Sabon 11.30.08 o 17:21

Umiędzynarodowienie dla mnie brzmi strasznie sztucznie, więc pozostanę już przy i18n. No chyba że zapisać to jako u17e :)

#4 Jacek Becela 12.01.08 o 16:11

No własnie patrze w rails-i18n, a nie ma pl.yml, myśle: co za lenie w tym kraju, wieksi niz ja ;) a ze mialem goraczke i programowac sie w tym dniu zwyczajnie nie dalo…

#5 Wojciech Zieliński 01.12.09 o 15:48

To ja go poprawie :P

Zostaw swój komentarz