Class: ConvenientService::Support::Middleware::StackBuilder::Entities::Builders::Stateful

Inherits:
Object
  • Object
show all
Defined in:
lib/convenient_service/support/middleware/stack_builder/entities/builders/stateful.rb,
lib/convenient_service/support/middleware/stack_builder/entities/builders/stateful/exceptions.rb

Defined Under Namespace

Modules: Exceptions

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(**kwargs) ⇒ void

Parameters:

  • kwargs (Hash{Symbol => Object})


33
34
35
36
37
# File 'lib/convenient_service/support/middleware/stack_builder/entities/builders/stateful.rb', line 33

def initialize(**kwargs)
  @name = kwargs.fetch(:name) { "Stack" }
  @stack = kwargs.fetch(:stack) { [] }
  @index = -1
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



27
28
29
# File 'lib/convenient_service/support/middleware/stack_builder/entities/builders/stateful.rb', line 27

def name
  @name
end

#stackObject (readonly)

Returns the value of attribute stack.



21
22
23
# File 'lib/convenient_service/support/middleware/stack_builder/entities/builders/stateful.rb', line 21

def stack
  @stack
end

Instance Method Details

#==(other) ⇒ Boolean?

Parameters:

  • other (Object)

    Can be any type.

Returns:

  • (Boolean, nil)


207
208
209
210
211
212
213
214
# File 'lib/convenient_service/support/middleware/stack_builder/entities/builders/stateful.rb', line 207

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

  return false if name != other.name
  return false if stack != other.stack

  true
end

#call(env) ⇒ Object

Returns Can be any type.

Parameters:

  • env (Hash{Symbol => Object})

Returns:

  • (Object)

    Can be any type.



74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/convenient_service/support/middleware/stack_builder/entities/builders/stateful.rb', line 74

def call(env)
  return env if stack.empty?

  self.index += 1

  if index == stack.size - 1
    stack[index].call(env)
  else
    stack[index].new(self).call(env)
  end
ensure
  self.index = -1
end

#clearBoolean

Returns:

  • (Boolean)


57
58
59
60
61
# File 'lib/convenient_service/support/middleware/stack_builder/entities/builders/stateful.rb', line 57

def clear
  stack.clear

  self
end

#delete(index_or_middleware) ⇒ ConvenientService::Support::Middleware::StackBuilder::Entities::Builders::Rack Also known as: remove



190
191
192
193
194
195
196
# File 'lib/convenient_service/support/middleware/stack_builder/entities/builders/stateful.rb', line 190

def delete(index_or_middleware)
  index = cast_index(index_or_middleware)

  stack.delete_at(index)

  self
end

#dupConvenientService::Support::Middleware::StackBuilder::Entities::Builders::Rack



226
227
228
# File 'lib/convenient_service/support/middleware/stack_builder/entities/builders/stateful.rb', line 226

def dup
  self.class.new(name: name.dup, stack: stack.dup)
end

#empty?Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/convenient_service/support/middleware/stack_builder/entities/builders/stateful.rb', line 42

def empty?
  stack.empty?
end

#has?(some_middleware) ⇒ Boolean

Parameters:

  • some_middleware (#call<Hash>)

Returns:

  • (Boolean)


50
51
52
# File 'lib/convenient_service/support/middleware/stack_builder/entities/builders/stateful.rb', line 50

def has?(some_middleware)
  stack.any? { |middleware| middleware == some_middleware }
end

#insert(index_or_middleware, other_middleware) ⇒ ConvenientService::Support::Middleware::StackBuilder::Entities::Builders::Rack Also known as: insert_before



124
125
126
127
128
129
130
# File 'lib/convenient_service/support/middleware/stack_builder/entities/builders/stateful.rb', line 124

def insert(index_or_middleware, other_middleware)
  index = cast_index(index_or_middleware)

  stack.insert(index, other_middleware)

  self
end

#insert_after(index_or_middleware, other_middleware) ⇒ ConvenientService::Support::Middleware::StackBuilder::Entities::Builders::Rack



143
144
145
146
147
148
149
# File 'lib/convenient_service/support/middleware/stack_builder/entities/builders/stateful.rb', line 143

def insert_after(index_or_middleware, other_middleware)
  index = cast_index(index_or_middleware)

  stack.insert(index + 1, other_middleware)

  self
end

#insert_after_each(other_middleware) ⇒ ConvenientService::Support::Middleware::StackBuilder::Entities::Builders::Rack



165
166
167
168
169
# File 'lib/convenient_service/support/middleware/stack_builder/entities/builders/stateful.rb', line 165

def insert_after_each(other_middleware)
  @stack = stack.reduce([]) { |stack, middleware| stack.push(middleware, other_middleware) }

  self
end

#insert_before_each(other_middleware) ⇒ ConvenientService::Support::Middleware::StackBuilder::Entities::Builders::Rack



155
156
157
158
159
# File 'lib/convenient_service/support/middleware/stack_builder/entities/builders/stateful.rb', line 155

def insert_before_each(other_middleware)
  @stack = stack.reduce([]) { |stack, middleware| stack.push(other_middleware, middleware) }

  self
end

#replace(index_or_middleware, other_middleware) ⇒ ConvenientService::Support::Middleware::StackBuilder::Entities::Builders::Rack



177
178
179
180
181
182
183
# File 'lib/convenient_service/support/middleware/stack_builder/entities/builders/stateful.rb', line 177

def replace(index_or_middleware, other_middleware)
  index = cast_index(index_or_middleware)

  stack[index] = other_middleware

  self
end

#to_aArray

Returns:

  • (Array)


219
220
221
# File 'lib/convenient_service/support/middleware/stack_builder/entities/builders/stateful.rb', line 219

def to_a
  stack
end

#unshift(middleware) ⇒ ConvenientService::Support::Middleware::StackBuilder::Entities::Builders::Rack Also known as: prepend



92
93
94
95
96
# File 'lib/convenient_service/support/middleware/stack_builder/entities/builders/stateful.rb', line 92

def unshift(middleware)
  stack.unshift(middleware)

  self
end

#use(middleware) ⇒ ConvenientService::Support::Middleware::StackBuilder::Entities::Builders::Rack Also known as: append



107
108
109
110
111
# File 'lib/convenient_service/support/middleware/stack_builder/entities/builders/stateful.rb', line 107

def use(middleware)
  stack << middleware

  self
end