Class: Interactify::Dsl::EachChain
- Inherits:
-
Object
- Object
- Interactify::Dsl::EachChain
- Defined in:
- lib/interactify/dsl/each_chain.rb
Instance Attribute Summary collapse
-
#each_loop_klasses ⇒ Object
readonly
Returns the value of attribute each_loop_klasses.
-
#evaluating_receiver ⇒ Object
readonly
Returns the value of attribute evaluating_receiver.
-
#plural_resource_name ⇒ Object
readonly
Returns the value of attribute plural_resource_name.
Class Method Summary collapse
Instance Method Summary collapse
-
#attach_klass ⇒ Object
rubocop:enable all.
-
#initialize(each_loop_klasses, plural_resource_name, evaluating_receiver) ⇒ EachChain
constructor
A new instance of EachChain.
- #iterator_klass_name ⇒ Object
-
#klass ⇒ Object
allows us to dynamically create an interactor chain that iterates over the packages and uses the passed in each_loop_klasses rubocop:disable all.
- #namespace ⇒ Object
- #singular_resource_index_name ⇒ Object
- #singular_resource_name ⇒ Object
Constructor Details
#initialize(each_loop_klasses, plural_resource_name, evaluating_receiver) ⇒ EachChain
Returns a new instance of EachChain.
15 16 17 18 19 |
# File 'lib/interactify/dsl/each_chain.rb', line 15 def initialize(each_loop_klasses, plural_resource_name, evaluating_receiver) @each_loop_klasses = each_loop_klasses @plural_resource_name = plural_resource_name @evaluating_receiver = evaluating_receiver end |
Instance Attribute Details
#each_loop_klasses ⇒ Object (readonly)
Returns the value of attribute each_loop_klasses.
8 9 10 |
# File 'lib/interactify/dsl/each_chain.rb', line 8 def each_loop_klasses @each_loop_klasses end |
#evaluating_receiver ⇒ Object (readonly)
Returns the value of attribute evaluating_receiver.
8 9 10 |
# File 'lib/interactify/dsl/each_chain.rb', line 8 def evaluating_receiver @evaluating_receiver end |
#plural_resource_name ⇒ Object (readonly)
Returns the value of attribute plural_resource_name.
8 9 10 |
# File 'lib/interactify/dsl/each_chain.rb', line 8 def plural_resource_name @plural_resource_name end |
Class Method Details
.attach_klass(evaluating_receiver, plural_resource_name, *each_loop_klasses) ⇒ Object
10 11 12 13 |
# File 'lib/interactify/dsl/each_chain.rb', line 10 def self.attach_klass(evaluating_receiver, plural_resource_name, *each_loop_klasses) iteratable = new(each_loop_klasses, plural_resource_name, evaluating_receiver) iteratable.attach_klass end |
Instance Method Details
#attach_klass ⇒ Object
rubocop:enable all
70 71 72 73 74 75 |
# File 'lib/interactify/dsl/each_chain.rb', line 70 def attach_klass name = iterator_klass_name namespace.const_set(name, klass) namespace.const_get(name) end |
#iterator_klass_name ⇒ Object
81 82 83 84 85 |
# File 'lib/interactify/dsl/each_chain.rb', line 81 def iterator_klass_name prefix = "Each#{singular_resource_name.to_s.camelize}" UniqueKlassName.for(namespace, prefix) end |
#klass ⇒ Object
allows us to dynamically create an interactor chain that iterates over the packages and uses the passed in each_loop_klasses rubocop:disable all
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/interactify/dsl/each_chain.rb', line 25 def klass this = self Class.new do # class SomeNamespace::EachPackage include Interactify # include Interactify expects do # expects do required(this.plural_resource_name) # required(:packages) end # end define_singleton_method(:source_location) do # def self.source_location const_source_location this.evaluating_receiver.to_s # [file, line] end # end define_method(:run!) do # def run! context.send(this.plural_resource_name).each_with_index do |resource, index|# context.packages.each_with_index do |package, index| context[this.singular_resource_name] = resource # context.package = package context[this.singular_resource_index_name] = index # context.package_index = index self.class.klasses.each do |interactor| # [A, B, C].each do |interactor| interactor.call!(context) # interactor.call!(context) end # end end # end context[this.singular_resource_name] = nil # context.package = nil context[this.singular_resource_index_name] = nil # context.package_index = nil context # context end # end define_singleton_method(:klasses) do # def self.klasses klasses = instance_variable_get(:@klasses) # @klasses ||= Wrapper.wrap_many(self, [A, B, C]) return klasses if klasses instance_variable_set(:@klasses, Wrapper.wrap_many(self, this.each_loop_klasses)) end # "<SomeNamespace::EachPackage iterates_over: [A, B, C]>" define_method(:inspect) do "<#{this.namespace}::#{this.iterator_klass_name} iterates_over: #{this.each_loop_klasses.inspect}>" end end end |
#namespace ⇒ Object
77 78 79 |
# File 'lib/interactify/dsl/each_chain.rb', line 77 def namespace evaluating_receiver end |
#singular_resource_index_name ⇒ Object
91 92 93 |
# File 'lib/interactify/dsl/each_chain.rb', line 91 def singular_resource_index_name "#{singular_resource_name}_index".to_sym end |
#singular_resource_name ⇒ Object
87 88 89 |
# File 'lib/interactify/dsl/each_chain.rb', line 87 def singular_resource_name plural_resource_name.to_s.singularize.to_sym end |