active_interaction 1.0.5 → 1.1.0
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 +13 -1
- data/README.md +5 -5
- data/lib/active_interaction.rb +1 -1
- data/lib/active_interaction/base.rb +3 -9
- data/lib/active_interaction/concerns/runnable.rb +5 -1
- data/lib/active_interaction/filter.rb +18 -6
- data/lib/active_interaction/filters/abstract_filter.rb +7 -4
- data/lib/active_interaction/filters/hash_filter.rb +10 -8
- data/lib/active_interaction/filters/model_filter.rb +12 -3
- data/lib/active_interaction/version.rb +1 -1
- data/spec/active_interaction/base_spec.rb +32 -20
- data/spec/active_interaction/concerns/runnable_spec.rb +33 -0
- data/spec/active_interaction/filters/model_filter_spec.rb +23 -0
- data/spec/active_interaction/integration/model_interaction_spec.rb +1 -1
- data/spec/support/filters.rb +13 -0
- metadata +28 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 940655c81d5b5db1e207b9d317eee3b971ed9fbe
|
4
|
+
data.tar.gz: 25b6b1d2f3b217bd4e2da202765cbc3058e90da2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7d326ebbed5ed325693ba080bf7b020e9d40d3b23ae832038880782363150af71fefb5b34ea2ac256de1a561062c3fba949be9f3c87728baff587b98ce49d899
|
7
|
+
data.tar.gz: 2f17941a1de3e1c4ad74c132e93c16dea5a9239bc3cfd03906953f499721c87001acf91a21cf3d89a92fb497039134667859851270781e1225a7f7b2a009d729
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
# [Master][]
|
2
2
|
|
3
|
+
# [1.1.0][] (2014-02-28)
|
4
|
+
|
5
|
+
- Only set instance variables for attributes with readers defined.
|
6
|
+
- Support `:only` and `:except` options simultaneously with `import_filters`.
|
7
|
+
Previously this raised an `ArgumentError`.
|
8
|
+
- Support passing a single symbol to `:only` and `:except`. Previously an Array
|
9
|
+
was required.
|
10
|
+
- Speed up many filters by caching class constants.
|
11
|
+
- Add support for callbacks around `execute`.
|
12
|
+
- Allow callable defaults.
|
13
|
+
|
3
14
|
# [1.0.5][] (2014-02-25)
|
4
15
|
|
5
16
|
- Rollback database changes when `compose` fails.
|
@@ -143,7 +154,8 @@
|
|
143
154
|
|
144
155
|
- Initial release.
|
145
156
|
|
146
|
-
[master]: https://github.com/orgsync/active_interaction/compare/v1.0
|
157
|
+
[master]: https://github.com/orgsync/active_interaction/compare/v1.1.0...master
|
158
|
+
[1.1.0]: https://github.com/orgsync/active_interaction/compare/v1.0.5...v1.1.0
|
147
159
|
[1.0.5]: https://github.com/orgsync/active_interaction/compare/v1.0.4...v1.0.5
|
148
160
|
[1.0.4]: https://github.com/orgsync/active_interaction/compare/v1.0.3...v1.0.4
|
149
161
|
[1.0.3]: https://github.com/orgsync/active_interaction/compare/v1.0.2...v1.0.3
|
data/README.md
CHANGED
@@ -25,7 +25,7 @@ This project uses [semantic versioning][13].
|
|
25
25
|
Add it to your Gemfile:
|
26
26
|
|
27
27
|
```ruby
|
28
|
-
gem 'active_interaction', '~> 1.
|
28
|
+
gem 'active_interaction', '~> 1.1'
|
29
29
|
```
|
30
30
|
|
31
31
|
And then execute:
|
@@ -168,8 +168,8 @@ end
|
|
168
168
|
boolean :smoking
|
169
169
|
boolean :view
|
170
170
|
end
|
171
|
-
date :arrives_on, default: Date.today
|
172
|
-
date :departs_on, default: Date.tomorrow
|
171
|
+
date :arrives_on, default: -> { Date.today }
|
172
|
+
date :departs_on, default: -> { Date.tomorrow }
|
173
173
|
```
|
174
174
|
|
175
175
|
3. Use any additional validations you need:
|
@@ -284,8 +284,8 @@ work done in [Mutations][17].
|
|
284
284
|
[2]: https://badge.fury.io/rb/active_interaction "Gem Version"
|
285
285
|
[3]: https://travis-ci.org/orgsync/active_interaction.png?branch=master
|
286
286
|
[4]: https://travis-ci.org/orgsync/active_interaction "Build Status"
|
287
|
-
[5]: https://coveralls.io/repos/orgsync/active_interaction/badge.png
|
288
|
-
[6]: https://coveralls.io/r/orgsync/active_interaction "Coverage Status"
|
287
|
+
[5]: https://coveralls.io/repos/orgsync/active_interaction/badge.png?branch=master
|
288
|
+
[6]: https://coveralls.io/r/orgsync/active_interaction?branch=master "Coverage Status"
|
289
289
|
[7]: https://codeclimate.com/github/orgsync/active_interaction.png
|
290
290
|
[8]: https://codeclimate.com/github/orgsync/active_interaction "Code Climate"
|
291
291
|
[9]: https://gemnasium.com/orgsync/active_interaction.png
|
data/lib/active_interaction.rb
CHANGED
@@ -120,20 +120,14 @@ module ActiveInteraction
|
|
120
120
|
#
|
121
121
|
# @return (see .filters)
|
122
122
|
#
|
123
|
-
# @raise [ArgumentError] If both `:only` and `:except` are given.
|
124
|
-
#
|
125
123
|
# @!visibility public
|
126
124
|
def import_filters(klass, options = {})
|
127
|
-
if options.key?(:only) && options.key?(:except)
|
128
|
-
fail ArgumentError, 'given both :only and :except'
|
129
|
-
end
|
130
|
-
|
131
125
|
only = options[:only]
|
132
126
|
except = options[:except]
|
133
127
|
|
134
128
|
other_filters = klass.filters.dup
|
135
|
-
other_filters.select! { |k, _| only.include?(k) } if only
|
136
|
-
other_filters.reject! { |k, _| except.include?(k) } if except
|
129
|
+
other_filters.select! { |k, _| [*only].include?(k) } if only
|
130
|
+
other_filters.reject! { |k, _| [*except].include?(k) } if except
|
137
131
|
|
138
132
|
other_filters.values.each { |filter| initialize_filter(filter) }
|
139
133
|
end
|
@@ -206,7 +200,7 @@ module ActiveInteraction
|
|
206
200
|
inputs.each do |key, value|
|
207
201
|
fail InvalidValueError, key.inspect if self.class.send(:reserved?, key)
|
208
202
|
|
209
|
-
instance_variable_set("@#{key}", value)
|
203
|
+
instance_variable_set("@#{key}", value) if respond_to?(key)
|
210
204
|
end
|
211
205
|
|
212
206
|
self.class.filters.each do |name, filter|
|
@@ -31,6 +31,10 @@ module ActiveInteraction
|
|
31
31
|
extend ActiveSupport::Concern
|
32
32
|
include ActiveModel::Validations
|
33
33
|
|
34
|
+
included do
|
35
|
+
define_callbacks :execute
|
36
|
+
end
|
37
|
+
|
34
38
|
# @return [Errors]
|
35
39
|
def errors
|
36
40
|
@_interaction_errors
|
@@ -96,7 +100,7 @@ module ActiveInteraction
|
|
96
100
|
|
97
101
|
self.result = ActiveRecord::Base.transaction do
|
98
102
|
begin
|
99
|
-
execute
|
103
|
+
run_callbacks(:execute) { execute }
|
100
104
|
rescue Interrupt => interrupt
|
101
105
|
merge_errors_onto_base(interrupt.outcome.errors)
|
102
106
|
|
@@ -49,9 +49,7 @@ module ActiveInteraction
|
|
49
49
|
#
|
50
50
|
# @see .slug
|
51
51
|
def factory(slug)
|
52
|
-
CLASSES.fetch(slug)
|
53
|
-
rescue KeyError
|
54
|
-
raise MissingFilterError, slug.inspect
|
52
|
+
CLASSES.fetch(slug) { fail MissingFilterError, slug.inspect }
|
55
53
|
end
|
56
54
|
|
57
55
|
# Convert the class name into a short symbol.
|
@@ -139,16 +137,17 @@ module ActiveInteraction
|
|
139
137
|
# ActiveInteraction::Filter.new(:example, default: 0).default
|
140
138
|
# # => ActiveInteraction::InvalidDefaultError: example: 0
|
141
139
|
#
|
142
|
-
# @return
|
140
|
+
# @return (see #raw_default)
|
143
141
|
#
|
144
142
|
# @raise [NoDefaultError] If the default is missing.
|
145
143
|
# @raise [InvalidDefaultError] If the default is invalid.
|
146
144
|
def default
|
147
145
|
fail NoDefaultError, name unless default?
|
148
146
|
|
149
|
-
|
147
|
+
value = raw_default
|
148
|
+
cast(value)
|
150
149
|
rescue InvalidValueError, MissingValueError
|
151
|
-
raise InvalidDefaultError, "#{name}: #{
|
150
|
+
raise InvalidDefaultError, "#{name}: #{value.inspect}"
|
152
151
|
end
|
153
152
|
|
154
153
|
# Get the description.
|
@@ -195,5 +194,18 @@ module ActiveInteraction
|
|
195
194
|
fail InvalidValueError, "#{name}: #{value.inspect}"
|
196
195
|
end
|
197
196
|
end
|
197
|
+
|
198
|
+
private
|
199
|
+
|
200
|
+
# @return [Object]
|
201
|
+
def raw_default
|
202
|
+
value = options.fetch(:default)
|
203
|
+
|
204
|
+
if value.is_a?(Proc)
|
205
|
+
value.call
|
206
|
+
else
|
207
|
+
value
|
208
|
+
end
|
209
|
+
end
|
198
210
|
end
|
199
211
|
end
|
@@ -8,11 +8,14 @@ module ActiveInteraction
|
|
8
8
|
#
|
9
9
|
# @private
|
10
10
|
class AbstractFilter < Filter
|
11
|
-
private
|
12
|
-
|
13
11
|
# @return [Class]
|
14
|
-
|
15
|
-
|
12
|
+
attr_reader :klass
|
13
|
+
private :klass
|
14
|
+
|
15
|
+
def initialize(*)
|
16
|
+
super
|
17
|
+
|
18
|
+
@klass = self.class.slug.to_s.camelize.constantize
|
16
19
|
end
|
17
20
|
end
|
18
21
|
end
|
@@ -35,14 +35,6 @@ module ActiveInteraction
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
def default
|
39
|
-
if options[:default].is_a?(Hash) && !options[:default].empty?
|
40
|
-
fail InvalidDefaultError, "#{name}: #{options[:default].inspect}"
|
41
|
-
end
|
42
|
-
|
43
|
-
super
|
44
|
-
end
|
45
|
-
|
46
38
|
def method_missing(*args, &block)
|
47
39
|
super(*args) do |klass, names, options|
|
48
40
|
fail InvalidFilterError, 'missing attribute name' if names.empty?
|
@@ -55,6 +47,16 @@ module ActiveInteraction
|
|
55
47
|
|
56
48
|
private
|
57
49
|
|
50
|
+
def raw_default
|
51
|
+
value = super
|
52
|
+
|
53
|
+
if value.is_a?(Hash) && !value.empty?
|
54
|
+
fail InvalidDefaultError, "#{name}: #{value.inspect}"
|
55
|
+
end
|
56
|
+
|
57
|
+
value
|
58
|
+
end
|
59
|
+
|
58
60
|
# @return [Boolean]
|
59
61
|
def strip?
|
60
62
|
options.fetch(:strip, true)
|
@@ -18,12 +18,21 @@ module ActiveInteraction
|
|
18
18
|
|
19
19
|
# @private
|
20
20
|
class ModelFilter < Filter
|
21
|
-
def
|
21
|
+
def initialize(*)
|
22
|
+
super
|
23
|
+
|
24
|
+
@klass = klass
|
25
|
+
end
|
26
|
+
|
27
|
+
def cast(value, reconstantize = true)
|
22
28
|
case value
|
23
|
-
when klass
|
29
|
+
when @klass
|
24
30
|
value
|
25
31
|
else
|
26
|
-
super
|
32
|
+
return super(value) unless reconstantize
|
33
|
+
|
34
|
+
@klass = klass
|
35
|
+
cast(value, false)
|
27
36
|
end
|
28
37
|
end
|
29
38
|
|
@@ -54,7 +54,7 @@ describe ActiveInteraction::Base do
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
-
context 'with
|
57
|
+
context 'with a reader' do
|
58
58
|
let(:described_class) do
|
59
59
|
Class.new(TestInteraction) do
|
60
60
|
attr_reader :thing
|
@@ -64,6 +64,12 @@ describe ActiveInteraction::Base do
|
|
64
64
|
end
|
65
65
|
let(:thing) { SecureRandom.hex }
|
66
66
|
|
67
|
+
before { inputs.merge!(thing: thing) }
|
68
|
+
|
69
|
+
it 'sets the attribute' do
|
70
|
+
expect(interaction.thing).to eq thing
|
71
|
+
end
|
72
|
+
|
67
73
|
context 'failing validations' do
|
68
74
|
before { inputs.merge!(thing: nil) }
|
69
75
|
|
@@ -73,15 +79,9 @@ describe ActiveInteraction::Base do
|
|
73
79
|
end
|
74
80
|
|
75
81
|
context 'passing validations' do
|
76
|
-
before { inputs.merge!(thing: thing) }
|
77
|
-
|
78
82
|
it 'returns a valid outcome' do
|
79
83
|
expect(interaction).to be_valid
|
80
84
|
end
|
81
|
-
|
82
|
-
it 'sets the attribute' do
|
83
|
-
expect(interaction.thing).to eq thing
|
84
|
-
end
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
@@ -391,8 +391,8 @@ describe ActiveInteraction::Base do
|
|
391
391
|
|
392
392
|
it 'imports the filters' do
|
393
393
|
expect(described_class.filters).to eq klass.filters
|
394
|
-
.select { |k, _| only.nil? ? true : only.include?(k) }
|
395
|
-
.reject { |k, _| except.nil? ? false : except.include?(k) }
|
394
|
+
.select { |k, _| only.nil? ? true : [*only].include?(k) }
|
395
|
+
.reject { |k, _| except.nil? ? false : [*except].include?(k) }
|
396
396
|
end
|
397
397
|
|
398
398
|
it 'does not modify the source' do
|
@@ -417,26 +417,38 @@ describe ActiveInteraction::Base do
|
|
417
417
|
end
|
418
418
|
|
419
419
|
context 'with :only' do
|
420
|
-
|
420
|
+
context 'as an Array' do
|
421
|
+
include_examples 'import_filters examples'
|
421
422
|
|
422
|
-
|
423
|
+
let(:only) { [:x] }
|
424
|
+
end
|
425
|
+
|
426
|
+
context 'as an Symbol' do
|
427
|
+
include_examples 'import_filters examples'
|
428
|
+
|
429
|
+
let(:only) { :x }
|
430
|
+
end
|
423
431
|
end
|
424
432
|
|
425
433
|
context 'with :except' do
|
426
|
-
|
434
|
+
context 'as an Array' do
|
435
|
+
include_examples 'import_filters examples'
|
427
436
|
|
428
|
-
|
437
|
+
let(:except) { [:x] }
|
438
|
+
end
|
439
|
+
|
440
|
+
context 'as an Symbol' do
|
441
|
+
include_examples 'import_filters examples'
|
442
|
+
|
443
|
+
let(:except) { :x }
|
444
|
+
end
|
429
445
|
end
|
430
446
|
|
431
447
|
context 'with :only & :except' do
|
432
|
-
|
433
|
-
|
434
|
-
let(:only) { [] }
|
435
|
-
let(:except) { [] }
|
448
|
+
include_examples 'import_filters examples'
|
436
449
|
|
437
|
-
|
438
|
-
|
439
|
-
end
|
450
|
+
let(:only) { [:x] }
|
451
|
+
let(:except) { [:x] }
|
440
452
|
end
|
441
453
|
end
|
442
454
|
end
|
@@ -61,6 +61,39 @@ describe ActiveInteraction::Runnable do
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
+
context 'callbacks' do
|
65
|
+
describe '.set_callback' do
|
66
|
+
include_context 'with #execute defined'
|
67
|
+
|
68
|
+
shared_examples 'set_callback examples' do |name|
|
69
|
+
context name do
|
70
|
+
it 'does not raise an error' do
|
71
|
+
expect do
|
72
|
+
klass.set_callback name, :before, -> _ {}
|
73
|
+
end.to_not raise_error
|
74
|
+
end
|
75
|
+
|
76
|
+
[:after, :around, :before].each do |type|
|
77
|
+
it type do
|
78
|
+
has_run = false
|
79
|
+
|
80
|
+
klass.set_callback name, type, lambda { |_, &block|
|
81
|
+
has_run = true
|
82
|
+
block.call unless block.nil?
|
83
|
+
}
|
84
|
+
|
85
|
+
klass.run
|
86
|
+
expect(has_run).to be_true
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
include_examples 'set_callback examples', :validate
|
93
|
+
include_examples 'set_callback examples', :execute
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
64
97
|
describe '#errors' do
|
65
98
|
it 'returns the errors' do
|
66
99
|
expect(instance.errors).to be_an ActiveInteraction::Errors
|
@@ -29,6 +29,29 @@ describe ActiveInteraction::ModelFilter, :filter do
|
|
29
29
|
|
30
30
|
expect(filter.cast(value)).to eq value
|
31
31
|
end
|
32
|
+
|
33
|
+
it 'handles reconstantizing subclasses' do
|
34
|
+
filter
|
35
|
+
|
36
|
+
Object.send(:remove_const, :Model)
|
37
|
+
Model = Class.new
|
38
|
+
Submodel = Class.new(Model)
|
39
|
+
value = Submodel.new
|
40
|
+
|
41
|
+
expect(filter.cast(value)).to eq value
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'does not overflow the stack' do
|
45
|
+
klass = Class.new do
|
46
|
+
def self.name
|
47
|
+
Model.name
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
expect do
|
52
|
+
filter.cast(klass.new)
|
53
|
+
end.to raise_error ActiveInteraction::InvalidValueError
|
54
|
+
end
|
32
55
|
end
|
33
56
|
|
34
57
|
context 'with class as a superclass' do
|
data/spec/support/filters.rb
CHANGED
@@ -153,6 +153,19 @@ shared_examples_for 'a filter' do
|
|
153
153
|
end.to raise_error ActiveInteraction::InvalidDefaultError
|
154
154
|
end
|
155
155
|
end
|
156
|
+
|
157
|
+
context 'with a callable default' do
|
158
|
+
include_context 'optional'
|
159
|
+
|
160
|
+
before do
|
161
|
+
default = options[:default]
|
162
|
+
options[:default] = -> { default }
|
163
|
+
end
|
164
|
+
|
165
|
+
it 'returns the default' do
|
166
|
+
expect(filter.default).to eq options[:default].call
|
167
|
+
end
|
168
|
+
end
|
156
169
|
end
|
157
170
|
|
158
171
|
describe '#desc' do
|
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.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Lasseigne
|
@@ -9,124 +9,124 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-02-
|
12
|
+
date: 2014-02-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '3'
|
21
|
-
- - <
|
21
|
+
- - "<"
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: '5'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
27
|
requirements:
|
28
|
-
- -
|
28
|
+
- - ">="
|
29
29
|
- !ruby/object:Gem::Version
|
30
30
|
version: '3'
|
31
|
-
- - <
|
31
|
+
- - "<"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '5'
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: bundler
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.5'
|
41
41
|
type: :development
|
42
42
|
prerelease: false
|
43
43
|
version_requirements: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1.5'
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: coveralls
|
50
50
|
requirement: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0.7'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
57
|
version_requirements: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0.7'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: guard-rspec
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '4.2'
|
69
69
|
type: :development
|
70
70
|
prerelease: false
|
71
71
|
version_requirements: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - ~>
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '4.2'
|
76
76
|
- !ruby/object:Gem::Dependency
|
77
77
|
name: rake
|
78
78
|
requirement: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - ~>
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '10.1'
|
83
83
|
type: :development
|
84
84
|
prerelease: false
|
85
85
|
version_requirements: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - ~>
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '10.1'
|
90
90
|
- !ruby/object:Gem::Dependency
|
91
91
|
name: rdoc
|
92
92
|
requirement: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - ~>
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '4.1'
|
97
97
|
type: :development
|
98
98
|
prerelease: false
|
99
99
|
version_requirements: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - ~>
|
101
|
+
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '4.1'
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
105
|
name: guard-rubocop
|
106
106
|
requirement: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - ~>
|
108
|
+
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '1.0'
|
111
111
|
type: :development
|
112
112
|
prerelease: false
|
113
113
|
version_requirements: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- - ~>
|
115
|
+
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '1.0'
|
118
118
|
- !ruby/object:Gem::Dependency
|
119
119
|
name: yard
|
120
120
|
requirement: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- - ~>
|
122
|
+
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0.8'
|
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
131
|
version: '0.8'
|
132
132
|
description: Manage application specific business logic.
|
@@ -137,10 +137,6 @@ executables: []
|
|
137
137
|
extensions: []
|
138
138
|
extra_rdoc_files: []
|
139
139
|
files:
|
140
|
-
- CHANGELOG.md
|
141
|
-
- LICENSE.txt
|
142
|
-
- README.md
|
143
|
-
- lib/active_interaction.rb
|
144
140
|
- lib/active_interaction/base.rb
|
145
141
|
- lib/active_interaction/concerns/active_modelable.rb
|
146
142
|
- lib/active_interaction/concerns/hashable.rb
|
@@ -163,9 +159,9 @@ files:
|
|
163
159
|
- lib/active_interaction/filters/string_filter.rb
|
164
160
|
- lib/active_interaction/filters/symbol_filter.rb
|
165
161
|
- lib/active_interaction/filters/time_filter.rb
|
166
|
-
- lib/active_interaction/locale/en.yml
|
167
162
|
- lib/active_interaction/modules/validation.rb
|
168
163
|
- lib/active_interaction/version.rb
|
164
|
+
- lib/active_interaction.rb
|
169
165
|
- spec/active_interaction/base_spec.rb
|
170
166
|
- spec/active_interaction/concerns/active_modelable_spec.rb
|
171
167
|
- spec/active_interaction/concerns/hashable_spec.rb
|
@@ -206,6 +202,10 @@ files:
|
|
206
202
|
- spec/support/concerns.rb
|
207
203
|
- spec/support/filters.rb
|
208
204
|
- spec/support/interactions.rb
|
205
|
+
- CHANGELOG.md
|
206
|
+
- LICENSE.txt
|
207
|
+
- README.md
|
208
|
+
- lib/active_interaction/locale/en.yml
|
209
209
|
homepage: http://orgsync.github.io/active_interaction/
|
210
210
|
licenses:
|
211
211
|
- MIT
|
@@ -216,17 +216,17 @@ require_paths:
|
|
216
216
|
- lib
|
217
217
|
required_ruby_version: !ruby/object:Gem::Requirement
|
218
218
|
requirements:
|
219
|
-
- -
|
219
|
+
- - ">="
|
220
220
|
- !ruby/object:Gem::Version
|
221
221
|
version: 1.9.3
|
222
222
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
223
223
|
requirements:
|
224
|
-
- -
|
224
|
+
- - ">="
|
225
225
|
- !ruby/object:Gem::Version
|
226
226
|
version: '0'
|
227
227
|
requirements: []
|
228
228
|
rubyforge_project:
|
229
|
-
rubygems_version: 2.
|
229
|
+
rubygems_version: 2.1.11
|
230
230
|
signing_key:
|
231
231
|
specification_version: 4
|
232
232
|
summary: Manage application specific business logic.
|