darthjee-core_ext 1.5.6 → 1.6.0
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.
- checksums.yaml +4 -4
- data/.circleci/config.yml +14 -0
- data/.rubocop.yml +17 -0
- data/.rubocop_todo.yml +12 -0
- data/Gemfile +2 -1
- data/Rakefile +2 -0
- data/core_ext.gemspec +6 -3
- data/lib/darthjee/core_ext/array/hash_builder.rb +21 -13
- data/lib/darthjee/core_ext/array.rb +4 -2
- data/lib/darthjee/core_ext/date.rb +2 -0
- data/lib/darthjee/core_ext/enumerable.rb +5 -3
- data/lib/darthjee/core_ext/hash/chain_fetcher.rb +33 -0
- data/lib/darthjee/core_ext/hash/deep_hash_constructor.rb +62 -60
- data/lib/darthjee/core_ext/hash/key_changer.rb +64 -54
- data/lib/darthjee/core_ext/hash/keys_sorter.rb +31 -0
- data/lib/darthjee/core_ext/hash/squasher.rb +31 -0
- data/lib/darthjee/core_ext/hash/to_hash_mapper.rb +21 -0
- data/lib/darthjee/core_ext/hash/value_changer.rb +48 -44
- data/lib/darthjee/core_ext/hash.rb +28 -58
- data/lib/darthjee/core_ext/math.rb +4 -2
- data/lib/darthjee/core_ext/numeric.rb +5 -3
- data/lib/darthjee/core_ext/object/default_value.rb +2 -1
- data/lib/darthjee/core_ext/object.rb +2 -0
- data/lib/darthjee/core_ext/symbol.rb +2 -0
- data/lib/darthjee/core_ext/time.rb +2 -0
- data/lib/darthjee/core_ext/version.rb +3 -1
- data/lib/darthjee/core_ext.rb +2 -0
- data/lib/darthjee.rb +2 -1
- data/spec/lib/array_spec.rb +27 -19
- data/spec/lib/date_spec.rb +2 -0
- data/spec/lib/enumerable_spec.rb +10 -8
- data/spec/lib/hash/chain_fetcher_spec.rb +11 -0
- data/spec/lib/hash/deep_hash_constructor_spec.rb +3 -1
- data/spec/lib/hash/key_changer_spec.rb +19 -5
- data/spec/lib/hash/keys_sorter_spec.rb +10 -0
- data/spec/lib/hash/squasher_spec.rb +9 -0
- data/spec/lib/hash/to_hash_mapper_spec.rb +10 -0
- data/spec/lib/hash_spec.rb +16 -46
- data/spec/lib/math_spec.rb +2 -0
- data/spec/lib/numeric_spec.rb +2 -0
- data/spec/lib/object/default_value_spe.rb +2 -0
- data/spec/lib/object_spec.rb +2 -0
- data/spec/lib/symbol_spec.rb +2 -0
- data/spec/lib/time_spec.rb +2 -0
- data/spec/spec_helper.rb +2 -1
- data/spec/support/models/default_value.rb +2 -0
- data/spec/support/models/hash/value_changer/dummy.rb +19 -13
- data/spec/support/models/hash/value_changer/dummy_iteractor.rb +13 -8
- data/spec/support/shared_examples/{array_random.rb → array/array_random.rb} +5 -2
- data/spec/support/shared_examples/clean.rb +14 -2
- data/spec/support/shared_examples/date.rb +2 -0
- data/spec/support/shared_examples/expected.rb +2 -1
- data/spec/support/shared_examples/{chain_fetch.rb → hash/chain_fetch.rb} +9 -7
- data/spec/support/shared_examples/{chain_hash_keys_changer.rb → hash/chain_hash_keys_changer.rb} +14 -11
- data/spec/support/shared_examples/{hash_keys_changer.rb → hash/hash_keys_changer.rb} +7 -5
- data/spec/support/shared_examples/hash/hash_squasher.rb +23 -0
- data/spec/support/shared_examples/{hash_transpose.rb → hash/hash_transpose.rb} +8 -6
- data/spec/support/shared_examples/hash/keys_appender.rb +69 -0
- data/spec/support/shared_examples/{keys_camelizer.rb → hash/keys_camelizer.rb} +6 -4
- data/spec/support/shared_examples/hash/keys_sorter.rb +67 -0
- data/spec/support/shared_examples/{keys_underscorer.rb → hash/keys_underscorer.rb} +4 -3
- data/spec/support/shared_examples/{map_to_hash.rb → hash/map_to_hash.rb} +16 -16
- data/spec/support/shared_examples/{remap.rb → hash/remap.rb} +16 -13
- data/spec/support/shared_examples/hash/value_changer.rb +192 -0
- metadata +76 -30
- data/circle.yml +0 -10
- data/spec/support/shared_examples/keys_appender.rb +0 -43
- data/spec/support/shared_examples/value_changer.rb +0 -147
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
shared_examples 'a class with a keys sort method' do
|
4
|
+
describe '#sort_keys' do
|
5
|
+
let(:options) { {} }
|
6
|
+
|
7
|
+
context 'when keys are symbols' do
|
8
|
+
let(:hash) { { b: 1, a: 2 } }
|
9
|
+
|
10
|
+
it 'sorts keys as symbols' do
|
11
|
+
expect(result).to eq(a: 2, b: 1)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'when keys are strings' do
|
16
|
+
let(:hash) { { 'b' => 1, 'a' => 2 } }
|
17
|
+
|
18
|
+
it 'sorts keys as string' do
|
19
|
+
expect(result).to eq('a' => 2, 'b' => 1)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'when there is a nested hash' do
|
24
|
+
let(:hash) { { b: 1, a: { d: 3, c: 4 } } }
|
25
|
+
|
26
|
+
context 'and no option is given' do
|
27
|
+
it 'sorts keys recursively' do
|
28
|
+
expect(result).to eq(a: { c: 4, d: 3 }, b: 1)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'and recursive option is given' do
|
33
|
+
let(:options) { { recursive: true } }
|
34
|
+
|
35
|
+
it 'sorts keys recursively when argumen is passed' do
|
36
|
+
expect(result).to eq(a: { c: 4, d: 3 }, b: 1)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'and no recursive option is given' do
|
41
|
+
let(:options) { { recursive: false } }
|
42
|
+
|
43
|
+
it 'does not sorts keys recursively when argumen is passed' do
|
44
|
+
expect(result).to eq(a: { d: 3, c: 4 }, b: 1)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'when it is deep nestled' do
|
50
|
+
let(:hash) { { b: 1, a: { d: 2, c: { e: 3, f: 4 } } } }
|
51
|
+
|
52
|
+
it 'sort recursevely on many levels' do
|
53
|
+
expected = { a: { c: { f: 4, e: 3 }, d: 2 }, b: 1 }
|
54
|
+
expect(hash.sort_keys(recursive: true)).to eq(expected)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context 'when it has a nestled array' do
|
59
|
+
let(:hash) { { b: 1, a: { d: 2, c: [{ e: 3, f: 4 }] } } }
|
60
|
+
|
61
|
+
it 'applies to arrays as well' do
|
62
|
+
expected = { a: { c: [{ f: 4, e: 3 }], d: 2 }, b: 1 }
|
63
|
+
expect(hash.sort_keys(recursive: true)).to eq(expected)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
shared_examples 'a class with underscore_keys method basic' do |method|
|
2
4
|
describe :underscore_keys do
|
3
5
|
let(:expected) { { input_key: 'value' } }
|
@@ -65,7 +67,7 @@ shared_examples 'a class with underscore_keys! method' do
|
|
65
67
|
it_behaves_like 'a class with underscore_keys method basic', :underscore_keys!
|
66
68
|
|
67
69
|
it 'changes original hash' do
|
68
|
-
expect { hash.underscore_keys! }.to
|
70
|
+
expect { hash.underscore_keys! }.to(change { hash })
|
69
71
|
end
|
70
72
|
end
|
71
73
|
|
@@ -76,7 +78,6 @@ shared_examples 'a class with underscore_keys method' do
|
|
76
78
|
it_behaves_like 'a class with underscore_keys! method'
|
77
79
|
|
78
80
|
it 'does not change original hash' do
|
79
|
-
expect { hash.underscore_keys }.not_to
|
81
|
+
expect { hash.underscore_keys }.not_to(change { hash })
|
80
82
|
end
|
81
83
|
end
|
82
|
-
|
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
shared_examples 'an array with map_to_hash method' do
|
2
4
|
describe '#map_to_hash' do
|
3
|
-
let(:subject) { %w
|
4
|
-
let(:mapping_block) { proc{ |word| word.length } }
|
5
|
+
let(:subject) { %w[word1 wooord2] }
|
6
|
+
let(:mapping_block) { proc { |word| word.length } }
|
5
7
|
let(:mapped) { subject.map_to_hash(&mapping_block) }
|
6
8
|
let(:expected) { { 'word1' => 5, 'wooord2' => 7 } }
|
7
9
|
|
@@ -20,10 +22,9 @@ shared_examples 'an array with map_to_hash method' do
|
|
20
22
|
end
|
21
23
|
|
22
24
|
context 'whe subject is an array' do
|
23
|
-
let(:subject) { [%w
|
25
|
+
let(:subject) { [%w[w1], %w[w2 w3]] }
|
24
26
|
let(:mapped) { subject.map_to_hash(&mapping_block) }
|
25
|
-
let(:expected) { { %w
|
26
|
-
|
27
|
+
let(:expected) { { %w[w1] => 1, %w[w2 w3] => 2 } }
|
27
28
|
|
28
29
|
it 'has the original array as keys' do
|
29
30
|
expect(mapped.keys).to eq(subject)
|
@@ -42,23 +43,22 @@ end
|
|
42
43
|
|
43
44
|
shared_examples 'a hash with map_to_hash method' do
|
44
45
|
describe '#map_to_hash' do
|
45
|
-
let(:
|
46
|
-
let(:mapping_block) { proc{ |k, v| "#{k}_#{v}" } }
|
47
|
-
let(:mapped) { subject.map_to_hash(&mapping_block) }
|
46
|
+
let(:hash) { { a: 1, b: 2 } }
|
47
|
+
let(:mapping_block) { proc { |k, v| "#{k}_#{v}" } }
|
48
48
|
let(:expected) { { a: 'a_1', b: 'b_2' } }
|
49
49
|
|
50
50
|
it { expect(mapped).to be_a(Hash) }
|
51
51
|
|
52
52
|
it do
|
53
|
-
expect {
|
53
|
+
expect { mapped }.not_to(change { hash })
|
54
54
|
end
|
55
55
|
|
56
56
|
it 'has the original keys as keys' do
|
57
|
-
expect(mapped.keys).to eq(
|
57
|
+
expect(mapped.keys).to eq(hash.keys)
|
58
58
|
end
|
59
59
|
|
60
60
|
it 'has the mapped values as values' do
|
61
|
-
expect(mapped.values).to eq(
|
61
|
+
expect(mapped.values).to eq(hash.map(&mapping_block))
|
62
62
|
end
|
63
63
|
|
64
64
|
it 'correctly map keys to value' do
|
@@ -66,16 +66,16 @@ shared_examples 'a hash with map_to_hash method' do
|
|
66
66
|
end
|
67
67
|
|
68
68
|
context 'when hash uses arrays for keys' do
|
69
|
-
let(:
|
70
|
-
let(:mapping_block) { proc{ |k, v| "#{k.join('_')}_#{v}" } }
|
71
|
-
let(:expected) { { [
|
69
|
+
let(:hash) { { %i[a b] => 1, %i[c d] => 2 } }
|
70
|
+
let(:mapping_block) { proc { |k, v| "#{k.join('_')}_#{v}" } }
|
71
|
+
let(:expected) { { %i[a b] => 'a_b_1', %i[c d] => 'c_d_2' } }
|
72
72
|
|
73
73
|
it 'has the original keys as keys' do
|
74
|
-
expect(mapped.keys).to eq(
|
74
|
+
expect(mapped.keys).to eq(hash.keys)
|
75
75
|
end
|
76
76
|
|
77
77
|
it 'has the mapped values as values' do
|
78
|
-
expect(mapped.values).to eq(
|
78
|
+
expect(mapped.values).to eq(hash.map(&mapping_block))
|
79
79
|
end
|
80
80
|
|
81
81
|
it 'correctly map keys to value' do
|
@@ -1,25 +1,28 @@
|
|
1
|
-
|
2
|
-
let(:subject) { { a: 1, b: 2 } }
|
1
|
+
# frozen_string_literal: true
|
3
2
|
|
4
|
-
|
5
|
-
|
3
|
+
shared_examples 'a class with remap method' do
|
4
|
+
subject { hash }
|
6
5
|
|
7
|
-
|
8
|
-
|
6
|
+
describe '#remap_keys' do
|
7
|
+
it_behaves_like 'a method that remaps the keys', :remap_keys do
|
8
|
+
it 'does not change the original hash' do
|
9
|
+
expect { result }.not_to(change { hash })
|
10
|
+
end
|
9
11
|
end
|
10
12
|
end
|
11
13
|
|
12
|
-
describe
|
13
|
-
it_behaves_like 'a method that remaps the keys', :remap_keys!
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
describe '#remap_keys!' do
|
15
|
+
it_behaves_like 'a method that remaps the keys', :remap_keys! do
|
16
|
+
it 'changes the original hash' do
|
17
|
+
expect { result }.to(change { hash })
|
18
|
+
end
|
17
19
|
end
|
18
20
|
end
|
19
|
-
|
20
21
|
end
|
21
22
|
|
22
23
|
shared_examples 'a method that remaps the keys' do |method|
|
24
|
+
let(:hash) { { a: 1, b: 2 } }
|
25
|
+
let(:remap) { { a: :e } }
|
23
26
|
let(:result) { subject.public_send(method, remap) }
|
24
27
|
|
25
28
|
context 'when remap and hash keys match' do
|
@@ -78,7 +81,7 @@ shared_examples 'a method that remaps the keys' do |method|
|
|
78
81
|
end
|
79
82
|
|
80
83
|
context 'and the original key is an string' do
|
81
|
-
let(:
|
84
|
+
let(:hash) { { 'a' => 1, 'b' => 2 } }
|
82
85
|
let(:remap) { { 'a' => :a } }
|
83
86
|
|
84
87
|
it 'does not remap the keys' do
|
@@ -0,0 +1,192 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
shared_examples 'a class with change_values method' do
|
4
|
+
let(:subject) { { a: 1, b: 2, c: { d: 3, e: 4 } } }
|
5
|
+
let(:inner_hash) { subject[:c] }
|
6
|
+
|
7
|
+
describe :change_values do
|
8
|
+
it_behaves_like 'a method that change the hash values', :change_values
|
9
|
+
|
10
|
+
it 'does not change original hash' do
|
11
|
+
expect do
|
12
|
+
subject.change_values { |value| value + 1 }
|
13
|
+
end.not_to(change { subject })
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'does not change original hash' do
|
17
|
+
expect do
|
18
|
+
subject.change_values { |value| value + 1 }
|
19
|
+
end.not_to(change { inner_hash })
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'when using an array' do
|
23
|
+
let(:subject) { { a: [{ b: 1 }] } }
|
24
|
+
let(:inner_array) { subject[:a] }
|
25
|
+
|
26
|
+
it 'does not change original hash' do
|
27
|
+
expect do
|
28
|
+
subject.change_values { |value| value + 1 }
|
29
|
+
end.not_to(change { inner_array })
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe :change_values! do
|
35
|
+
it_behaves_like 'a method that change the hash values', :change_values!
|
36
|
+
|
37
|
+
it 'changes original hash' do
|
38
|
+
expect do
|
39
|
+
subject.change_values! { |value| value + 1 }
|
40
|
+
end.to(change { subject })
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'changes original hash' do
|
44
|
+
expect do
|
45
|
+
subject.change_values! { |value| value + 1 }
|
46
|
+
end.to(change { inner_hash })
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'when using an array' do
|
50
|
+
let(:subject) { { a: [{ b: 1 }] } }
|
51
|
+
let(:inner_array) { subject[:a] }
|
52
|
+
|
53
|
+
it 'changes original hash' do
|
54
|
+
expect do
|
55
|
+
subject.change_values! { |value| value + 1 }
|
56
|
+
end.to(change { inner_array })
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
shared_examples 'a method that change the hash values' do |method|
|
63
|
+
context 'when using deeply nested hashes' do
|
64
|
+
it 'updates values of hash' do
|
65
|
+
result = subject.public_send(method) { |value| value + 1 }
|
66
|
+
expected = { a: 2, b: 3, c: { d: 4, e: 5 } }
|
67
|
+
expect(result).to eq(expected)
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'works recursively when parameter is passed' do
|
71
|
+
result = subject.public_send(method, recursive: true) do |value|
|
72
|
+
value + 1
|
73
|
+
end
|
74
|
+
expected = { a: 2, b: 3, c: { d: 4, e: 5 } }
|
75
|
+
expect(result).to eq(expected)
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'does not work recursively when parameter is passed as false' do
|
79
|
+
result = subject.public_send(method, recursive: false) do |value|
|
80
|
+
value + 1
|
81
|
+
end
|
82
|
+
expected = { a: 2, b: 3, c: { d: 3, e: 4 } }
|
83
|
+
expect(result).to eq(expected)
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'does not ignore hash when option is passed' do
|
87
|
+
result = subject.public_send(method, skip_inner: false) do |value|
|
88
|
+
value.is_a?(Hash) ? 10 + value.size : value + 1
|
89
|
+
end
|
90
|
+
expected = { a: 2, b: 3, c: 12 }
|
91
|
+
expect(result).to eq(expected)
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'ignore hash and work recursively when option is passed' do
|
95
|
+
result = subject.public_send(method, skip_inner: true) do |value|
|
96
|
+
value.is_a?(Hash) ? 10 + value.size : value + 1
|
97
|
+
end
|
98
|
+
expect(result).to eq(a: 2, b: 3, c: { d: 4, e: 5 })
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'ignore hash and does not work recursively when option is passed' do
|
102
|
+
options = { skip_inner: false, recursive: false }
|
103
|
+
result = subject.public_send(method, options) do |value|
|
104
|
+
value.is_a?(Hash) ? value : value + 1
|
105
|
+
end
|
106
|
+
expect(result).to eq(a: 2, b: 3, c: { d: 3, e: 4 })
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
context 'when using deeply nested arrays' do
|
111
|
+
let(:subject) { { a: 1, b: 2, c: [{ d: 3 }, { e: { f: 4 } }, 5] } }
|
112
|
+
|
113
|
+
it 'goes recursivly true arrays' do
|
114
|
+
result = subject.public_send(method) { |value| value + 1 }
|
115
|
+
|
116
|
+
expect(result).to eq(a: 2, b: 3, c: [{ d: 4 }, { e: { f: 5 } }, 6])
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'does not work recursively when parameter is passed as false' do
|
120
|
+
result = subject.public_send(method, recursive: false) do |value|
|
121
|
+
value + 1
|
122
|
+
end
|
123
|
+
expect(result).to eq(a: 2, b: 3, c: [{ d: 3 }, { e: { f: 4 } }, 5])
|
124
|
+
end
|
125
|
+
|
126
|
+
it 'does not ignore array when option is passed' do
|
127
|
+
result = subject.public_send(method, skip_inner: false) do |value|
|
128
|
+
value.is_a?(Array) ? 10 + value.size : value + 1
|
129
|
+
end
|
130
|
+
expect(result).to eq(a: 2, b: 3, c: 13)
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'ignores array when option is passed' do
|
134
|
+
result = subject.public_send(method, skip_inner: true) do |value|
|
135
|
+
value.is_a?(Array) ? 10 + value.size : value + 1
|
136
|
+
end
|
137
|
+
expect(result).to eq(a: 2, b: 3, c: [{ d: 4 }, { e: { f: 5 } }, 6])
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'ignore hash and does not work recursively when option is passed' do
|
141
|
+
options = { skip_inner: false, recursive: false }
|
142
|
+
result = subject.public_send(method, options) do |value|
|
143
|
+
value.is_a?(Array) ? value : value + 1
|
144
|
+
end
|
145
|
+
expect(result).to eq(a: 2, b: 3, c: [{ d: 3 }, { e: { f: 4 } }, 5])
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
context 'when using a nested extra class' do
|
150
|
+
let(:subject) { { a: 1, b: 2, c: Hash::ValueChanger::Dummy.new(3) } }
|
151
|
+
let(:result) { subject.public_send(method) { |value| value + 1 } }
|
152
|
+
let(:expected) { { a: 2, b: 3, c: 4 } }
|
153
|
+
|
154
|
+
it 'goes perform the mapping with the extra class' do
|
155
|
+
expect(result).to eq(expected)
|
156
|
+
end
|
157
|
+
|
158
|
+
context 'when class is an interactor' do
|
159
|
+
subject { { a: 1, b: 2, c: object } }
|
160
|
+
let(:expected) { { a: 2, b: 3, c: [{ d: 4 }, { e: { f: 5 } }] } }
|
161
|
+
let(:object) do
|
162
|
+
Hash::ValueChanger::DummyIteractor.new({ d: 3 }, e: { f: 4 })
|
163
|
+
end
|
164
|
+
|
165
|
+
it 'goes through the iteractor' do
|
166
|
+
expect(result).to eq(expected)
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
context 'when using mapping inner array with inner objecth' do
|
171
|
+
let(:object) { Hash::ValueChanger::Dummy.new(2) }
|
172
|
+
let(:array) { Hash::ValueChanger::DummyIteractor.new(object) }
|
173
|
+
let(:subject) { { a: 1, b: array } }
|
174
|
+
let(:result) do
|
175
|
+
subject.public_send(method, skip_inner: false) do |value|
|
176
|
+
case value
|
177
|
+
when Numeric
|
178
|
+
value + 10
|
179
|
+
when Hash, Hash::ValueChanger::DummyIteractor
|
180
|
+
value
|
181
|
+
else
|
182
|
+
value.as_json
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
it 'process the object after processing the array' do
|
188
|
+
expect(result).to eq(a: 11, b: [{ val: 12 }])
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: darthjee-core_ext
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Darthjee
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-08-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry-nav
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.2.4
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.2.4
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rake
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,19 +81,19 @@ dependencies:
|
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '3.7'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
84
|
+
name: rubocop
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- - "
|
87
|
+
- - ">="
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0
|
89
|
+
version: '0'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- - "
|
94
|
+
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0
|
96
|
+
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: simplecov
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +108,20 @@ dependencies:
|
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: 0.14.1
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: yard
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
97
125
|
description: Extension of basic classes with usefull methods
|
98
126
|
email:
|
99
127
|
- darthjee@gmail.com
|
@@ -101,8 +129,11 @@ executables: []
|
|
101
129
|
extensions: []
|
102
130
|
extra_rdoc_files: []
|
103
131
|
files:
|
132
|
+
- ".circleci/config.yml"
|
104
133
|
- ".gitignore"
|
105
134
|
- ".rspec"
|
135
|
+
- ".rubocop.yml"
|
136
|
+
- ".rubocop_todo.yml"
|
106
137
|
- ARRAY_README.md
|
107
138
|
- DATE_README.md
|
108
139
|
- ENUMERABLE_README.md
|
@@ -114,7 +145,6 @@ files:
|
|
114
145
|
- README.md
|
115
146
|
- Rakefile
|
116
147
|
- SYMBOL_README.md
|
117
|
-
- circle.yml
|
118
148
|
- core_ext.gemspec
|
119
149
|
- docker-compose.yml
|
120
150
|
- lib/darthjee.rb
|
@@ -124,8 +154,12 @@ files:
|
|
124
154
|
- lib/darthjee/core_ext/date.rb
|
125
155
|
- lib/darthjee/core_ext/enumerable.rb
|
126
156
|
- lib/darthjee/core_ext/hash.rb
|
157
|
+
- lib/darthjee/core_ext/hash/chain_fetcher.rb
|
127
158
|
- lib/darthjee/core_ext/hash/deep_hash_constructor.rb
|
128
159
|
- lib/darthjee/core_ext/hash/key_changer.rb
|
160
|
+
- lib/darthjee/core_ext/hash/keys_sorter.rb
|
161
|
+
- lib/darthjee/core_ext/hash/squasher.rb
|
162
|
+
- lib/darthjee/core_ext/hash/to_hash_mapper.rb
|
129
163
|
- lib/darthjee/core_ext/hash/value_changer.rb
|
130
164
|
- lib/darthjee/core_ext/math.rb
|
131
165
|
- lib/darthjee/core_ext/numeric.rb
|
@@ -138,8 +172,12 @@ files:
|
|
138
172
|
- spec/lib/array_spec.rb
|
139
173
|
- spec/lib/date_spec.rb
|
140
174
|
- spec/lib/enumerable_spec.rb
|
175
|
+
- spec/lib/hash/chain_fetcher_spec.rb
|
141
176
|
- spec/lib/hash/deep_hash_constructor_spec.rb
|
142
177
|
- spec/lib/hash/key_changer_spec.rb
|
178
|
+
- spec/lib/hash/keys_sorter_spec.rb
|
179
|
+
- spec/lib/hash/squasher_spec.rb
|
180
|
+
- spec/lib/hash/to_hash_mapper_spec.rb
|
143
181
|
- spec/lib/hash_spec.rb
|
144
182
|
- spec/lib/math_spec.rb
|
145
183
|
- spec/lib/numeric_spec.rb
|
@@ -151,20 +189,22 @@ files:
|
|
151
189
|
- spec/support/models/default_value.rb
|
152
190
|
- spec/support/models/hash/value_changer/dummy.rb
|
153
191
|
- spec/support/models/hash/value_changer/dummy_iteractor.rb
|
154
|
-
- spec/support/shared_examples/array_random.rb
|
155
|
-
- spec/support/shared_examples/chain_fetch.rb
|
156
|
-
- spec/support/shared_examples/chain_hash_keys_changer.rb
|
192
|
+
- spec/support/shared_examples/array/array_random.rb
|
157
193
|
- spec/support/shared_examples/clean.rb
|
158
194
|
- spec/support/shared_examples/date.rb
|
159
195
|
- spec/support/shared_examples/expected.rb
|
160
|
-
- spec/support/shared_examples/
|
161
|
-
- spec/support/shared_examples/
|
162
|
-
- spec/support/shared_examples/
|
163
|
-
- spec/support/shared_examples/
|
164
|
-
- spec/support/shared_examples/
|
165
|
-
- spec/support/shared_examples/
|
166
|
-
- spec/support/shared_examples/
|
167
|
-
- spec/support/shared_examples/
|
196
|
+
- spec/support/shared_examples/hash/chain_fetch.rb
|
197
|
+
- spec/support/shared_examples/hash/chain_hash_keys_changer.rb
|
198
|
+
- spec/support/shared_examples/hash/hash_keys_changer.rb
|
199
|
+
- spec/support/shared_examples/hash/hash_squasher.rb
|
200
|
+
- spec/support/shared_examples/hash/hash_transpose.rb
|
201
|
+
- spec/support/shared_examples/hash/keys_appender.rb
|
202
|
+
- spec/support/shared_examples/hash/keys_camelizer.rb
|
203
|
+
- spec/support/shared_examples/hash/keys_sorter.rb
|
204
|
+
- spec/support/shared_examples/hash/keys_underscorer.rb
|
205
|
+
- spec/support/shared_examples/hash/map_to_hash.rb
|
206
|
+
- spec/support/shared_examples/hash/remap.rb
|
207
|
+
- spec/support/shared_examples/hash/value_changer.rb
|
168
208
|
homepage: https://github.com/darthjee/core_ext
|
169
209
|
licenses: []
|
170
210
|
metadata: {}
|
@@ -192,8 +232,12 @@ test_files:
|
|
192
232
|
- spec/lib/array_spec.rb
|
193
233
|
- spec/lib/date_spec.rb
|
194
234
|
- spec/lib/enumerable_spec.rb
|
235
|
+
- spec/lib/hash/chain_fetcher_spec.rb
|
195
236
|
- spec/lib/hash/deep_hash_constructor_spec.rb
|
196
237
|
- spec/lib/hash/key_changer_spec.rb
|
238
|
+
- spec/lib/hash/keys_sorter_spec.rb
|
239
|
+
- spec/lib/hash/squasher_spec.rb
|
240
|
+
- spec/lib/hash/to_hash_mapper_spec.rb
|
197
241
|
- spec/lib/hash_spec.rb
|
198
242
|
- spec/lib/math_spec.rb
|
199
243
|
- spec/lib/numeric_spec.rb
|
@@ -205,17 +249,19 @@ test_files:
|
|
205
249
|
- spec/support/models/default_value.rb
|
206
250
|
- spec/support/models/hash/value_changer/dummy.rb
|
207
251
|
- spec/support/models/hash/value_changer/dummy_iteractor.rb
|
208
|
-
- spec/support/shared_examples/array_random.rb
|
209
|
-
- spec/support/shared_examples/chain_fetch.rb
|
210
|
-
- spec/support/shared_examples/chain_hash_keys_changer.rb
|
252
|
+
- spec/support/shared_examples/array/array_random.rb
|
211
253
|
- spec/support/shared_examples/clean.rb
|
212
254
|
- spec/support/shared_examples/date.rb
|
213
255
|
- spec/support/shared_examples/expected.rb
|
214
|
-
- spec/support/shared_examples/
|
215
|
-
- spec/support/shared_examples/
|
216
|
-
- spec/support/shared_examples/
|
217
|
-
- spec/support/shared_examples/
|
218
|
-
- spec/support/shared_examples/
|
219
|
-
- spec/support/shared_examples/
|
220
|
-
- spec/support/shared_examples/
|
221
|
-
- spec/support/shared_examples/
|
256
|
+
- spec/support/shared_examples/hash/chain_fetch.rb
|
257
|
+
- spec/support/shared_examples/hash/chain_hash_keys_changer.rb
|
258
|
+
- spec/support/shared_examples/hash/hash_keys_changer.rb
|
259
|
+
- spec/support/shared_examples/hash/hash_squasher.rb
|
260
|
+
- spec/support/shared_examples/hash/hash_transpose.rb
|
261
|
+
- spec/support/shared_examples/hash/keys_appender.rb
|
262
|
+
- spec/support/shared_examples/hash/keys_camelizer.rb
|
263
|
+
- spec/support/shared_examples/hash/keys_sorter.rb
|
264
|
+
- spec/support/shared_examples/hash/keys_underscorer.rb
|
265
|
+
- spec/support/shared_examples/hash/map_to_hash.rb
|
266
|
+
- spec/support/shared_examples/hash/remap.rb
|
267
|
+
- spec/support/shared_examples/hash/value_changer.rb
|
data/circle.yml
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
dependencies:
|
2
|
-
post:
|
3
|
-
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
4
|
-
- chmod +x ./cc-test-reporter
|
5
|
-
|
6
|
-
test:
|
7
|
-
pre:
|
8
|
-
- ./cc-test-reporter before-build
|
9
|
-
override:
|
10
|
-
- bundle exec rspec; ./cc-test-reporter after-build --exit-code $?
|
@@ -1,43 +0,0 @@
|
|
1
|
-
shared_examples 'a class with append_keys method' do
|
2
|
-
describe :prepend_to_keys do
|
3
|
-
it 'accepts block to change the keys' do
|
4
|
-
expect({ a: 1, 'b' => 2 }.prepend_to_keys('foo_')).to eq(foo_a: 1, 'foo_b' => 2)
|
5
|
-
end
|
6
|
-
it 'applies the block recursively' do
|
7
|
-
expect({ 'a' => 1, b: { c: 3, 'd' => 4 } }.prepend_to_keys('foo_')).to eq('foo_a' => 1, foo_b: { foo_c: 3, 'foo_d' => 4 })
|
8
|
-
end
|
9
|
-
it 'changes type when type option is passed' do
|
10
|
-
expect({ 'a' => 1, b: 2 }.prepend_to_keys('foo_', type: :string)).to eq('foo_a' => 1, 'foo_b' => 2)
|
11
|
-
end
|
12
|
-
it 'changes type when type option is passed' do
|
13
|
-
expect({ 'a' => 1, b: 2 }.prepend_to_keys('foo_', type: :symbol)).to eq(foo_a: 1, foo_b: 2)
|
14
|
-
end
|
15
|
-
it 'keep type when type option is passed as keep' do
|
16
|
-
expect({ 'a' => 1, b: 2 }.prepend_to_keys('foo_', type: :keep)).to eq('foo_a' => 1, foo_b: 2)
|
17
|
-
end
|
18
|
-
it 'applies to array as well' do
|
19
|
-
expect({ 'a' => 1, b: [{ c: 2 }, { d: 3 }] }.prepend_to_keys('foo_', type: :keep)).to eq('foo_a' => 1, foo_b: [{ foo_c: 2 }, { foo_d: 3 }])
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe :append_to_keys do
|
24
|
-
it 'accepts block to change the keys' do
|
25
|
-
expect({ a: 1, 'b' => 2 }.append_to_keys('_bar')).to eq(a_bar: 1, 'b_bar' => 2)
|
26
|
-
end
|
27
|
-
it 'applies the block recursively' do
|
28
|
-
expect({ 'a' => 1, b: { c: 3, 'd' => 4 } }.append_to_keys('_bar')).to eq('a_bar' => 1, b_bar: { c_bar: 3, 'd_bar' => 4 })
|
29
|
-
end
|
30
|
-
it 'changes type when type option is passed' do
|
31
|
-
expect({ 'a' => 1, b: 2 }.append_to_keys('_bar', type: :string)).to eq('a_bar' => 1, 'b_bar' => 2)
|
32
|
-
end
|
33
|
-
it 'changes type when type option is passed' do
|
34
|
-
expect({ 'a' => 1, b: 2 }.append_to_keys('_bar', type: :symbol)).to eq(a_bar: 1, b_bar: 2)
|
35
|
-
end
|
36
|
-
it 'keep type when type option is passed as keep' do
|
37
|
-
expect({ 'a' => 1, b: 2 }.append_to_keys('_bar', type: :keep)).to eq('a_bar' => 1, b_bar: 2)
|
38
|
-
end
|
39
|
-
it 'applies to array as well' do
|
40
|
-
expect({ 'a' => 1, b: [{ c: 2 }, { d: 3 }] }.append_to_keys('_bar', type: :keep)).to eq('a_bar' => 1, b_bar: [{ c_bar: 2 }, { d_bar: 3 }])
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|