ActiveWeekly #2

Cet article a été précédemment publié a cette adresse http://dev.af83.io/2011/11/04/activeweekly-2.html.

Deuxième semaine d’ActiveDaily, une astuce quotidienne sur ActiveSupport et ActiveModel.

Vous pouvez suivre l’ActiveDaily sur github ou bien lire ces billets de blog hebdomadaire.

ActiveSupport::Callbacks

Les callbacks permettent de facilement rajouter des points d’entrées dans vos classes.

require 'active_support/callbacks.rb'

class Bim
  include ActiveSupport::Callbacks
  define_callbacks :kick

  def kick
    run_callbacks :kick do
      puts 'BIMMMMMMMMM!'
    end
  end
end

class Norris < Bim
  set_callback :kick, :before, do |chuck|
    puts 'Be careful'
  end

  set_callback :kick, :after do |chuck|
    puts 'KO'
  end
end

chuck = Norris.new
chuck.kick # Your are KO baby

Bon dans Rails toute cette logique est utilisé dans ActiveModel, rendez vous la semaine prochaine :).

ActiveSupport::OrderedOptions

OrderedOptions vous permet de setter des paramètres de config d’une manière assez facile.

require 'active_support/ordered_options'

options = ActiveSupport::OrderedOptions.new
options.chuck = 'norris'
options[:chuck] # norris

Les options dans Rails sont gérès de cette manière.

Hash#slice

Il peut être pratique de filtrer les clés d’un Hash.

require 'active_support/core_ext/hash/slice'

hash = Hash.new
hash['chuck'] = 'norris'
hash['bruce'] = 'lee'
hash['roger'] = 'hanin' # my real idol
hash.slice('bruce', 'roger')

D’ailleurs vous pouvez le combinez avec le HashWithIndifferentAccess.

hash.with_indifferent_access.slice(:bruce, :roger)

Object#try

Si vous en avez assez de tester sans cesse si la variable que vous avez est nil, vous pouvez utiliser try.

require 'active_support/core_ext/object'

a = nil
a.try(:size) # nil
b = "plop"
b.try(:size) # 4

Vous avez une astuce sous le coude que vous désirez partager ? Envoyez la moi et elle se retrouvera peut être dans un prochain ActiveDaily. Seule les astuces sur ActiveSupport et ActiveModel seront incluse (sauf si vous arrivez a me convaincre).

Have a comment? Contact me by email.