Module: Operatic

Defined in:
lib/operatic.rb,
lib/operatic/errors.rb,
lib/operatic/result.rb,
lib/operatic/version.rb

Defined Under Namespace

Modules: ClassMethods Classes: Result

Constant Summary collapse

OperaticError =
Class.new(StandardError)
FailureError =
Class.new(OperaticError)
VERSION =
'0.6.0'

Instance Method Summary collapse

Instance Method Details

#callObject

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

Examples:

class SayHello
  include Operatic

  attr_reader :name

  result_attr :message

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

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

result = SayHello.call
result.failure? # => true
result.success? # => false
result.message  # => nil
result.to_h     # => {}


103
104
# File 'lib/operatic.rb', line 103

def call
end

#failure!(**data) ⇒ Object

Convenience shortcut to the operation's Operatic::Result#failure!.



107
108
109
# File 'lib/operatic.rb', line 107

def failure!(**data)
  result.failure!(**data)
end

#initialize(**attrs) ⇒ Object



67
68
69
70
71
# File 'lib/operatic.rb', line 67

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

#resultResult

An instance of Result or a subclass generated by Operatic::ClassMethods#result_attr.

Returns:



115
116
117
# File 'lib/operatic.rb', line 115

def result
  @result ||= self.class.result_class.new
end

#success!(**data) ⇒ Object

Convenience shortcut to the operation's Operatic::Result#success!.



120
121
122
# File 'lib/operatic.rb', line 120

def success!(**data)
  result.success!(**data)
end