niedziela, 26 lutego 2012

How to proper test scopes (named scopes)


I just read few posts about "how to test named scopes". I'm asking - why should I use FactoryGirl and create tons of unnecessary objects just to test `order(:position).first`?!

How not to do this


We've just created .. let's count .. 5 objects and made 2 unnecessary db queries

How to do this


It's useless to test Rails (it's really proper tested). We need to spec messages that goes between objects and given parameters.

czwartek, 16 lutego 2012

named_accessors: attr_accessors na sterydach

attr_accessor jest świetne (szczególnie jeżeli ktoś przychodzi do Rubiego np. z Javy), ale ma jedną zasadniczą wadę - nazwa zmiennej instancji == nazwa metody (settera i gettera). W 99% to bardzo dobrze, ale dla tego jednego procenta powstało named_accessors.

Mam nadzieję że komuś się kiedyś przyda :)

poniedziałek, 23 stycznia 2012

param_protected i Devise

Kilka dni temu pisałem już o gemie param_protected. Jeżeli używamy go razem z Devise, będziemy musieli zrobić zmodyfikować kontrolery i dodać definicję dozwolonych parametrów.

Po pierwsze musimy zmapować URL-e na nasze nowe kontrolery.


niedziela, 22 stycznia 2012

Hakierzy

Mam dość komentarzy na temat tych ciągłych ataków na rządowe strony. Jak można wypowiadać się na dany temat bez żadnej wiedzy.

Anonymous - cyber Al-Kaida?

Anonymous (ang., rzeczownik niepoliczalny), Anonimowi, Grupa Anonimowych – niezidentyfikowana grupa aktywistów z całego świata podejmująca protesty oraz inne działania w internecie. Działania przypisywane grupie "Anonymous" są podejmowane przez niezidentyfikowane jednostki, które przybierają nazwę "Anonymous" atakując serwery rządowe lub korporacyjne.
W ostatnim czasie, na fali protestów przeciwko SOPA, PIPA czy ACTA w sposób zatrważający moim zdaniem roście poparcie dla grupy Anonymous. Poparcie graniczące wręcz z uwielbieniem. Chociaż może się wydawać, że Anonimowi są naszą ostatnią linią obrony, ostatnim bastionem wolności należy się zastanowić nad słusznością ich działań.



sobota, 21 stycznia 2012

Tapeta dla Rubistów

Choć grafik ze mnie żaden zrobiłem taką oto tapetę dla Rubistów: (oryginał tutaj. tak wiem, nałożyłem tylko logo Rubiego :P)
Link do pobrania

Pulpit prezentuje się teraz znokomicie :)

czwartek, 19 stycznia 2012

Haskell-Platform (+ GHC) na Mac OS X 10.7 (Lion)

Czym jest haskell każdy wie (jak nie, to zapraszam tu), więc nie będę go reklamował tylko od razu przejdę do sedna. Zakładam też że każdy użytkownik OSX używa Homebrew do zarządzania pakietami (jeśli nie to gorąco zachęcam!).

Ponieważ instalacja ghc (kompilatora Haskella) chwilę trwa dlatego dobrze jest uruchomić instalację z opcją -v żebyśmy widzieli cały czas co się dzieje i czy przypadkiem nie występują błędy kompilacji etc.

Opcja 64 też jest ważna! Bez niej nie skompilujemy prawidłowo haskell-platform


Teraz możemy uruchomić REPL Haskella (komendą ghci)

sobota, 14 stycznia 2012

param_protected wycina potrzebne parametry

param_protected to świetny gem, który przenosi funkcjonalność attr_accessible oraz attr_protected do kontrolerów. Składnia jest bardzo prosta:

Jedyny problem jest taki, że nie ma defaultowej listy dozwolonych parametrów. Tzn. że wycinane są takie atrybuty jak action, controller, id, utf8 czy (w przypadku używania devise) authenticity_token. Formularze nie będą przez to działać poprawnie, będziemy cały czas wylogowywani itd.

czwartek, 5 stycznia 2012

środa, 21 grudnia 2011

#next na każdym znaku Stringa

Jakiś czas temu deliberowaliśmy ( :] ) na forum jak najszybciej i najbardziej elegancko rozwiązać wywołanie #next na każdym znaku Stringa. Jeżeli ktoś nie wie jak działa String#next:


Niestety jeżeli wywołamy #next na ciągu znaków nie zadziała tak jakbyśmy chcieli:

środa, 14 grudnia 2011

Mongoid: polimorficzne embeds_one

Nie da się


Załóżmy, że nasza aplikacja ma model MediaObject, który posiada tytuł, głosy itd. ale specyficzne informacje n/t obiektu (treść/link etc.) są w innym modelu (Media::Text, Media::Image etc.). Relacja oczywiście jeden-do-jeden. Jeżeli zrobimy to na zasadzie referenced assosiation, czyli relacje rodem z baz SQL, będziemy mieli zawsze n+1 zapytań. Mongoid co prawda obsługuje eager loading, ale nie dla relacji polimorficznych. Co więc możemy zrobić?

Tworzymy model MediaObject:

Oraz model Media::Resource - po nim będą dziedziczyć wszystkie modele z modułu Media

Teraz możemy dodać np. model Media::Text

Użycie:


Żeby ułatwić sobie życie, możemy wydelegować #content do MediaObject

Opcja allow_nil pozwala trzymać w #content pustą wartość. W tym przypadku to bardzo ważne, bo nie wiemy czy napewno wszystkie modele Media będą miały taką metodę. Gdyby nie miały, bez tej opcji model zawrze rzucał by wyjątek. Teraz użycie wygląda tak:

wtorek, 13 grudnia 2011

Bump to 1.9.3-p0

Dzisiaj (dopiero) zrobiłem update Ruby do wersji 1.9.3-p0. Dużo naczytałem się o poprawie startu appki, wykonywaniu testów itd.

Sprawdźmy jak to wygląda w praktyce :)


Po zainstalowaniu odpaliłem testy powstającej (a więc narazie niedużej) aplikacji Railsowej (Rails 3.1.3)

Ruby 1.9.2

Ruby 1.9.3

Średnie czasy:
Ruby 1.9.2 =~ 16.69
Ruby 1.9.3 =~ 11.12(!)

A więc różnica ponad 5.5s. Całkiem sporo jak na 140 testów.

Update'ować? Opinie są różne, ale wydaje mi się, że jeżeli ma się dobrze otestowaną aplikację można spróbować. Jeśli testy przejdą to po co tracić codziennie te kilka minut (5s * odpalanie_testów_miliard_razy)?

niedziela, 27 listopada 2011

Ruby & Ruby on Rails 101

Ruby & Ruby on Rails 101. Krótka lista od czego zacząć** (będzie uzupełniana)


Ruby
1. TryRuby (Ruby w 15 minut)
2. Eloquent Ruby (moja "mini recenzja")
3. Desing Patterns in Ruby
4. Klasyk, tzw "Książka z Kilofem" - Programming Ruby

Ruby on Rails
1. Rails for Zombies
2. RailsGuides
3. RailsCasts
4. Ruby on Rails Tutorial


Za książki o Rubym trzeba niestety zapłacić (ale pamiętajmy, że to inwestycja!), natomiast źródła o Railsach są w 100% darmowe (no, RailsCasty przynajmniej do niedawna były w 100% darmowe, teraz część treści tam publikowanych jest płatna) i moim zdaniem wystarczające, aby zacząć pisać proste aplikacje. Książek do Railsów jest multum - począwszy od Agile, przez Rails 3 in Action aż po Rails 3 Way (ta ostatnia zdecydowanie dla zaawansowanych), ale moim zdaniem nie są one wymagane (tzn. da radę lepiej lub gorzej nauczyć się bez nich)

** głównie do publikacji na forum Ruby on Rails. Tam takie pytania (a co za tym idzie i odpowiedzi) padają bardzo często. Zamiast pisać to za każdym razem lepiej odesłać do linka ;)

czwartek, 25 sierpnia 2011

One of keys

Edit: Okej, już wiem, która wersja jest najbardziej RubyWay :)

HashKeys@github - taki sobie o bajer z nudów. Użycie jest bajecznie proste - pobieramy hash_keys.rb (może zrobię z tego gema w wolnym czasie) a następnie:




piątek, 22 lipca 2011

Nie róbcie update'u RubyMine do 3.2.2

Update: okazało się, że wystarczy wybrać z menu File -> Invalidate Caches... i w większości przypadków usuwa to błędy.

Wczoraj pojawił się update (podobno bugfix :/) RubyMine do wersji 3.2.2. Zainstalowałem, uruchomiłem i tzw. "dupa". Podpowiadanie składni przestało działać, skok do definicji przestał działać podgląd dokumentacji przestał działać (pewnie więcej rzeczy nie działało, tyle udało mi się zauważyć zanim zrobiłem downgrade). Wszystko się wysypało.


Wywaliłem w cholerę, zainstalowałem 3.2.1 (musiałem niestety wywalić całą konfigurację) i działa.


Radzę poczekać z aktualizacją na kolejną wersję (3.2.3?)

poniedziałek, 11 lipca 2011

niedziela, 19 czerwca 2011

Kod, który zawsze działa!

Remember, a great way to avoid broken code is to have less of it. The code that you never write will work forever.
- Russ Olsen, "Eloquent Ruby" (Addison-Wesley Professional, 2011)