active_interaction 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 +4 -4
- data/CHANGELOG.md +252 -72
- data/README.md +3 -3
- data/lib/active_interaction.rb +1 -1
- data/lib/active_interaction/backports.rb +6 -1
- data/lib/active_interaction/concerns/transactable.rb +7 -0
- data/lib/active_interaction/errors.rb +3 -3
- data/lib/active_interaction/filters/abstract_filter.rb +1 -1
- data/lib/active_interaction/filters/array_filter.rb +2 -0
- data/lib/active_interaction/filters/decimal_filter.rb +3 -1
- data/lib/active_interaction/filters/model_filter.rb +1 -1
- data/lib/active_interaction/version.rb +1 -1
- data/spec/active_interaction/base_spec.rb +12 -25
- data/spec/active_interaction/concerns/missable_spec.rb +2 -2
- data/spec/active_interaction/concerns/runnable_spec.rb +5 -2
- data/spec/active_interaction/concerns/transactable_spec.rb +24 -3
- data/spec/active_interaction/errors_spec.rb +1 -1
- data/spec/active_interaction/filter_column_spec.rb +5 -5
- data/spec/active_interaction/filters/boolean_filter_spec.rb +2 -2
- data/spec/active_interaction/integration/model_interaction_spec.rb +1 -1
- data/spec/active_interaction/modules/input_processor_spec.rb +2 -2
- data/spec/active_interaction/modules/validation_spec.rb +2 -2
- data/spec/spec_helper.rb +6 -3
- metadata +21 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8eae8e946fb9ec93d0abfa2e2264a7a35b9e8d56
|
4
|
+
data.tar.gz: 7c976feedfef904516036479d67a789f147d8e4a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79162f4100cf2618ec44bddee98714af4d0b5b01d13cc8188f57a847031ece8c1657223d098912bdaa4b3ba89996cc233955d57cbd9ed44f5910cf44afb03164
|
7
|
+
data.tar.gz: 30f668bd7172e2f5d45df36b38d4ecda7b00d0d5aa1ca1667c4b7fa13eb21c810d8260cd269763debc738614828a0314a941cbb6ad69b86950ac53e3ec3f008c
|
data/CHANGELOG.md
CHANGED
@@ -1,216 +1,335 @@
|
|
1
1
|
# [Master][]
|
2
2
|
|
3
|
+
# [1.2.4][] (2014-08-07)
|
4
|
+
|
5
|
+
## Fixed
|
6
|
+
|
7
|
+
- [#203][]: Fix a bug that prevented transaction options from being passed to
|
8
|
+
subclasses.
|
9
|
+
|
3
10
|
# [1.2.3][] (2014-05-12)
|
4
11
|
|
5
|
-
|
6
|
-
|
12
|
+
## Fixed
|
13
|
+
|
14
|
+
- [#192][]: Fix a bug that raised `ActiveRecord::Rollback` when composing even
|
15
|
+
when not in a transaction.
|
7
16
|
|
8
17
|
# [1.2.2][] (2014-05-07)
|
9
18
|
|
19
|
+
## Fixed
|
20
|
+
|
10
21
|
- Fix a bug that raised `NameError`s when there were invalid nested hash
|
11
22
|
errors.
|
12
23
|
- Add missing translation for symbol filters.
|
13
24
|
|
14
25
|
# [1.2.1][] (2014-05-02)
|
15
26
|
|
16
|
-
|
17
|
-
|
27
|
+
## Fixed
|
28
|
+
|
29
|
+
- [#179][]: Fix a bug that marked model inputs as invalid even if they returned true
|
30
|
+
for `object.is_a?(klass)`.
|
18
31
|
|
19
32
|
# [1.2.0][] (2014-04-30)
|
20
33
|
|
21
|
-
|
22
|
-
|
23
|
-
- Add support for
|
34
|
+
## Added
|
35
|
+
|
36
|
+
- [#175][]: Add support for Rails-style date and time parameters like `date(1i)`.
|
37
|
+
- [#173][]: Add a decimal filter.
|
38
|
+
- [#155][]: Add support for disabling and modifying transactions through the
|
24
39
|
`transaction` helper method.
|
25
|
-
- Add support for `column_for_attribute` which provides better
|
40
|
+
- [#140][]: Add support for `column_for_attribute` which provides better
|
41
|
+
interoperability with gems like Formtastic and Simple Form.
|
26
42
|
|
27
43
|
# [1.1.7][] (2014-04-30)
|
28
44
|
|
29
|
-
|
45
|
+
## Fixed
|
46
|
+
|
47
|
+
- [#174][]: Fix a bug that leaked validators among all child classes.
|
30
48
|
|
31
49
|
# [1.1.6][] (2014-04-29)
|
32
50
|
|
33
|
-
|
51
|
+
## Fixed
|
52
|
+
|
53
|
+
- [#36][]: Fix a bug that caused nested hash error messages to be misleading.
|
34
54
|
|
35
55
|
# [1.1.5][] (2014-03-31)
|
36
56
|
|
37
|
-
|
57
|
+
## Fixed
|
58
|
+
|
59
|
+
- The `transform_keys` method broke backwards compatibility because it's not
|
60
|
+
available until Rails 4.0.2.
|
38
61
|
|
39
62
|
# [1.1.4][] (2014-03-31)
|
40
63
|
|
64
|
+
## Fixed
|
65
|
+
|
41
66
|
- Fix an issue where non-stripped hash keys would be incorrectly converted to strings.
|
42
67
|
|
43
68
|
# [1.1.3][] (2014-03-31)
|
44
69
|
|
45
|
-
|
70
|
+
## Fixed
|
71
|
+
|
72
|
+
- [#165][]: Fix Rubocop errors and pin the version to avoid future issues with new cops
|
46
73
|
breaking the build.
|
47
|
-
|
74
|
+
|
75
|
+
## Security
|
76
|
+
|
77
|
+
- [#163][]: Fix some denial of service attacks via hash symbolization.
|
48
78
|
|
49
79
|
# [1.1.2][] (2014-03-05)
|
50
80
|
|
51
|
-
|
81
|
+
## Fixed
|
82
|
+
|
83
|
+
- [#156][]: Don't constantize classes for model filters on initialization. This fixes a
|
52
84
|
bug that made those filters dependent on load order.
|
53
85
|
|
54
86
|
# [1.1.1][] (2014-03-04)
|
55
87
|
|
56
|
-
|
88
|
+
## Fixed
|
89
|
+
|
90
|
+
- [#153][]: Allow merging ActiveModel errors into ActiveInteraction errors with
|
57
91
|
`ActiveInteraction::Errors#merge!`.
|
58
92
|
|
59
93
|
# [1.1.0][] (2014-02-28)
|
60
94
|
|
61
|
-
|
62
|
-
|
95
|
+
## Added
|
96
|
+
|
97
|
+
- [#116][], [#119][], [#122][]: Speed up many filters by caching class constants.
|
98
|
+
- [#115][]: Add support for callbacks around `execute`.
|
99
|
+
- [#136][]: Allow callable defaults.
|
100
|
+
|
101
|
+
## Changed
|
102
|
+
|
103
|
+
- [#114][]: Support `:only` and `:except` options simultaneously with `import_filters`.
|
63
104
|
Previously this raised an `ArgumentError`.
|
64
|
-
- Support passing a single symbol to `:only` and `:except`. Previously an Array
|
105
|
+
- [#114][]: Support passing a single symbol to `:only` and `:except`. Previously an Array
|
65
106
|
was required.
|
66
|
-
|
67
|
-
|
68
|
-
|
107
|
+
|
108
|
+
## Security
|
109
|
+
|
110
|
+
- [#138][]: Only set instance variables for attributes with readers defined.
|
111
|
+
|
69
112
|
|
70
113
|
# [1.0.5][] (2014-02-25)
|
71
114
|
|
72
|
-
|
115
|
+
## Fixed
|
116
|
+
|
117
|
+
- [#143][]: Rollback database changes when `compose` fails.
|
73
118
|
|
74
119
|
# [1.0.4][] (2014-02-11)
|
75
120
|
|
121
|
+
## Fixed
|
122
|
+
|
76
123
|
- Add translations to the gem specification.
|
77
124
|
|
78
125
|
# ~~[1.0.3][] (2014-02-11)~~
|
79
126
|
|
80
|
-
|
127
|
+
## Fixed
|
128
|
+
|
129
|
+
- [#135][]: Fix a bug that caused invalid strings to be parsed as `nil` instead of
|
81
130
|
raising an error when `Time.zone` was set.
|
82
|
-
- Fix bug that prevented loading I18n translations.
|
131
|
+
- [#134][]: Fix bug that prevented loading I18n translations.
|
83
132
|
|
84
133
|
# [1.0.2][] (2014-02-07)
|
85
134
|
|
86
|
-
|
135
|
+
## Fixed
|
136
|
+
|
137
|
+
- [#130][]: Stop creating duplicate errors on subsequent calls to `valid?`.
|
87
138
|
|
88
139
|
# [1.0.1][] (2014-02-04)
|
89
140
|
|
90
|
-
|
91
|
-
|
92
|
-
-
|
93
|
-
- Fix a bug that
|
141
|
+
## Fixed
|
142
|
+
|
143
|
+
- [#125][]: Short circuit `valid?` after successfully running an interaction.
|
144
|
+
- [#129][]: Fix a bug that prevented merging interpolated symbolic errors.
|
145
|
+
- [#128][]: Use `:invalid_type` instead of `:invalid` as I18n key for type errors.
|
146
|
+
- [#127][]: Fix a bug that skipped setting up accessors for imported filters.
|
94
147
|
|
95
148
|
# [1.0.0][] (2014-01-21)
|
96
149
|
|
97
|
-
|
150
|
+
## Added
|
151
|
+
|
152
|
+
- [#102][]: Add predicate methods for checking if an input was passed.
|
153
|
+
- [#103][]: Allow fetching filters by name.
|
154
|
+
- [#104][]: Allow import filters from another interaction with `import_filters`.
|
155
|
+
|
156
|
+
## Changed
|
157
|
+
|
158
|
+
- [#111][]: Replace `Filters` with a hash. To iterate over `Filter` objects, use
|
98
159
|
`Interaction.filters.values`.
|
99
160
|
- Rename `Filter#has_default?` to `Filter#default?`.
|
100
|
-
|
101
|
-
|
102
|
-
|
161
|
+
|
162
|
+
## Fixed
|
163
|
+
|
164
|
+
- [#98][]: Add `respond_to_missing?` to complement `method_missing` calls.
|
165
|
+
- [#106][]: When adding a filter that shares a name with an existing filter, it will now
|
103
166
|
replace the existing one instead of adding a duplicate.
|
104
|
-
- Allow fetching filters by name.
|
105
|
-
- Allow import filters from another interaction with `import_filters`.
|
106
167
|
|
107
168
|
# [0.10.2][] (2014-01-02)
|
108
169
|
|
109
|
-
|
170
|
+
## Fixed
|
171
|
+
|
172
|
+
- [#94][]: Fix a bug that marked Time instances as invalid if Time.zone was set.
|
110
173
|
|
111
174
|
# [0.10.1][] (2013-12-20)
|
112
175
|
|
113
|
-
|
176
|
+
## Fixed
|
177
|
+
|
178
|
+
- [#90][]: Fix bug that prevented parsing strings as times when ActiveSupport was
|
114
179
|
available.
|
115
180
|
|
116
181
|
# [0.10.0][] (2013-12-19)
|
117
182
|
|
183
|
+
## Added
|
184
|
+
|
118
185
|
- Support casting "true" and "false" as booleans.
|
119
|
-
|
186
|
+
|
187
|
+
## Fixed
|
188
|
+
|
189
|
+
- [#89][]: Fix bug that allowed subclasses to mutate the filters on their superclasses.
|
120
190
|
|
121
191
|
# [0.9.1][] (2013-12-17)
|
122
192
|
|
123
|
-
|
124
|
-
|
125
|
-
-
|
193
|
+
## Fixed
|
194
|
+
|
195
|
+
- [#84][]: Fix I18n deprecation warning.
|
196
|
+
- [#82][]: Raise `ArgumentError` when running an interaction with non-hash inputs.
|
197
|
+
- [#77][]: For compatibility with `ActiveRecord::Errors`, support indifferent access of
|
126
198
|
`ActiveInteraction::Errors`.
|
127
|
-
- Fix losing filters when using inheritance.
|
199
|
+
- [#88][]: Fix losing filters when using inheritance.
|
128
200
|
|
129
201
|
# [0.9.0][] (2013-12-02)
|
130
202
|
|
131
|
-
|
132
|
-
|
203
|
+
## Added
|
204
|
+
|
205
|
+
- Add experimental composition implementation (`ActiveInteraction::Base#compose`).
|
206
|
+
|
207
|
+
## Removed
|
208
|
+
|
133
209
|
- Remove `ActiveInteraction::Pipeline`.
|
134
210
|
|
135
211
|
# [0.8.0][] (2013-11-14)
|
136
212
|
|
137
|
-
|
213
|
+
## Added
|
214
|
+
|
215
|
+
- [#44][], [#45][]: Add ability to document interactions and filters.
|
138
216
|
|
139
217
|
# [0.7.0][] (2013-11-14)
|
140
218
|
|
141
|
-
|
219
|
+
## Added
|
220
|
+
|
221
|
+
- [#41][]: Add ability to chain a series of interactions together with
|
142
222
|
`ActiveInteraction::Pipeline`.
|
143
223
|
|
144
224
|
# [0.6.1][] (2013-11-14)
|
145
225
|
|
226
|
+
## Fixed
|
227
|
+
|
146
228
|
- Re-release. Forgot to merge into master.
|
147
229
|
|
148
230
|
# ~~[0.6.0][] (2013-11-14)~~
|
149
231
|
|
150
|
-
|
151
|
-
|
152
|
-
set `strip: false` on a hash filter.**
|
153
|
-
- **Prevent specifying defaults (other than `nil` or `{}`) on hash filters. Set
|
154
|
-
defaults on the nested filters instead.**
|
232
|
+
## Added
|
233
|
+
|
155
234
|
- Add ability to introspect interactions with `filters`.
|
156
|
-
-
|
157
|
-
- Allow getting all of the user-supplied inputs in an interaction with
|
235
|
+
- [#57][]: Allow getting all of the user-supplied inputs in an interaction with
|
158
236
|
`inputs`.
|
159
|
-
-
|
160
|
-
-
|
161
|
-
- Add a symbol filter.
|
162
|
-
- Allow adding symbolic errors with `errors.add_sym` and retrieving them with
|
237
|
+
- [#61][]: Add a symbol filter.
|
238
|
+
- [#58][]: Allow adding symbolic errors with `errors.add_sym` and retrieving them with
|
163
239
|
`errors.symbolic`.
|
164
240
|
|
241
|
+
## Changed
|
242
|
+
|
243
|
+
- Error class now end with `Error`.
|
244
|
+
- By default, strip unlisted keys from hashes. To retain the old behavior,
|
245
|
+
set `strip: false` on a hash filter.
|
246
|
+
- [#49][]: Prevent specifying defaults (other than `nil` or `{}`) on hash filters. Set
|
247
|
+
defaults on the nested filters instead.
|
248
|
+
- [#66][]: Replace `allow_nil: true` with `default: nil`.
|
249
|
+
|
250
|
+
## Fixed
|
251
|
+
|
252
|
+
- Fix bug that prevented listing multiple attributes in a hash filter.
|
253
|
+
- Fix bug that prevented hash filters from being nested in array filters.
|
254
|
+
|
165
255
|
# [0.5.0][] (2013-10-16)
|
166
256
|
|
167
|
-
|
168
|
-
|
257
|
+
## Added
|
258
|
+
|
259
|
+
- [#34][]: Allow adding errors in `execute` method with `errors.add`.
|
260
|
+
|
261
|
+
## Fixed
|
262
|
+
|
263
|
+
- [#56][]: Prevent manually setting the outcome's result.
|
169
264
|
|
170
265
|
# [0.4.0][] (2013-08-15)
|
171
266
|
|
267
|
+
## Added
|
268
|
+
|
172
269
|
- Support i18n translations.
|
173
270
|
|
174
271
|
# [0.3.0][] (2013-08-07)
|
175
272
|
|
176
|
-
|
177
|
-
|
178
|
-
- Allow nested default values.
|
273
|
+
## Added
|
274
|
+
|
275
|
+
- [#30][]: Allow nested default values.
|
276
|
+
|
277
|
+
## Changed
|
278
|
+
|
279
|
+
- [#36][]: Give better error messages for nested attributes.
|
280
|
+
- [#39][]: Add a more useful invalid interaction error message.
|
281
|
+
- [#38][]: Use default value when given an explicit `nil`.
|
179
282
|
|
180
283
|
# [0.2.2][] (2013-08-07)
|
181
284
|
|
182
|
-
|
285
|
+
## Fixed
|
286
|
+
|
287
|
+
- [#40][]: Fix support for `ActiveSupport::TimeWithZone`.
|
183
288
|
|
184
289
|
# [0.2.1][] (2013-08-06)
|
185
290
|
|
186
|
-
|
291
|
+
## Fixed
|
292
|
+
|
293
|
+
- [#37][]: Fix setting a default value on more than one attribute at a time.
|
187
294
|
|
188
295
|
# [0.2.0][] (2013-07-16)
|
189
296
|
|
190
|
-
|
191
|
-
|
192
|
-
- Add support for strptime format strings on Date, DateTime, and Time filters.
|
297
|
+
## Added
|
298
|
+
|
299
|
+
- [#23][]: Add support for strptime format strings on Date, DateTime, and Time filters.
|
300
|
+
|
301
|
+
## Changed
|
302
|
+
|
303
|
+
- [#20][]: Wrap interactions in ActiveRecord transactions if they're available.
|
304
|
+
- [#24][]: Add option to strip string values, which is enabled by default.
|
193
305
|
|
194
306
|
# [0.1.3][] (2013-07-16)
|
195
307
|
|
308
|
+
## Fixed
|
309
|
+
|
196
310
|
- Fix bug that prevented `attr_accessor`s from working.
|
197
311
|
- Handle unconfigured timezones.
|
198
|
-
- Use RDoc as YARD's Markdown provider instead of kramdown.
|
312
|
+
- [#27][]: Use RDoc as YARD's Markdown provider instead of kramdown.
|
199
313
|
|
200
314
|
# [0.1.2][] (2013-07-14)
|
201
315
|
|
202
|
-
|
316
|
+
## Fixed
|
317
|
+
|
318
|
+
- [#29][]: `execute` will now have the filtered version of the values passed
|
203
319
|
to `run` or `run!` as was intended.
|
204
320
|
|
205
321
|
# [0.1.1][] (2013-07-13)
|
206
322
|
|
207
|
-
|
323
|
+
## Fixed
|
324
|
+
|
325
|
+
- [#28][]: Correct gemspec dependencies on activemodel.
|
208
326
|
|
209
327
|
# ~~[0.1.0][] (2013-07-12)~~
|
210
328
|
|
211
329
|
- Initial release.
|
212
330
|
|
213
|
-
[master]: https://github.com/orgsync/active_interaction/compare/v1.2.
|
331
|
+
[master]: https://github.com/orgsync/active_interaction/compare/v1.2.4...master
|
332
|
+
[1.2.4]: https://github.com/orgsync/active_interaction/compare/v1.2.3...v1.2.4
|
214
333
|
[1.2.3]: https://github.com/orgsync/active_interaction/compare/v1.2.2...v1.2.3
|
215
334
|
[1.2.2]: https://github.com/orgsync/active_interaction/compare/v1.2.1...v1.2.2
|
216
335
|
[1.2.1]: https://github.com/orgsync/active_interaction/compare/v1.2.0...v1.2.1
|
@@ -249,4 +368,65 @@
|
|
249
368
|
[0.1.1]: https://github.com/orgsync/active_interaction/compare/v0.1.0...v0.1.1
|
250
369
|
[0.1.0]: https://github.com/orgsync/active_interaction/compare/62f999b...v0.1.0
|
251
370
|
|
252
|
-
[#
|
371
|
+
[#20]: https://github.com/orgsync/active_interaction/issues/20
|
372
|
+
[#23]: https://github.com/orgsync/active_interaction/issues/23
|
373
|
+
[#24]: https://github.com/orgsync/active_interaction/issues/24
|
374
|
+
[#27]: https://github.com/orgsync/active_interaction/issues/27
|
375
|
+
[#28]: https://github.com/orgsync/active_interaction/issues/28
|
376
|
+
[#29]: https://github.com/orgsync/active_interaction/issues/29
|
377
|
+
[#30]: https://github.com/orgsync/active_interaction/issues/30
|
378
|
+
[#34]: https://github.com/orgsync/active_interaction/issues/34
|
379
|
+
[#36]: https://github.com/orgsync/active_interaction/issues/36
|
380
|
+
[#37]: https://github.com/orgsync/active_interaction/issues/37
|
381
|
+
[#38]: https://github.com/orgsync/active_interaction/issues/38
|
382
|
+
[#39]: https://github.com/orgsync/active_interaction/issues/39
|
383
|
+
[#40]: https://github.com/orgsync/active_interaction/issues/40
|
384
|
+
[#41]: https://github.com/orgsync/active_interaction/issues/41
|
385
|
+
[#44]: https://github.com/orgsync/active_interaction/issues/44
|
386
|
+
[#45]: https://github.com/orgsync/active_interaction/issues/45
|
387
|
+
[#49]: https://github.com/orgsync/active_interaction/issues/49
|
388
|
+
[#56]: https://github.com/orgsync/active_interaction/issues/56
|
389
|
+
[#57]: https://github.com/orgsync/active_interaction/issues/57
|
390
|
+
[#58]: https://github.com/orgsync/active_interaction/issues/58
|
391
|
+
[#61]: https://github.com/orgsync/active_interaction/issues/61
|
392
|
+
[#66]: https://github.com/orgsync/active_interaction/issues/66
|
393
|
+
[#77]: https://github.com/orgsync/active_interaction/issues/77
|
394
|
+
[#82]: https://github.com/orgsync/active_interaction/issues/82
|
395
|
+
[#84]: https://github.com/orgsync/active_interaction/issues/84
|
396
|
+
[#88]: https://github.com/orgsync/active_interaction/issues/88
|
397
|
+
[#89]: https://github.com/orgsync/active_interaction/issues/89
|
398
|
+
[#90]: https://github.com/orgsync/active_interaction/issues/90
|
399
|
+
[#94]: https://github.com/orgsync/active_interaction/issues/94
|
400
|
+
[#98]: https://github.com/orgsync/active_interaction/issues/98
|
401
|
+
[#102]: https://github.com/orgsync/active_interaction/issues/102
|
402
|
+
[#103]: https://github.com/orgsync/active_interaction/issues/103
|
403
|
+
[#104]: https://github.com/orgsync/active_interaction/issues/104
|
404
|
+
[#106]: https://github.com/orgsync/active_interaction/issues/106
|
405
|
+
[#111]: https://github.com/orgsync/active_interaction/issues/111
|
406
|
+
[#114]: https://github.com/orgsync/active_interaction/issues/114
|
407
|
+
[#115]: https://github.com/orgsync/active_interaction/issues/115
|
408
|
+
[#116]: https://github.com/orgsync/active_interaction/issues/116
|
409
|
+
[#119]: https://github.com/orgsync/active_interaction/issues/119
|
410
|
+
[#122]: https://github.com/orgsync/active_interaction/issues/122
|
411
|
+
[#125]: https://github.com/orgsync/active_interaction/issues/125
|
412
|
+
[#127]: https://github.com/orgsync/active_interaction/issues/127
|
413
|
+
[#128]: https://github.com/orgsync/active_interaction/issues/128
|
414
|
+
[#129]: https://github.com/orgsync/active_interaction/issues/129
|
415
|
+
[#130]: https://github.com/orgsync/active_interaction/issues/130
|
416
|
+
[#134]: https://github.com/orgsync/active_interaction/issues/134
|
417
|
+
[#135]: https://github.com/orgsync/active_interaction/issues/135
|
418
|
+
[#136]: https://github.com/orgsync/active_interaction/issues/136
|
419
|
+
[#138]: https://github.com/orgsync/active_interaction/issues/138
|
420
|
+
[#140]: https://github.com/orgsync/active_interaction/issues/140
|
421
|
+
[#143]: https://github.com/orgsync/active_interaction/issues/143
|
422
|
+
[#153]: https://github.com/orgsync/active_interaction/issues/153
|
423
|
+
[#155]: https://github.com/orgsync/active_interaction/issues/155
|
424
|
+
[#156]: https://github.com/orgsync/active_interaction/issues/156
|
425
|
+
[#163]: https://github.com/orgsync/active_interaction/issues/163
|
426
|
+
[#165]: https://github.com/orgsync/active_interaction/issues/165
|
427
|
+
[#173]: https://github.com/orgsync/active_interaction/issues/173
|
428
|
+
[#174]: https://github.com/orgsync/active_interaction/issues/174
|
429
|
+
[#175]: https://github.com/orgsync/active_interaction/issues/175
|
430
|
+
[#179]: https://github.com/orgsync/active_interaction/issues/179
|
431
|
+
[#192]: https://github.com/orgsync/active_interaction/issues/192
|
432
|
+
[#203]: https://github.com/orgsync/active_interaction/issues/203
|
data/README.md
CHANGED
@@ -282,12 +282,12 @@ work done in [Mutations][17].
|
|
282
282
|
|
283
283
|
[0]: https://github.com/orgsync/active_interaction
|
284
284
|
[1]: https://badge.fury.io/rb/active_interaction.svg
|
285
|
-
[2]:
|
285
|
+
[2]: http://rubygems.org/gems/active_interaction "Gem Version"
|
286
286
|
[3]: https://travis-ci.org/orgsync/active_interaction.svg?branch=master
|
287
287
|
[4]: https://travis-ci.org/orgsync/active_interaction "Build Status"
|
288
|
-
[5]: https://
|
288
|
+
[5]: https://img.shields.io/coveralls/orgsync/active_interaction/master.svg
|
289
289
|
[6]: https://coveralls.io/r/orgsync/active_interaction?branch=master "Coverage Status"
|
290
|
-
[7]: https://codeclimate.com/github/orgsync/active_interaction.
|
290
|
+
[7]: https://codeclimate.com/github/orgsync/active_interaction/badges/gpa.svg
|
291
291
|
[8]: https://codeclimate.com/github/orgsync/active_interaction "Code Climate"
|
292
292
|
[9]: https://gemnasium.com/orgsync/active_interaction.svg
|
293
293
|
[10]: https://gemnasium.com/orgsync/active_interaction "Dependency Status"
|
data/lib/active_interaction.rb
CHANGED
@@ -13,11 +13,16 @@ module ActiveInteraction
|
|
13
13
|
send("#{name}=", value)
|
14
14
|
end unless method_defined?(:[]=)
|
15
15
|
end
|
16
|
+
|
17
|
+
class Errors
|
18
|
+
# Required for Rails < 3.2.13.
|
19
|
+
protected :initialize_dup
|
20
|
+
end
|
16
21
|
end
|
17
22
|
|
18
23
|
# @private
|
19
24
|
class Hash
|
20
|
-
# Required for Rails
|
25
|
+
# Required for Rails < 4.0.0.
|
21
26
|
def transform_keys
|
22
27
|
result = {}
|
23
28
|
each_key do |key|
|
@@ -39,6 +39,13 @@ module ActiveInteraction
|
|
39
39
|
end
|
40
40
|
|
41
41
|
module ClassMethods # rubocop:disable Documentation
|
42
|
+
# @param klass [Class]
|
43
|
+
def inherited(klass)
|
44
|
+
klass.transaction(transaction?, transaction_options.dup)
|
45
|
+
|
46
|
+
super
|
47
|
+
end
|
48
|
+
|
42
49
|
# @param enable [Boolean]
|
43
50
|
# @param options [Hash]
|
44
51
|
#
|
@@ -171,9 +171,9 @@ module ActiveInteraction
|
|
171
171
|
def merge_symbolic!(other)
|
172
172
|
other.symbolic.each do |attribute, symbols|
|
173
173
|
symbols.each do |symbol|
|
174
|
-
|
175
|
-
|
176
|
-
|
174
|
+
next if symbolic[attribute].include?(symbol)
|
175
|
+
|
176
|
+
symbolic[attribute] += [symbol]
|
177
177
|
end
|
178
178
|
end
|
179
179
|
end
|
@@ -64,9 +64,11 @@ module ActiveInteraction
|
|
64
64
|
fail InvalidFilterError, 'attribute names in array block'
|
65
65
|
end
|
66
66
|
|
67
|
+
# rubocop:disable GuardClause
|
67
68
|
if filter.default?
|
68
69
|
fail InvalidDefaultError, 'default values in array block'
|
69
70
|
end
|
71
|
+
# rubocop:enable GuardClause
|
70
72
|
end
|
71
73
|
end
|
72
74
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
+
require 'bigdecimal'
|
4
|
+
|
3
5
|
module ActiveInteraction
|
4
6
|
class Base
|
5
7
|
# @!method self.decimal(*attributes, options = {})
|
@@ -46,7 +48,7 @@ module ActiveInteraction
|
|
46
48
|
Float(value)
|
47
49
|
BigDecimal.new(value, digits)
|
48
50
|
rescue ArgumentError
|
49
|
-
|
51
|
+
raise InvalidValueError, "Given value: #{value.inspect}"
|
50
52
|
end
|
51
53
|
|
52
54
|
def klass
|
@@ -439,12 +439,12 @@ describe ActiveInteraction::Base do
|
|
439
439
|
let(:described_class) { InteractionWithFilter }
|
440
440
|
|
441
441
|
it 'responds to the predicate' do
|
442
|
-
expect(interaction.respond_to?(:thing?)).to
|
442
|
+
expect(interaction.respond_to?(:thing?)).to be_truthy
|
443
443
|
end
|
444
444
|
|
445
445
|
context 'without a value' do
|
446
446
|
it 'returns false' do
|
447
|
-
expect(interaction.thing?).to
|
447
|
+
expect(interaction.thing?).to be_falsey
|
448
448
|
end
|
449
449
|
end
|
450
450
|
|
@@ -456,16 +456,14 @@ describe ActiveInteraction::Base do
|
|
456
456
|
end
|
457
457
|
|
458
458
|
it 'returns true' do
|
459
|
-
expect(interaction.thing?).to
|
459
|
+
expect(interaction.thing?).to be_truthy
|
460
460
|
end
|
461
461
|
end
|
462
462
|
end
|
463
463
|
|
464
464
|
describe '.import_filters' do
|
465
|
-
shared_context 'import_filters context' do
|
465
|
+
shared_context 'import_filters context' do |only, except|
|
466
466
|
let(:klass) { AddInteraction }
|
467
|
-
let(:only) { nil }
|
468
|
-
let(:except) { nil }
|
469
467
|
|
470
468
|
let(:described_class) do
|
471
469
|
interaction = klass
|
@@ -477,8 +475,8 @@ describe ActiveInteraction::Base do
|
|
477
475
|
end
|
478
476
|
end
|
479
477
|
|
480
|
-
shared_examples 'import_filters examples' do
|
481
|
-
include_context 'import_filters context'
|
478
|
+
shared_examples 'import_filters examples' do |only, except|
|
479
|
+
include_context 'import_filters context', only, except
|
482
480
|
|
483
481
|
it 'imports the filters' do
|
484
482
|
expect(described_class.filters).to eql klass.filters
|
@@ -504,42 +502,31 @@ describe ActiveInteraction::Base do
|
|
504
502
|
end
|
505
503
|
|
506
504
|
context 'with neither :only nor :except' do
|
507
|
-
include_examples 'import_filters examples'
|
505
|
+
include_examples 'import_filters examples', nil, nil
|
508
506
|
end
|
509
507
|
|
510
508
|
context 'with :only' do
|
511
509
|
context 'as an Array' do
|
512
|
-
include_examples 'import_filters examples'
|
513
|
-
|
514
|
-
let(:only) { [:x] }
|
510
|
+
include_examples 'import_filters examples', [:x], nil
|
515
511
|
end
|
516
512
|
|
517
513
|
context 'as an Symbol' do
|
518
|
-
include_examples 'import_filters examples'
|
519
|
-
|
520
|
-
let(:only) { :x }
|
514
|
+
include_examples 'import_filters examples', :x, nil
|
521
515
|
end
|
522
516
|
end
|
523
517
|
|
524
518
|
context 'with :except' do
|
525
519
|
context 'as an Array' do
|
526
|
-
include_examples 'import_filters examples'
|
527
|
-
|
528
|
-
let(:except) { [:x] }
|
520
|
+
include_examples 'import_filters examples', nil, [:x]
|
529
521
|
end
|
530
522
|
|
531
523
|
context 'as an Symbol' do
|
532
|
-
include_examples 'import_filters examples'
|
533
|
-
|
534
|
-
let(:except) { :x }
|
524
|
+
include_examples 'import_filters examples', nil, :x
|
535
525
|
end
|
536
526
|
end
|
537
527
|
|
538
528
|
context 'with :only & :except' do
|
539
|
-
include_examples 'import_filters examples'
|
540
|
-
|
541
|
-
let(:only) { [:x] }
|
542
|
-
let(:except) { [:x] }
|
529
|
+
include_examples 'import_filters examples', [:x], [:x]
|
543
530
|
end
|
544
531
|
end
|
545
532
|
end
|
@@ -10,7 +10,7 @@ describe ActiveInteraction::Missable do
|
|
10
10
|
let(:slug) { :slug }
|
11
11
|
|
12
12
|
it 'returns false' do
|
13
|
-
expect(instance.respond_to?(slug)).to
|
13
|
+
expect(instance.respond_to?(slug)).to be_falsey
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -18,7 +18,7 @@ describe ActiveInteraction::Missable do
|
|
18
18
|
let(:slug) { :boolean }
|
19
19
|
|
20
20
|
it 'returns true' do
|
21
|
-
expect(instance.respond_to?(slug)).to
|
21
|
+
expect(instance.respond_to?(slug)).to be_truthy
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -57,7 +57,7 @@ describe ActiveInteraction::Runnable do
|
|
57
57
|
}
|
58
58
|
|
59
59
|
klass.run
|
60
|
-
expect(has_run).to
|
60
|
+
expect(has_run).to be_truthy
|
61
61
|
end
|
62
62
|
end
|
63
63
|
end
|
@@ -141,7 +141,10 @@ describe ActiveInteraction::Runnable do
|
|
141
141
|
|
142
142
|
it 'does not duplicate errors on subsequent calls' do
|
143
143
|
instance.valid?
|
144
|
-
|
144
|
+
count = instance.errors.count
|
145
|
+
instance.valid?
|
146
|
+
|
147
|
+
expect(instance.errors.count).to eql count
|
145
148
|
end
|
146
149
|
end
|
147
150
|
end
|
@@ -47,25 +47,46 @@ describe ActiveInteraction::Transactable do
|
|
47
47
|
|
48
48
|
describe '.transaction?' do
|
49
49
|
it 'defaults to true' do
|
50
|
-
expect(klass.transaction?).to
|
50
|
+
expect(klass.transaction?).to be_truthy
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'returns the stored value' do
|
54
54
|
klass.transaction(false)
|
55
|
-
expect(klass.transaction?).to
|
55
|
+
expect(klass.transaction?).to be_falsey
|
56
|
+
end
|
57
|
+
|
58
|
+
context 'with a subclass' do
|
59
|
+
before { klass.transaction(false) }
|
60
|
+
|
61
|
+
let(:subclass) { Class.new(klass) }
|
62
|
+
|
63
|
+
it 'inherits from the superclass' do
|
64
|
+
expect(subclass.transaction?).to be_falsey
|
65
|
+
end
|
56
66
|
end
|
57
67
|
end
|
58
68
|
|
59
69
|
describe '.transaction_options' do
|
70
|
+
let(:h) { { rand => rand } }
|
71
|
+
|
60
72
|
it 'defaults to an empty hash' do
|
61
73
|
expect(klass.transaction_options).to eql({})
|
62
74
|
end
|
63
75
|
|
64
76
|
it 'returns the stored value' do
|
65
|
-
h = { rand => rand }
|
66
77
|
klass.transaction(klass.transaction?, h)
|
67
78
|
expect(klass.transaction_options).to eql h
|
68
79
|
end
|
80
|
+
|
81
|
+
context 'with a subclass' do
|
82
|
+
before { klass.transaction(klass.transaction?, h) }
|
83
|
+
|
84
|
+
let(:subclass) { Class.new(klass) }
|
85
|
+
|
86
|
+
it 'inherits from the superclass' do
|
87
|
+
expect(subclass.transaction_options).to eql h
|
88
|
+
end
|
89
|
+
end
|
69
90
|
end
|
70
91
|
|
71
92
|
describe '#transaction' do
|
@@ -42,7 +42,7 @@ describe ActiveInteraction::FilterColumn do
|
|
42
42
|
let(:type) { :integer }
|
43
43
|
|
44
44
|
it 'returns true' do
|
45
|
-
expect(number?).to
|
45
|
+
expect(number?).to be_truthy
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
@@ -50,7 +50,7 @@ describe ActiveInteraction::FilterColumn do
|
|
50
50
|
let(:type) { :float }
|
51
51
|
|
52
52
|
it 'returns true' do
|
53
|
-
expect(number?).to
|
53
|
+
expect(number?).to be_truthy
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
@@ -58,7 +58,7 @@ describe ActiveInteraction::FilterColumn do
|
|
58
58
|
let(:type) { :string }
|
59
59
|
|
60
60
|
it 'returns false' do
|
61
|
-
expect(number?).to
|
61
|
+
expect(number?).to be_falsey
|
62
62
|
end
|
63
63
|
end
|
64
64
|
end
|
@@ -72,7 +72,7 @@ describe ActiveInteraction::FilterColumn do
|
|
72
72
|
let(:type) { :string }
|
73
73
|
|
74
74
|
it 'returns true' do
|
75
|
-
expect(text?).to
|
75
|
+
expect(text?).to be_truthy
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
@@ -80,7 +80,7 @@ describe ActiveInteraction::FilterColumn do
|
|
80
80
|
let(:type) { :float }
|
81
81
|
|
82
82
|
it 'returns false' do
|
83
|
-
expect(text?).to
|
83
|
+
expect(text?).to be_falsey
|
84
84
|
end
|
85
85
|
end
|
86
86
|
end
|
@@ -10,7 +10,7 @@ describe ActiveInteraction::BooleanFilter, :filter do
|
|
10
10
|
context 'falsey' do
|
11
11
|
[false, '0', 'false', 'FALSE'].each do |value|
|
12
12
|
it "returns false for #{value.inspect}" do
|
13
|
-
expect(filter.cast(value)).to
|
13
|
+
expect(filter.cast(value)).to be_falsey
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
@@ -18,7 +18,7 @@ describe ActiveInteraction::BooleanFilter, :filter do
|
|
18
18
|
context 'truthy' do
|
19
19
|
[true, '1', 'true', 'TRUE'].each do |value|
|
20
20
|
it "returns true for #{value.inspect}" do
|
21
|
-
expect(filter.cast(value)).to
|
21
|
+
expect(filter.cast(value)).to be_truthy
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -5,11 +5,11 @@ require 'spec_helper'
|
|
5
5
|
describe ActiveInteraction::InputProcessor do
|
6
6
|
describe '.reserved?(name)' do
|
7
7
|
it 'returns true for anything starting with "_interaction_"' do
|
8
|
-
expect(described_class.reserved?('_interaction_')).to
|
8
|
+
expect(described_class.reserved?('_interaction_')).to be_truthy
|
9
9
|
end
|
10
10
|
|
11
11
|
it 'returns false for anything else' do
|
12
|
-
expect(described_class.reserved?(SecureRandom.hex)).to
|
12
|
+
expect(described_class.reserved?(SecureRandom.hex)).to be_falsey
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -21,7 +21,7 @@ describe ActiveInteraction::Validation do
|
|
21
21
|
let(:inputs) { { name: 1 } }
|
22
22
|
|
23
23
|
before do
|
24
|
-
filter.
|
24
|
+
allow(filter).to receive(:cast).and_return(1)
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'returns no errors' do
|
@@ -31,7 +31,7 @@ describe ActiveInteraction::Validation do
|
|
31
31
|
|
32
32
|
context 'filter throws' do
|
33
33
|
before do
|
34
|
-
filter.
|
34
|
+
allow(filter).to receive(:cast).and_raise(exception)
|
35
35
|
end
|
36
36
|
|
37
37
|
context 'InvalidValueError' do
|
data/spec/spec_helper.rb
CHANGED
@@ -3,14 +3,17 @@
|
|
3
3
|
require 'coveralls'
|
4
4
|
Coveralls.wear!
|
5
5
|
|
6
|
+
require 'i18n'
|
7
|
+
if I18n.config.respond_to?(:enforce_available_locales)
|
8
|
+
I18n.config.enforce_available_locales = true
|
9
|
+
I18n.config.available_locales = %w[en hsilgne]
|
10
|
+
end
|
11
|
+
|
6
12
|
require 'active_interaction'
|
7
13
|
|
8
14
|
Dir['./spec/support/**/*.rb'].each { |f| require f }
|
9
15
|
|
10
16
|
RSpec.configure do |config|
|
11
|
-
config.treat_symbols_as_metadata_keys_with_true_values = true
|
12
17
|
config.run_all_when_everything_filtered = true
|
13
18
|
config.filter_run_including :focus
|
14
19
|
end
|
15
|
-
|
16
|
-
I18n.config.enforce_available_locales = true
|
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: 1.2.
|
4
|
+
version: 1.2.4
|
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: 2014-
|
12
|
+
date: 2014-08-07 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: '3'
|
20
|
+
version: '3.2'
|
21
21
|
- - "<"
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: '5'
|
@@ -27,7 +27,7 @@ dependencies:
|
|
27
27
|
requirements:
|
28
28
|
- - ">="
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
version: '3'
|
30
|
+
version: '3.2'
|
31
31
|
- - "<"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '5'
|
@@ -121,14 +121,14 @@ dependencies:
|
|
121
121
|
requirements:
|
122
122
|
- - '='
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.
|
124
|
+
version: 0.24.1
|
125
125
|
type: :development
|
126
126
|
prerelease: false
|
127
127
|
version_requirements: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - '='
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: 0.
|
131
|
+
version: 0.24.1
|
132
132
|
- !ruby/object:Gem::Dependency
|
133
133
|
name: yard
|
134
134
|
requirement: !ruby/object:Gem::Requirement
|
@@ -143,6 +143,20 @@ dependencies:
|
|
143
143
|
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: '0.8'
|
146
|
+
- !ruby/object:Gem::Dependency
|
147
|
+
name: rspec
|
148
|
+
requirement: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - '='
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 3.0.0
|
153
|
+
type: :development
|
154
|
+
prerelease: false
|
155
|
+
version_requirements: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - '='
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: 3.0.0
|
146
160
|
description: Manage application specific business logic.
|
147
161
|
email:
|
148
162
|
- aaron.lasseigne@gmail.com
|
@@ -251,7 +265,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
251
265
|
version: '0'
|
252
266
|
requirements: []
|
253
267
|
rubyforge_project:
|
254
|
-
rubygems_version: 2.
|
268
|
+
rubygems_version: 2.4.1
|
255
269
|
signing_key:
|
256
270
|
specification_version: 4
|
257
271
|
summary: Manage application specific business logic.
|