module Operatic

Constants

FailureError
OperaticError
VERSION

Attributes

result[R]

An instance of {Result} or a subclass generated by {ClassMethods#result}.

@return [Result]

Public Class Methods

included(base) click to toggle source

@!visibility private

# File lib/operatic.rb, line 7
def self.included(base)
  base.extend(ClassMethods)
end
new(attrs = nil) click to toggle source
# File lib/operatic.rb, line 72
def initialize(attrs = nil)
  @result = self.class.result_class.new

  attrs.each do |key, value|
    instance_variable_set("@#{key}", value)
  end if attrs
end

Public Instance Methods

call() click to toggle source

Override this method with your implementation. Use {#success!} or {#failure!} methods to communicate the {#result}'s status and to attach data it. Define convenience result accessors with {ClassMethods#result}.

@example

class SayHello
  include Operatic

  attr_reader :name

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

result = SayHello.call(name: 'Dave')
result.success? # => true
result.to_h     # => {:message=>"Hello Dave"}

result = SayHello.call
result.failure? # => true
result.success? # => false
result.to_h     # => {}
# File lib/operatic.rb, line 104
def call
end
failure!(data = nil) click to toggle source

Convenience shortcut to the operation's {Result#failure!}.

# File lib/operatic.rb, line 108
def failure!(data = nil)
  result.failure!(data)
end
success!(data = nil) click to toggle source

Convenience shortcut to the operation's {Result#success!}.

# File lib/operatic.rb, line 113
def success!(data = nil)
  result.success!(data)
end