Class: Mustermann::Router::Simple
- Inherits:
-
Object
- Object
- Mustermann::Router::Simple
- Defined in:
- lib/praxis/router/simple.rb
Overview
Simple pattern based router that allows matching a string to a given callback.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#default ⇒ Object
Default value for when no pattern matches.
Instance Method Summary collapse
-
#[](string) ⇒ #call?
Callback for given string, if a pattern matches.
- #[]=(pattern, callback) ⇒ Object
-
#call(input) ⇒ Object
Finds the matching callback and calls ‘call` on it with the given input and the params.
-
#initialize(default: nil, **options, &block) ⇒ Mustermann::Router::Simple
constructor
New router instance.
- #on(*patterns, call: Proc.new, **options) ⇒ Object
Constructor Details
#initialize(default: nil, **options, &block) ⇒ Mustermann::Router::Simple
Returns new router instance.
60 61 62 63 64 65 66 67 68 |
# File 'lib/praxis/router/simple.rb', line 60 def initialize(default: nil, **, &block) @options = @map = [] @default = default return unless block block.arity.zero? ? instance_eval(&block) : yield(self) end |
Instance Attribute Details
#default ⇒ Object
Default value for when no pattern matches
31 32 33 |
# File 'lib/praxis/router/simple.rb', line 31 def default @default end |
Instance Method Details
#[](string) ⇒ #call?
Returns callback for given string, if a pattern matches.
79 80 81 82 |
# File 'lib/praxis/router/simple.rb', line 79 def [](string) string = string_for(string) unless string.is_a? String @map.detect { |p, _v| p === string }[1] # rubocop:disable Style/CaseEquality end |
#[]=(pattern, callback) ⇒ Object
94 95 96 |
# File 'lib/praxis/router/simple.rb', line 94 def []=(pattern, callback) on(pattern, call: callback) end |
#call(input) ⇒ Object
Finds the matching callback and calls ‘call` on it with the given input and the params.
129 130 131 132 133 134 135 136 137 138 |
# File 'lib/praxis/router/simple.rb', line 129 def call(input) @map.each do |pattern, callback| catch(:pass) do next unless (params = pattern.params(string_for(input))) return invoke(callback, input, params, pattern) end end @default end |
#on(*patterns, call: Proc.new, **options) ⇒ Object
120 121 122 123 124 125 |
# File 'lib/praxis/router/simple.rb', line 120 def on(*patterns, call: Proc.new, **) patterns.each do |pattern| pattern = Mustermann.new(pattern.to_str, **, **@options) if pattern.respond_to? :to_str @map << [pattern, call] end end |