active_object 4.0.14 → 5.0.1

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.
@@ -1,255 +1,259 @@
1
- module ActiveObject::Hash
1
+ # frozen_string_literal: true
2
2
 
3
- def assert_valid_keys(*valid_keys)
4
- valid_keys.flatten!
3
+ module ActiveObject
4
+ module Hash
5
5
 
6
- each_key do |key|
7
- next if valid_keys.include?(key)
6
+ def assert_valid_keys(*valid_keys)
7
+ valid_keys.flatten!
8
8
 
9
- raise ArgumentError,
10
- "Unknown key: #{key.inspect}. Valid keys are: #{valid_keys.map(&:inspect).join(', ')}"
11
- end
12
- end
9
+ each_key do |key|
10
+ next if valid_keys.include?(key)
13
11
 
14
- def assert_valid_keys!(*valid_keys)
15
- if empty?
16
- raise ArgumentError,
17
- "Empty hash. Valid keys are: #{valid_keys.map(&:inspect).join(', ')}"
18
- else
19
- assert_valid_keys(*valid_keys)
12
+ raise ArgumentError,
13
+ "Unknown key: #{key.inspect}. Valid keys are: #{valid_keys.map(&:inspect).join(', ')}"
14
+ end
20
15
  end
21
- end
22
16
 
23
- def compact
24
- select { |_, val| !val.nil? }
25
- end
17
+ def assert_valid_keys!(*valid_keys)
18
+ if empty?
19
+ raise ArgumentError,
20
+ "Empty hash. Valid keys are: #{valid_keys.map(&:inspect).join(', ')}"
21
+ else
22
+ assert_valid_keys(*valid_keys)
23
+ end
24
+ end
26
25
 
27
- def compact!
28
- reject! { |_, val| val.nil? }
29
- end
26
+ def compact
27
+ select { |_, val| !val.nil? }
28
+ end
30
29
 
31
- # rubocop:disable Lint/UnusedMethodArgument
32
- def collect_keys(&block)
33
- return(enum_for(:collect_keys)) unless block_given?
30
+ def compact!
31
+ reject! { |_, val| val.nil? }
32
+ end
34
33
 
35
- collect { |key, _| yield(key) }
36
- end
34
+ # rubocop:disable Lint/UnusedMethodArgument
35
+ def collect_keys(&block)
36
+ return(enum_for(:collect_keys)) unless block_given?
37
37
 
38
- def collect_values(&block)
39
- return(enum_for(:collect_values)) unless block_given?
38
+ collect { |key, _| yield(key) }
39
+ end
40
40
 
41
- collect { |_, val| yield(val) }
42
- end
43
- # rubocop:enable Lint/UnusedMethodArgument
41
+ def collect_values(&block)
42
+ return(enum_for(:collect_values)) unless block_given?
44
43
 
45
- def deep_merge(other_hash, &block)
46
- dup.deep_merge!(other_hash, yield(block))
47
- end
44
+ collect { |_, val| yield(val) }
45
+ end
46
+ # rubocop:enable Lint/UnusedMethodArgument
48
47
 
49
- # rubocop:disable Metrics/MethodLength
50
- def deep_merge!(other_hash, &block)
51
- other_hash.each_pair do |current_key, other_value|
52
- this_value = self[current_key]
48
+ def deep_merge(other_hash, &block)
49
+ dup.deep_merge!(other_hash, yield(block))
50
+ end
53
51
 
54
- self[current_key] = if this_value.is_a?(Hash) && other_value.is_a?(Hash)
55
- this_value.deep_merge(other_value, yield(block))
56
- elsif block_given? && key?(current_key)
57
- yield(current_key, this_value, other_value)
58
- else
59
- other_value
60
- end
52
+ # rubocop:disable Metrics/MethodLength
53
+ def deep_merge!(other_hash, &block)
54
+ other_hash.each_pair do |current_key, other_value|
55
+ this_value = self[current_key]
56
+
57
+ self[current_key] = if this_value.is_a?(Hash) && other_value.is_a?(Hash)
58
+ this_value.deep_merge(other_value, yield(block))
59
+ elsif block_given? && key?(current_key)
60
+ yield(current_key, this_value, other_value)
61
+ else
62
+ other_value
63
+ end
64
+ end
65
+
66
+ self
61
67
  end
68
+ # rubocop:enable Metrics/MethodLength
62
69
 
63
- self
64
- end
65
- # rubocop:enable Metrics/MethodLength
70
+ def denillify(value = 0)
71
+ each { |key, val| self[key] = val.nil? ? value : val }
72
+ end
66
73
 
67
- def denillify(value = 0)
68
- each { |key, val| self[key] = val.nil? ? value : val }
69
- end
74
+ def denillify!(value = 0)
75
+ replace(denillify(value))
76
+ end
70
77
 
71
- def denillify!(value = 0)
72
- replace(denillify(value))
73
- end
78
+ def dig(key, *rest)
79
+ value = (self[key] rescue nil)
74
80
 
75
- def dig(key, *rest)
76
- value = (self[key] rescue nil)
81
+ return if value.nil?
82
+ return value if rest.empty?
83
+ return value.dig(*rest) if value.respond_to?(:dig)
84
+ end
77
85
 
78
- return if value.nil?
79
- return value if rest.empty?
80
- return value.dig(*rest) if value.respond_to?(:dig)
81
- end
86
+ def except(*keys)
87
+ dup.except!(*keys)
88
+ end
82
89
 
83
- def except(*keys)
84
- dup.except!(*keys)
85
- end
90
+ def except!(*keys)
91
+ keys.flatten.each { |key| delete(key) }
92
+ self
93
+ end
86
94
 
87
- def except!(*keys)
88
- keys.flatten.each { |key| delete(key) }
89
- self
90
- end
95
+ def hmap(&block)
96
+ dup.hmap!(&block)
97
+ end
91
98
 
92
- def hmap(&block)
93
- dup.hmap!(&block)
94
- end
99
+ # rubocop:disable Lint/UnusedMethodArgument
100
+ def hmap!(&block)
101
+ inject({}) { |hash, (key, val)| hash.merge(yield(key, val)) }
102
+ end
103
+ # rubocop:enable Lint/UnusedMethodArgument
95
104
 
96
- # rubocop:disable Lint/UnusedMethodArgument
97
- def hmap!(&block)
98
- inject({}) { |hash, (key, val)| hash.merge(yield(key, val)) }
99
- end
100
- # rubocop:enable Lint/UnusedMethodArgument
105
+ def nillify
106
+ dup.nillify!
107
+ end
101
108
 
102
- def nillify
103
- dup.nillify!
104
- end
109
+ def nillify!
110
+ each { |key, val| self[key] = nil if !val.nil? && (val.try(:blank?) || val.try(:to_s).blank?) }
111
+ end
105
112
 
106
- def nillify!
107
- each { |key, val| self[key] = nil if !val.nil? && (val.try(:blank?) || val.try(:to_s).blank?) }
108
- end
113
+ def only(*keys)
114
+ dup.only!(*keys)
115
+ end
109
116
 
110
- def only(*keys)
111
- dup.only!(*keys)
112
- end
117
+ def only!(*keys)
118
+ hash = {}
119
+ keys.flatten.each { |key| hash[key] = self[key] if key?(key) }
120
+ replace(hash)
121
+ end
113
122
 
114
- def only!(*keys)
115
- hash = {}
116
- keys.flatten.each { |key| hash[key] = self[key] if key?(key) }
117
- replace(hash)
118
- end
123
+ def rename_keys(*keys)
124
+ dup.rename_keys!(*keys)
125
+ end
119
126
 
120
- def rename_keys(*keys)
121
- dup.rename_keys!(*keys)
122
- end
127
+ def rename_keys!(*keys)
128
+ keys = ::Hash[*keys.flatten]
129
+ keys.each { |key, val| self[val] = delete(key) if self[key] }
130
+ self
131
+ end
123
132
 
124
- def rename_keys!(*keys)
125
- keys = Hash[*keys.flatten]
126
- keys.each { |key, val| self[val] = delete(key) if self[key] }
127
- self
128
- end
133
+ def reverse_merge(other_hash)
134
+ other_hash.merge(self)
135
+ end
129
136
 
130
- def reverse_merge(other_hash)
131
- other_hash.merge(self)
132
- end
137
+ def reverse_merge!(other_hash)
138
+ replace(reverse_merge(other_hash))
139
+ end
133
140
 
134
- def reverse_merge!(other_hash)
135
- replace(reverse_merge(other_hash))
136
- end
141
+ def sample
142
+ key = sample_key
143
+ [key, fetch(key)]
144
+ end
137
145
 
138
- def sample
139
- key = sample_key
140
- [key, fetch(key)]
141
- end
146
+ def sample!
147
+ key, value = sample
148
+ delete(key)
149
+ [key, value]
150
+ end
142
151
 
143
- def sample!
144
- key, value = sample
145
- delete(key)
146
- [key, value]
147
- end
152
+ def sample_key
153
+ hash_keys = keys
154
+ hash_keys.at(::Random.rand(hash_keys.length - 1))
155
+ end
148
156
 
149
- def sample_key
150
- hash_keys = keys
151
- hash_keys.at(Random.rand(hash_keys.length - 1))
152
- end
157
+ def sample_key!
158
+ key, = sample
159
+ delete(key)
160
+ key
161
+ end
153
162
 
154
- def sample_key!
155
- key, = sample
156
- delete(key)
157
- key
158
- end
163
+ def sample_value
164
+ fetch(sample_key)
165
+ end
159
166
 
160
- def sample_value
161
- fetch(sample_key)
162
- end
167
+ def sample_value!
168
+ key, value = sample
169
+ delete(key)
170
+ value
171
+ end
163
172
 
164
- def sample_value!
165
- key, value = sample
166
- delete(key)
167
- value
168
- end
173
+ def shuffle
174
+ ::Hash[to_a.sample(length)]
175
+ end
169
176
 
170
- def shuffle
171
- Hash[to_a.sample(length)]
172
- end
177
+ def shuffle!
178
+ replace(shuffle)
179
+ end
173
180
 
174
- def shuffle!
175
- replace(shuffle)
176
- end
181
+ def slice(*keys)
182
+ keys.flatten
183
+ .each_with_object(self.class.new) { |key, hsh| hsh[key] = self[key] if key?(key) }
184
+ end
177
185
 
178
- def slice(*keys)
179
- keys.flatten
180
- .each_with_object(self.class.new) { |key, hsh| hsh[key] = self[key] if key?(key) }
181
- end
186
+ def slice!(*keys)
187
+ omit = slice(*self.keys - keys)
188
+ hash = slice(*keys)
182
189
 
183
- def slice!(*keys)
184
- omit = slice(*self.keys - keys)
185
- hash = slice(*keys)
190
+ hash.default = default
191
+ hash.default_proc = default_proc if default_proc
186
192
 
187
- hash.default = default
188
- hash.default_proc = default_proc if default_proc
193
+ replace(hash)
194
+ omit
195
+ end
189
196
 
190
- replace(hash)
191
- omit
192
- end
197
+ def stringify_keys
198
+ dup.stringify_keys!
199
+ end
193
200
 
194
- def stringify_keys
195
- dup.stringify_keys!
196
- end
201
+ def stringify_keys!
202
+ each_with_object({}) { |(key, val), options| options[key.to_s] = val }
203
+ end
197
204
 
198
- def stringify_keys!
199
- each_with_object({}) { |(key, val), options| options[key.to_s] = val }
200
- end
205
+ def strip
206
+ select { |_, val| !val.blank? }
207
+ end
201
208
 
202
- def strip
203
- select { |_, val| !val.blank? }
204
- end
209
+ def strip!
210
+ reject! { |_, val| val.blank? }
211
+ end
205
212
 
206
- def strip!
207
- reject! { |_, val| val.blank? }
208
- end
213
+ def symbolize_keys
214
+ dup.symbolize_keys!
215
+ end
209
216
 
210
- def symbolize_keys
211
- dup.symbolize_keys!
212
- end
217
+ def symbolize_keys!
218
+ each_with_object({}) { |(key, val), options| options[(key.to_sym rescue key) || key] = val }
219
+ end
213
220
 
214
- def symbolize_keys!
215
- each_with_object({}) { |(key, val), options| options[(key.to_sym rescue key) || key] = val }
216
- end
221
+ def symbolize_and_underscore_keys
222
+ dup.symbolize_and_underscore_keys!
223
+ end
217
224
 
218
- def symbolize_and_underscore_keys
219
- dup.symbolize_and_underscore_keys!
220
- end
225
+ def symbolize_and_underscore_keys!
226
+ each_with_object({}) do |(key, val), options|
227
+ options[(key.to_s.tr(' ', '_').underscore.to_sym rescue key) || key] = val
228
+ end
229
+ end
221
230
 
222
- def symbolize_and_underscore_keys!
223
- each_with_object({}) do |(key, val), options|
224
- options[(key.to_s.tr(' ', '_').underscore.to_sym rescue key) || key] = val
231
+ def transform_keys(&block)
232
+ dup.transform_keys!(&block)
225
233
  end
226
- end
227
234
 
228
- def transform_keys(&block)
229
- dup.transform_keys!(&block)
230
- end
235
+ # rubocop:disable Lint/UnusedMethodArgument
236
+ def transform_keys!(&block)
237
+ return(enum_for(:transform_keys!)) unless block_given?
231
238
 
232
- # rubocop:disable Lint/UnusedMethodArgument
233
- def transform_keys!(&block)
234
- return(enum_for(:transform_keys!)) unless block_given?
239
+ each_key { |key| self[yield(key)] = delete(key) }
240
+ self
241
+ end
242
+ # rubocop:enable Lint/UnusedMethodArgument
235
243
 
236
- each_key { |key| self[yield(key)] = delete(key) }
237
- self
238
- end
239
- # rubocop:enable Lint/UnusedMethodArgument
244
+ def transform_values(&block)
245
+ dup.transform_values!(&block)
246
+ end
240
247
 
241
- def transform_values(&block)
242
- dup.transform_values!(&block)
243
- end
248
+ # rubocop:disable Lint/UnusedMethodArgument
249
+ def transform_values!(&block)
250
+ return(enum_for(:transform_values!)) unless block_given?
244
251
 
245
- # rubocop:disable Lint/UnusedMethodArgument
246
- def transform_values!(&block)
247
- return(enum_for(:transform_values!)) unless block_given?
252
+ each { |key, val| self[key] = yield(val) }
253
+ end
254
+ # rubocop:enable Lint/UnusedMethodArgument
248
255
 
249
- each { |key, val| self[key] = yield(val) }
250
256
  end
251
- # rubocop:enable Lint/UnusedMethodArgument
252
-
253
257
  end
254
258
 
255
- Hash.include(ActiveObject::Hash) if ActiveObject::Settings.config.autoload_hash
259
+ Hash.include(ActiveObject::Hash) if ActiveObject.configuration.autoload_hash
@@ -1,30 +1,34 @@
1
- module ActiveObject::Integer
2
- ROMAN_VALUES ||= {
3
- M: 1000, CM: 900, D: 500, CD: 400, C: 100, XC: 90, L: 50, XL: 40, X: 10, IX: 9, V: 5, IV: 4,
4
- I: 1
5
- }.freeze
1
+ # frozen_string_literal: true
6
2
 
7
- def factorial
8
- return 1 if zero?
3
+ module ActiveObject
4
+ module Integer
5
+ ROMAN_VALUES ||= {
6
+ M: 1000, CM: 900, D: 500, CD: 400, C: 100, XC: 90, L: 50, XL: 40, X: 10, IX: 9, V: 5, IV: 4,
7
+ I: 1
8
+ }.freeze
9
9
 
10
- 2.upto(self).inject(1) { |acc, elem| acc * elem }
11
- end
10
+ def factorial
11
+ return 1 if zero?
12
12
 
13
- def of(&block)
14
- Array.new(self, &block)
15
- end
13
+ 2.upto(self).inject(1) { |acc, elem| acc * elem }
14
+ end
16
15
 
17
- def roman
18
- return '' if zero?
19
- return "-#{(-self).roman}" if negative?
16
+ def of(&block)
17
+ ::Array.new(self, &block)
18
+ end
20
19
 
21
- ROMAN_VALUES.each { |key, val| return("#{key}#{(self - val).roman}") if val <= self }
22
- end
20
+ def roman
21
+ return '' if zero?
22
+ return "-#{(-self).roman}" if negative?
23
23
 
24
- def time
25
- Time.at(self)
26
- end
24
+ ROMAN_VALUES.each { |key, val| return("#{key}#{(self - val).roman}") if val <= self }
25
+ end
26
+
27
+ def time
28
+ ::Time.at(self)
29
+ end
27
30
 
31
+ end
28
32
  end
29
33
 
30
- Integer.include(ActiveObject::Integer) if ActiveObject::Settings.config.autoload_integer
34
+ Integer.include(ActiveObject::Integer) if ActiveObject.configuration.autoload_integer