De Ontmaskering van with_options
Geplaatst door Michiel de Mare wo, 01 maa 2006 06:38:00 GMT
Als je herhaaldelijk op hetzelfde object verschillende methoden uitvoert die als laatste argument een hash met opties hebben waarvan een of meer steeds hetzelfde zijn (maar niet allemaal, want dan kun je beter steeds dezelfde hash gebruiken) – dan biedt with_options
uitkomst.
De instance methode with_options
van Object neemt twee parameters (het object , en de opties die constant blijven) en een block.
Het block wordt vervolgens aangeroepen met als argument het oorspronkelijke object in een wrapper die alle method-calls ondervangt en de extra opties – indien mogelijk – aan de laatste methode-parameter toevoegt.
Voorbeeld: Person.find(:all, :offset => 10, :limit => 10)
Person.find(:all, :offset => 10, :limit => 10, :include => [ :account, :friends ])
Person.find(:all, :offset => 10, :limit => 10, :group => "category")
wordt dit:
Person.with_options(:offset => 10, :limit => 10) do |p|
p.find(:all, {})
p.find(:all, :include => [ :account, :friends ])
p.find(:all, :group => "category")
end
PS: Dit zou een geweldige refactoring zijn in IntelliJ. Zo eentje die je met alt-enter
kunt laten uitvoeren. Extract options