activeinteractor 1.0.0.beta.1 → 1.0.0.beta.2
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 +32 -1
- data/README.md +5 -2
- data/lib/active_interactor.rb +3 -14
- data/lib/active_interactor/config.rb +65 -0
- data/lib/active_interactor/rails.rb +12 -0
- data/lib/active_interactor/rails/config.rb +34 -0
- data/lib/active_interactor/railtie.rb +10 -0
- data/lib/active_interactor/version.rb +1 -1
- data/lib/rails/generators/active_interactor.rb +38 -0
- data/lib/rails/generators/active_interactor/application_interactor_generator.rb +13 -5
- data/lib/rails/generators/active_interactor/install_generator.rb +4 -13
- data/lib/rails/generators/active_interactor/templates/initializer.erb +15 -1
- data/lib/rails/generators/interactor/context/rspec_generator.rb +8 -3
- data/lib/rails/generators/interactor/context/test_unit_generator.rb +8 -3
- data/lib/rails/generators/interactor/context_generator.rb +10 -4
- data/lib/rails/generators/interactor/interactor_generator.rb +13 -4
- data/lib/rails/generators/interactor/organizer_generator.rb +25 -5
- data/lib/rails/generators/interactor/rspec_generator.rb +9 -3
- data/lib/rails/generators/interactor/templates/context.erb +3 -0
- data/lib/rails/generators/interactor/templates/interactor.erb +3 -0
- data/lib/rails/generators/interactor/templates/organizer.erb +3 -0
- data/lib/rails/generators/interactor/test_unit_generator.rb +9 -3
- data/spec/active_interactor/config_spec.rb +22 -0
- data/spec/active_interactor/rails/config_spec.rb +11 -0
- data/spec/active_interactor_spec.rb +12 -9
- metadata +22 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1dcf3dc4d0f528400e6322827f343a2e4652fd71611061af586c0f984acc9e5e
|
4
|
+
data.tar.gz: b295be6c1061186c44094cc9aececec4be23719a3033dfd25a8dfb784a732e72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5910c5d2c343125cd715894d646975c356737d66a62390240d0189e241fe98766099a05231ea7d7b382aa8cfdaa2ab44a4b12c3d3a178355130991bf47ec5ebd
|
7
|
+
data.tar.gz: 8892204ed0d17a68b595bda665947fc89ad67a6e1cd5d29ed303c18312a5fb3719252bf14684254ea68c20500daae38afce46e102d48c2e8b2f0793bb6005729
|
data/CHANGELOG.md
CHANGED
@@ -7,6 +7,32 @@ and this project adheres to [Semantic Versioning].
|
|
7
7
|
|
8
8
|
## [Unreleased]
|
9
9
|
|
10
|
+
## [v1.0.0-beta.2] - 2020-01-07
|
11
|
+
|
12
|
+
### Added
|
13
|
+
|
14
|
+
- [#102] `ActiveInteractor::Config`
|
15
|
+
- [#102] `ActiveInteractor.config`
|
16
|
+
- [#103] `ActiveInteractor::Rails`
|
17
|
+
- [#103] `ActiveInteractor::Rails::Config`
|
18
|
+
- [#102] `ActiveInteractor::Railtie`
|
19
|
+
- [#105] interactor, organizer, and context generators now accept context_attributes
|
20
|
+
as arguments.
|
21
|
+
|
22
|
+
### Changed
|
23
|
+
|
24
|
+
- [#102] `ActiveInteractor.logger` is now part of `ActiveInteractor.config`
|
25
|
+
- [#104] Interactor generators will no longer generate separate context classes for
|
26
|
+
interactors if `ActiveInteractor.config.rails.generate_context_classes` is set to `false`
|
27
|
+
|
28
|
+
### Fixed
|
29
|
+
|
30
|
+
- [#103] various generator fixes
|
31
|
+
|
32
|
+
### Removed
|
33
|
+
|
34
|
+
- [#102] `ActiveInteractor.logger=` use `ActiveInteractor.config.logger=` instead
|
35
|
+
|
10
36
|
## [v1.0.0-beta.1] - 2020-01-06
|
11
37
|
|
12
38
|
### Added
|
@@ -108,7 +134,8 @@ and this project adheres to [Semantic Versioning].
|
|
108
134
|
|
109
135
|
<!-- versions -->
|
110
136
|
|
111
|
-
[Unreleased]: https://github.com/aaronmallen/activeinteractor/compare/v1.0.0-beta.
|
137
|
+
[Unreleased]: https://github.com/aaronmallen/activeinteractor/compare/v1.0.0-beta.2...HEAD
|
138
|
+
[v1.0.0-beta.2]: https://github.com/aaronmallen/activeinteractor/compare/v1.0.0-beta.1...v1.0.0-beta.2
|
112
139
|
[v1.0.0-beta.1]: https://github.com/aaronmallen/activeinteractor/compare/v0.1.7...v1.0.0-beta.1
|
113
140
|
[v0.1.7]: https://github.com/aaronmallen/activeinteractor/compare/v0.1.6...v0.1.7
|
114
141
|
[v0.1.6]: https://github.com/aaronmallen/activeinteractor/compare/v0.1.5...v0.1.6
|
@@ -134,3 +161,7 @@ and this project adheres to [Semantic Versioning].
|
|
134
161
|
[#48]: https://github.com/aaronmallen/activeinteractor/pull/48
|
135
162
|
[#51]: https://github.com/aaronmallen/activeinteractor/pull/51
|
136
163
|
[#61]: https://github.com/aaronmallen/activeinteractor/pull/61
|
164
|
+
[#102]: https://github.com/aaronmallen/activeinteractor/pull/102
|
165
|
+
[#103]: https://github.com/aaronmallen/activeinteractor/pull/103
|
166
|
+
[#104]: https://github.com/aaronmallen/activeinteractor/pull/104
|
167
|
+
[#105]: https://github.com/aaronmallen/activeinteractor/pull/105
|
data/README.md
CHANGED
@@ -768,11 +768,14 @@ If you're working with a rails project ActiveInteractor comes bundled with some
|
|
768
768
|
to help speed up development. You should first run the install generator with:
|
769
769
|
|
770
770
|
```bash
|
771
|
-
rails generate active_interactor:install
|
771
|
+
rails generate active_interactor:install [directory]
|
772
772
|
```
|
773
773
|
|
774
|
+
The `directory` option allows you to customize what directory interactors will live in within your
|
775
|
+
application (defaults to 'interactors').
|
776
|
+
|
774
777
|
This will create an initializer a some new classes `ApplicationInteractor`, `ApplicationOrganizer` and
|
775
|
-
`ApplicationContext` in the `app
|
778
|
+
`ApplicationContext` in the `app/<directory>` directory.
|
776
779
|
|
777
780
|
You can then automatically generate interactors, organizers, and contexts with:
|
778
781
|
|
data/lib/active_interactor.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
require 'active_support/dependencies/autoload'
|
4
4
|
|
5
5
|
require 'active_interactor/version'
|
6
|
+
require 'active_interactor/config'
|
6
7
|
|
7
8
|
# Copyright (c) 2019 Aaron Allen
|
8
9
|
#
|
@@ -33,18 +34,6 @@ module ActiveInteractor
|
|
33
34
|
eager_autoload do
|
34
35
|
autoload :Error
|
35
36
|
end
|
36
|
-
|
37
|
-
# The ActiveInteractor logger object
|
38
|
-
# @return [Logger] an instance of Logger
|
39
|
-
def self.logger
|
40
|
-
@logger ||= Logger.new(STDOUT)
|
41
|
-
end
|
42
|
-
|
43
|
-
# Set the ActiveInteractor logger object
|
44
|
-
# @example
|
45
|
-
# ActiveInteractor.logger = ::Rails.logger
|
46
|
-
# @return [Logger] an instance of Logger
|
47
|
-
def self.logger=(logger)
|
48
|
-
@logger = logger
|
49
|
-
end
|
50
37
|
end
|
38
|
+
|
39
|
+
require 'active_interactor/railtie' if defined?(::Rails)
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
module ActiveInteractor
|
6
|
+
# The ActiveInteractor configuration object
|
7
|
+
# @author Aaron Allen <hello@aaronmallen.me>
|
8
|
+
# @since 1.0.0
|
9
|
+
# @!attribute [rw] logger
|
10
|
+
# @return [Logger] an instance of Logger
|
11
|
+
class Config
|
12
|
+
# @return [Hash{Symbol=>*}] the default configuration options
|
13
|
+
DEFAULTS = {
|
14
|
+
logger: Logger.new(STDOUT)
|
15
|
+
}.freeze
|
16
|
+
|
17
|
+
attr_accessor :logger
|
18
|
+
|
19
|
+
# @param options [Hash] the options for the configuration
|
20
|
+
# @option options [Logger] :logger the configuration logger instance
|
21
|
+
# @return [Config] a new instance of {Config}
|
22
|
+
def initialize(options = {})
|
23
|
+
DEFAULTS.dup.merge(options).each do |key, value|
|
24
|
+
instance_variable_set("@#{key}", value)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# The rails configuration object
|
29
|
+
# @return [Rails::Config|nil] an instance of {Rails::Config} if `Rails` is
|
30
|
+
# defined or `nil`.
|
31
|
+
def rails
|
32
|
+
@rails ||= begin
|
33
|
+
return unless defined?(::Rails)
|
34
|
+
|
35
|
+
require 'active_interactor/rails/config'
|
36
|
+
Rails::Config.new
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# The ActiveInteractor configuration
|
42
|
+
# @since 0.0.1
|
43
|
+
# @return [ActiveInteractor::Config] the configuration instance
|
44
|
+
def self.config
|
45
|
+
@config ||= Config.new
|
46
|
+
end
|
47
|
+
|
48
|
+
# Configures the ActiveInteractor gem
|
49
|
+
# @since 0.0.1
|
50
|
+
# @example Configure ActiveInteractor
|
51
|
+
# ActiveInteractor.configure do |config|
|
52
|
+
# config.logger = Rails.logger
|
53
|
+
# end
|
54
|
+
# @yield [ActiveInteractor#config]
|
55
|
+
def self.configure
|
56
|
+
yield config
|
57
|
+
end
|
58
|
+
|
59
|
+
# The ActiveInteractor logger object
|
60
|
+
# @since 0.0.1
|
61
|
+
# @return [Logger] an instance of Logger
|
62
|
+
def self.logger
|
63
|
+
config.logger
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveInteractor
|
4
|
+
module Rails
|
5
|
+
# The ActiveInteractor rails configuration object
|
6
|
+
# @author Aaron Allen <hello@aaronmallen.me>
|
7
|
+
# @since 1.0.0
|
8
|
+
# @!attribute [rw] directory
|
9
|
+
# @return [String] the directory interactors are stored in
|
10
|
+
# @!attribute [rw] generate_context_classes
|
11
|
+
# @return [Boolean] whether or not to generate a seperate
|
12
|
+
# context class for an interactor.
|
13
|
+
class Config
|
14
|
+
# @return [Hash{Symbol=>*}] the default configuration options
|
15
|
+
DEFAULTS = {
|
16
|
+
directory: 'interactors',
|
17
|
+
generate_context_classes: true
|
18
|
+
}.freeze
|
19
|
+
|
20
|
+
attr_accessor :directory, :generate_context_classes
|
21
|
+
|
22
|
+
# @param options [Hash] the options for the configuration
|
23
|
+
# @option options [String] :directory (defaults to: 'interactors') the configuration directory property
|
24
|
+
# @option options [Boolean] :generate_context_classes (defaults to: `true`) the configuration
|
25
|
+
# generate_context_class property.
|
26
|
+
# @return [Config] a new instance of {Config}
|
27
|
+
def initialize(options = {})
|
28
|
+
DEFAULTS.dup.merge(options).each do |key, value|
|
29
|
+
instance_variable_set("@#{key}", value)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -1,4 +1,42 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'rails/generators/named_base'
|
4
|
+
require 'active_interactor'
|
5
|
+
|
6
|
+
module ActiveInteractor
|
7
|
+
module Generators
|
8
|
+
module Generator
|
9
|
+
private
|
10
|
+
|
11
|
+
def interactor_directory
|
12
|
+
@interactor_directory ||= ActiveInteractor.config.rails.directory
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
module GeneratesContext
|
17
|
+
def self.included(base)
|
18
|
+
base.class_eval do
|
19
|
+
argument :context_attributes, type: :array, default: [], banner: 'attribute attribute'
|
20
|
+
class_option :skip_context, type: :boolean, desc: 'Whether or not to generate a context class'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def skip_context?
|
27
|
+
options[:skip_context] == true || ActiveInteractor.config.rails.generate_context_classes == false
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class Base < ::Rails::Generators::Base
|
32
|
+
include Generator
|
33
|
+
end
|
34
|
+
|
35
|
+
class NamedBase < ::Rails::Generators::NamedBase
|
36
|
+
include Generator
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
3
41
|
Dir[File.expand_path('active_interactor/*.rb', __dir__)].sort.each { |file| require file }
|
4
42
|
Dir[File.expand_path('interactor/*.rb', __dir__)].sort.each { |file| require file }
|
@@ -1,22 +1,30 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative '../active_interactor'
|
4
4
|
|
5
5
|
module ActiveInteractor
|
6
6
|
module Generators
|
7
|
-
class ApplicationInteractorGenerator <
|
7
|
+
class ApplicationInteractorGenerator < Base
|
8
8
|
source_root File.expand_path('templates', __dir__)
|
9
9
|
|
10
10
|
def create_application_interactor
|
11
|
-
template 'application_interactor.rb',
|
11
|
+
template 'application_interactor.rb', File.join(target_path, 'application_interactor.rb')
|
12
12
|
end
|
13
13
|
|
14
14
|
def create_application_organizer
|
15
|
-
template 'application_organizer.rb',
|
15
|
+
template 'application_organizer.rb', File.join(target_path, 'application_organizer.rb')
|
16
16
|
end
|
17
17
|
|
18
18
|
def create_application_context
|
19
|
-
|
19
|
+
return if ActiveInteractor.config.rails.generate_context_classes == false
|
20
|
+
|
21
|
+
template 'application_context.rb', File.join(target_path, 'application_context.rb')
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def target_path
|
27
|
+
"app/#{interactor_directory}"
|
20
28
|
end
|
21
29
|
end
|
22
30
|
end
|
@@ -1,30 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative '../active_interactor'
|
4
4
|
|
5
5
|
module ActiveInteractor
|
6
6
|
module Generators
|
7
|
-
class InstallGenerator <
|
7
|
+
class InstallGenerator < Base
|
8
8
|
source_root File.expand_path('templates', __dir__)
|
9
9
|
desc 'Install ActiveInteractor'
|
10
|
+
argument :directory, type: :string, default: 'interactors', banner: 'directory'
|
10
11
|
|
11
12
|
def create_initializer
|
12
|
-
template 'initializer.erb',
|
13
|
+
template 'initializer.erb', File.join('config', 'initializers', 'active_interactor.rb')
|
13
14
|
end
|
14
15
|
|
15
16
|
def create_application_interactor_and_context
|
16
17
|
generate :'active_interactor:application_interactor'
|
17
18
|
end
|
18
|
-
|
19
|
-
def autoload_interactors
|
20
|
-
application do
|
21
|
-
<<-CONFIG
|
22
|
-
# autoload interactors
|
23
|
-
config.autoload_paths += %w[app/interactors]
|
24
|
-
|
25
|
-
CONFIG
|
26
|
-
end
|
27
|
-
end
|
28
19
|
end
|
29
20
|
end
|
30
21
|
end
|
@@ -2,4 +2,18 @@
|
|
2
2
|
|
3
3
|
require 'active_interactor'
|
4
4
|
|
5
|
-
ActiveInteractor.
|
5
|
+
ActiveInteractor.configure do |config|
|
6
|
+
# set ActiveInteractor.logger to Rails.logger
|
7
|
+
config.logger = ::Rails.logger
|
8
|
+
|
9
|
+
# set the default directory for interactors
|
10
|
+
<%- if directory != 'interactors' -%>
|
11
|
+
config.rails.directory = '<%= directory %>'
|
12
|
+
<%- else -%>
|
13
|
+
# config.rails.directory = 'interactors'
|
14
|
+
<%- end -%>
|
15
|
+
|
16
|
+
# do not automatically generate context classes
|
17
|
+
# when interactors are generated
|
18
|
+
# config.rails.generate_context_classes = false
|
19
|
+
end
|
@@ -1,18 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative '../../active_interactor'
|
4
4
|
|
5
5
|
module Interactor
|
6
6
|
module Context
|
7
7
|
module Generators
|
8
|
-
class RspecGenerator < ::
|
8
|
+
class RspecGenerator < ActiveInteractor::Generators::NamedBase
|
9
9
|
source_root File.expand_path('templates', __dir__)
|
10
10
|
desc 'Generate an interactor spec'
|
11
11
|
|
12
12
|
def create_spec
|
13
|
-
file_path = Rails.root.join('spec/interactors', File.join(class_path), "#{file_name}_context_spec.rb")
|
14
13
|
template 'rspec.erb', file_path
|
15
14
|
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def file_path
|
19
|
+
File.join('spec', interactor_directory, File.join(class_path), "#{file_name}_context_spec.rb")
|
20
|
+
end
|
16
21
|
end
|
17
22
|
end
|
18
23
|
end
|
@@ -1,18 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative '../../active_interactor'
|
4
4
|
|
5
5
|
module Interactor
|
6
6
|
module Context
|
7
7
|
module Generators
|
8
|
-
class TestUnitGenerator < ::
|
8
|
+
class TestUnitGenerator < ActiveInteractor::Generators::NamedBase
|
9
9
|
source_root File.expand_path('templates', __dir__)
|
10
10
|
desc 'Generate an interactor unit test'
|
11
11
|
|
12
12
|
def create_test
|
13
|
-
file_path = Rails.root.join('test/interactors', File.join(class_path), "#{file_name}_context_test.rb")
|
14
13
|
template 'test_unit.erb', file_path
|
15
14
|
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def file_path
|
19
|
+
File.join('test', interactor_directory, File.join(class_path), "#{file_name}_context_test.rb")
|
20
|
+
end
|
16
21
|
end
|
17
22
|
end
|
18
23
|
end
|
@@ -1,19 +1,25 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative '../active_interactor'
|
4
4
|
|
5
5
|
module Interactor
|
6
6
|
module Generators
|
7
|
-
class ContextGenerator < ::
|
7
|
+
class ContextGenerator < ActiveInteractor::Generators::NamedBase
|
8
|
+
include ActiveInteractor::Generators::GeneratesContext
|
8
9
|
source_root File.expand_path('templates', __dir__)
|
9
10
|
desc 'Generate an interactor context'
|
10
|
-
argument :interactors, type: :array, default: [], banner: 'name name'
|
11
11
|
|
12
12
|
def create_context
|
13
|
-
template 'context.erb',
|
13
|
+
template 'context.erb', file_path
|
14
14
|
end
|
15
15
|
|
16
16
|
hook_for :test_framework, in: :'interactor:context'
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def file_path
|
21
|
+
File.join('app', interactor_directory, File.join(class_path), "#{file_name}_context.rb")
|
22
|
+
end
|
17
23
|
end
|
18
24
|
end
|
19
25
|
end
|
@@ -1,18 +1,27 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative '../active_interactor'
|
4
4
|
|
5
|
-
class InteractorGenerator < ::
|
5
|
+
class InteractorGenerator < ActiveInteractor::Generators::NamedBase
|
6
|
+
include ActiveInteractor::Generators::GeneratesContext
|
6
7
|
source_root File.expand_path('templates', __dir__)
|
7
8
|
desc 'Generate an interactor'
|
8
9
|
|
9
10
|
def create_interactor
|
10
|
-
template 'interactor.erb',
|
11
|
+
template 'interactor.erb', file_path
|
11
12
|
end
|
12
13
|
|
13
14
|
def create_context
|
14
|
-
|
15
|
+
return if skip_context?
|
16
|
+
|
17
|
+
generate :'interactor:context', class_name, *context_attributes
|
15
18
|
end
|
16
19
|
|
17
20
|
hook_for :test_framework, in: :interactor
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def file_path
|
25
|
+
File.join('app', interactor_directory, File.join(class_path), "#{file_name}.rb")
|
26
|
+
end
|
18
27
|
end
|
@@ -1,23 +1,43 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative '../active_interactor'
|
4
4
|
|
5
5
|
module Interactor
|
6
6
|
module Generators
|
7
|
-
class OrganizerGenerator < ::
|
7
|
+
class OrganizerGenerator < ActiveInteractor::Generators::NamedBase
|
8
8
|
source_root File.expand_path('templates', __dir__)
|
9
9
|
desc 'Generate an interactor organizer'
|
10
|
-
argument :interactors, type: :array, default: [], banner: '
|
10
|
+
argument :interactors, type: :array, default: [], banner: 'interactor interactor'
|
11
|
+
|
12
|
+
class_option :context_attributes, type: :array, default: [], banner: 'attribute attribute',
|
13
|
+
desc: 'Attributes for the context'
|
14
|
+
class_option :skip_context, type: :boolean, desc: 'Whether or not to generate a context class'
|
11
15
|
|
12
16
|
def create_organizer
|
13
|
-
template 'organizer.erb',
|
17
|
+
template 'organizer.erb', file_path
|
14
18
|
end
|
15
19
|
|
16
20
|
def create_context
|
17
|
-
|
21
|
+
return if skip_context?
|
22
|
+
|
23
|
+
generate :'interactor:context', class_name, *context_attributes
|
18
24
|
end
|
19
25
|
|
20
26
|
hook_for :test_framework, in: :interactor
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def context_attributes
|
31
|
+
options[:context_attributes]
|
32
|
+
end
|
33
|
+
|
34
|
+
def file_path
|
35
|
+
File.join('app', interactor_directory, File.join(class_path), "#{file_name}.rb")
|
36
|
+
end
|
37
|
+
|
38
|
+
def skip_context?
|
39
|
+
options[:skip_context] == true || ActiveInteractor.config.rails.generate_context_classes == false
|
40
|
+
end
|
21
41
|
end
|
22
42
|
end
|
23
43
|
end
|
@@ -1,15 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative '../active_interactor'
|
4
4
|
|
5
5
|
module Interactor
|
6
6
|
module Generators
|
7
|
-
class RspecGenerator < ::
|
7
|
+
class RspecGenerator < ActiveInteractor::Generators::NamedBase
|
8
8
|
source_root File.expand_path('templates', __dir__)
|
9
9
|
desc 'Generate an interactor spec'
|
10
10
|
|
11
11
|
def create_spec
|
12
|
-
template 'rspec.erb',
|
12
|
+
template 'rspec.erb', file_path
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def file_path
|
18
|
+
File.join('spec', interactor_directory, File.join(class_path), "#{file_name}_spec.rb")
|
13
19
|
end
|
14
20
|
end
|
15
21
|
end
|
@@ -1,7 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class <%= class_name %> < ApplicationInteractor
|
4
|
+
<%- if skip_context? && !context_attributes.empty? -%>
|
5
|
+
context_attributes <%= context_attributes.map { |a| ":#{a}" }.join(', ') %>
|
4
6
|
|
7
|
+
<%- end -%>
|
5
8
|
def perform
|
6
9
|
# TODO implement <%= class_name %> call
|
7
10
|
end
|
@@ -1,7 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class <%= class_name %> < ApplicationOrganizer
|
4
|
+
<%- if skip_context? && !context_attributes.empty? -%>
|
5
|
+
context_attributes <%= context_attributes.map { |a| ":#{a}" }.join(', ') %>
|
4
6
|
|
7
|
+
<%- end -%>
|
5
8
|
<%- if interactors.any? -%>
|
6
9
|
organize <%= interactors.map(&:classify).join(", ") %>
|
7
10
|
<%- else -%>
|
@@ -1,15 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative '../active_interactor'
|
4
4
|
|
5
5
|
module Interactor
|
6
6
|
module Generators
|
7
|
-
class TestUnitGenerator < ::
|
7
|
+
class TestUnitGenerator < ActiveInteractor::Generators::NamedBase
|
8
8
|
source_root File.expand_path('templates', __dir__)
|
9
9
|
desc 'Generate an interactor unit test'
|
10
10
|
|
11
11
|
def create_test
|
12
|
-
template 'test_unit.erb',
|
12
|
+
template 'test_unit.erb', file_path
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def file_path
|
18
|
+
File.join('test', interactor_directory, File.join(class_path), "#{file_name}_test.rb")
|
13
19
|
end
|
14
20
|
end
|
15
21
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe ActiveInteractor::Config do
|
6
|
+
subject { described_class.new }
|
7
|
+
it { is_expected.to respond_to :logger }
|
8
|
+
|
9
|
+
describe '.rails' do
|
10
|
+
subject { described_class.new.rails }
|
11
|
+
|
12
|
+
context 'with ::Rails not defined' do
|
13
|
+
it { is_expected.to be_nil }
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'with ::Rails defined' do
|
17
|
+
before { stub_const('::Rails', 'Rails') }
|
18
|
+
|
19
|
+
it { is_expected.not_to be_nil }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'active_interactor/rails'
|
5
|
+
|
6
|
+
RSpec.describe ActiveInteractor::Rails::Config do
|
7
|
+
subject { described_class.new }
|
8
|
+
|
9
|
+
it { is_expected.to respond_to :directory }
|
10
|
+
it { is_expected.to respond_to :generate_context_classes }
|
11
|
+
end
|
@@ -9,18 +9,21 @@ RSpec.describe ActiveInteractor do
|
|
9
9
|
it { is_expected.to be_a String }
|
10
10
|
end
|
11
11
|
|
12
|
-
describe '.
|
13
|
-
subject { described_class.
|
12
|
+
describe '.config' do
|
13
|
+
subject { described_class.config }
|
14
14
|
|
15
|
-
it { is_expected.to be_a
|
15
|
+
it { is_expected.to be_a ActiveInteractor::Config }
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '.configure' do
|
19
|
+
it 'is expected to yield config' do
|
20
|
+
expect { |b| described_class.configure(&b) }.to yield_control
|
21
|
+
end
|
16
22
|
end
|
17
23
|
|
18
|
-
describe '.logger
|
19
|
-
subject { described_class.logger
|
20
|
-
let!(:original_logger) { described_class.logger }
|
21
|
-
let(:logger) { double(:logger) }
|
22
|
-
after { described_class.logger = original_logger }
|
24
|
+
describe '.logger' do
|
25
|
+
subject { described_class.logger }
|
23
26
|
|
24
|
-
it {
|
27
|
+
it { is_expected.to be_a Logger }
|
25
28
|
end
|
26
29
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activeinteractor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.beta.
|
4
|
+
version: 1.0.0.beta.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Allen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-01-
|
11
|
+
date: 2020-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -106,6 +106,7 @@ files:
|
|
106
106
|
- README.md
|
107
107
|
- lib/active_interactor.rb
|
108
108
|
- lib/active_interactor/base.rb
|
109
|
+
- lib/active_interactor/config.rb
|
109
110
|
- lib/active_interactor/context.rb
|
110
111
|
- lib/active_interactor/context/attributes.rb
|
111
112
|
- lib/active_interactor/context/base.rb
|
@@ -116,6 +117,9 @@ files:
|
|
116
117
|
- lib/active_interactor/interactor/context.rb
|
117
118
|
- lib/active_interactor/interactor/worker.rb
|
118
119
|
- lib/active_interactor/organizer.rb
|
120
|
+
- lib/active_interactor/rails.rb
|
121
|
+
- lib/active_interactor/rails/config.rb
|
122
|
+
- lib/active_interactor/railtie.rb
|
119
123
|
- lib/active_interactor/version.rb
|
120
124
|
- lib/rails/generators/active_interactor.rb
|
121
125
|
- lib/rails/generators/active_interactor/application_interactor_generator.rb
|
@@ -139,10 +143,12 @@ files:
|
|
139
143
|
- lib/rails/generators/interactor/templates/test_unit.erb
|
140
144
|
- lib/rails/generators/interactor/test_unit_generator.rb
|
141
145
|
- spec/active_interactor/base_spec.rb
|
146
|
+
- spec/active_interactor/config_spec.rb
|
142
147
|
- spec/active_interactor/context/base_spec.rb
|
143
148
|
- spec/active_interactor/error_spec.rb
|
144
149
|
- spec/active_interactor/interactor/worker_spec.rb
|
145
150
|
- spec/active_interactor/organizer_spec.rb
|
151
|
+
- spec/active_interactor/rails/config_spec.rb
|
146
152
|
- spec/active_interactor_spec.rb
|
147
153
|
- spec/integration/basic_callback_integration_spec.rb
|
148
154
|
- spec/integration/basic_context_integration_spec.rb
|
@@ -160,10 +166,10 @@ licenses:
|
|
160
166
|
- MIT
|
161
167
|
metadata:
|
162
168
|
bug_tracker_uri: https://github.com/aaronmallen/activeinteractor/issues
|
163
|
-
changelog_uri: https://github.com/aaronmallen/activeinteractor/blob/v1.0.0.beta.
|
164
|
-
documentation_uri: https://www.rubydoc.info/gems/activeinteractor/1.0.0.beta.
|
169
|
+
changelog_uri: https://github.com/aaronmallen/activeinteractor/blob/v1.0.0.beta.2/CHANGELOG.md
|
170
|
+
documentation_uri: https://www.rubydoc.info/gems/activeinteractor/1.0.0.beta.2
|
165
171
|
hompage_uri: https://github.com/aaronmallen/activeinteractor
|
166
|
-
source_code_uri: https://github.com/aaronmallen/activeinteractor/tree/v1.0.0.beta.
|
172
|
+
source_code_uri: https://github.com/aaronmallen/activeinteractor/tree/v1.0.0.beta.2
|
167
173
|
wiki_uri: https://github.com/aaronmallen/activeinteractor/wiki
|
168
174
|
post_install_message:
|
169
175
|
rdoc_options: []
|
@@ -185,20 +191,22 @@ signing_key:
|
|
185
191
|
specification_version: 4
|
186
192
|
summary: Ruby interactors with ActiveModel::Validations
|
187
193
|
test_files:
|
188
|
-
- spec/active_interactor_spec.rb
|
189
194
|
- spec/spec_helper.rb
|
190
|
-
- spec/
|
195
|
+
- spec/active_interactor_spec.rb
|
191
196
|
- spec/integration/basic_context_integration_spec.rb
|
197
|
+
- spec/integration/basic_validations_integration_spec.rb
|
192
198
|
- spec/integration/basic_integration_spec.rb
|
193
199
|
- spec/integration/basic_callback_integration_spec.rb
|
194
|
-
- spec/active_interactor/error_spec.rb
|
195
|
-
- spec/active_interactor/base_spec.rb
|
196
|
-
- spec/active_interactor/context/base_spec.rb
|
197
|
-
- spec/active_interactor/interactor/worker_spec.rb
|
198
|
-
- spec/active_interactor/organizer_spec.rb
|
199
|
-
- spec/support/spec_helpers.rb
|
200
200
|
- spec/support/helpers/factories.rb
|
201
|
+
- spec/support/spec_helpers.rb
|
201
202
|
- spec/support/shared_examples/a_class_with_interactor_methods_example.rb
|
203
|
+
- spec/support/shared_examples/a_class_with_interactor_context_methods_example.rb
|
202
204
|
- spec/support/shared_examples/a_class_with_organizer_callback_methods_example.rb
|
203
205
|
- spec/support/shared_examples/a_class_with_interactor_callback_methods_example.rb
|
204
|
-
- spec/
|
206
|
+
- spec/active_interactor/error_spec.rb
|
207
|
+
- spec/active_interactor/config_spec.rb
|
208
|
+
- spec/active_interactor/context/base_spec.rb
|
209
|
+
- spec/active_interactor/organizer_spec.rb
|
210
|
+
- spec/active_interactor/interactor/worker_spec.rb
|
211
|
+
- spec/active_interactor/base_spec.rb
|
212
|
+
- spec/active_interactor/rails/config_spec.rb
|