Class: Micro::Case::Result

Inherits:
Object
  • Object
show all
Defined in:
lib/micro/case/result.rb

Constant Summary collapse

@@transition_tracking_disabled =
false

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeResult

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

#typeObject (readonly)

Returns the value of attribute type.



28
29
30
# File 'lib/micro/case/result.rb', line 28

def type
  @type
end

#valueObject (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_trackingObject



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

Returns:

  • (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

Returns:

  • (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

#transitionsObject



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_caseObject



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