Module: Cuprum::Operation::Mixin

Included in:
BuiltIn::IdentityOperation, BuiltIn::NullOperation, Cuprum::Operation
Defined in:
lib/cuprum/operation.rb

Overview

Module-based implementation of the Operation methods.

Use this to convert an already-defined command into an operation.

Examples:

class CustomOperation < CustomCommand
  include Cuprum::Operation::Mixin
end

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#resultCuprum::Result (readonly)



51
52
53
# File 'lib/cuprum/operation.rb', line 51

def result
  @result
end

Instance Method Details

#call(*arguments, **keywords) { ... } ⇒ Cuprum::Operation

Calls the command implementation and stores the result.

Yields:

  • If a block argument is given, it will be passed to the implementation.

See Also:



66
67
68
69
70
71
72
# File 'lib/cuprum/operation.rb', line 66

def call(*args, **kwargs, &)
  reset! if called? # Clear reference to most recent result.

  @result = super

  self
end

#called?Boolean



76
77
78
# File 'lib/cuprum/operation.rb', line 76

def called?
  !result.nil?
end

#errorObject



82
83
84
# File 'lib/cuprum/operation.rb', line 82

def error
  called? ? result.error : nil
end

#failure?Boolean



89
90
91
# File 'lib/cuprum/operation.rb', line 89

def failure?
  called? ? result.failure? : false
end

#reset!Object

Clears the reference to the most recent call of the operation, if any. This allows the result and any referenced data to be garbage collected. Use this method to clear any instance variables or state internal to the operation (an operation should never have external state apart from the last result).

If the operation cannot be run more than once, this method should raise an error.



101
102
103
# File 'lib/cuprum/operation.rb', line 101

def reset!
  @result = nil
end

#statusSymbol?



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

def status
  called? ? result.status : nil
end

#success?Boolean



114
115
116
# File 'lib/cuprum/operation.rb', line 114

def success?
  called? ? result.success? : false
end

#to_cuprum_resultCuprum::Result



121
122
123
124
125
126
127
# File 'lib/cuprum/operation.rb', line 121

def to_cuprum_result
  return result if result

  error = Cuprum::Errors::OperationNotCalled.new(operation: self)

  Cuprum::Result.new(error:)
end

#valueObject



131
132
133
# File 'lib/cuprum/operation.rb', line 131

def value
  called? ? result.value : nil
end