Class: Democritus::ClassBuilder::Commands::Attributes
- Inherits:
-
Democritus::ClassBuilder::Command
- Object
- Democritus::ClassBuilder::Command
- Democritus::ClassBuilder::Commands::Attributes
- Defined in:
- lib/democritus/class_builder/commands/attributes.rb
Overview
Command to assign attributes as part of the initialize method.
Instance Method Summary collapse
- #attribute(name:, **options) ⇒ Object
-
#call ⇒ Object
:reek:NestedIterators: { exclude: [ ‘Democritus::ClassBuilder::Commands::Attributes#call’ ] } :reek:TooManyStatements: { exclude: [ ‘Democritus::ClassBuilder::Commands::Attributes#call’ ] }.
-
#initialize(builder:, &additional_configuration) ⇒ Attributes
constructor
A new instance of Attributes.
Methods inherited from Democritus::ClassBuilder::Command
Constructor Details
#initialize(builder:, &additional_configuration) ⇒ Attributes
Returns a new instance of Attributes.
16 17 18 19 20 |
# File 'lib/democritus/class_builder/commands/attributes.rb', line 16 def initialize(builder:, &additional_configuration) self.builder = builder self.additional_configuration = additional_configuration self.attribute_names = [] end |
Instance Method Details
#attribute(name:, **options) ⇒ Object
39 40 41 42 43 |
# File 'lib/democritus/class_builder/commands/attributes.rb', line 39 def attribute(name:, **) name = name.to_sym attribute_names << name builder.attribute(name: name, **) end |
#call ⇒ Object
:reek:NestedIterators: { exclude: [ ‘Democritus::ClassBuilder::Commands::Attributes#call’ ] } :reek:TooManyStatements: { exclude: [ ‘Democritus::ClassBuilder::Commands::Attributes#call’ ] }
24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/democritus/class_builder/commands/attributes.rb', line 24 def call # It may seem a little odd to yield self via an instance_exec, however in some cases I need a # receiver for messages (i.e. FromJsonClassBuilder) instance_exec(self, &additional_configuration) if additional_configuration.respond_to?(:call) defer do |subject| subject.module_exec(@attribute_names) do |attribute_names| define_method(:initialize) do |**attributes| attribute_names.each do |attribute_name| send("#{attribute_name}=", attributes.fetch(attribute_name.to_sym, nil)) end end end end end |