--- /dev/null
+# From:\r
+# http://www.bigbold.com/snippets/posts/show/2178\r
+# http://blog.caboo.se/articles/2006/06/11/stupid-hash-tricks\r
+# \r
+# An example utilisation of these methods in a controller is:\r
+# def some_action\r
+# # some script kiddie also passed in :bee, which we don't want tampered with _here_.\r
+# @model = Model.create(params.pass(:foo, :bar))\r
+# end\r
+class Hash\r
+\r
+ # lets through the keys in the argument\r
+ # >> {:one => 1, :two => 2, :three => 3}.pass(:one)\r
+ # => {:one=>1}\r
+ def pass(*keys)\r
+ keys = keys.first if keys.first.is_a?(Array)\r
+ tmp = self.clone\r
+ tmp.delete_if {|k,v| ! keys.include?(k.to_sym) }\r
+ tmp.delete_if {|k,v| ! keys.include?(k.to_s) }\r
+ tmp\r
+ end\r
+\r
+ # blocks the keys in the arguments\r
+ # >> {:one => 1, :two => 2, :three => 3}.block(:one)\r
+ # => {:two=>2, :three=>3}\r
+ def block(*keys)\r
+ keys = keys.first if keys.first.is_a?(Array)\r
+ tmp = self.clone\r
+ tmp.delete_if {|k,v| keys.include?(k.to_sym) }\r
+ tmp.delete_if {|k,v| keys.include?(k.to_s) }\r
+ tmp\r
+ end\r
+\r
+end\r