Permalink
Browse files

HWIA delegates to to_hash symbolize_keys and stringify_keys and bang …

…methods are not in the api

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
  • Loading branch information...
1 parent 275e839 commit 2472f1026a7d3b3309937568204a5b46b60c2c3c @spastorino spastorino committed with jeremy Apr 22, 2010
@@ -111,8 +111,10 @@ def delete(key)
super(convert_key(key))
end
- def stringify_keys!; self end
- def symbolize_keys!; self end
+ undef :stringify_keys!
+ def stringify_keys; to_hash.stringify_keys end
+ undef :symbolize_keys!
+ def symbolize_keys; to_hash.symbolize_keys end
def to_options!; self end
# Convert to a Hash with String keys.
@@ -60,6 +60,40 @@ def test_stringify_keys!
assert_equal @strings, @mixed.dup.stringify_keys!
end
+ def test_symbolize_keys_for_hash_with_indifferent_access
+ assert_equal @symbols, @symbols.with_indifferent_access.symbolize_keys
+ assert_equal @symbols, @strings.with_indifferent_access.symbolize_keys
+ assert_equal @symbols, @mixed.with_indifferent_access.symbolize_keys
+ end
+
+ def test_symbolize_keys_bang_for_hash_with_indifferent_access
+ assert_raise(NoMethodError) { @symbols.with_indifferent_access.dup.symbolize_keys! }
+ assert_raise(NoMethodError) { @strings.with_indifferent_access.dup.symbolize_keys! }
+ assert_raise(NoMethodError) { @mixed.with_indifferent_access.dup.symbolize_keys! }
+ end
+
+ def test_symbolize_keys_preserves_keys_that_cant_be_symbolized_for_hash_with_indifferent_access
+ assert_equal @illegal_symbols, @illegal_symbols.with_indifferent_access.symbolize_keys
+ assert_raise(NoMethodError) { @illegal_symbols.with_indifferent_access.dup.symbolize_keys! }
+ end
+
+ def test_symbolize_keys_preserves_fixnum_keys_for_hash_with_indifferent_access
+ assert_equal @fixnums, @fixnums.with_indifferent_access.symbolize_keys
+ assert_raise(NoMethodError) { @fixnums.with_indifferent_access.dup.symbolize_keys! }
+ end
+
+ def test_stringify_keys_for_hash_with_indifferent_access
+ assert_equal @strings, @symbols.with_indifferent_access.stringify_keys
+ assert_equal @strings, @strings.with_indifferent_access.stringify_keys
+ assert_equal @strings, @mixed.with_indifferent_access.stringify_keys
+ end
+
+ def test_stringify_keys_bang_for_hash_with_indifferent_access
+ assert_raise(NoMethodError) { @symbols.with_indifferent_access.dup.stringify_keys! }
+ assert_raise(NoMethodError) { @strings.with_indifferent_access.dup.stringify_keys! }
+ assert_raise(NoMethodError) { @mixed.with_indifferent_access.dup.stringify_keys! }
+ end
+
def test_indifferent_assorted
@strings = @strings.with_indifferent_access
@symbols = @symbols.with_indifferent_access
@@ -213,11 +247,11 @@ def test_indifferent_hash_with_array_of_hashes
def test_stringify_and_symbolize_keys_on_indifferent_preserves_hash
h = HashWithIndifferentAccess.new
h[:first] = 1
- h.stringify_keys!
+ h = h.stringify_keys
assert_equal 1, h['first']
h = HashWithIndifferentAccess.new
h['first'] = 1
- h.symbolize_keys!
+ h = h.symbolize_keys
assert_equal 1, h[:first]
end

2 comments on commit 2472f10

@jo
jo commented on 2472f10 Apr 22, 2010

After this ref I got many

NoMethodError: undefined method `stringify_keys!' for #<ActiveSupport::HashWithIndifferentAccess:0xb621fc94>

Errors running my tests with url generation.

Greetings
Johannes

@jo
jo replied Apr 22, 2010

this was fixed now.

Thanx!

Please sign in to comment.