module Operatic::ClassMethods

Public Instance Methods

call(attrs = nil) click to toggle source

The main way of calling an operation.

The class is instantiated with supplied attrs and calls {Operatic#call} returning a frozen {Result} instance.

@param attrs [Hash<Symbol, anything>] an optional hash of key/values to

to the result. The class must have corresponding +attr_reader+s

@return a [Result]

# File lib/operatic.rb, line 21
def call(attrs = nil)
  new(attrs)
    .tap(&:call)
    .result
    .freeze
end
call!(attrs = nil) click to toggle source

Calls {#call} but raises {FailureError} if the returned {Result} is a {Result#failure?} - useful for things like background jobs, rake tasks, test setups, etc.

@return [Result]

# File lib/operatic.rb, line 33
def call!(attrs = nil)
  call(attrs).tap { |result|
    raise FailureError if result.failure?
  }
end
result(*args) click to toggle source

Define a {Result} subclass with named accessors specific to the class via {Result.generate}.

@example

class SayHello
  include Operatic

  attr_reader :name

  result :message

  def call
    success!(message: "Hello #{name}")
  end
end

result = SayHello.call(name: 'Dave')
result.success? # => true
result.message  # => "Hello Dave"
# File lib/operatic.rb, line 58
def result(*args)
  @result_class = Result.generate(*args)
end
result_class() click to toggle source
# File lib/operatic.rb, line 62
def result_class
  @result_class || Result
end