active_interaction 4.1.0 → 5.1.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.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +150 -1
  3. data/CONTRIBUTING.md +11 -3
  4. data/README.md +256 -215
  5. data/lib/active_interaction/array_input.rb +77 -0
  6. data/lib/active_interaction/base.rb +14 -98
  7. data/lib/active_interaction/concerns/active_recordable.rb +3 -3
  8. data/lib/active_interaction/concerns/missable.rb +2 -2
  9. data/lib/active_interaction/errors.rb +6 -88
  10. data/lib/active_interaction/exceptions.rb +47 -0
  11. data/lib/active_interaction/filter/column.rb +59 -0
  12. data/lib/active_interaction/filter/error.rb +40 -0
  13. data/lib/active_interaction/filter.rb +40 -52
  14. data/lib/active_interaction/filters/abstract_date_time_filter.rb +9 -6
  15. data/lib/active_interaction/filters/abstract_numeric_filter.rb +7 -3
  16. data/lib/active_interaction/filters/array_filter.rb +40 -6
  17. data/lib/active_interaction/filters/boolean_filter.rb +4 -3
  18. data/lib/active_interaction/filters/date_filter.rb +1 -1
  19. data/lib/active_interaction/filters/date_time_filter.rb +1 -1
  20. data/lib/active_interaction/filters/decimal_filter.rb +1 -1
  21. data/lib/active_interaction/filters/float_filter.rb +1 -1
  22. data/lib/active_interaction/filters/hash_filter.rb +23 -15
  23. data/lib/active_interaction/filters/integer_filter.rb +1 -1
  24. data/lib/active_interaction/filters/interface_filter.rb +12 -12
  25. data/lib/active_interaction/filters/object_filter.rb +9 -3
  26. data/lib/active_interaction/filters/record_filter.rb +21 -11
  27. data/lib/active_interaction/filters/string_filter.rb +1 -1
  28. data/lib/active_interaction/filters/symbol_filter.rb +1 -1
  29. data/lib/active_interaction/filters/time_filter.rb +4 -4
  30. data/lib/active_interaction/hash_input.rb +43 -0
  31. data/lib/active_interaction/input.rb +23 -0
  32. data/lib/active_interaction/inputs.rb +161 -46
  33. data/lib/active_interaction/locale/en.yml +0 -1
  34. data/lib/active_interaction/locale/fr.yml +0 -1
  35. data/lib/active_interaction/locale/it.yml +0 -1
  36. data/lib/active_interaction/locale/ja.yml +0 -1
  37. data/lib/active_interaction/locale/pt-BR.yml +0 -1
  38. data/lib/active_interaction/modules/validation.rb +6 -17
  39. data/lib/active_interaction/version.rb +1 -1
  40. data/lib/active_interaction.rb +41 -36
  41. data/spec/active_interaction/array_input_spec.rb +166 -0
  42. data/spec/active_interaction/base_spec.rb +34 -248
  43. data/spec/active_interaction/concerns/active_modelable_spec.rb +3 -3
  44. data/spec/active_interaction/concerns/active_recordable_spec.rb +7 -7
  45. data/spec/active_interaction/concerns/hashable_spec.rb +8 -8
  46. data/spec/active_interaction/concerns/missable_spec.rb +9 -9
  47. data/spec/active_interaction/concerns/runnable_spec.rb +34 -32
  48. data/spec/active_interaction/errors_spec.rb +60 -43
  49. data/spec/active_interaction/{filter_column_spec.rb → filter/column_spec.rb} +3 -10
  50. data/spec/active_interaction/filter_spec.rb +27 -6
  51. data/spec/active_interaction/filters/abstract_date_time_filter_spec.rb +2 -2
  52. data/spec/active_interaction/filters/abstract_numeric_filter_spec.rb +2 -2
  53. data/spec/active_interaction/filters/array_filter_spec.rb +109 -16
  54. data/spec/active_interaction/filters/boolean_filter_spec.rb +12 -11
  55. data/spec/active_interaction/filters/date_filter_spec.rb +32 -27
  56. data/spec/active_interaction/filters/date_time_filter_spec.rb +34 -29
  57. data/spec/active_interaction/filters/decimal_filter_spec.rb +20 -18
  58. data/spec/active_interaction/filters/file_filter_spec.rb +7 -7
  59. data/spec/active_interaction/filters/float_filter_spec.rb +19 -17
  60. data/spec/active_interaction/filters/hash_filter_spec.rb +16 -18
  61. data/spec/active_interaction/filters/integer_filter_spec.rb +24 -22
  62. data/spec/active_interaction/filters/interface_filter_spec.rb +105 -82
  63. data/spec/active_interaction/filters/object_filter_spec.rb +52 -36
  64. data/spec/active_interaction/filters/record_filter_spec.rb +61 -39
  65. data/spec/active_interaction/filters/string_filter_spec.rb +7 -7
  66. data/spec/active_interaction/filters/symbol_filter_spec.rb +6 -6
  67. data/spec/active_interaction/filters/time_filter_spec.rb +57 -34
  68. data/spec/active_interaction/hash_input_spec.rb +58 -0
  69. data/spec/active_interaction/i18n_spec.rb +22 -17
  70. data/spec/active_interaction/inputs_spec.rb +170 -18
  71. data/spec/active_interaction/integration/array_interaction_spec.rb +3 -7
  72. data/spec/active_interaction/integration/record_integration_spec.rb +5 -0
  73. data/spec/active_interaction/modules/validation_spec.rb +8 -31
  74. data/spec/spec_helper.rb +9 -0
  75. data/spec/support/concerns.rb +2 -2
  76. data/spec/support/filters.rb +27 -51
  77. data/spec/support/interactions.rb +4 -4
  78. metadata +43 -44
  79. data/lib/active_interaction/filter_column.rb +0 -57
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_interaction
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.0
4
+ version: 5.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Lasseigne
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-12-30 00:00:00.000000000 Z
12
+ date: 2022-09-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemodel
@@ -17,7 +17,7 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: '5'
20
+ version: '5.2'
21
21
  - - "<"
22
22
  - !ruby/object:Gem::Version
23
23
  version: '8'
@@ -27,7 +27,7 @@ dependencies:
27
27
  requirements:
28
28
  - - ">="
29
29
  - !ruby/object:Gem::Version
30
- version: '5'
30
+ version: '5.2'
31
31
  - - "<"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '8'
@@ -37,7 +37,7 @@ dependencies:
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '5'
40
+ version: '5.2'
41
41
  - - "<"
42
42
  - !ruby/object:Gem::Version
43
43
  version: '8'
@@ -47,7 +47,7 @@ dependencies:
47
47
  requirements:
48
48
  - - ">="
49
49
  - !ruby/object:Gem::Version
50
- version: '5'
50
+ version: '5.2'
51
51
  - - "<"
52
52
  - !ruby/object:Gem::Version
53
53
  version: '8'
@@ -79,20 +79,6 @@ dependencies:
79
79
  - - ">="
80
80
  - !ruby/object:Gem::Version
81
81
  version: '0'
82
- - !ruby/object:Gem::Dependency
83
- name: benchmark-ips
84
- requirement: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '2.7'
89
- type: :development
90
- prerelease: false
91
- version_requirements: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: '2.7'
96
82
  - !ruby/object:Gem::Dependency
97
83
  name: kramdown
98
84
  requirement: !ruby/object:Gem::Requirement
@@ -141,14 +127,14 @@ dependencies:
141
127
  requirements:
142
128
  - - "~>"
143
129
  - !ruby/object:Gem::Version
144
- version: 1.24.0
130
+ version: 1.26.1
145
131
  type: :development
146
132
  prerelease: false
147
133
  version_requirements: !ruby/object:Gem::Requirement
148
134
  requirements:
149
135
  - - "~>"
150
136
  - !ruby/object:Gem::Version
151
- version: 1.24.0
137
+ version: 1.26.1
152
138
  - !ruby/object:Gem::Dependency
153
139
  name: rubocop-rake
154
140
  requirement: !ruby/object:Gem::Requirement
@@ -169,45 +155,47 @@ dependencies:
169
155
  requirements:
170
156
  - - "~>"
171
157
  - !ruby/object:Gem::Version
172
- version: 2.7.0
158
+ version: 2.9.0
173
159
  type: :development
174
160
  prerelease: false
175
161
  version_requirements: !ruby/object:Gem::Requirement
176
162
  requirements:
177
163
  - - "~>"
178
164
  - !ruby/object:Gem::Version
179
- version: 2.7.0
165
+ version: 2.9.0
180
166
  - !ruby/object:Gem::Dependency
181
- name: yard
167
+ name: sqlite3
182
168
  requirement: !ruby/object:Gem::Requirement
183
169
  requirements:
184
- - - "~>"
170
+ - - ">="
185
171
  - !ruby/object:Gem::Version
186
- version: '0.9'
172
+ version: '0'
187
173
  type: :development
188
174
  prerelease: false
189
175
  version_requirements: !ruby/object:Gem::Requirement
190
176
  requirements:
191
- - - "~>"
177
+ - - ">="
192
178
  - !ruby/object:Gem::Version
193
- version: '0.9'
179
+ version: '0'
194
180
  - !ruby/object:Gem::Dependency
195
- name: sqlite3
181
+ name: yard
196
182
  requirement: !ruby/object:Gem::Requirement
197
183
  requirements:
198
- - - ">="
184
+ - - "~>"
199
185
  - !ruby/object:Gem::Version
200
- version: '0'
186
+ version: '0.9'
201
187
  type: :development
202
188
  prerelease: false
203
189
  version_requirements: !ruby/object:Gem::Requirement
204
190
  requirements:
205
- - - ">="
191
+ - - "~>"
206
192
  - !ruby/object:Gem::Version
207
- version: '0'
208
- description: |2
209
- ActiveInteraction manages application-specific business logic. It is an
210
- implementation of the command pattern in Ruby.
193
+ version: '0.9'
194
+ description: |
195
+ ActiveInteraction manages application-specific business logic. It is an
196
+ implementation of what are called service objects, interactors, or the
197
+ command pattern. No matter what you call it, its built to work seamlessly
198
+ with Rails.
211
199
  email:
212
200
  - aaron.lasseigne@gmail.com
213
201
  - taylor@fausak.me
@@ -220,6 +208,7 @@ files:
220
208
  - LICENSE.md
221
209
  - README.md
222
210
  - lib/active_interaction.rb
211
+ - lib/active_interaction/array_input.rb
223
212
  - lib/active_interaction/base.rb
224
213
  - lib/active_interaction/concerns/active_modelable.rb
225
214
  - lib/active_interaction/concerns/active_recordable.rb
@@ -227,8 +216,10 @@ files:
227
216
  - lib/active_interaction/concerns/missable.rb
228
217
  - lib/active_interaction/concerns/runnable.rb
229
218
  - lib/active_interaction/errors.rb
219
+ - lib/active_interaction/exceptions.rb
230
220
  - lib/active_interaction/filter.rb
231
- - lib/active_interaction/filter_column.rb
221
+ - lib/active_interaction/filter/column.rb
222
+ - lib/active_interaction/filter/error.rb
232
223
  - lib/active_interaction/filters/abstract_date_time_filter.rb
233
224
  - lib/active_interaction/filters/abstract_numeric_filter.rb
234
225
  - lib/active_interaction/filters/array_filter.rb
@@ -247,6 +238,8 @@ files:
247
238
  - lib/active_interaction/filters/symbol_filter.rb
248
239
  - lib/active_interaction/filters/time_filter.rb
249
240
  - lib/active_interaction/grouped_input.rb
241
+ - lib/active_interaction/hash_input.rb
242
+ - lib/active_interaction/input.rb
250
243
  - lib/active_interaction/inputs.rb
251
244
  - lib/active_interaction/locale/en.yml
252
245
  - lib/active_interaction/locale/fr.yml
@@ -255,6 +248,7 @@ files:
255
248
  - lib/active_interaction/locale/pt-BR.yml
256
249
  - lib/active_interaction/modules/validation.rb
257
250
  - lib/active_interaction/version.rb
251
+ - spec/active_interaction/array_input_spec.rb
258
252
  - spec/active_interaction/base_spec.rb
259
253
  - spec/active_interaction/concerns/active_modelable_spec.rb
260
254
  - spec/active_interaction/concerns/active_recordable_spec.rb
@@ -262,7 +256,7 @@ files:
262
256
  - spec/active_interaction/concerns/missable_spec.rb
263
257
  - spec/active_interaction/concerns/runnable_spec.rb
264
258
  - spec/active_interaction/errors_spec.rb
265
- - spec/active_interaction/filter_column_spec.rb
259
+ - spec/active_interaction/filter/column_spec.rb
266
260
  - spec/active_interaction/filter_spec.rb
267
261
  - spec/active_interaction/filters/abstract_date_time_filter_spec.rb
268
262
  - spec/active_interaction/filters/abstract_numeric_filter_spec.rb
@@ -282,6 +276,7 @@ files:
282
276
  - spec/active_interaction/filters/symbol_filter_spec.rb
283
277
  - spec/active_interaction/filters/time_filter_spec.rb
284
278
  - spec/active_interaction/grouped_input_spec.rb
279
+ - spec/active_interaction/hash_input_spec.rb
285
280
  - spec/active_interaction/i18n_spec.rb
286
281
  - spec/active_interaction/inputs_spec.rb
287
282
  - spec/active_interaction/integration/array_interaction_spec.rb
@@ -294,6 +289,7 @@ files:
294
289
  - spec/active_interaction/integration/integer_interaction_spec.rb
295
290
  - spec/active_interaction/integration/interface_interaction_spec.rb
296
291
  - spec/active_interaction/integration/object_interaction_spec.rb
292
+ - spec/active_interaction/integration/record_integration_spec.rb
297
293
  - spec/active_interaction/integration/string_interaction_spec.rb
298
294
  - spec/active_interaction/integration/symbol_interaction_spec.rb
299
295
  - spec/active_interaction/integration/time_interaction_spec.rb
@@ -302,13 +298,13 @@ files:
302
298
  - spec/support/concerns.rb
303
299
  - spec/support/filters.rb
304
300
  - spec/support/interactions.rb
305
- homepage:
301
+ homepage: https://github.com/AaronLasseigne/active_interaction
306
302
  licenses:
307
303
  - MIT
308
304
  metadata:
309
305
  homepage_uri: https://github.com/AaronLasseigne/active_interaction
310
306
  source_code_uri: https://github.com/AaronLasseigne/active_interaction
311
- changelog_uri: https://github.com/AaronLasseigne/active_interaction/blob/master/CHANGELOG.md
307
+ changelog_uri: https://github.com/AaronLasseigne/active_interaction/blob/main/CHANGELOG.md
312
308
  rubygems_mfa_required: 'true'
313
309
  post_install_message:
314
310
  rdoc_options: []
@@ -318,18 +314,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
318
314
  requirements:
319
315
  - - ">="
320
316
  - !ruby/object:Gem::Version
321
- version: '2.5'
317
+ version: '2.7'
322
318
  required_rubygems_version: !ruby/object:Gem::Requirement
323
319
  requirements:
324
320
  - - ">="
325
321
  - !ruby/object:Gem::Version
326
322
  version: '0'
327
323
  requirements: []
328
- rubygems_version: 3.2.15
324
+ rubygems_version: 3.3.7
329
325
  signing_key:
330
326
  specification_version: 4
331
327
  summary: Manage application specific business logic.
332
328
  test_files:
329
+ - spec/active_interaction/array_input_spec.rb
333
330
  - spec/active_interaction/base_spec.rb
334
331
  - spec/active_interaction/concerns/active_modelable_spec.rb
335
332
  - spec/active_interaction/concerns/active_recordable_spec.rb
@@ -337,7 +334,7 @@ test_files:
337
334
  - spec/active_interaction/concerns/missable_spec.rb
338
335
  - spec/active_interaction/concerns/runnable_spec.rb
339
336
  - spec/active_interaction/errors_spec.rb
340
- - spec/active_interaction/filter_column_spec.rb
337
+ - spec/active_interaction/filter/column_spec.rb
341
338
  - spec/active_interaction/filter_spec.rb
342
339
  - spec/active_interaction/filters/abstract_date_time_filter_spec.rb
343
340
  - spec/active_interaction/filters/abstract_numeric_filter_spec.rb
@@ -357,6 +354,7 @@ test_files:
357
354
  - spec/active_interaction/filters/symbol_filter_spec.rb
358
355
  - spec/active_interaction/filters/time_filter_spec.rb
359
356
  - spec/active_interaction/grouped_input_spec.rb
357
+ - spec/active_interaction/hash_input_spec.rb
360
358
  - spec/active_interaction/i18n_spec.rb
361
359
  - spec/active_interaction/inputs_spec.rb
362
360
  - spec/active_interaction/integration/array_interaction_spec.rb
@@ -369,6 +367,7 @@ test_files:
369
367
  - spec/active_interaction/integration/integer_interaction_spec.rb
370
368
  - spec/active_interaction/integration/interface_interaction_spec.rb
371
369
  - spec/active_interaction/integration/object_interaction_spec.rb
370
+ - spec/active_interaction/integration/record_integration_spec.rb
372
371
  - spec/active_interaction/integration/string_interaction_spec.rb
373
372
  - spec/active_interaction/integration/symbol_interaction_spec.rb
374
373
  - spec/active_interaction/integration/time_interaction_spec.rb
@@ -1,57 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActiveInteraction
4
- # A minimal implementation of an `ActiveRecord::ConnectionAdapters::Column`.
5
- class FilterColumn
6
- # @return [nil]
7
- attr_reader :limit
8
-
9
- # @return [Symbol]
10
- attr_reader :type
11
-
12
- class << self
13
- # Find or create the `FilterColumn` for a specific type.
14
- #
15
- # @param type [Symbol] A database column type.
16
- #
17
- # @example
18
- # FilterColumn.intern(:string)
19
- # # => #<ActiveInteraction::FilterColumn:0x007feeaa649c @type=:string>
20
- #
21
- # FilterColumn.intern(:string)
22
- # # => #<ActiveInteraction::FilterColumn:0x007feeaa649c @type=:string>
23
- #
24
- # FilterColumn.intern(:boolean)
25
- # # => #<ActiveInteraction::FilterColumn:0x007feeab8a08 @type=:boolean>
26
- #
27
- # @return [FilterColumn]
28
- def intern(type)
29
- @columns ||= {}
30
- @columns[type] ||= new(type)
31
- end
32
-
33
- private :new
34
- end
35
-
36
- # @param type [type] The database column type.
37
- #
38
- # @private
39
- def initialize(type)
40
- @type = type
41
- end
42
-
43
- # Returns `true` if the column is either of type :integer or :float.
44
- #
45
- # @return [Boolean]
46
- def number?
47
- %i[integer float].include?(type)
48
- end
49
-
50
- # Returns `true` if the column is of type :string.
51
- #
52
- # @return [Boolean]
53
- def text?
54
- type == :string
55
- end
56
- end
57
- end