Class: ConvenientService::Service::Plugins::CanHaveConnectedSteps::Entities::Expressions::ComplexIf

Inherits:
Base
  • Object
show all
Defined in:
lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/complex_if.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#and?, #else?, #empty?, #group?, #if?, #not?, #or?, #scalar?, #steps

Methods included from ConvenientService::Support::Copyable

#copy

Methods included from ConvenientService::Support::AbstractMethod

abstract_method

Constructor Details

#initialize(if_expressions, else_expression = nil) ⇒ void



37
38
39
40
# File 'lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/complex_if.rb', line 37

def initialize(if_expressions, else_expression = nil)
  @if_expressions = if_expressions
  @else_expression = else_expression
end

Instance Attribute Details

#else_expressionObject (readonly)

Returns the value of attribute else_expression.



25
26
27
# File 'lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/complex_if.rb', line 25

def else_expression
  @else_expression
end

#if_expressionsObject (readonly)

Returns the value of attribute if_expressions.



19
20
21
# File 'lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/complex_if.rb', line 19

def if_expressions
  @if_expressions
end

#organizerObject

Returns the value of attribute organizer.



30
31
32
# File 'lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/complex_if.rb', line 30

def organizer
  @organizer
end

Instance Method Details

#==(other) ⇒ Boolean?

Parameters:

  • other (Object)

    Can be any type.

Returns:

  • (Boolean, nil)


153
154
155
156
157
158
159
160
# File 'lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/complex_if.rb', line 153

def ==(other)
  return unless other.instance_of?(self.class)

  return false if if_expressions != other.if_expressions
  return false if else_expression != other.else_expression

  true
end

#complex_if?Boolean

Returns:

  • (Boolean)


145
146
147
# File 'lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/complex_if.rb', line 145

def complex_if?
  true
end

#each_evaluated_step(&block) ⇒ ConvenientService::Service::Plugins::CanHaveConnectedSteps::Entities::Expressions::Base

rubocop:disable Lint/NonLocalExitFromIterator



107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/complex_if.rb', line 107

def each_evaluated_step(&block)
  if_expressions.each do |if_expression|
    if_expression.condition_expression.each_evaluated_step(&block)

    return if if_expression.condition_expression.error?
    return if_expression.then_expression.each_evaluated_step(&block) if if_expression.condition_expression.success?
  end

  else_expression&.each_evaluated_step(&block)

  self
end

#each_step(&block) ⇒ ConvenientService::Service::Plugins::CanHaveConnectedSteps::Entities::Expressions::Base



94
95
96
97
98
99
100
# File 'lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/complex_if.rb', line 94

def each_step(&block)
  if_expressions.each { |if_expression| if_expression.each_step(&block) }

  else_expression&.each_step(&block)

  self
end

#error?Boolean

Returns:

  • (Boolean)


81
82
83
84
85
86
87
88
# File 'lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/complex_if.rb', line 81

def error?
  if_expressions.each do |if_expression|
    return true if if_expression.condition_expression.error?
    return if_expression.then_expression.error? if if_expression.condition_expression.success?
  end

  else_expression ? else_expression.error? : false
end

#failure?Boolean

Returns:

  • (Boolean)


69
70
71
72
73
74
75
76
# File 'lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/complex_if.rb', line 69

def failure?
  if_expressions.each do |if_expression|
    return false if if_expression.condition_expression.error?
    return if_expression.then_expression.failure? if if_expression.condition_expression.success?
  end

  else_expression ? else_expression.failure? : false
end

#inspectString

Returns:

  • (String)


133
134
135
136
137
138
139
140
# File 'lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/complex_if.rb', line 133

def inspect
  [
    "if #{if_expressions.first.condition_expression.inspect} then #{if_expressions.first.then_expression.inspect}",
    *if_expressions[1..].map { |if_expression| "elsif #{if_expression.condition_expression.inspect} then #{if_expression.then_expression.inspect}" },
    "end"
  ]
    .join(" ")
end

#resultConvenientService::Service::Plugins::HasJSendResult::Entities::Result



45
46
47
48
49
50
51
52
# File 'lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/complex_if.rb', line 45

def result
  if_expressions.each do |if_expression|
    return if_expression.condition_expression.result if if_expression.condition_expression.error?
    return if_expression.then_expression.result if if_expression.condition_expression.success?
  end

  else_expression ? else_expression.result : organizer.success
end

#success?Boolean

Returns:

  • (Boolean)


57
58
59
60
61
62
63
64
# File 'lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/complex_if.rb', line 57

def success?
  if_expressions.each do |if_expression|
    return false if if_expression.condition_expression.error?
    return if_expression.then_expression.success? if if_expression.condition_expression.success?
  end

  else_expression ? else_expression.success? : true
end

#to_argumentsConvenientService::Support::Arguments



165
166
167
# File 'lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/complex_if.rb', line 165

def to_arguments
  Support::Arguments.new(if_expressions, else_expression)
end

#with_organizer(organizer) ⇒ ConvenientService::Service::Plugins::CanHaveConnectedSteps::Entities::Expressions::Not



125
126
127
128
# File 'lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/complex_if.rb', line 125

def with_organizer(organizer)
  copy(overrides: {args: {0 => if_expressions.map { |if_expression| if_expression.with_organizer(organizer) }, 1 => else_expression&.with_organizer(organizer)}})
    .tap { |complex_if| complex_if.organizer = organizer }
end