darthjee-core_ext 1.6.1 → 1.6.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7715cb61685cee6ed7a62cf04d205fe2995dd697
4
- data.tar.gz: f6a4c92b92e884cb53ddd71faddbddaadd3a1e8c
3
+ metadata.gz: 738212a365d4f2b6182a1f71519d482998f71f7f
4
+ data.tar.gz: a5028fd0f7b6f62b5d7ba0510204c21fbafb3a52
5
5
  SHA512:
6
- metadata.gz: bd36853fabb1b87a957bdf3dd8fcfdec3565b76856b5c3ec1af4c2fd1414524c2fae52d340b5b1cf7902a9869cba23e8c044edf575723fb929fd85b627c07811
7
- data.tar.gz: 2982ea085d5041b194146f9d363dcaa209ac97f410c45cd495a28adcadc3f4e30afa9c889fde174ab188ddc399e5a50c19fc504938b36064a439780a8d898fbc
6
+ metadata.gz: 6386535f1ed9bed1fc21e6f157d4117322454cc0413f6bb01461f130fd8da860d6b02a5aaa634f60116e0e5e2703fc4515f4dc4fce0dfc08af86fc6b0d77489f
7
+ data.tar.gz: ff41c39af8f135b64f84f1cc5f21d51536490ada52003570c66add9c3887282b812a35249b3c6a43eb7ec628b1f43543757dbe5fc40aa3a02800986776dde1ae
@@ -7,10 +7,6 @@ Naming/PredicateName:
7
7
  Exclude:
8
8
  - 'lib/darthjee/core_ext/object.rb'
9
9
 
10
- Metrics/ClassLength:
11
- Exclude:
12
- - 'lib/darthjee/core_ext/hash.rb'
13
-
14
10
  Metrics/BlockLength:
15
11
  Exclude:
16
12
  - 'spec/**/*_spec.rb'
@@ -20,7 +20,7 @@ Gem::Specification.new do |gem|
20
20
 
21
21
  gem.add_runtime_dependency 'activesupport', '>= 5.2.x'
22
22
 
23
- gem.add_development_dependency 'bundler', '~> 1.16'
23
+ gem.add_development_dependency 'bundler', '~> 1.15.4'
24
24
  gem.add_development_dependency 'pry-nav', '~> 0.2.4'
25
25
  gem.add_development_dependency 'rake', '>= 12.3.1'
26
26
  gem.add_development_dependency 'rspec', '>= 3.8'
@@ -1,182 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'darthjee/core_ext/hash/key_changeable'
4
+ require 'darthjee/core_ext/hash/transposeable'
5
+ require 'darthjee/core_ext/hash/transformable'
6
+
3
7
  class Hash
4
- autoload :ValueChanger, 'darthjee/core_ext/hash/value_changer'
8
+ autoload :ChainFetcher, 'darthjee/core_ext/hash/chain_fetcher'
5
9
  autoload :DeepHashConstructor, 'darthjee/core_ext/hash/deep_hash_constructor'
6
10
  autoload :KeyChanger, 'darthjee/core_ext/hash/key_changer'
7
- autoload :ChainFetcher, 'darthjee/core_ext/hash/chain_fetcher'
11
+ autoload :KeysSorter, 'darthjee/core_ext/hash/keys_sorter'
8
12
  autoload :Squasher, 'darthjee/core_ext/hash/squasher'
13
+ autoload :ValueChanger, 'darthjee/core_ext/hash/value_changer'
9
14
  autoload :ToHashMapper, 'darthjee/core_ext/hash/to_hash_mapper'
10
- autoload :KeysSorter, 'darthjee/core_ext/hash/keys_sorter'
11
-
12
- def chain_fetch(*keys, &block)
13
- ChainFetcher.new(self, *keys, &block).fetch
14
- end
15
-
16
- def squash
17
- Squasher.squash(self)
18
- end
19
-
20
- def map_to_hash(&block)
21
- ToHashMapper.new(self).map(&block)
22
- end
23
-
24
- def remap_keys(remap)
25
- dup.remap_keys!(remap)
26
- end
27
-
28
- def remap_keys!(keys_map)
29
- KeyChanger.new(self).remap(keys_map)
30
- end
31
-
32
- def lower_camelize_keys(options = {})
33
- dup.lower_camelize_keys!(options)
34
- end
35
-
36
- def lower_camelize_keys!(options = {})
37
- options = options.merge(uppercase_first_letter: false)
38
-
39
- camelize_keys!(options)
40
- end
41
-
42
- def camelize_keys(options = {})
43
- dup.camelize_keys!(options)
44
- end
45
-
46
- def camelize_keys!(options = {})
47
- Hash::KeyChanger.new(self).camelize_keys(options)
48
- end
49
-
50
- def underscore_keys(options = {})
51
- dup.underscore_keys!(options)
52
- end
53
-
54
- def underscore_keys!(options = {})
55
- Hash::KeyChanger.new(self).underscore_keys(options)
56
- end
57
-
58
- def exclusive_merge(hash)
59
- dup.exclusive_merge!(hash)
60
- end
61
-
62
- def exclusive_merge!(hash)
63
- merge!(hash.slice(*keys))
64
- end
65
-
66
- # change all keys returning the new map
67
- # options: { recursive: true }
68
- # ex: { "a" =>1 }.change_keys{ |key| key.upcase } == { "A" => 1 }
69
- def change_keys(options = {}, &block)
70
- deep_dup.change_keys!(options, &block)
71
- end
72
-
73
- # change all keys returning the new map
74
- # options: { recursive: true }
75
- # ex: { "a":1 }.change_keys{ |key| key.upcase } == { "A":1 }
76
- def change_keys!(options = {}, &block)
77
- Hash::KeyChanger.new(self).change_keys(options, &block)
78
- end
79
-
80
- # change all publicaly sending method calls
81
- # options: { recursive: true }
82
- # ex: { a: 1 }.chain_change_keys(:to_s, :upcase) == { "A" =>1 }
83
- def chain_change_keys(*calls)
84
- deep_dup.chain_change_keys!(*calls)
85
- end
86
-
87
- # change all publicaly sending method calls
88
- # options: { recursive: true }
89
- # ex: { a: 1 }.chain_change_keys(:to_s, :upcase) == { "A" =>1 }
90
- def chain_change_keys!(*calls)
91
- options = calls.extract_options!
92
15
 
93
- calls.inject(self) do |h, m|
94
- h.change_keys!(options, &m)
95
- end
96
- end
97
-
98
- # prepend a string to all keys
99
- # options {
100
- # recursive: true,
101
- # type: :keep [keep, string, symbol] (key type to be returned)
102
- # }
103
- # ex: { :a => 1, "b"=> 2 }.prepend_to_keys("foo_")
104
- # # returns { :foo_a => 1, "foo_b"=> 2 }
105
- def prepend_to_keys(str, options = {})
106
- change_key_text(options) do |key|
107
- "#{str}#{key}"
108
- end
109
- end
16
+ include Hash::KeyChangeable
17
+ include Hash::Transposeable
18
+ include Hash::Transformable
110
19
 
111
- # append a string to all keys
112
- # options {
113
- # recursive: true,
114
- # type: :keep [keep, string, symbol] (key type to be returned)
115
- # }
116
- # ex: { :a => 1, "b"=> 2 }.append_to_keys("_bar")
117
- # # returns { :a_bar => 1, "b_bar"=> 2 }
118
- def append_to_keys(str, options = {})
119
- change_key_text(options) do |key|
120
- "#{key}#{str}"
121
- end
122
- end
20
+ ########################################
21
+ # Fetching methods
22
+ #########################################
123
23
 
124
- # sorts keys for hash
125
- # options: { recursive: true }
126
- # ex: { b:1, a:2 }.sort_keys == { a:2, b:1 }
127
- def sort_keys(options = {})
128
- Hash::KeysSorter.new(self, **options).sort
129
- end
130
-
131
- # creates a new hash with changes in its values
132
- # options: {
133
- # recursive: true,
134
- # skip_hash:true
135
- # }
136
- # ex: { a:1, b:2 }.change_values{ |v| v+1 } == { a:2, b:3 }
137
- # ex: { a:1, b:{ c:1 } }.change_values(skip_hash:false) { |v| v.to_s }
138
- # # returns { a:"1", b:"{ c=>1 }
139
- # ex: { a:1, b:{ c:1 } }.change_values(skip_hash:true) { |v| v.to_s }
140
- # # returns { a:"1", b:{ c=>"1" } }
141
- def change_values(options = {}, &block)
142
- deep_dup.change_values!(options, &block)
143
- end
144
-
145
- def change_values!(options = {}, &block)
146
- Hash::ValueChanger.new(options, &block).change(self)
147
- end
148
-
149
- def to_deep_hash(separator = '.')
150
- Hash::DeepHashConstructor.new(separator).deep_hash(self)
151
- end
152
-
153
- def transpose!
154
- aux = dup
155
- keys.each { |k| delete(k) }
156
- aux.each do |k, v|
157
- self[v] = k
158
- end
159
- self
160
- end
161
-
162
- def transpose
163
- {}.tap do |new_hash|
164
- each do |k, v|
165
- new_hash[v] = k
166
- end
167
- end
168
- end
169
-
170
- private
171
-
172
- # changes the text of the keys
173
- # options {
174
- # recursive: true,
175
- # type: :keep [keep, string, symbol] (key type to be returned)
176
- # }
177
- # ex: { :a => 1, "b"=> 2 }.change_key_text{ |key| key.upcase }
178
- # # returns { :A => 1, "B"=> 2 }
179
- def change_key_text(options = {}, &block)
180
- Hash::KeyChanger.new(self).change_text(options, &block)
24
+ def chain_fetch(*keys, &block)
25
+ ChainFetcher.new(self, *keys, &block).fetch
181
26
  end
182
27
  end
@@ -0,0 +1,139 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Hash
4
+ module KeyChangeable
5
+ def remap_keys(remap)
6
+ dup.remap_keys!(remap)
7
+ end
8
+
9
+ def remap_keys!(keys_map)
10
+ KeyChanger.new(self).remap(keys_map)
11
+ end
12
+
13
+ def lower_camelize_keys(options = {})
14
+ dup.lower_camelize_keys!(options)
15
+ end
16
+
17
+ def lower_camelize_keys!(options = {})
18
+ options = options.merge(uppercase_first_letter: false)
19
+
20
+ camelize_keys!(options)
21
+ end
22
+
23
+ def camelize_keys(options = {})
24
+ dup.camelize_keys!(options)
25
+ end
26
+
27
+ def camelize_keys!(options = {})
28
+ Hash::KeyChanger.new(self).camelize_keys(options)
29
+ end
30
+
31
+ def underscore_keys(options = {})
32
+ dup.underscore_keys!(options)
33
+ end
34
+
35
+ def underscore_keys!(options = {})
36
+ Hash::KeyChanger.new(self).underscore_keys(options)
37
+ end
38
+
39
+ # change all keys returning the new map
40
+ # options: { recursive: true }
41
+ # ex: { "a" =>1 }.change_keys{ |key| key.upcase } == { "A" => 1 }
42
+ def change_keys(options = {}, &block)
43
+ deep_dup.change_keys!(options, &block)
44
+ end
45
+
46
+ # change all keys returning the new map
47
+ # options: { recursive: true }
48
+ # ex: { "a":1 }.change_keys{ |key| key.upcase } == { "A":1 }
49
+ def change_keys!(options = {}, &block)
50
+ Hash::KeyChanger.new(self).change_keys(options, &block)
51
+ end
52
+
53
+ # change all publicaly sending method calls
54
+ # options: { recursive: true }
55
+ # ex: { a: 1 }.chain_change_keys(:to_s, :upcase) == { "A" =>1 }
56
+ def chain_change_keys(*calls)
57
+ deep_dup.chain_change_keys!(*calls)
58
+ end
59
+
60
+ # change all publicaly sending method calls
61
+ # options: { recursive: true }
62
+ # ex: { a: 1 }.chain_change_keys(:to_s, :upcase) == { "A" =>1 }
63
+ def chain_change_keys!(*calls)
64
+ options = calls.extract_options!
65
+
66
+ calls.inject(self) do |h, m|
67
+ h.change_keys!(options, &m)
68
+ end
69
+ end
70
+
71
+ # prepend a string to all keys
72
+ # options {
73
+ # recursive: true,
74
+ # type: :keep [keep, string, symbol] (key type to be returned)
75
+ # }
76
+ # ex: { :a => 1, "b"=> 2 }.prepend_to_keys("foo_")
77
+ # # returns { :foo_a => 1, "foo_b"=> 2 }
78
+ def prepend_to_keys(str, options = {})
79
+ change_key_text(options) do |key|
80
+ "#{str}#{key}"
81
+ end
82
+ end
83
+
84
+ # append a string to all keys
85
+ # options {
86
+ # recursive: true,
87
+ # type: :keep [keep, string, symbol] (key type to be returned)
88
+ # }
89
+ # ex: { :a => 1, "b"=> 2 }.append_to_keys("_bar")
90
+ # # returns { :a_bar => 1, "b_bar"=> 2 }
91
+ def append_to_keys(str, options = {})
92
+ change_key_text(options) do |key|
93
+ "#{key}#{str}"
94
+ end
95
+ end
96
+
97
+ # sorts keys for hash
98
+ # options: { recursive: true }
99
+ # ex: { b:1, a:2 }.sort_keys == { a:2, b:1 }
100
+ def sort_keys(options = {})
101
+ Hash::KeysSorter.new(self, **options).sort
102
+ end
103
+
104
+ ##########################################
105
+ # Value change methods
106
+ ##########################################
107
+
108
+ # creates a new hash with changes in its values
109
+ # options: {
110
+ # recursive: true,
111
+ # skip_hash:true
112
+ # }
113
+ # ex: { a:1, b:2 }.change_values{ |v| v+1 } == { a:2, b:3 }
114
+ # ex: { a:1, b:{ c:1 } }.change_values(skip_hash:false) { |v| v.to_s }
115
+ # # returns { a:"1", b:"{ c=>1 }
116
+ # ex: { a:1, b:{ c:1 } }.change_values(skip_hash:true) { |v| v.to_s }
117
+ # # returns { a:"1", b:{ c=>"1" } }
118
+ def change_values(options = {}, &block)
119
+ deep_dup.change_values!(options, &block)
120
+ end
121
+
122
+ def change_values!(options = {}, &block)
123
+ Hash::ValueChanger.new(options, &block).change(self)
124
+ end
125
+
126
+ private
127
+
128
+ # changes the text of the keys
129
+ # options {
130
+ # recursive: true,
131
+ # type: :keep [keep, string, symbol] (key type to be returned)
132
+ # }
133
+ # ex: { :a => 1, "b"=> 2 }.change_key_text{ |key| key.upcase }
134
+ # # returns { :A => 1, "B"=> 2 }
135
+ def change_key_text(options = {}, &block)
136
+ Hash::KeyChanger.new(self).change_text(options, &block)
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Hash
4
+ module Transformable
5
+ def squash
6
+ Squasher.squash(self)
7
+ end
8
+
9
+ def to_deep_hash(separator = '.')
10
+ Hash::DeepHashConstructor.new(separator).deep_hash(self)
11
+ end
12
+
13
+ def map_to_hash(&block)
14
+ ToHashMapper.new(self).map(&block)
15
+ end
16
+
17
+ def exclusive_merge(hash)
18
+ dup.exclusive_merge!(hash)
19
+ end
20
+
21
+ def exclusive_merge!(hash)
22
+ merge!(hash.slice(*keys))
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Hash
4
+ module Transposeable
5
+ def transpose!
6
+ aux = dup
7
+ keys.each { |k| delete(k) }
8
+ aux.each do |k, v|
9
+ self[v] = k
10
+ end
11
+ self
12
+ end
13
+
14
+ def transpose
15
+ {}.tap do |new_hash|
16
+ each do |k, v|
17
+ new_hash[v] = k
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Darthjee
4
4
  module CoreExt
5
- VERSION = '1.6.1'
5
+ VERSION = '1.6.2'
6
6
  end
7
7
  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.6.1
4
+ version: 1.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Darthjee
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-30 00:00:00.000000000 Z
11
+ date: 2018-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.16'
33
+ version: 1.15.4
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.16'
40
+ version: 1.15.4
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: pry-nav
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -156,10 +156,13 @@ files:
156
156
  - lib/darthjee/core_ext/hash.rb
157
157
  - lib/darthjee/core_ext/hash/chain_fetcher.rb
158
158
  - lib/darthjee/core_ext/hash/deep_hash_constructor.rb
159
+ - lib/darthjee/core_ext/hash/key_changeable.rb
159
160
  - lib/darthjee/core_ext/hash/key_changer.rb
160
161
  - lib/darthjee/core_ext/hash/keys_sorter.rb
161
162
  - lib/darthjee/core_ext/hash/squasher.rb
162
163
  - lib/darthjee/core_ext/hash/to_hash_mapper.rb
164
+ - lib/darthjee/core_ext/hash/transformable.rb
165
+ - lib/darthjee/core_ext/hash/transposeable.rb
163
166
  - lib/darthjee/core_ext/hash/value_changer.rb
164
167
  - lib/darthjee/core_ext/math.rb
165
168
  - lib/darthjee/core_ext/numeric.rb