Class: Lab42::Result
- Inherits:
-
Object
- Object
- Lab42::Result
- Defined in:
- lib/lab42/result.rb,
lib/lab42/result/version.rb
Constant Summary collapse
- VERSION =
"0.1.2"
Instance Attribute Summary collapse
-
#status ⇒ Object
readonly
Returns the value of attribute status.
-
#value ⇒ Object
readonly
Returns the value of attribute value.
Class Method Summary collapse
- .error(message, error: RuntimeError) ⇒ Object
- .from(error_message, &blk) ⇒ Object
- .new ⇒ Object
- .ok(value = nil) ⇒ Object
Instance Method Summary collapse
Instance Attribute Details
#status ⇒ Object (readonly)
Returns the value of attribute status.
4 5 6 |
# File 'lib/lab42/result.rb', line 4 def status @status end |
#value ⇒ Object (readonly)
Returns the value of attribute value.
4 5 6 |
# File 'lib/lab42/result.rb', line 4 def value @value end |
Class Method Details
.error(message, error: RuntimeError) ⇒ Object
22 23 24 25 26 27 28 29 30 |
# File 'lib/lab42/result.rb', line 22 def error(, error: RuntimeError) raise ArgumentError, "#{error.inspect} must be an Exception" unless Exception.class === error o = allocate o.instance_exec do @status = error @value = end o.freeze end |
.from(error_message, &blk) ⇒ Object
32 33 34 35 36 |
# File 'lib/lab42/result.rb', line 32 def from(, &blk) ok(blk.()) rescue Exception => e error(, error: e.class) end |
.new ⇒ Object
18 19 20 |
# File 'lib/lab42/result.rb', line 18 def new(*,**) raise NoMethodError, "only use the constructors `.ok` and `.error`" end |
.ok(value = nil) ⇒ Object
38 39 40 41 42 43 44 45 |
# File 'lib/lab42/result.rb', line 38 def ok(value=nil) o = allocate o.instance_exec do @status = :ok @value = value end o.freeze end |
Instance Method Details
#deconstruct ⇒ Object
5 6 7 |
# File 'lib/lab42/result.rb', line 5 def deconstruct [status, value].freeze end |
#ok? ⇒ Boolean
9 10 11 |
# File 'lib/lab42/result.rb', line 9 def ok? status == :ok end |
#raise! ⇒ Object
13 14 15 16 |
# File 'lib/lab42/result.rb', line 13 def raise! return value if ok? raise status, value end |