Class: Plutonium::Interaction::Base
- Inherits:
-
Object
- Object
- Plutonium::Interaction::Base
- Includes:
- ActiveModel::Attributes, ActiveModel::Model, Definition::ConfigAttr, Definition::DefineableProps, Definition::NestedInputs, Definition::Presentable, NestedAttributes
- Defined in:
- lib/plutonium/interaction/base.rb
Overview
Note:
Subclasses must implement the #execute method.
Base class for all interactions. Provides core functionality for validations, execution, and result handling.
Direct Known Subclasses
Defined Under Namespace
Classes: Form
Instance Attribute Summary collapse
-
#view_context ⇒ Object
readonly
Returns the value of attribute view_context.
Class Method Summary collapse
Instance Method Summary collapse
- #build_form ⇒ Object
-
#call ⇒ Plutonium::Interaction::Outcome
Executes the interaction.
-
#initialize(view_context:, **attributes) ⇒ Base
constructor
A new instance of Base.
Methods included from Definition::Presentable
Constructor Details
#initialize(view_context:, **attributes) ⇒ Base
Returns a new instance of Base.
52 53 54 55 |
# File 'lib/plutonium/interaction/base.rb', line 52 def initialize(view_context:, **attributes) super(attributes) @view_context = view_context end |
Instance Attribute Details
#view_context ⇒ Object (readonly)
Returns the value of attribute view_context.
50 51 52 |
# File 'lib/plutonium/interaction/base.rb', line 50 def view_context @view_context end |
Class Method Details
.build_form(instance) ⇒ Object
40 41 42 43 44 |
# File 'lib/plutonium/interaction/base.rb', line 40 def build_form(instance) raise ArgumentError, "instance is required" unless instance self::Form.new(instance) end |
.call ⇒ Object
36 37 38 |
# File 'lib/plutonium/interaction/base.rb', line 36 def call(...) new(...).call end |
Instance Method Details
#build_form ⇒ Object
57 58 59 |
# File 'lib/plutonium/interaction/base.rb', line 57 def build_form self.class.build_form(self) end |
#call ⇒ Plutonium::Interaction::Outcome
Executes the interaction.
64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/plutonium/interaction/base.rb', line 64 def call if valid? outcome = execute unless outcome.is_a?(Plutonium::Interaction::Outcome) raise "#{self.class}#execute must return an instance of Plutonium::Interaction::Outcome.\n" \ "#{outcome.inspect} received instead" end outcome else failure.("An error occurred") end end |