activeinteractor 1.0.0.beta.6 → 1.0.0.beta.7

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
  SHA256:
3
- metadata.gz: 2607fe1a40ac6e082fa6d3bb2ffb59c0987226c8e88a01cfd9f66329bf2439d3
4
- data.tar.gz: 2fc83930cd1bc7f011e63b78028d0ba658f29dcbfc9001469b5168b15a6c25de
3
+ metadata.gz: 6fc8ba19ece1da4ceed9d40d07e248dd77294c23c0b90b4a4012f74bce2726f9
4
+ data.tar.gz: f785b96877bab8eaed1f7cc612aad65d75bfa723170221cd54d46270e820f152
5
5
  SHA512:
6
- metadata.gz: 1a6d8e00458fce9b81929008eadd2a8d0c83a1dde70c0ca4cd65130fb8d3ab6b51a1c123db707baa777af618fb8c86924a067b5eb8c3baba6463e095b3abd21c
7
- data.tar.gz: 1e9e136432675755607b891c54d9a2d50cfbd67b79ab17bd48e63981331da099a223009b3e40d8067b05049a00258cac406190adf221cf178df2d4be47d63cc5
6
+ metadata.gz: 589bd2fe219fc23e75eb2319242de9692ff17b157c09987495ee5931ee66137415b9c9d8291a6cd1dbcd8dc3bb7a8df8c206ecfec93c01249296c49ba590ccde
7
+ data.tar.gz: d699de2f8be391922a8d26ca96767ca654547760724f732a2396e367d3cf903fac8c6d6b4c6d3a704f928d94671c3beec6292747c202020507a92e96dadba8d5
data/CHANGELOG.md CHANGED
@@ -7,6 +7,20 @@ and this project adheres to [Semantic Versioning].
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [v1.0.0-beta.7] - 2020-01-21
11
+
12
+ ### Added
13
+
14
+ - [#127] `ActiveInteractor::Rails::Models`
15
+
16
+ ### Fixed
17
+
18
+ - [#127] #126 `act_as_context` not working
19
+
20
+ ### Removed
21
+
22
+ - [#127] `ActiveInteractor::Rails::ActiveRecord`
23
+
10
24
  ## [v1.0.0-beta.6] - 2020-01-21
11
25
 
12
26
  ### Added
@@ -194,7 +208,8 @@ and this project adheres to [Semantic Versioning].
194
208
 
195
209
  <!-- versions -->
196
210
 
197
- [Unreleased]: https://github.com/aaronmallen/activeinteractor/compare/v1.0.0-beta.6...HEAD
211
+ [Unreleased]: https://github.com/aaronmallen/activeinteractor/compare/v1.0.0-beta.7...HEAD
212
+ [v1.0.0-beta.7]: https://github.com/aaronmallen/activeinteractor/compare/v1.0.0-beta.6...v1.0.0-beta.7
198
213
  [v1.0.0-beta.6]: https://github.com/aaronmallen/activeinteractor/compare/v1.0.0-beta.5...v1.0.0-beta.6
199
214
  [v1.0.0-beta.5]: https://github.com/aaronmallen/activeinteractor/compare/v1.0.0-beta.4...v1.0.0-beta.5
200
215
  [v1.0.0-beta.4]: https://github.com/aaronmallen/activeinteractor/compare/v1.0.0-beta.3...v1.0.0-beta.4
@@ -235,3 +250,4 @@ and this project adheres to [Semantic Versioning].
235
250
  [#115]: https://github.com/aaronmallen/activeinteractor/pull/115
236
251
  [#122]: https://github.com/aaronmallen/activeinteractor/pull/122
237
252
  [#124]: https://github.com/aaronmallen/activeinteractor/pull/124
253
+ [#127]: https://github.com/aaronmallen/activeinteractor/pull/127
data/README.md CHANGED
@@ -51,7 +51,7 @@ see [v0.1.7](https://github.com/aaronmallen/activeinteractor/tree/0-1-stable)**
51
51
  Add this line to your application's Gemfile:
52
52
 
53
53
  ```ruby
54
- gem 'activeinteractor', '~> 1.0.0.beta.6'
54
+ gem 'activeinteractor', '~> 1.0.0.beta.7'
55
55
  ```
56
56
 
57
57
  And then execute:
@@ -2,18 +2,11 @@
2
2
 
3
3
  module ActiveInteractor
4
4
  module Rails
5
- # ActiveRecord helper methods
5
+ # Model helper methods
6
6
  # @author Aaron Allen <hello@aaronmallen.me>
7
7
  # @since 1.0.0
8
- module ActiveRecord
9
- # Include ActiveRecord helper methods on load
10
- def self.include_helpers
11
- ActiveSupport.on_load(:active_record_base) do
12
- extend ClassMethods
13
- end
14
- end
15
-
16
- # ActiveRecord class helper methods
8
+ module Models
9
+ # Model class helper methods
17
10
  # @author Aaron Allen <hello@aaronmallen.me>
18
11
  # @since 1.0.0
19
12
  module ClassMethods
@@ -27,19 +20,21 @@ module ActiveInteractor
27
20
  end
28
21
  end
29
22
 
23
+ # Model instance helper methods
24
+ # @author Aaron Allen <hello@aaronmallen.me>
25
+ # @since 1.0.0
30
26
  module InstanceMethods
31
- # Override ActiveRecord's initialize method to ensure
27
+ # Override initialize method to ensure
32
28
  # context flags are copied to the new instance
33
- # @param context [Hash|nil] attributes to assign to the class
34
- # @param options [Hash|nil] options for the class
35
- def initialize(context = nil, options = {})
36
- copy_flags!(context) if context
37
- copy_called!(context) if context
38
- attributes = context.to_h if context
39
- super(attributes, options)
29
+ # @param attributes [Hash|nil] attributes to assign to the class
30
+ def initialize(attributes = nil)
31
+ copy_flags!(attributes) if attributes
32
+ copy_called!(attributes) if attributes
33
+ attributes_as_hash = attributes_as_hash(attributes)
34
+ super(attributes_as_hash)
40
35
  end
41
36
 
42
- # Merge an ActiveRecord::Base instance and ensure
37
+ # Merge an instance and ensure
43
38
  # context flags are copied to the new instance
44
39
  # @param context [*] the instance to be merged
45
40
  # @return [*] the merged instance
@@ -50,6 +45,13 @@ module ActiveInteractor
50
45
  end
51
46
  self
52
47
  end
48
+
49
+ private
50
+
51
+ def attributes_as_hash(attributes)
52
+ return attributes.to_h if attributes&.respond_to?(:to_h)
53
+ return attributes.attributes.to_h if attributes.respond_to?(:attributes)
54
+ end
53
55
  end
54
56
  end
55
57
  end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ ActiveSupport.on_load(:active_record) do
4
+ extend ActiveInteractor::Rails::Models::ClassMethods
5
+ end
@@ -14,10 +14,6 @@ module ActiveInteractor
14
14
 
15
15
  config.eager_load_namespaces << ActiveInteractor
16
16
 
17
- initializer 'active_interactor.active_record_helpers' do
18
- ActiveInteractor::Rails::ActiveRecord.include_helpers
19
- end
20
-
21
17
  config.to_prepare do
22
18
  ActiveInteractor.configure do |c|
23
19
  c.logger = ::Rails.logger
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'active_interactor'
4
- require 'active_interactor/rails/active_record'
5
4
  require 'active_interactor/rails/config'
5
+ require 'active_interactor/rails/models'
6
6
  require 'active_interactor/rails/railtie'
7
7
 
8
8
  module ActiveInteractor
@@ -2,5 +2,5 @@
2
2
 
3
3
  module ActiveInteractor
4
4
  # @return [String] the ActiveInteractor version
5
- VERSION = '1.0.0.beta.6'
5
+ VERSION = '1.0.0.beta.7'
6
6
  end
@@ -6,7 +6,9 @@ module ActiveInteractor
6
6
  module Generators
7
7
  class InstallGenerator < Base
8
8
  source_root File.expand_path('templates', __dir__)
9
+
9
10
  desc 'Install ActiveInteractor'
11
+ class_option :orm
10
12
  argument :directory, type: :string, default: 'interactors', banner: 'directory'
11
13
 
12
14
  def create_initializer
@@ -3,6 +3,14 @@
3
3
  require 'active_interactor'
4
4
 
5
5
  ActiveInteractor::Rails.configure do |config|
6
+ # ORM configuration
7
+ # Load and configure the ORM. Supports :active_record (default)
8
+ # Other ORMs may be available as additional gems.
9
+ <%- if options[:orm] -%>
10
+ require 'active_interactor/rails/orm/<%= options[:orm] %>'
11
+ <%- else -%>
12
+ # require 'active_interactor/rails/orm/<MY_ORM>'
13
+ <%- end -%>
6
14
 
7
15
  # set the default directory for interactors
8
16
  <%- if directory != 'interactors' -%>
@@ -3,6 +3,7 @@
3
3
  require 'spec_helper'
4
4
  begin
5
5
  require 'active_interactor/rails'
6
+ require 'active_interactor/rails/orm/active_record'
6
7
 
7
8
  RSpec.describe 'ActiveRecord Integration', type: :integration do
8
9
  let!(:active_record_base_mock) do
@@ -42,321 +43,317 @@ begin
42
43
  end
43
44
  end
44
45
 
45
- context 'after ActiveInteractor::Rails::ActiveRecord.include_helpers has been invoked' do
46
- before { ActiveInteractor::Rails::ActiveRecord.include_helpers }
46
+ context 'after ActiveSupport.run_load_hooks has been invoked with :active_record' do
47
+ before { ActiveSupport.run_load_hooks(:active_record, active_record_base_mock) }
47
48
 
48
- context 'after ActiveSupport.run_load_hooks has been invoked with :active_record_base' do
49
- before { ActiveSupport.run_load_hooks(:active_record_base, active_record_base_mock) }
49
+ describe 'an ActiveRecord model class with .acts_as_context' do
50
+ let(:model_mock) do
51
+ build_class('ModelMock', active_record_base_mock) do
52
+ attr_accessor :foo
53
+ acts_as_context
54
+ end
55
+ end
50
56
 
51
- describe 'an ActiveRecord model class with .acts_as_context' do
52
- let(:model_mock) do
53
- build_class('ModelMock', active_record_base_mock) do
54
- attr_accessor :foo
55
- acts_as_context
56
- end
57
+ describe 'as an instance' do
58
+ subject { model_mock.new }
59
+
60
+ it { is_expected.to respond_to :called! }
61
+ it { is_expected.to respond_to :fail! }
62
+ it { is_expected.to respond_to :fail? }
63
+ it { is_expected.to respond_to :failure? }
64
+ it { is_expected.to respond_to :merge! }
65
+ it { is_expected.to respond_to :rollback! }
66
+ it { is_expected.to respond_to :success? }
67
+ it { is_expected.to respond_to :successful? }
68
+ end
69
+
70
+ describe '.new' do
71
+ subject { model_mock.new(attributes) }
72
+ let(:attributes) { nil }
73
+
74
+ it 'is expected not to receive #copy_flags!' do
75
+ expect_any_instance_of(model_mock).not_to receive(:copy_flags!)
76
+ subject
77
+ end
78
+
79
+ it 'is expected not to receive #copy_called!' do
80
+ expect_any_instance_of(model_mock).not_to receive(:copy_called!)
81
+ subject
57
82
  end
58
83
 
59
- describe 'as an instance' do
60
- subject { model_mock.new }
61
-
62
- it { is_expected.to respond_to :called! }
63
- it { is_expected.to respond_to :fail! }
64
- it { is_expected.to respond_to :fail? }
65
- it { is_expected.to respond_to :failure? }
66
- it { is_expected.to respond_to :merge! }
67
- it { is_expected.to respond_to :rollback! }
68
- it { is_expected.to respond_to :success? }
69
- it { is_expected.to respond_to :successful? }
84
+ it 'is expected to invoke super on parent class with nil attributes' do
85
+ expect(active_record_base_mock).to receive(:new).with(nil)
86
+ subject
70
87
  end
71
88
 
72
- describe '.new' do
73
- subject { model_mock.new(attributes) }
74
- let(:attributes) { nil }
89
+ context 'with attributes { :foo => "foo" }' do
90
+ let(:attributes) { { foo: 'foo' } }
75
91
 
76
- it 'is expected not to receive #copy_flags!' do
77
- expect_any_instance_of(model_mock).not_to receive(:copy_flags!)
92
+ it { expect { subject }.not_to raise_error }
93
+
94
+ it 'is expected to receive #copy_flags!' do
95
+ expect_any_instance_of(model_mock).to receive(:copy_flags!).with(foo: 'foo')
78
96
  subject
79
97
  end
80
98
 
81
- it 'is expected not to receive #copy_called!' do
82
- expect_any_instance_of(model_mock).not_to receive(:copy_called!)
99
+ it 'is expected to receive #copy_called!' do
100
+ expect_any_instance_of(model_mock).to receive(:copy_called!).with(foo: 'foo')
83
101
  subject
84
102
  end
85
103
 
86
- it 'is expected to invoke super on parent class with nil attributes' do
87
- expect(active_record_base_mock).to receive(:new).with(nil)
104
+ it 'is expected to invoke super on parent class with { :foo => "foo" }' do
105
+ expect(active_record_base_mock).to receive(:new).with(foo: 'foo')
88
106
  subject
89
107
  end
108
+ end
109
+
110
+ context 'with attributes being an instance of ModelMock having attributes { :foo => "foo" }' do
111
+ let(:previous_instance) { model_mock.new(foo: 'foo') }
112
+ let(:attributes) { previous_instance }
90
113
 
91
- context 'with attributes { :foo => "foo" }' do
92
- let(:attributes) { { foo: 'foo' } }
114
+ it { is_expected.to have_attributes(foo: 'foo') }
93
115
 
94
- it { expect { subject }.not_to raise_error }
116
+ context 'with _failed equal to true on previous instance' do
117
+ before { previous_instance.instance_variable_set('@_failed', true) }
95
118
 
96
- it 'is expected to receive #copy_flags!' do
97
- expect_any_instance_of(model_mock).to receive(:copy_flags!).with(foo: 'foo')
98
- subject
99
- end
119
+ it { is_expected.to be_failure }
120
+ end
100
121
 
101
- it 'is expected to receive #copy_called!' do
102
- expect_any_instance_of(model_mock).to receive(:copy_called!).with(foo: 'foo')
103
- subject
122
+ context 'with _rolled_back equal to true on previous instance' do
123
+ before { previous_instance.instance_variable_set('@_rolled_back', true) }
124
+
125
+ it 'is expected to have instance_variable @_rolled_back eq to true' do
126
+ expect(subject.instance_variable_get('@_rolled_back')).to eq true
104
127
  end
128
+ end
105
129
 
106
- it 'is expected to invoke super on parent class with { :foo => "foo" }' do
107
- expect(active_record_base_mock).to receive(:new).with(foo: 'foo')
108
- subject
130
+ context 'with _called eq to ["foo"] on previous instance' do
131
+ before { previous_instance.instance_variable_set('@_called', %w[foo]) }
132
+
133
+ it 'is expected to have instance_variable @_called eq to ["foo"]' do
134
+ expect(subject.instance_variable_get('@_called')).to eq %w[foo]
109
135
  end
110
136
  end
137
+ end
138
+ end
139
+
140
+ describe '#merge!' do
141
+ subject { model_mock.new(attributes).merge!(merge_instance) }
142
+ context 'having attributes { :foo => nil }' do
143
+ let(:attributes) { { foo: nil } }
111
144
 
112
- context 'with attributes being an instance of ModelMock having attributes { :foo => "foo" }' do
113
- let(:previous_instance) { model_mock.new(foo: 'foo') }
114
- let(:attributes) { previous_instance }
145
+ context 'with merging instance having attributes { :foo => "foo" }' do
146
+ let(:merge_instance) { model_mock.new(foo: 'foo') }
115
147
 
116
148
  it { is_expected.to have_attributes(foo: 'foo') }
117
149
 
118
- context 'with _failed equal to true on previous instance' do
119
- before { previous_instance.instance_variable_set('@_failed', true) }
150
+ context 'with _failed equal to true on merging instance' do
151
+ before { merge_instance.instance_variable_set('@_failed', true) }
120
152
 
121
153
  it { is_expected.to be_failure }
122
154
  end
123
155
 
124
- context 'with _rolled_back equal to true on previous instance' do
125
- before { previous_instance.instance_variable_set('@_rolled_back', true) }
156
+ context 'with _rolled_back equal to true on merging instance' do
157
+ before { merge_instance.instance_variable_set('@_rolled_back', true) }
126
158
 
127
159
  it 'is expected to have instance_variable @_rolled_back eq to true' do
128
160
  expect(subject.instance_variable_get('@_rolled_back')).to eq true
129
161
  end
130
162
  end
131
-
132
- context 'with _called eq to ["foo"] on previous instance' do
133
- before { previous_instance.instance_variable_set('@_called', %w[foo]) }
134
-
135
- it 'is expected to have instance_variable @_called eq to ["foo"]' do
136
- expect(subject.instance_variable_get('@_called')).to eq %w[foo]
137
- end
138
- end
139
163
  end
140
164
  end
141
165
 
142
- describe '#merge!' do
143
- subject { model_mock.new(attributes).merge!(merge_instance) }
144
- context 'having attributes { :foo => nil }' do
145
- let(:attributes) { { foo: nil } }
166
+ context 'having attributes { :foo => "foo"}' do
167
+ let(:attributes) { { foo: 'foo' } }
146
168
 
147
- context 'with merging instance having attributes { :foo => "foo" }' do
148
- let(:merge_instance) { model_mock.new(foo: 'foo') }
169
+ context 'with merging instance having attributes { :foo => "bar" }' do
170
+ let(:merge_instance) { model_mock.new(foo: 'bar') }
149
171
 
150
- it { is_expected.to have_attributes(foo: 'foo') }
172
+ it { is_expected.to have_attributes(foo: 'bar') }
151
173
 
152
- context 'with _failed equal to true on merging instance' do
153
- before { merge_instance.instance_variable_set('@_failed', true) }
174
+ context 'with _failed equal to true on merging instance' do
175
+ before { merge_instance.instance_variable_set('@_failed', true) }
154
176
 
155
- it { is_expected.to be_failure }
156
- end
177
+ it { is_expected.to be_failure }
178
+ end
157
179
 
158
- context 'with _rolled_back equal to true on merging instance' do
159
- before { merge_instance.instance_variable_set('@_rolled_back', true) }
180
+ context 'with _rolled_back equal to true on merging instance' do
181
+ before { merge_instance.instance_variable_set('@_rolled_back', true) }
160
182
 
161
- it 'is expected to have instance_variable @_rolled_back eq to true' do
162
- expect(subject.instance_variable_get('@_rolled_back')).to eq true
163
- end
183
+ it 'is expected to have instance_variable @_rolled_back eq to true' do
184
+ expect(subject.instance_variable_get('@_rolled_back')).to eq true
164
185
  end
165
186
  end
166
187
  end
188
+ end
189
+ end
190
+ end
167
191
 
168
- context 'having attributes { :foo => "foo"}' do
169
- let(:attributes) { { foo: 'foo' } }
192
+ describe 'a basic interactor using an ActiveRecord model class as context' do
193
+ let!(:model_mock) do
194
+ require 'active_model'
195
+ build_class('ModelMock', active_record_base_mock) do
196
+ include ActiveModel::Validations
197
+ attr_accessor :foo
198
+ acts_as_context
199
+ end
200
+ end
170
201
 
171
- context 'with merging instance having attributes { :foo => "bar" }' do
172
- let(:merge_instance) { model_mock.new(foo: 'bar') }
202
+ let(:interactor_class) do
203
+ build_interactor do
204
+ contextualize_with :model_mock
173
205
 
174
- it { is_expected.to have_attributes(foo: 'bar') }
206
+ def perform
207
+ context.foo = 'foo'
208
+ end
209
+ end
210
+ end
175
211
 
176
- context 'with _failed equal to true on merging instance' do
177
- before { merge_instance.instance_variable_set('@_failed', true) }
212
+ include_examples 'a class with interactor methods'
213
+ include_examples 'a class with interactor callback methods'
214
+ include_examples 'a class with interactor context methods'
178
215
 
179
- it { is_expected.to be_failure }
180
- end
216
+ describe '.context_class' do
217
+ subject { interactor_class.context_class }
181
218
 
182
- context 'with _rolled_back equal to true on merging instance' do
183
- before { merge_instance.instance_variable_set('@_rolled_back', true) }
219
+ it { is_expected.to eq model_mock }
220
+ end
184
221
 
185
- it 'is expected to have instance_variable @_rolled_back eq to true' do
186
- expect(subject.instance_variable_get('@_rolled_back')).to eq true
187
- end
188
- end
189
- end
190
- end
191
- end
222
+ describe '.perform' do
223
+ subject { interactor_class.perform }
224
+
225
+ it { is_expected.to be_a model_mock }
226
+ it { is_expected.to be_successful }
227
+ it { is_expected.to have_attributes(foo: 'foo') }
192
228
  end
193
229
 
194
- describe 'a basic interactor using an ActiveRecord model class as context' do
195
- let!(:model_mock) do
196
- require 'active_model'
197
- build_class('ModelMock', active_record_base_mock) do
198
- include ActiveModel::Validations
199
- attr_accessor :foo
200
- acts_as_context
201
- end
202
- end
230
+ describe '.perform!' do
231
+ subject { interactor_class.perform! }
232
+
233
+ it { expect { subject }.not_to raise_error }
234
+ it { is_expected.to be_a model_mock }
235
+ it { is_expected.to be_successful }
236
+ it { is_expected.to have_attributes(foo: 'foo') }
237
+ end
203
238
 
239
+ context 'failing the context on #perform' do
204
240
  let(:interactor_class) do
205
241
  build_interactor do
206
242
  contextualize_with :model_mock
207
243
 
208
244
  def perform
209
- context.foo = 'foo'
245
+ context.fail!
210
246
  end
211
247
  end
212
248
  end
213
249
 
214
- include_examples 'a class with interactor methods'
215
- include_examples 'a class with interactor callback methods'
216
- include_examples 'a class with interactor context methods'
217
-
218
- describe '.context_class' do
219
- subject { interactor_class.context_class }
220
-
221
- it { is_expected.to eq model_mock }
222
- end
223
-
224
250
  describe '.perform' do
225
251
  subject { interactor_class.perform }
226
252
 
253
+ it { expect { subject }.not_to raise_error }
227
254
  it { is_expected.to be_a model_mock }
228
- it { is_expected.to be_successful }
229
- it { is_expected.to have_attributes(foo: 'foo') }
255
+ it { is_expected.to be_failure }
256
+ it 'is expected to #rollback' do
257
+ expect_any_instance_of(interactor_class).to receive(:rollback)
258
+ subject
259
+ end
230
260
  end
231
261
 
232
262
  describe '.perform!' do
233
263
  subject { interactor_class.perform! }
234
264
 
235
- it { expect { subject }.not_to raise_error }
236
- it { is_expected.to be_a model_mock }
237
- it { is_expected.to be_successful }
238
- it { is_expected.to have_attributes(foo: 'foo') }
239
- end
240
-
241
- context 'failing the context on #perform' do
242
- let(:interactor_class) do
243
- build_interactor do
244
- contextualize_with :model_mock
245
-
246
- def perform
247
- context.fail!
248
- end
249
- end
250
- end
251
-
252
- describe '.perform' do
253
- subject { interactor_class.perform }
254
-
255
- it { expect { subject }.not_to raise_error }
256
- it { is_expected.to be_a model_mock }
257
- it { is_expected.to be_failure }
258
- it 'is expected to #rollback' do
259
- expect_any_instance_of(interactor_class).to receive(:rollback)
260
- subject
261
- end
262
- end
263
-
264
- describe '.perform!' do
265
- subject { interactor_class.perform! }
266
-
267
- it { expect { subject }.to raise_error(ActiveInteractor::Error::ContextFailure) }
268
- end
265
+ it { expect { subject }.to raise_error(ActiveInteractor::Error::ContextFailure) }
269
266
  end
270
267
  end
268
+ end
271
269
 
272
- describe 'a basic organizer using an ActiveRecord model class as context' do
273
- let!(:model_mock) do
274
- require 'active_model'
275
- build_class('ModelMock', active_record_base_mock) do
276
- include ActiveModel::Validations
277
- attr_accessor :first_name, :last_name
278
- acts_as_context
279
- end
270
+ describe 'a basic organizer using an ActiveRecord model class as context' do
271
+ let!(:model_mock) do
272
+ require 'active_model'
273
+ build_class('ModelMock', active_record_base_mock) do
274
+ include ActiveModel::Validations
275
+ attr_accessor :first_name, :last_name
276
+ acts_as_context
280
277
  end
278
+ end
281
279
 
282
- context 'with each organized interactor using the model' do
283
- let!(:test_interactor_1) do
284
- build_interactor('TestInteractor1') do
285
- contextualize_with :model_mock
280
+ context 'with each organized interactor using the model' do
281
+ let!(:test_interactor_1) do
282
+ build_interactor('TestInteractor1') do
283
+ contextualize_with :model_mock
286
284
 
287
- def perform
288
- context.first_name = 'Test'
289
- end
285
+ def perform
286
+ context.first_name = 'Test'
290
287
  end
291
288
  end
289
+ end
292
290
 
293
- let!(:test_interactor_2) do
294
- build_interactor('TestInteractor2') do
295
- contextualize_with :model_mock
291
+ let!(:test_interactor_2) do
292
+ build_interactor('TestInteractor2') do
293
+ contextualize_with :model_mock
296
294
 
297
- def perform
298
- context.last_name = 'User'
299
- end
295
+ def perform
296
+ context.last_name = 'User'
300
297
  end
301
298
  end
299
+ end
302
300
 
303
- let(:interactor_class) do
304
- build_organizer do
305
- contextualize_with :model_mock
306
- organize :test_interactor_1, :test_interactor_2
307
- end
301
+ let(:interactor_class) do
302
+ build_organizer do
303
+ contextualize_with :model_mock
304
+ organize :test_interactor_1, :test_interactor_2
308
305
  end
306
+ end
309
307
 
310
- include_examples 'a class with interactor methods'
311
- include_examples 'a class with interactor callback methods'
312
- include_examples 'a class with interactor context methods'
313
- include_examples 'a class with organizer callback methods'
308
+ include_examples 'a class with interactor methods'
309
+ include_examples 'a class with interactor callback methods'
310
+ include_examples 'a class with interactor context methods'
311
+ include_examples 'a class with organizer callback methods'
314
312
 
315
- describe '.perform' do
316
- subject { interactor_class.perform }
313
+ describe '.perform' do
314
+ subject { interactor_class.perform }
317
315
 
318
- it { is_expected.to be_a model_mock }
319
- it { is_expected.to be_successful }
320
- it { is_expected.to have_attributes(first_name: 'Test', last_name: 'User') }
321
- end
316
+ it { is_expected.to be_a model_mock }
317
+ it { is_expected.to be_successful }
318
+ it { is_expected.to have_attributes(first_name: 'Test', last_name: 'User') }
322
319
  end
320
+ end
323
321
 
324
- context 'with each organized interactor using their default context' do
325
- let!(:test_interactor_1) do
326
- build_interactor('TestInteractor1') do
327
- def perform
328
- context.first_name = 'Test'
329
- end
322
+ context 'with each organized interactor using their default context' do
323
+ let!(:test_interactor_1) do
324
+ build_interactor('TestInteractor1') do
325
+ def perform
326
+ context.first_name = 'Test'
330
327
  end
331
328
  end
329
+ end
332
330
 
333
- let!(:test_interactor_2) do
334
- build_interactor('TestInteractor2') do
335
- def perform
336
- context.last_name = 'User'
337
- end
331
+ let!(:test_interactor_2) do
332
+ build_interactor('TestInteractor2') do
333
+ def perform
334
+ context.last_name = 'User'
338
335
  end
339
336
  end
337
+ end
340
338
 
341
- let(:interactor_class) do
342
- build_organizer do
343
- contextualize_with :model_mock
344
- organize :test_interactor_1, :test_interactor_2
345
- end
339
+ let(:interactor_class) do
340
+ build_organizer do
341
+ contextualize_with :model_mock
342
+ organize :test_interactor_1, :test_interactor_2
346
343
  end
344
+ end
347
345
 
348
- include_examples 'a class with interactor methods'
349
- include_examples 'a class with interactor callback methods'
350
- include_examples 'a class with interactor context methods'
351
- include_examples 'a class with organizer callback methods'
346
+ include_examples 'a class with interactor methods'
347
+ include_examples 'a class with interactor callback methods'
348
+ include_examples 'a class with interactor context methods'
349
+ include_examples 'a class with organizer callback methods'
352
350
 
353
- describe '.perform' do
354
- subject { interactor_class.perform }
351
+ describe '.perform' do
352
+ subject { interactor_class.perform }
355
353
 
356
- it { is_expected.to be_a model_mock }
357
- it { is_expected.to be_successful }
358
- it { is_expected.to have_attributes(first_name: 'Test', last_name: 'User') }
359
- end
354
+ it { is_expected.to be_a model_mock }
355
+ it { is_expected.to be_successful }
356
+ it { is_expected.to have_attributes(first_name: 'Test', last_name: 'User') }
360
357
  end
361
358
  end
362
359
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activeinteractor
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.beta.6
4
+ version: 1.0.0.beta.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Allen
@@ -122,8 +122,9 @@ files:
122
122
  - lib/active_interactor/organizer/interactor_interface.rb
123
123
  - lib/active_interactor/organizer/interactor_interface_collection.rb
124
124
  - lib/active_interactor/rails.rb
125
- - lib/active_interactor/rails/active_record.rb
126
125
  - lib/active_interactor/rails/config.rb
126
+ - lib/active_interactor/rails/models.rb
127
+ - lib/active_interactor/rails/orm/active_record.rb
127
128
  - lib/active_interactor/rails/railtie.rb
128
129
  - lib/active_interactor/version.rb
129
130
  - lib/rails/generators/active_interactor.rb
@@ -156,7 +157,6 @@ files:
156
157
  - spec/active_interactor/organizer/interactor_interface_collection_spec.rb
157
158
  - spec/active_interactor/organizer/interactor_interface_spec.rb
158
159
  - spec/active_interactor/organizer_spec.rb
159
- - spec/active_interactor/rails/active_record_spec.rb
160
160
  - spec/active_interactor/rails/config_spec.rb
161
161
  - spec/active_interactor/rails_spec.rb
162
162
  - spec/active_interactor_spec.rb
@@ -177,10 +177,10 @@ licenses:
177
177
  - MIT
178
178
  metadata:
179
179
  bug_tracker_uri: https://github.com/aaronmallen/activeinteractor/issues
180
- changelog_uri: https://github.com/aaronmallen/activeinteractor/blob/v1.0.0.beta.6/CHANGELOG.md
181
- documentation_uri: https://www.rubydoc.info/gems/activeinteractor/1.0.0.beta.6
180
+ changelog_uri: https://github.com/aaronmallen/activeinteractor/blob/v1.0.0.beta.7/CHANGELOG.md
181
+ documentation_uri: https://www.rubydoc.info/gems/activeinteractor/1.0.0.beta.7
182
182
  hompage_uri: https://github.com/aaronmallen/activeinteractor
183
- source_code_uri: https://github.com/aaronmallen/activeinteractor/tree/v1.0.0.beta.6
183
+ source_code_uri: https://github.com/aaronmallen/activeinteractor/tree/v1.0.0.beta.7
184
184
  wiki_uri: https://github.com/aaronmallen/activeinteractor/wiki
185
185
  post_install_message:
186
186
  rdoc_options: []
@@ -221,7 +221,6 @@ test_files:
221
221
  - spec/active_interactor/organizer_spec.rb
222
222
  - spec/active_interactor/organizer/interactor_interface_spec.rb
223
223
  - spec/active_interactor/organizer/interactor_interface_collection_spec.rb
224
- - spec/active_interactor/rails/active_record_spec.rb
225
224
  - spec/active_interactor/rails/config_spec.rb
226
225
  - spec/active_interactor/rails_spec.rb
227
226
  - spec/active_interactor/interactor/worker_spec.rb
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- begin
5
- require 'active_interactor/rails'
6
-
7
- RSpec.describe ActiveInteractor::Rails::ActiveRecord do
8
- describe '.include_helpers' do
9
- subject { described_class.include_helpers }
10
- let!(:active_record_mock) { build_class('ActiveRecordBaseMock') }
11
-
12
- it 'is expected to extend ClassMethods' do
13
- subject
14
- ActiveSupport.run_load_hooks(:active_record_base, active_record_mock)
15
- expect(active_record_mock).to respond_to :acts_as_context
16
- end
17
- end
18
- end
19
- rescue LoadError
20
- RSpec.describe 'ActiveInteractor::Rails::ActiveRecord' do
21
- pending 'Rails not found skipping specs...'
22
- end
23
- end