activeinteractor 0.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 +7 -0
- data/CHANGELOG.md +17 -0
- data/LICENSE +21 -0
- data/README.md +661 -0
- data/lib/active_interactor.rb +63 -0
- data/lib/active_interactor/base.rb +18 -0
- data/lib/active_interactor/configuration.rb +34 -0
- data/lib/active_interactor/context.rb +300 -0
- data/lib/active_interactor/interactor.rb +97 -0
- data/lib/active_interactor/interactor/callbacks.rb +273 -0
- data/lib/active_interactor/interactor/context.rb +59 -0
- data/lib/active_interactor/interactor/execution.rb +25 -0
- data/lib/active_interactor/interactor/worker.rb +89 -0
- data/lib/active_interactor/organizer.rb +47 -0
- data/lib/active_interactor/version.rb +7 -0
- data/lib/rails/generators/active_interactor.rb +35 -0
- data/lib/rails/generators/active_interactor/install_generator.rb +31 -0
- data/lib/rails/generators/interactor/interactor_generator.rb +13 -0
- data/lib/rails/generators/interactor/organizer_generator.rb +18 -0
- data/lib/rails/generators/interactor/rspec_generator.rb +15 -0
- data/lib/rails/generators/interactor/test_unit_generator.rb +15 -0
- data/lib/rails/generators/templates/application_interactor.erb +4 -0
- data/lib/rails/generators/templates/initializer.rb +8 -0
- data/lib/rails/generators/templates/interactor.erb +12 -0
- data/lib/rails/generators/templates/organizer.erb +10 -0
- data/lib/rails/generators/templates/rspec.erb +7 -0
- data/lib/rails/generators/templates/test_unit.erb +9 -0
- metadata +269 -0
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveInteractor
|
4
|
+
# The Base Interactor class inherited by all Interactor::Organizers
|
5
|
+
#
|
6
|
+
# @author Aaron Allen <hello@aaronmallen.me>
|
7
|
+
# @since 0.0.1
|
8
|
+
# @version 0.1
|
9
|
+
class Organizer < ActiveInteractor::Base
|
10
|
+
class << self
|
11
|
+
# Declare Interactors to be invoked as part of the
|
12
|
+
# organizer's invocation. These interactors are invoked in
|
13
|
+
# the order in which they are declared.
|
14
|
+
#
|
15
|
+
# @example
|
16
|
+
# class MyFirstOrganizer < ActiveInteractor::Organizer
|
17
|
+
# organize InteractorOne, InteractorTwo
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# class MySecondOrganizer < ActiveInteractor::Organizer
|
21
|
+
# organize [InteractorThree, InteractorFour]
|
22
|
+
# end
|
23
|
+
#
|
24
|
+
# @param interactors [Array<ActiveInteractor::Base>] the interactors to call
|
25
|
+
def organize(*interactors)
|
26
|
+
@organized = interactors.flatten
|
27
|
+
end
|
28
|
+
|
29
|
+
# An Array of declared Interactors to be invoked.
|
30
|
+
# @private
|
31
|
+
def organized
|
32
|
+
@organized ||= []
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Invoke the organized interactors. An organizer is
|
37
|
+
# expected not to define its own {ActiveInteractor::Interactor#perform #perform} method
|
38
|
+
# in favor of this default implementation.
|
39
|
+
def perform
|
40
|
+
self.class.organized.each do |interactor|
|
41
|
+
self.context = context.merge(
|
42
|
+
interactor.new(context).tap(&:skip_clean_context!).execute_perform!
|
43
|
+
)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators/base'
|
4
|
+
require 'rails/generators/named_base'
|
5
|
+
|
6
|
+
require 'active_interactor'
|
7
|
+
|
8
|
+
module ActiveInteractor
|
9
|
+
module Generators
|
10
|
+
module Generator
|
11
|
+
extend ActiveSupport::Concern
|
12
|
+
|
13
|
+
class_methods do
|
14
|
+
def self.base_root
|
15
|
+
__dir__
|
16
|
+
end
|
17
|
+
|
18
|
+
def source_root
|
19
|
+
File.expand_path('templates', __dir__)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class Base < ::Rails::Generators::Base
|
25
|
+
include Generator
|
26
|
+
end
|
27
|
+
|
28
|
+
class NamedBase < ::Rails::Generators::NamedBase
|
29
|
+
include Generator
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
Dir[File.expand_path('active_interactor/*.rb', __dir__)].each { |file| require file }
|
35
|
+
Dir[File.expand_path('interactor/*.rb', __dir__)].each { |file| require file }
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../active_interactor'
|
4
|
+
|
5
|
+
module ActiveInteractor
|
6
|
+
module Generators
|
7
|
+
class InstallGenerator < Base
|
8
|
+
def create_initializer
|
9
|
+
template 'initializer.rb', File.join('config', 'initializers', 'active_interactor.rb')
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_application_interactor
|
13
|
+
template 'application_interactor.erb', File.join('app', 'interactors', 'application_interactor.rb')
|
14
|
+
end
|
15
|
+
|
16
|
+
def create_interactor_concerns
|
17
|
+
create_file 'app/interactors/concerns/.keep'
|
18
|
+
end
|
19
|
+
|
20
|
+
def autoload_interactors
|
21
|
+
application do
|
22
|
+
<<~CONFIG
|
23
|
+
# autoload interactors
|
24
|
+
config.autoload_paths += %w[app/interactors]
|
25
|
+
|
26
|
+
CONFIG
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../active_interactor'
|
4
|
+
|
5
|
+
class InteractorGenerator < ActiveInteractor::Generators::NamedBase
|
6
|
+
desc 'Generate an interactor'
|
7
|
+
|
8
|
+
def create_interactor
|
9
|
+
template 'interactor.erb', File.join('app', 'interactors', class_path, "#{file_name}.rb")
|
10
|
+
end
|
11
|
+
|
12
|
+
hook_for :test_framework, in: :interactor
|
13
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../active_interactor'
|
4
|
+
|
5
|
+
module Interactor
|
6
|
+
module Generators
|
7
|
+
class OrganizerGenerator < ActiveInteractor::Generators::NamedBase
|
8
|
+
desc 'Generate an interactor organizer'
|
9
|
+
argument :interactors, type: :array, default: [], banner: 'name name'
|
10
|
+
|
11
|
+
def create_organizer
|
12
|
+
template 'organizer.erb', File.join('app', 'interactors', class_path, "#{file_name}.rb")
|
13
|
+
end
|
14
|
+
|
15
|
+
hook_for :test_framework, in: :interactor
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../active_interactor'
|
4
|
+
|
5
|
+
module Interactor
|
6
|
+
module Generators
|
7
|
+
class RspecGenerator < ActiveInteractor::Generators::NamedBase
|
8
|
+
desc 'Generate an interactor spec'
|
9
|
+
|
10
|
+
def create_spec
|
11
|
+
template 'rspec.erb', File.join('spec', 'interactors', class_path, "#{file_name}_spec.rb")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../active_interactor'
|
4
|
+
|
5
|
+
module Interactor
|
6
|
+
module Generators
|
7
|
+
class TestUnitGenerator < ActiveInteractor::Generators::NamedBase
|
8
|
+
desc 'Generate an interactor unit test'
|
9
|
+
|
10
|
+
def create_test
|
11
|
+
template 'test_unit.erb', File.join('test', 'interactors', class_path, "#{file_name}_test.rb")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
metadata
ADDED
@@ -0,0 +1,269 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: activeinteractor
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Aaron Allen
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-03-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activemodel
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.2'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '6.1'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '4.2'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '6.1'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: activesupport
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '4.2'
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '6.1'
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '4.2'
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '6.1'
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: bundler
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '1.17'
|
60
|
+
type: :development
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - "~>"
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '1.17'
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: github-markup
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - "~>"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '3.0'
|
74
|
+
type: :development
|
75
|
+
prerelease: false
|
76
|
+
version_requirements: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - "~>"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '3.0'
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: mdl
|
83
|
+
requirement: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - "~>"
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0.5'
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - "~>"
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0.5'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: rake
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - "~>"
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '10.0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - "~>"
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '10.0'
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
name: redcarpet
|
111
|
+
requirement: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - "~>"
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '3.4'
|
116
|
+
type: :development
|
117
|
+
prerelease: false
|
118
|
+
version_requirements: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - "~>"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '3.4'
|
123
|
+
- !ruby/object:Gem::Dependency
|
124
|
+
name: rspec
|
125
|
+
requirement: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - "~>"
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '3.0'
|
130
|
+
type: :development
|
131
|
+
prerelease: false
|
132
|
+
version_requirements: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - "~>"
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '3.0'
|
137
|
+
- !ruby/object:Gem::Dependency
|
138
|
+
name: rspec-collection_matchers
|
139
|
+
requirement: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
141
|
+
- - "~>"
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '1.1'
|
144
|
+
type: :development
|
145
|
+
prerelease: false
|
146
|
+
version_requirements: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - "~>"
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '1.1'
|
151
|
+
- !ruby/object:Gem::Dependency
|
152
|
+
name: rubocop
|
153
|
+
requirement: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - "~>"
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0.66'
|
158
|
+
type: :development
|
159
|
+
prerelease: false
|
160
|
+
version_requirements: !ruby/object:Gem::Requirement
|
161
|
+
requirements:
|
162
|
+
- - "~>"
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: '0.66'
|
165
|
+
- !ruby/object:Gem::Dependency
|
166
|
+
name: simplecov
|
167
|
+
requirement: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - "~>"
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '0.16'
|
172
|
+
type: :development
|
173
|
+
prerelease: false
|
174
|
+
version_requirements: !ruby/object:Gem::Requirement
|
175
|
+
requirements:
|
176
|
+
- - "~>"
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: '0.16'
|
179
|
+
- !ruby/object:Gem::Dependency
|
180
|
+
name: yard
|
181
|
+
requirement: !ruby/object:Gem::Requirement
|
182
|
+
requirements:
|
183
|
+
- - "~>"
|
184
|
+
- !ruby/object:Gem::Version
|
185
|
+
version: '0.9'
|
186
|
+
type: :development
|
187
|
+
prerelease: false
|
188
|
+
version_requirements: !ruby/object:Gem::Requirement
|
189
|
+
requirements:
|
190
|
+
- - "~>"
|
191
|
+
- !ruby/object:Gem::Version
|
192
|
+
version: '0.9'
|
193
|
+
- !ruby/object:Gem::Dependency
|
194
|
+
name: yard-activesupport-concern
|
195
|
+
requirement: !ruby/object:Gem::Requirement
|
196
|
+
requirements:
|
197
|
+
- - '='
|
198
|
+
- !ruby/object:Gem::Version
|
199
|
+
version: 0.0.1
|
200
|
+
type: :development
|
201
|
+
prerelease: false
|
202
|
+
version_requirements: !ruby/object:Gem::Requirement
|
203
|
+
requirements:
|
204
|
+
- - '='
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: 0.0.1
|
207
|
+
description: |
|
208
|
+
Ruby interactors with ActiveModel::Validations based on the interactors gem.
|
209
|
+
Rich support for attributes, callbacks, and validations, and thread safe performance methods.
|
210
|
+
email:
|
211
|
+
- hello@aaronmallen.me
|
212
|
+
executables: []
|
213
|
+
extensions: []
|
214
|
+
extra_rdoc_files: []
|
215
|
+
files:
|
216
|
+
- CHANGELOG.md
|
217
|
+
- LICENSE
|
218
|
+
- README.md
|
219
|
+
- lib/active_interactor.rb
|
220
|
+
- lib/active_interactor/base.rb
|
221
|
+
- lib/active_interactor/configuration.rb
|
222
|
+
- lib/active_interactor/context.rb
|
223
|
+
- lib/active_interactor/interactor.rb
|
224
|
+
- lib/active_interactor/interactor/callbacks.rb
|
225
|
+
- lib/active_interactor/interactor/context.rb
|
226
|
+
- lib/active_interactor/interactor/execution.rb
|
227
|
+
- lib/active_interactor/interactor/worker.rb
|
228
|
+
- lib/active_interactor/organizer.rb
|
229
|
+
- lib/active_interactor/version.rb
|
230
|
+
- lib/rails/generators/active_interactor.rb
|
231
|
+
- lib/rails/generators/active_interactor/install_generator.rb
|
232
|
+
- lib/rails/generators/interactor/interactor_generator.rb
|
233
|
+
- lib/rails/generators/interactor/organizer_generator.rb
|
234
|
+
- lib/rails/generators/interactor/rspec_generator.rb
|
235
|
+
- lib/rails/generators/interactor/test_unit_generator.rb
|
236
|
+
- lib/rails/generators/templates/application_interactor.erb
|
237
|
+
- lib/rails/generators/templates/initializer.rb
|
238
|
+
- lib/rails/generators/templates/interactor.erb
|
239
|
+
- lib/rails/generators/templates/organizer.erb
|
240
|
+
- lib/rails/generators/templates/rspec.erb
|
241
|
+
- lib/rails/generators/templates/test_unit.erb
|
242
|
+
homepage: https://github.com/aaronmallen/activeinteractor
|
243
|
+
licenses:
|
244
|
+
- MIT
|
245
|
+
metadata:
|
246
|
+
bug_tracker_uri: https://github.com/aaronmallen/activeinteractor/issues
|
247
|
+
hompage_uri: https://github.com/aaronmallen/activeinteractor
|
248
|
+
source_code_uri: https://github.com/aaronmallen/activeinteractor/tree/v0.1.0
|
249
|
+
changelog_uri: https://github.com/aaronmallen/activeinteractor/blob/v0.1.0/CHANGELOG.md
|
250
|
+
post_install_message:
|
251
|
+
rdoc_options: []
|
252
|
+
require_paths:
|
253
|
+
- lib
|
254
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
255
|
+
requirements:
|
256
|
+
- - ">="
|
257
|
+
- !ruby/object:Gem::Version
|
258
|
+
version: 2.5.0
|
259
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
260
|
+
requirements:
|
261
|
+
- - ">="
|
262
|
+
- !ruby/object:Gem::Version
|
263
|
+
version: '0'
|
264
|
+
requirements: []
|
265
|
+
rubygems_version: 3.0.3
|
266
|
+
signing_key:
|
267
|
+
specification_version: 4
|
268
|
+
summary: Ruby interactors with ActiveModel::Validations
|
269
|
+
test_files: []
|