Class: ApiBlocks::Interactor

Inherits:
Object
  • Object
show all
Includes:
Dry::Transaction
Defined in:
lib/api_blocks/interactor.rb

Overview

ApiBlocks::Interactor implements a base interactor class.

It is based on ‘Dry::Transaction` and implements input schema parsing and validation as well as database transaction handling.

Examples:


class InviteUser < ApiBlocks::Interactor
  input do
    schema do
      required(:email).filled
      required(:password).filled

      optional(:first_name)
      optional(:last_name)
    end
  end

  around :database_transaction!

  step :validate_input!
  try :create_user, catch: ActiveRecord::RecordInvalid
  tee :deliver_invitation

  def create_user(params)
    Success(User.create!(params))
  end

  def deliver_invitation(user, mailer)
    mailer.accept_invitation(user)
  end
end

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.input_schemaObject

Returns the value of attribute input_schema.



43
44
45
# File 'lib/api_blocks/interactor.rb', line 43

def input_schema
  @input_schema
end

Class Method Details

.call(*args) ⇒ Object

Call the interactor with its arguments.

Examples:


InviteUser.call(
  email: "[email protected]",
  first_name: "Foo",
  last_name: "Bar"
)


75
76
77
# File 'lib/api_blocks/interactor.rb', line 75

def self.call(*args)
  new.call(*args)
end

.input(&block) ⇒ Object

Define a contract for the input of this interactor using ‘dry-validation`

Examples:


class FooInteractor < ApiBlocks::Interactor
  input do
    schema do
      required(:bar).filled
    end
  end

  step :validate_input!
end


61
62
63
# File 'lib/api_blocks/interactor.rb', line 61

def self.input(&block)
  @input_schema = Class.new(Dry::Validation::Contract, &block).new
end

.with_step_args(*args) ⇒ Object

Call the interactor with additional step arguments.

Examples:


InviteUser.with_step_args(deliver_invitation: [mailer: UserMailer])


85
86
87
# File 'lib/api_blocks/interactor.rb', line 85

def self.with_step_args(*args)
  new.with_step_args(*args)
end