Class: Micro::Case::Result
- Inherits:
-
Object
- Object
- Micro::Case::Result
- Defined in:
- lib/micro/case/result.rb
Constant Summary collapse
- @@transition_tracking_disabled =
false
Instance Attribute Summary collapse
-
#type ⇒ Object
readonly
Returns the value of attribute type.
-
#value ⇒ Object
readonly
Returns the value of attribute value.
Class Method Summary collapse
Instance Method Summary collapse
- #__set__(is_success, value, type, use_case) ⇒ Object
- #__set_transitions_accessible_attributes__(attribute_names) ⇒ Object
- #failure? ⇒ Boolean
-
#initialize ⇒ Result
constructor
A new instance of Result.
- #on_failure(expected_type = nil) ⇒ Object
- #on_success(expected_type = nil) ⇒ Object
- #success? ⇒ Boolean
- #then(arg = nil, &block) ⇒ Object
- #transitions ⇒ Object
- #use_case ⇒ Object
Constructor Details
#initialize ⇒ Result
Returns a new instance of Result.
30 31 32 33 |
# File 'lib/micro/case/result.rb', line 30 def initialize @__transitions__ = {} @__transitions_accessible_attributes__ = Set.new end |
Instance Attribute Details
#type ⇒ Object (readonly)
Returns the value of attribute type.
28 29 30 |
# File 'lib/micro/case/result.rb', line 28 def type @type end |
#value ⇒ Object (readonly)
Returns the value of attribute value.
28 29 30 |
# File 'lib/micro/case/result.rb', line 28 def value @value end |
Class Method Details
.disable_transition_tracking ⇒ Object
12 13 14 |
# File 'lib/micro/case/result.rb', line 12 def self.disable_transition_tracking @@transition_tracking_disabled = true end |
Instance Method Details
#__set__(is_success, value, type, use_case) ⇒ Object
35 36 37 38 39 40 41 42 43 44 |
# File 'lib/micro/case/result.rb', line 35 def __set__(is_success, value, type, use_case) raise Error::InvalidResultType unless type.is_a?(Symbol) raise Error::InvalidUseCase if !is_a_use_case?(use_case) @success, @value, @type, @use_case = is_success, value, type, use_case __set_transition__ unless @@transition_tracking_disabled self end |
#__set_transitions_accessible_attributes__(attribute_names) ⇒ Object
97 98 99 100 101 102 103 |
# File 'lib/micro/case/result.rb', line 97 def __set_transitions_accessible_attributes__(attribute_names) return if @@transition_tracking_disabled __set_transitions_accessible_attributes__!( attribute_names.map!(&:to_sym) ) end |
#failure? ⇒ Boolean
50 51 52 |
# File 'lib/micro/case/result.rb', line 50 def failure? !success? end |
#on_failure(expected_type = nil) ⇒ Object
64 65 66 67 68 69 70 |
# File 'lib/micro/case/result.rb', line 64 def on_failure(expected_type = nil) return self unless failure_type?(expected_type) data = expected_type.nil? ? Data.new(value, type).tap(&:freeze) : value self.tap { yield(data, @use_case) } end |
#on_success(expected_type = nil) ⇒ Object
60 61 62 |
# File 'lib/micro/case/result.rb', line 60 def on_success(expected_type = nil) self.tap { yield(value) if success_type?(expected_type) } end |
#success? ⇒ Boolean
46 47 48 |
# File 'lib/micro/case/result.rb', line 46 def success? @success end |
#then(arg = nil, &block) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/micro/case/result.rb', line 72 def then(arg = nil, &block) can_yield_self = respond_to?(:yield_self) if block raise Error::InvalidInvocationOfTheThenMethod if arg raise NotImplementedError if !can_yield_self yield_self(&block) else return yield_self if !arg && can_yield_self raise Error::InvalidInvocationOfTheThenMethod if !is_a_use_case?(arg) return self if failure? arg.__call_and_set_transition__(self, self.value) end end |
#transitions ⇒ Object
91 92 93 94 95 |
# File 'lib/micro/case/result.rb', line 91 def transitions return [] if @__transitions__.empty? @__transitions__.map { |_use_case, transition| transition } end |
#use_case ⇒ Object
54 55 56 57 58 |
# File 'lib/micro/case/result.rb', line 54 def use_case return @use_case if failure? raise Error::InvalidAccessToTheUseCaseObject end |