mobme_support 2.2.4 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,24 +7,43 @@ require_relative '../../version'
7
7
  module MobME::Infrastructure::Utilities::CoreExtensions
8
8
  # Hash extension, allowing recursive Hash key symbolization
9
9
  module Keys
10
- # Recursively symbolize all keys in the hash.
11
- def recursively_symbolize_keys!(modify_nested_arrays = false)
12
- case self
13
- when Hash
14
- symbolize_keys!
10
+ # Returns a version of the supplies Hash or Array with all Hash keys symbolized.
11
+ #
12
+ # @param [Boolean] modify_nested_arrays set to true to iterate over array contents. Defaults to false.
13
+ # @return [Hash, Array] recursively symbolized Array or Hash
14
+ def recursively_symbolize_keys(modify_nested_arrays = false)
15
+ recursively_symbolized_value = case self
16
+ when Hash
17
+ symbolized_hash = symbolize_keys
15
18
 
16
- each do |key, value|
17
- if value.is_a?(Hash) || (modify_nested_arrays && value.is_a?(Array))
18
- self[key] = value.dup.recursively_symbolize_keys!(modify_nested_arrays)
19
+ symbolized_hash.each do |key, value|
20
+ if value.is_a?(Hash) || (modify_nested_arrays && value.is_a?(Array))
21
+ symbolized_hash[key] = value.recursively_symbolize_keys(modify_nested_arrays)
22
+ end
19
23
  end
20
- end
21
- when Array
22
- each_with_index do |value, index|
23
- self[index] = value.dup.recursively_symbolize_keys!(true) if (value.is_a?(Hash) || value.is_a?(Array))
24
- end
24
+
25
+ symbolized_hash
26
+ when Array
27
+ symbolized_array = self.dup
28
+
29
+ symbolized_array.each_with_index do |value, index|
30
+ symbolized_array[index] = value.recursively_symbolize_keys(true) if (value.is_a?(Hash) || value.is_a?(Array))
31
+ end
32
+
33
+ symbolized_array
25
34
  end
26
35
 
27
- self
36
+ recursively_symbolized_value
37
+ end
38
+
39
+ alias_method :recursive_symbolize_keys, :recursively_symbolize_keys
40
+
41
+ # Recursively symbolize all keys in hashes.
42
+ #
43
+ # @param [Boolean] modify_nested_arrays set to true to modify array contents. Defaults to false.
44
+ # @return [Hash, Array] recursively symbolized Array or Hash
45
+ def recursively_symbolize_keys!(modify_nested_arrays = false)
46
+ replace recursively_symbolize_keys(modify_nested_arrays)
28
47
  end
29
48
 
30
49
  alias_method :recursive_symbolize_keys!, :recursively_symbolize_keys!
@@ -4,7 +4,7 @@ module MobME
4
4
  # code.
5
5
  module Utilities
6
6
  # Version string.
7
- VERSION = '2.2.4'
7
+ VERSION = '2.3.0'
8
8
 
9
9
  # Extensions to core Ruby classes.
10
10
  module CoreExtensions
@@ -6,28 +6,27 @@ module MobMESupport::CoreExtensions
6
6
  describe "Hash" do
7
7
  subject { {"foo" => {"bar" => "baz"}, :already_symbol => "far", 123 => "faz"} }
8
8
 
9
- describe "#recursively_symbolize_keys!" do
10
- before(:each) { subject.recursively_symbolize_keys! }
11
-
12
- it { should == {:foo => {:bar => "baz"}, :already_symbol => "far", 123 => "faz"} }
9
+ describe "recursively_symbolize_keys" do
10
+ it "returns a recursilvely symbolized version of the value" do
11
+ subject.recursively_symbolize_keys.should == {:foo => {:bar => "baz"}, :already_symbol => "far", 123 => "faz"}
12
+ end
13
13
 
14
- it "returns the recursively symbolized hash" do
15
- {"foo" => "bar"}.recursively_symbolize_keys!.should == {:foo => "bar"}
14
+ it "does not alter the original object" do
15
+ subject.recursively_symbolize_keys
16
+ subject.should == {"foo" => {"bar" => "baz"}, :already_symbol => "far", 123 => "faz"}
16
17
  end
17
18
 
18
19
  context "when the modify_nested_arrays flag is set to true" do
19
20
  it "recursively symbolizes nested Hashes if they are nested inside an Array" do
20
21
  with_hash_inside_array = {"foo" => {"bar" => [{"baz" => [{"qux" => "qar"}, "string"]}]}}
21
- with_hash_inside_array.recursively_symbolize_keys!(true)
22
- with_hash_inside_array.should == {:foo => {:bar => [{:baz => [{:qux => "qar"}, "string"]}]}}
22
+ with_hash_inside_array.recursively_symbolize_keys(true).should == {:foo => {:bar => [{:baz => [{:qux => "qar"}, "string"]}]}}
23
23
  end
24
24
  end
25
25
 
26
26
  context "when the modify_nested_arrays flag is not set" do
27
27
  it "does not recursively symbolize nested Hashes if they are nested inside an Array" do
28
28
  with_hash_inside_array = {"foo" => {"bar" => [{"baz" => "qux"}]}}
29
- with_hash_inside_array.recursively_symbolize_keys!
30
- with_hash_inside_array.should == {:foo => {:bar => [{"baz" => "qux"}]}}
29
+ with_hash_inside_array.recursively_symbolize_keys.should == {:foo => {:bar => [{"baz" => "qux"}]}}
31
30
  end
32
31
  end
33
32
 
@@ -37,7 +36,7 @@ module MobMESupport::CoreExtensions
37
36
  sample_hash = {"far" => "bar"}
38
37
  hash_to_symbolize = {"array" => sample_array, "hash" => sample_hash}
39
38
 
40
- hash_to_symbolize.recursively_symbolize_keys!(true)
39
+ hash_to_symbolize.recursively_symbolize_keys(true)
41
40
 
42
41
  sample_array.should == [{"foo" => "bar"}]
43
42
  sample_hash.should == {"far" => "bar"}
@@ -45,6 +44,21 @@ module MobMESupport::CoreExtensions
45
44
  end
46
45
  end
47
46
 
47
+ describe "#recursively_symbolize_keys!" do
48
+ it "replaces itself with the recursively symbolized version" do
49
+ replacement_object = double "Replacement"
50
+ subject.stub recursively_symbolize_keys: replacement_object
51
+ subject.should_receive(:replace).with(replacement_object)
52
+ subject.recursively_symbolize_keys!
53
+ end
54
+ end
55
+
56
+ describe "#recursive_symbolize_keys" do
57
+ it "is an alias for #recursively_symbolize_keys" do
58
+ subject.method(:recursive_symbolize_keys).should == subject.method(:recursively_symbolize_keys)
59
+ end
60
+ end
61
+
48
62
  describe "#recursive_symbolize_keys!" do
49
63
  it "is an alias for #recursively_symbolize_keys!" do
50
64
  subject.method(:recursive_symbolize_keys!).should == subject.method(:recursively_symbolize_keys!)
@@ -53,11 +67,20 @@ module MobMESupport::CoreExtensions
53
67
  end
54
68
 
55
69
  describe "Array" do
56
- describe "#recursively_symbolize_keys!" do
70
+ subject { [{"foo" => "bar"}, {"baz" => "qux"}] }
71
+
72
+ describe "#recursively_symbolize_keys" do
57
73
  it "recursively symbolizes Hash values in the array" do
58
- array_with_hash_values = [{"foo" => "bar"}, {"baz" => "qux"}]
59
- array_with_hash_values.recursively_symbolize_keys!
60
- array_with_hash_values.should == [{:foo => "bar"}, {:baz => "qux"}]
74
+ subject.recursively_symbolize_keys.should == [{:foo => "bar"}, {:baz => "qux"}]
75
+ end
76
+ end
77
+
78
+ describe "#recursively_symbolize_keys!" do
79
+ it "replaces itself with the recursively symbolized version" do
80
+ replacement_object = double "Replacement"
81
+ subject.stub recursively_symbolize_keys: replacement_object
82
+ subject.should_receive(:replace).with(replacement_object)
83
+ subject.recursively_symbolize_keys!
61
84
  end
62
85
  end
63
86
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mobme_support
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.4
4
+ version: 2.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-27 00:00:00.000000000 Z
12
+ date: 2012-08-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: i18n