Module: Operatic::ClassMethods

Defined in:
lib/operatic.rb

Instance Method Summary collapse

Instance Method Details

#call(**attrs) ⇒ Failure, Success

The main way to call an operation. This initializes the class with the supplied attrs keyword arguments and calls Operatic#call returning a frozen Result instance.



20
21
22
23
24
# File 'lib/operatic.rb', line 20

def call(**attrs)
  operation = new(**attrs)
  operation.call
  operation.result || Success.new(operation.data).freeze
end

#call!(**attrs) ⇒ Success

The same as #call but raises FailureError if the returned Operatic#result is a Failure - useful for things like background jobs, rake tasks, test setups, etc.

Raises:



35
36
37
38
39
# File 'lib/operatic.rb', line 35

def call!(**attrs)
  call(**attrs).tap { |result|
    raise FailureError if result.failure?
  }
end

#data_attr(*attrs) ⇒ Object

Define a class-specific Data subclass with the named accessors added via Data.define.

Examples:

class SayHello
  include Operatic

  data_attr :message

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

result = SayHello.call(name: 'Dave')
result.class     # => Operatic::Success
result.message   # => "Hello Dave"
result[:message] # => "Hello Dave"
result.to_h      # => {:message=>"Hello Dave"}


63
64
65
# File 'lib/operatic.rb', line 63

def data_attr(*attrs)
  @data_class = Data.define(*attrs)
end

#data_classClass<Data>



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

def data_class
  @data_class || Data
end