darthjee-core_ext 1.7.3 → 1.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +19 -8
  3. data/.gitignore +1 -0
  4. data/.rubocop.yml +7 -0
  5. data/.rubocop_todo.yml +7 -3
  6. data/Dockerfile +9 -0
  7. data/README.md +5 -6
  8. data/Rakefile +2 -0
  9. data/config/yardstick.rb +13 -0
  10. data/config/yardstick.yml +35 -0
  11. data/core_ext.gemspec +9 -7
  12. data/docker-compose.yml +3 -6
  13. data/lib/darthjee/core_ext/array.rb +2 -2
  14. data/lib/darthjee/core_ext/class.rb +90 -4
  15. data/lib/darthjee/core_ext/enumerable.rb +5 -1
  16. data/lib/darthjee/core_ext/hash.rb +30 -0
  17. data/lib/darthjee/core_ext/hash/cameliazable.rb +91 -0
  18. data/lib/darthjee/core_ext/hash/chain_fetcher.rb +10 -0
  19. data/lib/darthjee/core_ext/hash/key_changeable.rb +85 -53
  20. data/lib/darthjee/core_ext/hash/key_changer.rb +41 -31
  21. data/lib/darthjee/core_ext/hash/value_changer.rb +128 -11
  22. data/lib/darthjee/core_ext/version.rb +1 -1
  23. data/spec/integration/yard/{array → darthjee/core_ext/array}/hash_builder_spec.rb +3 -3
  24. data/spec/integration/yard/{array_spec.rb → darthjee/core_ext/array_spec.rb} +0 -0
  25. data/spec/integration/yard/darthjee/core_ext/class/default_value_spec.rb +143 -0
  26. data/spec/integration/yard/{date → darthjee/core_ext/date}/days_between_spec.rb +6 -6
  27. data/spec/integration/yard/{enumerable_spec.rb → darthjee/core_ext/enumerable_spec.rb} +0 -0
  28. data/spec/integration/yard/darthjee/core_ext/hash/cameliazable_spec.rb +34 -0
  29. data/spec/integration/yard/darthjee/core_ext/hash/chain_fetcher_spec.rb +51 -0
  30. data/spec/integration/yard/darthjee/core_ext/hash/key_changeable_spec.rb +48 -0
  31. data/spec/integration/yard/{hash → darthjee/core_ext/hash}/transformable_spec.rb +7 -3
  32. data/spec/integration/yard/darthjee/core_ext/hash/value_changer_spec.rb +66 -0
  33. data/spec/integration/yard/darthjee/core_ext/hash_spec.rb +42 -0
  34. data/spec/lib/array_spec.rb +27 -17
  35. data/spec/lib/class_spec.rb +108 -7
  36. data/spec/lib/darthjee/core_ext/hash/deep_hash_constructor_spec.rb +1 -1
  37. data/spec/lib/darthjee/core_ext/hash/key_changer_spec.rb +8 -8
  38. data/spec/lib/darthjee/core_ext/hash/keys_sorter_spec.rb +1 -0
  39. data/spec/lib/darthjee/core_ext/hash/to_hash_mapper_spec.rb +1 -0
  40. data/spec/lib/darthjee/core_ext/hash/value_changer_spec.rb +246 -0
  41. data/spec/lib/date_spec.rb +5 -4
  42. data/spec/lib/hash_spec.rb +45 -32
  43. data/spec/lib/math_spec.rb +1 -0
  44. data/spec/lib/numeric_spec.rb +39 -17
  45. data/spec/lib/object_spec.rb +7 -7
  46. data/spec/lib/symbol_spec.rb +2 -2
  47. data/spec/lib/time_spec.rb +5 -4
  48. data/spec/support/models/default_reader_model.rb +8 -0
  49. data/spec/support/models/default_value_model.rb +2 -0
  50. data/spec/support/models/dummy_iterator.rb +15 -0
  51. data/spec/support/models/dummy_transformer.rb +15 -0
  52. data/spec/support/shared_examples/array/array_random.rb +2 -1
  53. data/spec/support/shared_examples/clean.rb +20 -20
  54. data/spec/support/shared_examples/date.rb +18 -13
  55. data/spec/support/shared_examples/hash/chain_fetch.rb +4 -3
  56. data/spec/support/shared_examples/hash/chain_hash_keys_changer.rb +14 -7
  57. data/spec/support/shared_examples/hash/hash_keys_changer.rb +10 -4
  58. data/spec/support/shared_examples/hash/hash_transpose.rb +1 -1
  59. data/spec/support/shared_examples/hash/keys_appender.rb +14 -4
  60. data/spec/support/shared_examples/hash/keys_camelizer.rb +7 -7
  61. data/spec/support/shared_examples/hash/keys_sorter.rb +3 -3
  62. data/spec/support/shared_examples/hash/keys_underscorer.rb +2 -2
  63. data/spec/support/shared_examples/hash/map_to_hash.rb +14 -12
  64. data/spec/support/shared_examples/hash/remap.rb +4 -4
  65. data/spec/support/shared_examples/hash/value_changer.rb +40 -33
  66. metadata +70 -20
  67. data/spec/integration/yard/class/default_value_spec.rb +0 -58
@@ -2,7 +2,7 @@
2
2
 
3
3
  shared_examples 'a hash clean method' do |method|
4
4
  context 'when hash has one level' do
5
- let(:subject) do
5
+ subject(:hash) do
6
6
  { a: 1, b: nil, c: '', d: {} }
7
7
  end
8
8
 
@@ -11,12 +11,12 @@ shared_examples 'a hash clean method' do |method|
11
11
  end
12
12
 
13
13
  it 'cleans the hash from empty and nil values' do
14
- expect(subject.send(method)).to eq(expected)
14
+ expect(hash.send(method)).to eq(expected)
15
15
  end
16
16
  end
17
17
 
18
18
  context 'when hash has two levels' do
19
- let(:subject) do
19
+ subject(:hash) do
20
20
  { a: 1, c: '', d: { e: 1 }, f: { g: { b: nil } } }
21
21
  end
22
22
 
@@ -25,12 +25,12 @@ shared_examples 'a hash clean method' do |method|
25
25
  end
26
26
 
27
27
  it 'cleans the hash from empty and nil values' do
28
- expect(subject.send(method)).to eq(expected)
28
+ expect(hash.send(method)).to eq(expected)
29
29
  end
30
30
  end
31
31
 
32
32
  context 'when hash has many levels' do
33
- let(:subject) do
33
+ subject(:hash) do
34
34
  {
35
35
  a: 1,
36
36
  d: { e: { k: { l: { m: { n: 1 } } } } },
@@ -43,12 +43,12 @@ shared_examples 'a hash clean method' do |method|
43
43
  end
44
44
 
45
45
  it 'cleans the hash from empty and nil values' do
46
- expect(subject.send(method)).to eq(expected)
46
+ expect(hash.send(method)).to eq(expected)
47
47
  end
48
48
  end
49
49
 
50
50
  context 'when hash has one nil value and one valid value' do
51
- let(:subject) do
51
+ subject(:hash) do
52
52
  { a: { b: 1, c: nil } }
53
53
  end
54
54
 
@@ -57,12 +57,12 @@ shared_examples 'a hash clean method' do |method|
57
57
  end
58
58
 
59
59
  it 'cleans the hash from empty and nil values' do
60
- expect(subject.send(method)).to eq(expected)
60
+ expect(hash.send(method)).to eq(expected)
61
61
  end
62
62
  end
63
63
 
64
64
  context 'when hash has arrays' do
65
- let(:subject) do
65
+ subject(:hash) do
66
66
  { a: [] }
67
67
  end
68
68
 
@@ -71,12 +71,12 @@ shared_examples 'a hash clean method' do |method|
71
71
  end
72
72
 
73
73
  it 'cleans the hash from empty and nil values' do
74
- expect(subject.send(method)).to eq(expected)
74
+ expect(hash.send(method)).to eq(expected)
75
75
  end
76
76
  end
77
77
 
78
78
  context 'when hash has arrays with hashes' do
79
- let(:subject) do
79
+ subject(:hash) do
80
80
  { a: [{ c: nil }] }
81
81
  end
82
82
 
@@ -85,12 +85,12 @@ shared_examples 'a hash clean method' do |method|
85
85
  end
86
86
 
87
87
  it 'cleans the hash from empty and nil values' do
88
- expect(subject.send(method)).to eq(expected)
88
+ expect(hash.send(method)).to eq(expected)
89
89
  end
90
90
  end
91
91
 
92
92
  context 'when hash has arrays with hashes with valid values' do
93
- let(:subject) do
93
+ subject(:hash) do
94
94
  { a: [{ c: 1 }] }
95
95
  end
96
96
 
@@ -99,12 +99,12 @@ shared_examples 'a hash clean method' do |method|
99
99
  end
100
100
 
101
101
  it 'cleans the hash from empty and nil values' do
102
- expect(subject.send(method)).to eq(expected)
102
+ expect(hash.send(method)).to eq(expected)
103
103
  end
104
104
  end
105
105
 
106
106
  context 'when hash has arrays with hashes with valid and invalid values' do
107
- let(:subject) do
107
+ subject(:hash) do
108
108
  { a: [{ c: nil }, { d: 1 }] }
109
109
  end
110
110
 
@@ -113,14 +113,14 @@ shared_examples 'a hash clean method' do |method|
113
113
  end
114
114
 
115
115
  it 'cleans the hash from empty and nil values' do
116
- expect(subject.send(method)).to eq(expected)
116
+ expect(hash.send(method)).to eq(expected)
117
117
  end
118
118
  end
119
119
  end
120
120
 
121
121
  shared_examples 'an array clean method' do |method|
122
122
  context 'when array has one level' do
123
- let(:subject) do
123
+ subject(:hash) do
124
124
  [1, nil, '', {}, []]
125
125
  end
126
126
 
@@ -129,12 +129,12 @@ shared_examples 'an array clean method' do |method|
129
129
  end
130
130
 
131
131
  it 'cleans the hash from empty and nil values' do
132
- expect(subject.send(method)).to eq(expected)
132
+ expect(hash.send(method)).to eq(expected)
133
133
  end
134
134
  end
135
135
 
136
136
  context 'when array has many levels' do
137
- let(:subject) do
137
+ subject(:hash) do
138
138
  [
139
139
  1,
140
140
  nil,
@@ -149,7 +149,7 @@ shared_examples 'an array clean method' do |method|
149
149
  end
150
150
 
151
151
  it 'cleans the hash from empty and nil values' do
152
- expect(subject.send(method)).to eq(expected)
152
+ expect(hash.send(method)).to eq(expected)
153
153
  end
154
154
  end
155
155
  end
@@ -1,31 +1,31 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  shared_examples 'an object that knows how to calculate days between' do
4
- let(:other_date) { subject.to_date + difference }
4
+ let(:other_date) { date.to_date + difference }
5
5
  let(:difference) { 1.year }
6
6
 
7
7
  context 'when other object is a date' do
8
8
  context 'when other date is one year ahead' do
9
- it { expect(subject.days_between(other_date)).to eq(365) }
9
+ it { expect(date.days_between(other_date)).to eq(365) }
10
10
  end
11
11
 
12
12
  context 'when other date is one year behind' do
13
13
  let(:difference) { - 1.year }
14
14
 
15
- it { expect(subject.days_between(other_date)).to eq(365) }
15
+ it { expect(date.days_between(other_date)).to eq(365) }
16
16
  end
17
17
 
18
18
  context 'when initial date is on a leap year' do
19
19
  let(:year) { 2016 }
20
20
 
21
21
  context 'when other date is one year ahead' do
22
- it { expect(subject.days_between(other_date)).to eq(365) }
22
+ it { expect(date.days_between(other_date)).to eq(365) }
23
23
  end
24
24
 
25
25
  context 'when other date is one year behind' do
26
26
  let(:difference) { - 1.year }
27
27
 
28
- it { expect(subject.days_between(other_date)).to eq(366) }
28
+ it { expect(date.days_between(other_date)).to eq(366) }
29
29
  end
30
30
  end
31
31
 
@@ -33,43 +33,48 @@ shared_examples 'an object that knows how to calculate days between' do
33
33
  let(:year) { 2015 }
34
34
 
35
35
  context 'when other date is one year ahead' do
36
- it { expect(subject.days_between(other_date)).to eq(366) }
36
+ it { expect(date.days_between(other_date)).to eq(366) }
37
37
  end
38
38
 
39
39
  context 'when other date is one year behind' do
40
40
  let(:difference) { - 1.year }
41
41
 
42
- it { expect(subject.days_between(other_date)).to eq(365) }
42
+ it { expect(date.days_between(other_date)).to eq(365) }
43
43
  end
44
44
  end
45
45
  end
46
46
 
47
47
  context 'when other date is a time' do
48
- let(:other_date) { subject.to_date.to_time + difference }
48
+ let(:other_date) { date.to_date.to_time + difference }
49
49
 
50
50
  context 'when other date is one year and 10 hours ahead' do
51
51
  let(:difference) { 1.year + 10.hours }
52
- it { expect(subject.days_between(other_date)).to eq(365) }
52
+
53
+ it { expect(date.days_between(other_date)).to eq(365) }
53
54
  end
54
55
 
55
56
  context 'when other date is one year and 25 hours ahead' do
56
57
  let(:difference) { 1.year + 25.hours }
57
- it { expect(subject.days_between(other_date)).to eq(366) }
58
+
59
+ it { expect(date.days_between(other_date)).to eq(366) }
58
60
  end
59
61
 
60
62
  context 'when other date is one year and 23 hours ahead' do
61
63
  let(:difference) { 1.year + 23.hours }
62
- it { expect(subject.days_between(other_date)).to eq(365) }
64
+
65
+ it { expect(date.days_between(other_date)).to eq(365) }
63
66
  end
64
67
 
65
68
  context 'when other date is one year and 10 hours behind' do
66
69
  let(:difference) { - 1.year - 10.hours }
67
- it { expect(subject.days_between(other_date)).to eq(366) }
70
+
71
+ it { expect(date.days_between(other_date)).to eq(366) }
68
72
  end
69
73
 
70
74
  context 'when other date is almost one year behind (missing 10 hours)' do
71
75
  let(:difference) { -1.year + 10.hours }
72
- it { expect(subject.days_between(other_date)).to eq(365) }
76
+
77
+ it { expect(date.days_between(other_date)).to eq(365) }
73
78
  end
74
79
  end
75
80
  end
@@ -50,7 +50,7 @@ shared_examples 'an object with capable of performing chain fetch' do
50
50
  end
51
51
  end
52
52
 
53
- context 'but a default value block is given' do
53
+ context 'when a default value block is given' do
54
54
  let(:default_value) { 100 }
55
55
  let(:block) { proc { default_value } }
56
56
 
@@ -58,7 +58,7 @@ shared_examples 'an object with capable of performing chain fetch' do
58
58
  expect(result).to eq(default_value)
59
59
  end
60
60
 
61
- context 'and the block logs the missing keys' do
61
+ context 'when the block logs the missing keys' do
62
62
  it 'hnadles the missing keys' do
63
63
  missing_keys = nil
64
64
  hash.chain_fetch(*keys) do |_, keys|
@@ -69,8 +69,9 @@ shared_examples 'an object with capable of performing chain fetch' do
69
69
  end
70
70
  end
71
71
 
72
- context 'and the block uses the key for the return' do
72
+ context 'when the block uses the key for the return' do
73
73
  let(:block) { proc { |k| "returned #{k}" } }
74
+
74
75
  it 'hnadles the missing keys' do
75
76
  expect(result).to eq('returned x')
76
77
  end
@@ -5,7 +5,7 @@ shared_examples 'a class with chain_change_key method' do
5
5
  { 'a' => 1, b: 2, c: { d: 3, e: 4 }, f: [{ g: 5 }, { h: 6 }] }
6
6
  end
7
7
 
8
- describe :chain_change_keys do
8
+ describe '#chain_change_keys' do
9
9
  it_behaves_like 'a method that is able to chain change keys',
10
10
  :chain_change_keys
11
11
  it 'does not affects the original hash' do
@@ -15,7 +15,7 @@ shared_examples 'a class with chain_change_key method' do
15
15
  end
16
16
  end
17
17
 
18
- describe :ichain_change_keys! do
18
+ describe '#ichain_change_keys!' do
19
19
  it_behaves_like 'a method that is able to chain change keys',
20
20
  :chain_change_keys!
21
21
 
@@ -28,8 +28,8 @@ shared_examples 'a class with chain_change_key method' do
28
28
  end
29
29
 
30
30
  shared_examples 'a method that is able to chain change keys' do |method|
31
- let(:result) { hash.public_send(method, *transformations, options) }
32
- let(:options) { {} }
31
+ let(:result) { hash.public_send(method, *transformations, options) }
32
+ let(:options) { {} }
33
33
  let(:transformations) { [:to_s] }
34
34
 
35
35
  context 'with simple level hash' do
@@ -37,12 +37,14 @@ shared_examples 'a method that is able to chain change keys' do |method|
37
37
 
38
38
  context 'with symbol transformation' do
39
39
  let(:transformations) { [:to_sym] }
40
- let(:expected) { { a: 1, b: 2 } }
40
+ let(:expected) { { a: 1, b: 2 } }
41
+
41
42
  it_behaves_like 'result is as expected'
42
43
  end
43
44
 
44
45
  context 'with string transformation' do
45
46
  let(:expected) { { 'a' => 1, 'b' => 2 } }
47
+
46
48
  it_behaves_like 'result is as expected'
47
49
  end
48
50
  end
@@ -62,12 +64,14 @@ shared_examples 'a method that is able to chain change keys' do |method|
62
64
 
63
65
  context 'with recursion' do
64
66
  let(:recursive) { true }
67
+
65
68
  it_behaves_like 'result is as expected'
66
69
  end
67
70
 
68
71
  context 'without recursion' do
69
72
  let(:recursive) { false }
70
73
  let(:expected) { { 'a' => 1, 'b' => { c: 3, 'd' => 4 } } }
74
+
71
75
  it_behaves_like 'result is as expected'
72
76
  end
73
77
  end
@@ -78,14 +82,17 @@ shared_examples 'a method that is able to chain change keys' do |method|
78
82
  let(:expected) do
79
83
  { 'a' => 1, 'b' => { 'c' => 2, 'd' => { 'e' => 3, 'f' => 4 } } }
80
84
  end
85
+
81
86
  it_behaves_like 'result is as expected'
82
87
  end
83
88
 
84
- context 'calling with chained transformations' do
89
+ context 'when calling with chained transformations' do
85
90
  let(:transformations) { %i[to_s upcase to_sym] }
86
91
 
87
- let(:hexpected) do
92
+ let(:expected) do
88
93
  { A: 1, B: 2, C: { D: 3, E: 4 }, F: [{ G: 5 }, { H: 6 }] }
89
94
  end
95
+
96
+ it_behaves_like 'result is as expected'
90
97
  end
91
98
  end
@@ -5,7 +5,7 @@ shared_examples 'a class with change_key method' do
5
5
  { 'a' => 1, b: 2, c: { d: 3, e: 4 }, f: [{ g: 5 }, { h: 6 }] }
6
6
  end
7
7
 
8
- describe :change_keys do
8
+ describe '#change_keys' do
9
9
  it_behaves_like 'a method that is able to change keys', :change_keys
10
10
  it 'does not affects the original hash' do
11
11
  expect do
@@ -14,7 +14,7 @@ shared_examples 'a class with change_key method' do
14
14
  end
15
15
  end
16
16
 
17
- describe :change_keys! do
17
+ describe '#change_keys!' do
18
18
  it_behaves_like 'a method that is able to change keys', :change_keys!
19
19
 
20
20
  it 'affects the original hash' do
@@ -38,12 +38,14 @@ shared_examples 'a method that is able to change keys' do |method|
38
38
  hash.public_send(method) { |k| "foo_#{k}" }
39
39
  end
40
40
  let(:expected) { { 'foo_a' => 1, 'foo_b' => 2 } }
41
+
41
42
  it_behaves_like 'result is as expected'
42
43
  end
43
44
 
44
45
  context 'with symbol transformation' do
45
- let(:result) { foo_sym_transformation }
46
+ let(:result) { foo_sym_transformation }
46
47
  let(:expected) { { foo_a: 1, foo_b: 2 } }
48
+
47
49
  it_behaves_like 'result is as expected'
48
50
  end
49
51
  end
@@ -57,6 +59,7 @@ shared_examples 'a method that is able to change keys' do |method|
57
59
 
58
60
  context 'when no options are given' do
59
61
  let(:options) { {} }
62
+
60
63
  it_behaves_like 'result is as expected'
61
64
  end
62
65
 
@@ -65,12 +68,14 @@ shared_examples 'a method that is able to change keys' do |method|
65
68
 
66
69
  context 'with recursion' do
67
70
  let(:recursive) { true }
71
+
68
72
  it_behaves_like 'result is as expected'
69
73
  end
70
74
 
71
75
  context 'without recursion' do
72
76
  let(:recursive) { false }
73
- let(:expected) { { 'foo_a' => 1, 'foo_b' => { c: 3, 'd' => 4 } } }
77
+ let(:expected) { { 'foo_a' => 1, 'foo_b' => { c: 3, 'd' => 4 } } }
78
+
74
79
  it_behaves_like 'result is as expected'
75
80
  end
76
81
  end
@@ -82,6 +87,7 @@ shared_examples 'a method that is able to change keys' do |method|
82
87
  { foo_a: 1, foo_b: { foo_c: 2, foo_d: { foo_e: 3, foo_f: 4 } } }
83
88
  end
84
89
  let(:result) { foo_sym_transformation }
90
+
85
91
  it_behaves_like 'result is as expected'
86
92
  end
87
93
  end
@@ -24,7 +24,7 @@ shared_examples 'a class with transpose method' do |method|
24
24
  expect(hash.public_send(method).public_send(method)).to eq(hash)
25
25
  end
26
26
 
27
- context 'whe key is already a hash' do
27
+ context 'when key is already a hash' do
28
28
  let(:key) { { c: 2 } }
29
29
  let(:hash) { { key => sub_hash } }
30
30
 
@@ -7,26 +7,31 @@ shared_examples 'a class with append_keys method' do
7
7
  expected = { foo_a: 1, 'foo_b' => 2 }
8
8
  expect(hash.prepend_to_keys('foo_')).to eq(expected)
9
9
  end
10
+
10
11
  it 'applies the block recursively' do
11
12
  hash = { 'a' => 1, b: { c: 3, 'd' => 4 } }
12
13
  expected = { 'foo_a' => 1, foo_b: { foo_c: 3, 'foo_d' => 4 } }
13
14
  expect(hash.prepend_to_keys('foo_')).to eq(expected)
14
15
  end
15
- it 'changes type when type option is passed' do
16
+
17
+ it 'changes type to string when type string option is passed' do
16
18
  hash = { 'a' => 1, b: 2 }
17
19
  expected = { 'foo_a' => 1, 'foo_b' => 2 }
18
20
  expect(hash.prepend_to_keys('foo_', type: :string)).to eq(expected)
19
21
  end
20
- it 'changes type when type option is passed' do
22
+
23
+ it 'changes type to symbol when type symbol option is passed' do
21
24
  hash = { 'a' => 1, b: 2 }
22
25
  expected = { foo_a: 1, foo_b: 2 }
23
26
  expect(hash.prepend_to_keys('foo_', type: :symbol)).to eq(expected)
24
27
  end
28
+
25
29
  it 'keep type when type option is passed as keep' do
26
30
  hash = { 'a' => 1, b: 2 }
27
31
  expected = { 'foo_a' => 1, foo_b: 2 }
28
32
  expect(hash.prepend_to_keys('foo_', type: :keep)).to eq(expected)
29
33
  end
34
+
30
35
  it 'applies to array as well' do
31
36
  hash = { 'a' => 1, b: [{ c: 2 }, { d: 3 }] }
32
37
  expected = { 'foo_a' => 1, foo_b: [{ foo_c: 2 }, { foo_d: 3 }] }
@@ -40,26 +45,31 @@ shared_examples 'a class with append_keys method' do
40
45
  expected = { a_bar: 1, 'b_bar' => 2 }
41
46
  expect(hash.append_to_keys('_bar')).to eq(expected)
42
47
  end
48
+
43
49
  it 'applies the block recursively' do
44
50
  hash = { 'a' => 1, b: { c: 3, 'd' => 4 } }
45
51
  expected = { 'a_bar' => 1, b_bar: { c_bar: 3, 'd_bar' => 4 } }
46
52
  expect(hash.append_to_keys('_bar')).to eq(expected)
47
53
  end
48
- it 'changes type when type option is passed' do
54
+
55
+ it 'changes type to string when type string option is passed' do
49
56
  hash = { 'a' => 1, b: 2 }
50
57
  expected = { 'a_bar' => 1, 'b_bar' => 2 }
51
58
  expect(hash.append_to_keys('_bar', type: :string)).to eq(expected)
52
59
  end
53
- it 'changes type when type option is passed' do
60
+
61
+ it 'changes type to symbol when type symbol option is passed' do
54
62
  hash = { 'a' => 1, b: 2 }
55
63
  expected = { a_bar: 1, b_bar: 2 }
56
64
  expect(hash.append_to_keys('_bar', type: :symbol)).to eq(expected)
57
65
  end
66
+
58
67
  it 'keep type when type option is passed as keep' do
59
68
  hash = { 'a' => 1, b: 2 }
60
69
  expected = { 'a_bar' => 1, b_bar: 2 }
61
70
  expect(hash.append_to_keys('_bar', type: :keep)).to eq(expected)
62
71
  end
72
+
63
73
  it 'applies to array as well' do
64
74
  hash = { 'a' => 1, b: [{ c: 2 }, { d: 3 }] }
65
75
  expected = { 'a_bar' => 1, b_bar: [{ c_bar: 2 }, { d_bar: 3 }] }