Class: Gritz::Middleware::Stack

Inherits:
Object
  • Object
show all
Defined in:
/home/runner/work/gritz/gritz/sources/gritz-core/lib/gritz/middleware/stack.rb

Overview

Mutable middleware configuration; build creates an immutable call chain.

Defined Under Namespace

Classes: Entry

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize ⇒ Stack

Returns a new instance of Stack.



11
12
13
# File '/home/runner/work/gritz/gritz/sources/gritz-core/lib/gritz/middleware/stack.rb', line 11

def initialize
  @entries = []
end

Instance Attribute Details

#entries ⇒ Object (readonly)



9
10
11
# File '/home/runner/work/gritz/gritz/sources/gritz-core/lib/gritz/middleware/stack.rb', line 9

def entries
  @entries
end

Class Method Details

.default ⇒ Object



20
21
22
# File '/home/runner/work/gritz/gritz/sources/gritz-core/lib/gritz/middleware/stack.rb', line 20

def self.default
  new.use(RequestId).use(Context).use(Metrics).use(Logging).use(ExceptionMapper)
end

Instance Method Details

#build(app) ⇒ Object



49
50
51
52
53
# File '/home/runner/work/gritz/gritz/sources/gritz-core/lib/gritz/middleware/stack.rb', line 49

def build(app)
  entries.reverse_each.reduce(app) do |endpoint, entry|
    entry.middleware.new(endpoint, **entry.options, &entry.block)
  end
end

#delete(middleware) ⇒ Object



44
45
46
47
# File '/home/runner/work/gritz/gritz/sources/gritz-core/lib/gritz/middleware/stack.rb', line 44

def delete(middleware)
  entries.reject! { |entry| entry.middleware == middleware }
  self
end

#initialize_copy(other) ⇒ Object



15
16
17
18
# File '/home/runner/work/gritz/gritz/sources/gritz-core/lib/gritz/middleware/stack.rb', line 15

def initialize_copy(other)
  super
  @entries = other.entries.dup
end

#insert_after(target, middleware, **options, &block) ⇒ Object



34
35
36
37
# File '/home/runner/work/gritz/gritz/sources/gritz-core/lib/gritz/middleware/stack.rb', line 34

def insert_after(target, middleware, **options, &block)
  entries.insert(index_of(target) + 1, Entry.new(middleware, options, block))
  self
end

#insert_before(target, middleware, **options, &block) ⇒ Object



29
30
31
32
# File '/home/runner/work/gritz/gritz/sources/gritz-core/lib/gritz/middleware/stack.rb', line 29

def insert_before(target, middleware, **options, &block)
  entries.insert(index_of(target), Entry.new(middleware, options, block))
  self
end

#swap(target, middleware, **options, &block) ⇒ Object



39
40
41
42
# File '/home/runner/work/gritz/gritz/sources/gritz-core/lib/gritz/middleware/stack.rb', line 39

def swap(target, middleware, **options, &block)
  entries[index_of(target)] = Entry.new(middleware, options, block)
  self
end

#use(middleware, **options, &block) ⇒ Object



24
25
26
27
# File '/home/runner/work/gritz/gritz/sources/gritz-core/lib/gritz/middleware/stack.rb', line 24

def use(middleware, **options, &block)
  entries << Entry.new(middleware, options, block)
  self
end