activeinteractor 1.2.2 → 2.0.0.alpha.1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1 -1
  3. data/LICENSE +1 -1
  4. data/README.md +4 -64
  5. data/lib/active_interactor/base.rb +77 -29
  6. data/lib/active_interactor/errors.rb +12 -0
  7. data/lib/active_interactor/result.rb +73 -0
  8. data/lib/active_interactor.rb +3 -101
  9. data/sig/active_interactor.rbs +3 -0
  10. metadata +23 -86
  11. data/.yardopts +0 -12
  12. data/lib/active_interactor/config.rb +0 -60
  13. data/lib/active_interactor/configurable.rb +0 -53
  14. data/lib/active_interactor/context/attributes.rb +0 -179
  15. data/lib/active_interactor/context/base.rb +0 -333
  16. data/lib/active_interactor/context/errors.rb +0 -57
  17. data/lib/active_interactor/context/loader.rb +0 -50
  18. data/lib/active_interactor/context/status.rb +0 -106
  19. data/lib/active_interactor/error.rb +0 -46
  20. data/lib/active_interactor/interactor/callbacks.rb +0 -293
  21. data/lib/active_interactor/interactor/context.rb +0 -378
  22. data/lib/active_interactor/interactor/perform.rb +0 -260
  23. data/lib/active_interactor/interactor/worker.rb +0 -120
  24. data/lib/active_interactor/models.rb +0 -50
  25. data/lib/active_interactor/organizer/base.rb +0 -18
  26. data/lib/active_interactor/organizer/callbacks.rb +0 -275
  27. data/lib/active_interactor/organizer/interactor_interface.rb +0 -127
  28. data/lib/active_interactor/organizer/interactor_interface_collection.rb +0 -62
  29. data/lib/active_interactor/organizer/organize.rb +0 -67
  30. data/lib/active_interactor/organizer/perform.rb +0 -112
  31. data/lib/active_interactor/rails/orm/active_record.rb +0 -5
  32. data/lib/active_interactor/rails/orm/dynamoid.rb +0 -5
  33. data/lib/active_interactor/rails/orm/mongoid.rb +0 -5
  34. data/lib/active_interactor/rails/railtie.rb +0 -21
  35. data/lib/active_interactor/rails.rb +0 -4
  36. data/lib/active_interactor/version.rb +0 -45
  37. data/lib/rails/generators/active_interactor/application_context_generator.rb +0 -21
  38. data/lib/rails/generators/active_interactor/application_interactor_generator.rb +0 -21
  39. data/lib/rails/generators/active_interactor/application_organizer_generator.rb +0 -21
  40. data/lib/rails/generators/active_interactor/base.rb +0 -29
  41. data/lib/rails/generators/active_interactor/generator.rb +0 -21
  42. data/lib/rails/generators/active_interactor/install_generator.rb +0 -16
  43. data/lib/rails/generators/active_interactor.rb +0 -5
  44. data/lib/rails/generators/interactor/context/rspec_generator.rb +0 -17
  45. data/lib/rails/generators/interactor/context/test_unit_generator.rb +0 -17
  46. data/lib/rails/generators/interactor/context_generator.rb +0 -22
  47. data/lib/rails/generators/interactor/generates_context.rb +0 -28
  48. data/lib/rails/generators/interactor/interactor_generator.rb +0 -25
  49. data/lib/rails/generators/interactor/organizer_generator.rb +0 -39
  50. data/lib/rails/generators/interactor/rspec_generator.rb +0 -15
  51. data/lib/rails/generators/interactor/test_unit_generator.rb +0 -15
  52. data/lib/rails/generators/templates/active_interactor.erb +0 -17
  53. data/lib/rails/generators/templates/application_context.rb +0 -4
  54. data/lib/rails/generators/templates/application_interactor.rb +0 -4
  55. data/lib/rails/generators/templates/application_organizer.rb +0 -4
  56. data/lib/rails/generators/templates/context.erb +0 -7
  57. data/lib/rails/generators/templates/context_spec.erb +0 -7
  58. data/lib/rails/generators/templates/context_test_unit.erb +0 -9
  59. data/lib/rails/generators/templates/interactor.erb +0 -15
  60. data/lib/rails/generators/templates/interactor_spec.erb +0 -7
  61. data/lib/rails/generators/templates/interactor_test_unit.erb +0 -9
  62. data/lib/rails/generators/templates/organizer.erb +0 -13
@@ -1,67 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActiveInteractor
4
- module Organizer
5
- # Organizer organize methods. Because {Organize} is a module classes should include {Organize} rather than inherit
6
- # from it.
7
- #
8
- # @author Aaron Allen <hello@aaronmallen.me>
9
- # @since 1.0.0
10
- module Organize
11
- # Organizer organize class methods. Because {ClassMethods} is a module classes should extend {ClassMethods}
12
- # rather than inherit from it.
13
- #
14
- # @author Aaron Allen <hello@aaronmallen.me>
15
- # @since 1.0.0
16
- module ClassMethods
17
- # {#organized Organize} {ActiveInteractor::Base interactors} to be called by the {Base organizer}.
18
- # A block will be evaluated on the {#organized InteractorInterfaceCollection} if a block is given.
19
- #
20
- # @since 0.1.0
21
- #
22
- # @example Basic organization of {ActiveInteractor::Base interactors}
23
- # class MyInteractor1 < ActiveInteractor::Base; end
24
- # class MyInteractor2 < ActiveInteractor::Base; end
25
- # class MyOrganizer < ActiveInteractor::Organizer::Base
26
- # organize :my_interactor_1, :my_interactor_2
27
- # end
28
- #
29
- # @example Conditional organization of {ActiveInteractor::Base interactors}
30
- # class MyInteractor1 < ActiveInteractor::Base; end
31
- # class MyInteractor2 < ActiveInteractor::Base; end
32
- # class MyOrganizer < ActiveInteractor::Organizer::Base
33
- # organize do
34
- # add :my_interactor_1
35
- # add :my_interactor_2, if: -> { context.valid? }
36
- # end
37
- # end
38
- #
39
- # @example organization of {ActiveInteractor::Base interactors} with {Interactor::Perform::Options options}
40
- # class MyInteractor1 < ActiveInteractor::Base; end
41
- # class MyInteractor2 < ActiveInteractor::Base; end
42
- # class MyOrganizer < ActiveInteractor::Organizer::Base
43
- # organize do
44
- # add :my_interactor_1, validate: false
45
- # add :my_interactor_2, skip_perform_callbacks: true
46
- # end
47
- # end
48
- #
49
- # @param interactors [Array<Const, Symbol, String>, nil] the {ActiveInteractor::Base} interactor classes to be
50
- # {#organized organized}
51
- # @return [InteractorInterfaceCollection] the {#organized} {ActiveInteractor::Base interactors}
52
- def organize(*interactors, &block)
53
- organized.concat(interactors) if interactors
54
- organized.instance_eval(&block) if block
55
- organized
56
- end
57
-
58
- # An organized collection of {ActiveInteractor::Base interactors}
59
- #
60
- # @return [InteractorInterfaceCollection] an instance of {InteractorInterfaceCollection}
61
- def organized
62
- @organized ||= ActiveInteractor::Organizer::InteractorInterfaceCollection.new
63
- end
64
- end
65
- end
66
- end
67
- end
@@ -1,112 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActiveInteractor
4
- module Organizer
5
- # Organizer perform methods. Because {Perform} is a module classes should include {Perform} rather than inherit
6
- # from it.
7
- #
8
- # @author Aaron Allen <hello@aaronmallen.me>
9
- # @since 1.0.0
10
- module Perform
11
- # Organizer perform class methods. Because {ClassMethods} is a module classes should extend {ClassMethods}
12
- # rather than inherit from it.
13
- #
14
- # @author Aaron Allen <hello@aaronmallen.me>
15
- # @since 1.0.0
16
- #
17
- # @!attribute [r] parallel
18
- # If `true` the {Base organizer} will call {Interactor::Perform#perform #perform} on its
19
- # {Organizer::Organize::ClassMethods#organize .organized} {ActiveInteractor::Base interactors} in parallel.
20
- # An {Base organizer} will have {.parallel} `false` by default.
21
- #
22
- # @!scope class
23
- # @since 1.0.0
24
- #
25
- # @return [Boolean] whether or not to call {Interactor::Perform#perform #perform} on its
26
- # {Organizer::Organize::ClassMethods#organize .organized} {ActiveInteractor::Base interactors} in parallel.
27
- module ClassMethods
28
- # Set {.parallel} to `true`
29
- #
30
- # @example a basic {Base organizer} set to perform in parallel
31
- # class MyOrganizer < ActiveInteractor::Organizer::Base
32
- # perform_in_parallel
33
- # end
34
- def perform_in_parallel
35
- self.parallel = true
36
- end
37
- end
38
-
39
- def self.included(base)
40
- base.class_eval do
41
- class_attribute :parallel, instance_writer: false, default: false
42
- end
43
- end
44
-
45
- # Call the {Organize::ClassMethods#organized .organized} {ActiveInteractor::Base interactors}
46
- # {Interactor::Perform#perform #perform}. An {Base organizer} is expected not to define its own
47
- # {Interactor::Perform#perform #perform} method in favor of this default implementation.
48
- def perform
49
- run_callbacks :all_perform do
50
- if self.class.parallel
51
- perform_in_parallel
52
- else
53
- perform_in_order
54
- end
55
- end
56
- end
57
-
58
- def run_deferred_after_perform_callbacks_on_children
59
- self.class.organized.each do |interface|
60
- next unless interface.interactor_class.after_callbacks_deferred_when_organized
61
-
62
- context.merge!(interface.execute_deferred_after_perform_callbacks(context))
63
- end
64
- end
65
-
66
- private
67
-
68
- def execute_interactor(interface, fail_on_error = false, perform_options = {})
69
- interface.perform(self, context, fail_on_error, perform_options)
70
- end
71
-
72
- def execute_interactor_with_callbacks(interface, fail_on_error = false, perform_options = {})
73
- args = [interface, fail_on_error, perform_options]
74
- return execute_interactor(*args) if options.skip_each_perform_callbacks
75
-
76
- run_callbacks :each_perform do
77
- execute_interactor(*args)
78
- end
79
- end
80
-
81
- def merge_contexts(contexts)
82
- contexts.each { |context| @context.merge!(context) }
83
- context_fail! if contexts.any?(&:failure?)
84
- end
85
-
86
- def execute_and_merge_contexts(interface)
87
- interface.execute_inplace_callback(self, :before)
88
- result = execute_interactor_with_callbacks(interface, true)
89
- return if result.nil?
90
-
91
- context.merge!(result)
92
- context_fail! if result.failure?
93
- interface.execute_inplace_callback(self, :after)
94
- end
95
-
96
- def perform_in_order
97
- self.class.organized.each do |interface|
98
- execute_and_merge_contexts(interface)
99
- end
100
- rescue ActiveInteractor::Error::ContextFailure => e
101
- context.merge!(e.context)
102
- end
103
-
104
- def perform_in_parallel
105
- results = self.class.organized.map do |interface|
106
- Thread.new { execute_interactor_with_callbacks(interface, false, skip_rollback: true) }
107
- end
108
- merge_contexts(results.map(&:value))
109
- end
110
- end
111
- end
112
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- ActiveSupport.on_load(:active_record) do
4
- extend ActiveInteractor::Models
5
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'dynamoid/document'
4
-
5
- Dynamoid::Document::ClassMethods.include ActiveInteractor::Models
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- ActiveSupport.on_load(:mongoid) do
4
- Mongoid::Document::ClassMethods.include ActiveInteractor::Models
5
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails'
4
-
5
- module ActiveInteractor
6
- # Rails classes and modules.
7
- #
8
- # @author Aaron Allen <hello@aaronmallen.me>
9
- # @since 1.0.0
10
- module Rails
11
- # The ActiveInteractor Railtie
12
- #
13
- # @author Aaron Allen <hello@aaronmallen.me>
14
- # @since 1.0.0
15
- #
16
- # @see https://api.rubyonrails.org/classes/Rails/Railtie.html
17
- class Railtie < ::Rails::Railtie
18
- config.eager_load_namespaces << ActiveInteractor
19
- end
20
- end
21
- end
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'active_interactor'
4
- require 'active_interactor/rails/railtie'
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActiveInteractor
4
- # The ActiveInteractor version info
5
- #
6
- # @author Aaron Allen <hello@aaronmallen.me>
7
- # @since unreleased
8
- module Version
9
- # The ActiveInterctor major version number
10
- # @return [Integer] The ActiveInteractor major version number
11
- MAJOR = 1
12
-
13
- # The ActiveInterctor minor version number
14
- # @return [Integer] The ActiveInteractor minor version number
15
- MINOR = 2
16
-
17
- # The ActiveInterctor patch version number
18
- # @return [Integer] The ActiveInteractor patch version number
19
- PATCH = 2
20
-
21
- # The ActiveInterctor pre-release version
22
- # @return [String | nil] The ActiveInteractor pre-release version
23
- PRE = nil
24
-
25
- # The ActiveInterctor meta version
26
- # @return [String | nil] The ActiveInteractor meta version
27
- META = nil
28
-
29
- # The ActiveInterctor rubygems version
30
- # @return [String] The ActiveInteractor rubygems version
31
- def self.gem_version
32
- pre_meta = PRE.nil? ? nil : [PRE, META].compact.join('.').freeze
33
- [MAJOR, MINOR, PATCH, pre_meta].compact.join('.').freeze
34
- end
35
-
36
- # The ActiveInterctor semver version
37
- # @return [String] The ActiveInteractor semver version
38
- def self.semver
39
- version = [MAJOR, MINOR, PATCH].join('.')
40
- version = "#{version}-#{PRE}" if PRE
41
- version = "#{version}+#{META}" if META
42
- version.freeze
43
- end
44
- end
45
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails/generators/active_interactor/base'
4
-
5
- module ActiveInteractor
6
- module Generators
7
- class ApplicationContextGenerator < Base
8
- def create_application_organizer
9
- return if File.exist?(file_path)
10
-
11
- template 'application_context.rb', file_path
12
- end
13
-
14
- private
15
-
16
- def file_path
17
- "app/#{active_interactor_directory}/application_context.rb"
18
- end
19
- end
20
- end
21
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails/generators/active_interactor/base'
4
-
5
- module ActiveInteractor
6
- module Generators
7
- class ApplicationInteractorGenerator < Base
8
- def create_application_interactor
9
- return if File.exist?(file_path)
10
-
11
- template 'application_interactor.rb', file_path
12
- end
13
-
14
- private
15
-
16
- def file_path
17
- "app/#{active_interactor_directory}/application_interactor.rb"
18
- end
19
- end
20
- end
21
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails/generators/active_interactor/base'
4
-
5
- module ActiveInteractor
6
- module Generators
7
- class ApplicationOrganizerGenerator < Base
8
- def create_application_organizer
9
- return if File.exist?(file_path)
10
-
11
- template 'application_organizer.rb', file_path
12
- end
13
-
14
- private
15
-
16
- def file_path
17
- "app/#{active_interactor_directory}/application_organizer.rb"
18
- end
19
- end
20
- end
21
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails/generators'
4
-
5
- require 'rails/generators/active_interactor/generator'
6
-
7
- module ActiveInteractor
8
- module Generators
9
- class Base < ::Rails::Generators::Base
10
- extend Generator
11
- include Generator
12
- end
13
-
14
- class NamedBase < ::Rails::Generators::NamedBase
15
- extend Generator
16
- include Generator
17
-
18
- private
19
-
20
- def active_interactor_file(parent_dir: 'app', suffix: nil)
21
- File.join(parent_dir, active_interactor_directory, class_path, "#{file_name_with_suffix(suffix)}.rb")
22
- end
23
-
24
- def file_name_with_suffix(suffix)
25
- suffix ? "#{file_name}_#{suffix}" : file_name
26
- end
27
- end
28
- end
29
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActiveInteractor
4
- module Generators
5
- module Generator
6
- def source_root
7
- File.expand_path('../templates', __dir__)
8
- end
9
-
10
- private
11
-
12
- def active_interactor_directory
13
- active_interactor_options.fetch(:dir, 'interactors')
14
- end
15
-
16
- def active_interactor_options
17
- ::Rails.application.config.generators.options.fetch(:active_interactor, {})
18
- end
19
- end
20
- end
21
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails/generators/active_interactor/base'
4
-
5
- module ActiveInteractor
6
- module Generators
7
- class InstallGenerator < Base
8
- desc 'Install ActiveInteractor'
9
- class_option :orm
10
-
11
- def create_initializer
12
- template 'active_interactor.erb', File.join('config', 'initializers', 'active_interactor.rb')
13
- end
14
- end
15
- end
16
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Dir[File.expand_path('active_interactor/*.rb', __dir__)].sort.each { |file| require file }
4
- Dir[File.expand_path('interactor/context/*.rb', __dir__)].sort.each { |file| require file }
5
- Dir[File.expand_path('interactor/*.rb', __dir__)].sort.each { |file| require file }
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails/generators/active_interactor/base'
4
-
5
- module Interactor
6
- module Context
7
- module Generators
8
- class RspecGenerator < ActiveInteractor::Generators::NamedBase
9
- desc 'Generate an interactor context spec'
10
-
11
- def create_spec
12
- template 'context_spec.erb', active_interactor_file(parent_dir: 'spec', suffix: 'context_spec')
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails/generators/active_interactor/base'
4
-
5
- module Interactor
6
- module Context
7
- module Generators
8
- class TestUnitGenerator < ActiveInteractor::Generators::NamedBase
9
- desc 'Generate an interactor context unit test'
10
-
11
- def create_spec
12
- template 'context_test_unit.erb', active_interactor_file(parent_dir: 'test', suffix: 'context_test')
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails/generators/active_interactor/base'
4
-
5
- module Interactor
6
- module Generators
7
- class ContextGenerator < ActiveInteractor::Generators::NamedBase
8
- desc 'Generate an interactor context'
9
- argument :context_attributes, type: :array, default: [], banner: 'attribute attribute'
10
-
11
- def generate_application_context
12
- generate :'active_interactor:application_context'
13
- end
14
-
15
- def create_context
16
- template 'context.erb', active_interactor_file(suffix: 'context')
17
- end
18
-
19
- hook_for :test_framework, in: :'interactor:context'
20
- end
21
- end
22
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Interactor
4
- module Generators
5
- module GeneratesContext
6
- module WithArguments
7
- def self.included(base)
8
- base.class_eval do
9
- include GeneratesContext
10
- argument :context_attributes, type: :array, default: [], banner: 'attribute attribute'
11
- end
12
- end
13
- end
14
-
15
- def self.included(base)
16
- base.class_eval do
17
- class_option :skip_context, type: :boolean, desc: 'Whether or not to generate a context class'
18
- end
19
- end
20
-
21
- private
22
-
23
- def skip_context?
24
- options[:skip_context] == true || active_interactor_options.fetch(:generate_context, true) == false
25
- end
26
- end
27
- end
28
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails/generators/active_interactor/base'
4
- require 'rails/generators/interactor/generates_context'
5
-
6
- class InteractorGenerator < ActiveInteractor::Generators::NamedBase
7
- include Interactor::Generators::GeneratesContext::WithArguments
8
- desc 'Generate an interactor'
9
-
10
- def generate_application_interactor
11
- generate :'active_interactor:application_interactor'
12
- end
13
-
14
- def create_interactor
15
- template 'interactor.erb', active_interactor_file
16
- end
17
-
18
- def create_context
19
- return if skip_context?
20
-
21
- generate :'interactor:context', class_name, *context_attributes
22
- end
23
-
24
- hook_for :test_framework, in: :interactor
25
- end
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails/generators/active_interactor/base'
4
- require 'rails/generators/interactor/generates_context'
5
-
6
- module Interactor
7
- module Generators
8
- class OrganizerGenerator < ActiveInteractor::Generators::NamedBase
9
- include GeneratesContext
10
- desc 'Generate an interactor organizer'
11
- argument :interactors, type: :array, default: [], banner: 'interactor interactor'
12
-
13
- class_option :context_attributes, type: :array, default: [], banner: 'attribute attribute',
14
- desc: 'Attributes for the context'
15
-
16
- def generate_application_organizer
17
- generate :'active_interactor:application_organizer'
18
- end
19
-
20
- def create_organizer
21
- template 'organizer.erb', active_interactor_file
22
- end
23
-
24
- def create_context
25
- return if skip_context?
26
-
27
- generate :'interactor:context', class_name, *context_attributes
28
- end
29
-
30
- hook_for :test_framework, in: :interactor
31
-
32
- private
33
-
34
- def context_attributes
35
- options[:context_attributes]
36
- end
37
- end
38
- end
39
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails/generators/active_interactor/base'
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 'interactor_spec.erb', active_interactor_file(parent_dir: 'spec', suffix: 'spec')
12
- end
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails/generators/active_interactor/base'
4
-
5
- module Interactor
6
- module Generators
7
- class TestUnitGenerator < ActiveInteractor::Generators::NamedBase
8
- desc 'Generate an interactor unit test'
9
-
10
- def create_spec
11
- template 'interactor_test_unit.erb', active_interactor_file(parent_dir: 'test', suffix: 'test')
12
- end
13
- end
14
- end
15
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'active_interactor'
4
-
5
- ActiveInteractor.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 -%>
14
-
15
- # Set the ActiveInteractor.logger
16
- config.logger = ::Rails.logger
17
- end
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class ApplicationContext < ActiveInteractor::Context::Base
4
- end
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class ApplicationInteractor < ActiveInteractor::Base
4
- end
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class ApplicationOrganizer < ActiveInteractor::Organizer::Base
4
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class <%= class_name %>Context < ApplicationContext
4
- <%- unless context_attributes.empty? -%>
5
- attributes <%= context_attributes.map { |a| ":#{a}" }.join(', ') %>
6
- <%- end -%>
7
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe <%= class_name %>Context, type: :interactor do
6
- pending "add some examples to (or delete) #{__FILE__}"
7
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class <%= class_name %>ContextTest < ActiveSupport::TestCase
6
- # test "the truth" do
7
- # assert true
8
- # end
9
- end