Class: Plutonium::Interaction::Base

Inherits:
Object
  • Object
show all
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.

Examples:

class MyInteraction < Plutonium::Interaction::Base
  attribute :user_id, :integer
  validates :user_id, presence: true

  private

  def execute
    user = User.find(user_id)
    success(user)
  end
end

Direct Known Subclasses

Resource::Interaction

Defined Under Namespace

Classes: Form

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Definition::Presentable

#description, #icon, #label

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_contextObject (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

Raises:

  • (ArgumentError)


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

.callObject



36
37
38
# File 'lib/plutonium/interaction/base.rb', line 36

def call(...)
  new(...).call
end

Instance Method Details

#build_formObject



57
58
59
# File 'lib/plutonium/interaction/base.rb', line 57

def build_form
  self.class.build_form(self)
end

#callPlutonium::Interaction::Outcome

Executes the interaction.

Returns:



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.with_message("An error occurred")
  end
end