mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Added Hash#except which is the inverse of Hash#slice -- return the hash except the keys that are specified [DHH]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7172 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
5b2be62934
commit
cb23816960
4 changed files with 41 additions and 1 deletions
|
@ -1,5 +1,7 @@
|
|||
*SVN*
|
||||
|
||||
* Added Hash#except which is the inverse of Hash#slice -- return the hash except the keys that are specified [DHH]
|
||||
|
||||
* Added support for pluralization with a different starting letter than the singular version (cow/kine) #4929 [norri_b/hasmanyjosh]
|
||||
|
||||
* Demote Hash#to_xml to use XmlSimple#xml_in_string so it can't read files or stdin. #8453 [candlerb, Jeremy Kemper]
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
%w(keys indifferent_access reverse_merge conversions diff slice).each do |ext|
|
||||
%w(keys indifferent_access reverse_merge conversions diff slice except).each do |ext|
|
||||
require "#{File.dirname(__FILE__)}/hash/#{ext}"
|
||||
end
|
||||
|
||||
|
@ -9,4 +9,5 @@ class Hash #:nodoc:
|
|||
include ActiveSupport::CoreExtensions::Hash::Conversions
|
||||
include ActiveSupport::CoreExtensions::Hash::Diff
|
||||
include ActiveSupport::CoreExtensions::Hash::Slice
|
||||
include ActiveSupport::CoreExtensions::Hash::Except
|
||||
end
|
||||
|
|
24
activesupport/lib/active_support/core_ext/hash/except.rb
Normal file
24
activesupport/lib/active_support/core_ext/hash/except.rb
Normal file
|
@ -0,0 +1,24 @@
|
|||
require 'set'
|
||||
|
||||
module ActiveSupport #:nodoc:
|
||||
module CoreExtensions #:nodoc:
|
||||
module Hash #:nodoc:
|
||||
# Return a hash that includes everything but the given keys. This is useful for
|
||||
# limiting a set of parameters to everything but a few known toggles:
|
||||
#
|
||||
# @person.update_attributes(params[:person].except(:admin))
|
||||
module Except
|
||||
# Returns a new hash without the given keys.
|
||||
def except(*keys)
|
||||
rejected = Set.new(respond_to?(:convert_key) ? keys.map { |key| convert_key(key) } : keys)
|
||||
reject { |key,| rejected.include?(key) }
|
||||
end
|
||||
|
||||
# Replaces the hash without only the given keys.
|
||||
def except!(*keys)
|
||||
replace(except(*keys))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -277,6 +277,19 @@ class HashExtTest < Test::Unit::TestCase
|
|||
assert_equal expected, copy
|
||||
end
|
||||
end
|
||||
|
||||
def test_except
|
||||
original = { :a => 'x', :b => 'y', :c => 10 }
|
||||
expected = { :a => 'x', :b => 'y' }
|
||||
|
||||
# Should return a new hash with only the given keys.
|
||||
assert_equal expected, original.except(:c)
|
||||
assert_not_equal expected, original
|
||||
|
||||
# Should replace the hash with only the given keys.
|
||||
assert_equal expected, original.except!(:c)
|
||||
assert_equal expected, original
|
||||
end
|
||||
end
|
||||
|
||||
class IWriteMyOwnXML
|
||||
|
|
Loading…
Reference in a new issue