Hash Goodness

June 11th, 2006

Over at caboo.se they just posted this hash trick:

class Hash
  # lets through the keys in the argument
  # >> {:one => 1, :two => 2, :three => 3}.pass(:one)
  # => {:one=>1}
  def pass(*keys)
    tmp = self.clone
    tmp.delete_if {|k,v| ! keys.include?(k) }
    tmp
  end

  # blocks the keys in the arguments
  # >> {:one => 1, :two => 2, :three => 3}.block(:one)
  # => {:two=>2, :three=>3}
  def block(*keys)
    tmp = self.clone
    tmp.delete_if {|k,v| keys.include?(k) }
    tmp
  end
end

which makes it possible to …

def some_action
    # some script kiddie also passed in :bee, 
    # which we don't want tampered with
    @model = Model.create(params.pass(:foo, :bar))
end

Nice!

Leave a Reply


(textile enabled)