X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=ruby%2Flib%2Fruby%2Fgems%2F1.8%2Fgems%2Factivesupport-2.3.12%2Flib%2Factive_support%2Fcore_ext%2Fhash%2Fkeys.rb;fp=ruby%2Flib%2Fruby%2Fgems%2F1.8%2Fgems%2Factivesupport-2.3.12%2Flib%2Factive_support%2Fcore_ext%2Fhash%2Fkeys.rb;h=af9d372d76480a8bc47f16e780345134848bd71f;hb=80a647f166ccf0ef42768dcda8135b1d405dc15e;hp=0000000000000000000000000000000000000000;hpb=05ad905dae7df28a0baeee7739c8aab3de34c138;p=redminele%2Fredminele.git diff --git a/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.12/lib/active_support/core_ext/hash/keys.rb b/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.12/lib/active_support/core_ext/hash/keys.rb new file mode 100644 index 0000000..af9d372 --- /dev/null +++ b/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.12/lib/active_support/core_ext/hash/keys.rb @@ -0,0 +1,52 @@ +module ActiveSupport #:nodoc: + module CoreExtensions #:nodoc: + module Hash #:nodoc: + module Keys + # Return a new hash with all keys converted to strings. + def stringify_keys + inject({}) do |options, (key, value)| + options[key.to_s] = value + options + end + end + + # Destructively convert all keys to strings. + def stringify_keys! + keys.each do |key| + self[key.to_s] = delete(key) + end + self + end + + # Return a new hash with all keys converted to symbols. + def symbolize_keys + inject({}) do |options, (key, value)| + options[(key.to_sym rescue key) || key] = value + options + end + end + + # Destructively convert all keys to symbols. + def symbolize_keys! + self.replace(self.symbolize_keys) + end + + alias_method :to_options, :symbolize_keys + alias_method :to_options!, :symbolize_keys! + + # Validate all keys in a hash match *valid keys, raising ArgumentError on a mismatch. + # Note that keys are NOT treated indifferently, meaning if you use strings for keys but assert symbols + # as keys, this will fail. + # + # ==== Examples + # { :name => "Rob", :years => "28" }.assert_valid_keys(:name, :age) # => raises "ArgumentError: Unknown key(s): years" + # { :name => "Rob", :age => "28" }.assert_valid_keys("name", "age") # => raises "ArgumentError: Unknown key(s): name, age" + # { :name => "Rob", :age => "28" }.assert_valid_keys(:name, :age) # => passes, raises nothing + def assert_valid_keys(*valid_keys) + unknown_keys = keys - [valid_keys].flatten + raise(ArgumentError, "Unknown key(s): #{unknown_keys.join(", ")}") unless unknown_keys.empty? + end + end + end + end +end