bidu-core_ext 1.2.3 → 1.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b59372acd2cbf72c2ce3da4da40d77eed277e706
4
- data.tar.gz: 2f1294f24be1e567e6b508c67d8a70fd09d0f278
3
+ metadata.gz: 46ca9596bf1bd9395697f6d139e95529443dfeed
4
+ data.tar.gz: 1f867d81d89c0da0a422bad9ec9ff241cb16c057
5
5
  SHA512:
6
- metadata.gz: 0972c125e7aba80a11163b24ca6e45cd4508e57eca74e0bffa767747ca192258b5130ed0151daec8c825452c9eb5b0036fe54d8a516ee510a15c32dd62e956f9
7
- data.tar.gz: 7baca49a766b41edb9ddb8c75d457f5d8c98d5ebb267915f03526ac6fd449379020116800567d3df9d87b208d4ae3b01d65e53046b50675ff9876c2c81f03fed
6
+ metadata.gz: 9cc16aa3de7626debf7b94218590db05eb5deefacd264a5dd1bf1cdea39f41e66e47df1e13b5b434ec3a1e02e345f07d890bda70d3cb149d494a39e408c24933
7
+ data.tar.gz: 5c18491c6ae48e0fbed356615fcf1026b68585597167d9d7fa9eda3a4a1419ea32daa864b0aa31389dcbf3fe0e9647318a31c7e46837b25595365613fcc7a50e
data/Gemfile.lock CHANGED
@@ -1,32 +1,32 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bidu-core_ext (1.2.3)
5
- activesupport
4
+ bidu-core_ext (1.2.4)
5
+ activesupport (~> 5.1.1)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activesupport (5.0.0.1)
10
+ activesupport (5.1.1)
11
11
  concurrent-ruby (~> 1.0, >= 1.0.2)
12
12
  i18n (~> 0.7)
13
13
  minitest (~> 5.1)
14
14
  tzinfo (~> 1.1)
15
- coderay (1.1.0)
16
- concurrent-ruby (1.0.2)
15
+ coderay (1.1.1)
16
+ concurrent-ruby (1.0.5)
17
17
  diff-lcs (1.2.5)
18
18
  docile (1.1.5)
19
- i18n (0.7.0)
19
+ i18n (0.8.4)
20
+ json (2.1.0)
20
21
  method_source (0.8.2)
21
- minitest (5.9.1)
22
- multi_json (1.10.1)
23
- pry (0.10.3)
22
+ minitest (5.10.2)
23
+ pry (0.10.4)
24
24
  coderay (~> 1.1.0)
25
25
  method_source (~> 0.8.1)
26
26
  slop (~> 3.4)
27
27
  pry-nav (0.2.4)
28
28
  pry (>= 0.9.10, < 0.11.0)
29
- rake (10.3.2)
29
+ rake (11.3.0)
30
30
  rspec (2.99.0)
31
31
  rspec-core (~> 2.99.0)
32
32
  rspec-expectations (~> 2.99.0)
@@ -34,15 +34,15 @@ GEM
34
34
  rspec-core (2.99.2)
35
35
  rspec-expectations (2.99.2)
36
36
  diff-lcs (>= 1.1.3, < 2.0)
37
- rspec-mocks (2.99.2)
38
- simplecov (0.9.1)
37
+ rspec-mocks (2.99.4)
38
+ simplecov (0.14.1)
39
39
  docile (~> 1.1.0)
40
- multi_json (~> 1.0)
41
- simplecov-html (~> 0.8.0)
42
- simplecov-html (0.8.0)
40
+ json (>= 1.8, < 3)
41
+ simplecov-html (~> 0.10.0)
42
+ simplecov-html (0.10.1)
43
43
  slop (3.6.0)
44
- thread_safe (0.3.5)
45
- tzinfo (1.2.2)
44
+ thread_safe (0.3.6)
45
+ tzinfo (1.2.3)
46
46
  thread_safe (~> 0.1)
47
47
 
48
48
  PLATFORMS
@@ -51,11 +51,12 @@ PLATFORMS
51
51
  DEPENDENCIES
52
52
  bidu-core_ext!
53
53
  bundler (~> 1.6)
54
- pry-nav
55
- rake
54
+ pry (~> 0.10.4)
55
+ pry-nav (~> 0.2.4)
56
+ rake (~> 11.3.0)
56
57
  rspec (~> 2.14)
57
- rspec-mocks
58
- simplecov
58
+ rspec-mocks (~> 2.99.4)
59
+ simplecov (~> 0.14.1)
59
60
 
60
61
  BUNDLED WITH
61
- 1.12.5
62
+ 1.15.1
data/README.md CHANGED
@@ -106,6 +106,17 @@ returns
106
106
  { 'CA_B' => 1 }
107
107
  ```
108
108
 
109
+ ###chain_change_keys
110
+ Change the hash keys usin a chained method call
111
+
112
+ ```ruby
113
+ { ca_b: 1 }.chain_change_keys(:to_s, :upcase, :to_sym)
114
+ ```
115
+ returns
116
+ ```ruby
117
+ { CA_B: 1 }
118
+ ```
119
+
109
120
  ### change_values
110
121
  Change the values of the array
111
122
  ```ruby
data/core_ext.gemspec CHANGED
@@ -15,12 +15,13 @@ Gem::Specification.new do |spec|
15
15
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
16
16
  spec.require_paths = ['lib']
17
17
 
18
- spec.add_runtime_dependency 'activesupport'
18
+ spec.add_runtime_dependency 'activesupport', '~> 5.1.1'
19
19
 
20
20
  spec.add_development_dependency 'bundler', '~> 1.6'
21
- spec.add_development_dependency 'rake'
21
+ spec.add_development_dependency 'rake', '~> 11.3.0'
22
22
  spec.add_development_dependency 'rspec', '~> 2.14'
23
- spec.add_development_dependency 'rspec-mocks'
24
- spec.add_development_dependency 'pry-nav'
25
- spec.add_development_dependency 'simplecov'
23
+ spec.add_development_dependency 'rspec-mocks', '~> 2.99.4'
24
+ spec.add_development_dependency 'pry', '~> 0.10.4'
25
+ spec.add_development_dependency 'pry-nav', '~> 0.2.4'
26
+ spec.add_development_dependency 'simplecov', '~> 0.14.1'
26
27
  end
@@ -1,5 +1,5 @@
1
1
  module Bidu
2
2
  module CoreExt
3
- VERSION = '1.2.3'
3
+ VERSION = '1.2.4'
4
4
  end
5
5
  end
data/lib/hash.rb CHANGED
@@ -90,7 +90,7 @@ class Hash
90
90
 
91
91
  # change all keys returning the new map
92
92
  # options: { recursive: true }
93
- # ex: { "a":1 }.change_keys{ |key| key.upcase } == { "A":1 }
93
+ # ex: { "a" =>1 }.change_keys{ |key| key.upcase } == { "A" => 1 }
94
94
  def change_keys(options = {}, &block)
95
95
  deep_dup.change_keys!(options, &block)
96
96
  end
@@ -102,6 +102,24 @@ class Hash
102
102
  Hash::KeyChanger.new(self).change_keys(options, &block)
103
103
  end
104
104
 
105
+ # change all publicaly sending method calls
106
+ # options: { recursive: true }
107
+ # ex: { a: 1 }.chain_change_keys(:to_s, :upcase) == { "A" =>1 }
108
+ def chain_change_keys(*calls)
109
+ deep_dup.chain_change_keys!(*calls)
110
+ end
111
+
112
+ # change all publicaly sending method calls
113
+ # options: { recursive: true }
114
+ # ex: { a: 1 }.chain_change_keys(:to_s, :upcase) == { "A" =>1 }
115
+ def chain_change_keys!(*calls)
116
+ options = calls.extract_options!
117
+
118
+ calls.inject(self) do |h, m|
119
+ h.change_keys!(options, &m)
120
+ end
121
+ end
122
+
105
123
  # prepend a string to all keys
106
124
  # options {
107
125
  # recursive: true,
@@ -96,7 +96,7 @@ describe Hash::DeepHashConstructor do
96
96
  'quote_request.personal.person[1].name' => 'Some name 2',
97
97
  'quote_request.personal.person[1].age' => 23,
98
98
  'request[0].status.clazz' => String,
99
- 'request[1].status.clazz' => Fixnum,
99
+ 'request[1].status.clazz' => Integer,
100
100
  'request[2].status.clazz' => Date,
101
101
  'trials' => 3
102
102
  }
@@ -114,7 +114,7 @@ describe Hash::DeepHashConstructor do
114
114
  },
115
115
  'request' => [
116
116
  { 'status' => { 'clazz' => String } },
117
- { 'status' => { 'clazz' => Fixnum } },
117
+ { 'status' => { 'clazz' => Integer } },
118
118
  { 'status' => { 'clazz' => Date } }
119
119
  ],
120
120
  'trials' => 3
@@ -2,10 +2,11 @@ require 'spec_helper'
2
2
 
3
3
  describe Hash do
4
4
  it_behaves_like 'a class with change_key method'
5
+ it_behaves_like 'a class with chain_change_key method'
5
6
  it_behaves_like 'a class with camlize_keys method'
6
7
  it_behaves_like 'a class with underscore_keys method'
7
8
  it_behaves_like 'a class with append_keys method'
8
- it_behaves_like 'a class with change_kvalues method'
9
+ it_behaves_like 'a class with change_values method'
9
10
  it_behaves_like 'a class with remap method'
10
11
  it_behaves_like 'an object with chain_fetch method'
11
12
 
@@ -173,7 +174,7 @@ describe Hash do
173
174
  'quote_request.personal.person[1].name' => 'Some name 2',
174
175
  'quote_request.personal.person[1].age' => 23,
175
176
  'request[0].status.clazz' => String,
176
- 'request[1].status.clazz' => Fixnum,
177
+ 'request[1].status.clazz' => Integer,
177
178
  'request[2].status.clazz' => Date,
178
179
  'trials' => 3
179
180
  }
@@ -191,7 +192,7 @@ describe Hash do
191
192
  },
192
193
  'request' => [
193
194
  { 'status' => { 'clazz' => String } },
194
- { 'status' => { 'clazz' => Fixnum } },
195
+ { 'status' => { 'clazz' => Integer } },
195
196
  { 'status' => { 'clazz' => Date } }
196
197
  ],
197
198
  'trials' => 3
@@ -0,0 +1,88 @@
1
+ shared_examples 'a class with chain_change_key method' do
2
+ let(:hash) do
3
+ { 'a' => 1, b: 2, c: { d: 3, e: 4 }, f: [{ g: 5 }, { h: 6 }] }
4
+ end
5
+
6
+ describe :chain_change_keys do
7
+
8
+ it_behaves_like 'a method that is able to chain change keys', :chain_change_keys
9
+ it 'does not affects the original hash' do
10
+ expect do
11
+ hash.chain_change_keys(:to_s, :upcase)
12
+ end.not_to change { hash }
13
+ end
14
+ end
15
+
16
+ describe :ichain_change_keys! do
17
+ it_behaves_like 'a method that is able to chain change keys', :chain_change_keys!
18
+
19
+ it 'affects the original hash' do
20
+ expect do
21
+ hash.chain_change_keys!(:to_s, :upcase)
22
+ end.to change { hash }
23
+ end
24
+ end
25
+ end
26
+
27
+ shared_examples 'a method that is able to chain change keys' do |method|
28
+ let(:result) { hash.public_send(method, *transformations, options) }
29
+ let(:options) { {} }
30
+ let(:transformations) { [ :to_s ] }
31
+
32
+ context 'with simple level hash' do
33
+ let(:hash) { { 'a' => 1, b: 2 } }
34
+
35
+ context 'with symbol transformation' do
36
+ let(:transformations) { [ :to_sym ] }
37
+ let(:expected) { { a: 1, b: 2 } }
38
+ it_behaves_like 'result is as expected'
39
+ end
40
+
41
+ context 'with string transformation' do
42
+ let(:expected) { { 'a' => 1, 'b' => 2 } }
43
+ it_behaves_like 'result is as expected'
44
+ end
45
+ end
46
+
47
+ context 'with recursive hash' do
48
+ let(:hash) { { 'a' => 1, b: { c: 3, 'd' => 4 } } }
49
+ let(:expected) do
50
+ { 'a' => 1, 'b' => { 'c' => 3, 'd' => 4 } }
51
+ end
52
+
53
+ context 'when no options are given' do
54
+ it_behaves_like 'result is as expected'
55
+ end
56
+
57
+ context 'when options are given' do
58
+ let(:options) { { recursive: recursive } }
59
+
60
+ context 'with recursion' do
61
+ let(:recursive) { true }
62
+ it_behaves_like 'result is as expected'
63
+ end
64
+
65
+ context 'without recursion' do
66
+ let(:recursive) { false }
67
+ let(:expected) { { 'a' => 1, 'b' => { c: 3, 'd' => 4 } } }
68
+ it_behaves_like 'result is as expected'
69
+ end
70
+ end
71
+ end
72
+
73
+ context 'with many many levels' do
74
+ let(:hash) { { a: 1, b: { c: 2, d: { e: 3, f: 4 } } } }
75
+ let(:expected) do
76
+ { 'a' => 1, 'b' => { 'c' => 2, 'd' => { 'e' => 3, 'f' => 4 } } }
77
+ end
78
+ it_behaves_like 'result is as expected'
79
+ end
80
+
81
+ context 'calling with chained transformations' do
82
+ let(:transformations) { [ :to_s, :upcase, :to_sym ] }
83
+
84
+ let(:hexpected) do
85
+ { A: 1, B: 2, C: { D: 3, E: 4 }, F: [{ G: 5 }, { H: 6 }] }
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,6 @@
1
+ shared_examples 'result is as expected' do
2
+ it 'is as expected' do
3
+ expect(result).to eq(expected)
4
+ end
5
+ end
6
+
@@ -4,7 +4,6 @@ shared_examples 'a class with change_key method' do
4
4
  end
5
5
 
6
6
  describe :change_keys do
7
-
8
7
  it_behaves_like 'a method that is able to change keys', :change_keys
9
8
  it 'does not affects the original hash' do
10
9
  expect do
@@ -24,12 +23,6 @@ shared_examples 'a class with change_key method' do
24
23
  end
25
24
  end
26
25
 
27
- shared_examples 'result is as expected' do
28
- it 'is as expected' do
29
- expect(result).to eq(expected)
30
- end
31
- end
32
-
33
26
  shared_examples 'a method that is able to change keys' do |method|
34
27
  let(:foo_sym_transformation) do
35
28
  hash.public_send(method) { |k| "foo_#{k}".to_sym }
@@ -1,4 +1,4 @@
1
- shared_examples 'a class with change_kvalues method' do
1
+ shared_examples 'a class with change_values method' do
2
2
  let(:subject) { { a: 1, b: 2, c: { d: 3, e: 4 } } }
3
3
 
4
4
  describe :change_values do
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bidu-core_ext
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3
4
+ version: 1.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bidu Developers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-14 00:00:00.000000000 Z
11
+ date: 2017-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 5.1.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 5.1.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -42,16 +42,16 @@ dependencies:
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: 11.3.0
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: 11.3.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -70,44 +70,58 @@ dependencies:
70
70
  name: rspec-mocks
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 2.99.4
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: 2.99.4
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.10.4
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.10.4
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: pry-nav
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - ">="
101
+ - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: '0'
103
+ version: 0.2.4
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - ">="
108
+ - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: '0'
110
+ version: 0.2.4
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: simplecov
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
- - - ">="
115
+ - - "~>"
102
116
  - !ruby/object:Gem::Version
103
- version: '0'
117
+ version: 0.14.1
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
- - - ">="
122
+ - - "~>"
109
123
  - !ruby/object:Gem::Version
110
- version: '0'
124
+ version: 0.14.1
111
125
  description:
112
126
  email:
113
127
  - dev@bidu.com.br
@@ -145,7 +159,9 @@ files:
145
159
  - spec/spec_helper.rb
146
160
  - spec/support/shared_examples/array_random.rb
147
161
  - spec/support/shared_examples/chain_fetch.rb
162
+ - spec/support/shared_examples/chain_hash_keys_changer.rb
148
163
  - spec/support/shared_examples/clean.rb
164
+ - spec/support/shared_examples/expected.rb
149
165
  - spec/support/shared_examples/hash_keys_changer.rb
150
166
  - spec/support/shared_examples/keys_appender.rb
151
167
  - spec/support/shared_examples/keys_camelizer.rb
@@ -171,7 +187,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
187
  version: '0'
172
188
  requirements: []
173
189
  rubyforge_project:
174
- rubygems_version: 2.5.1
190
+ rubygems_version: 2.6.8
175
191
  signing_key:
176
192
  specification_version: 4
177
193
  summary: Core Extensions
@@ -186,7 +202,9 @@ test_files:
186
202
  - spec/spec_helper.rb
187
203
  - spec/support/shared_examples/array_random.rb
188
204
  - spec/support/shared_examples/chain_fetch.rb
205
+ - spec/support/shared_examples/chain_hash_keys_changer.rb
189
206
  - spec/support/shared_examples/clean.rb
207
+ - spec/support/shared_examples/expected.rb
190
208
  - spec/support/shared_examples/hash_keys_changer.rb
191
209
  - spec/support/shared_examples/keys_appender.rb
192
210
  - spec/support/shared_examples/keys_camelizer.rb