Class: Philiprehberger::Middleware::FrozenStack
- Inherits:
-
Object
- Object
- Philiprehberger::Middleware::FrozenStack
- Defined in:
- lib/philiprehberger/middleware/stack.rb
Overview
An immutable snapshot of a middleware stack that can execute but not be modified.
Instance Method Summary collapse
-
#[](target_name) ⇒ #call?
Look up an entry by name.
-
#call(env) ⇒ Object
Execute the frozen middleware stack with the given environment.
-
#initialize(entries, groups, disabled_groups, before_hooks, after_hooks, around_hooks) ⇒ FrozenStack
constructor
A new instance of FrozenStack.
-
#to_a ⇒ Array<String, Symbol, nil>
Return the list of middleware names.
Constructor Details
#initialize(entries, groups, disabled_groups, before_hooks, after_hooks, around_hooks) ⇒ FrozenStack
Returns a new instance of FrozenStack.
525 526 527 528 529 530 531 532 |
# File 'lib/philiprehberger/middleware/stack.rb', line 525 def initialize(entries, groups, disabled_groups, before_hooks, after_hooks, around_hooks) @entries = entries.freeze @groups = groups.freeze @disabled_groups = disabled_groups.freeze @before_hooks = before_hooks.freeze @after_hooks = after_hooks.freeze @around_hooks = around_hooks.freeze end |
Instance Method Details
#[](target_name) ⇒ #call?
Look up an entry by name.
564 565 566 567 |
# File 'lib/philiprehberger/middleware/stack.rb', line 564 def [](target_name) entry = @entries.find { |e| e.name == target_name } entry&.middleware end |
#call(env) ⇒ Object
Execute the frozen middleware stack with the given environment.
538 539 540 541 542 543 544 545 546 547 548 549 550 551 |
# File 'lib/philiprehberger/middleware/stack.rb', line 538 def call(env) disabled = disabled_middleware_names terminal = ->(e) { e } chain = @entries.reverse.reduce(terminal) do |next_mw, entry| if entry.name && disabled.include?(entry.name) next_mw else build_frozen_step(entry, next_mw) end end chain.call(env) rescue Philiprehberger::Middleware::Halt env end |
#to_a ⇒ Array<String, Symbol, nil>
Return the list of middleware names.
556 557 558 |
# File 'lib/philiprehberger/middleware/stack.rb', line 556 def to_a @entries.map(&:name) end |