Class: Lydia::Router
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
#halted, #internal_server_error, #not_found
Instance Attribute Details
#env ⇒ Object
Returns the value of attribute env.
12
13
14
|
# File 'lib/lydia/router.rb', line 12
def env
@env
end
|
#request ⇒ Object
Returns the value of attribute request.
12
13
14
|
# File 'lib/lydia/router.rb', line 12
def request
@request
end
|
#response ⇒ Object
Returns the value of attribute response.
12
13
14
|
# File 'lib/lydia/router.rb', line 12
def response
@response
end
|
Class Method Details
.namespace(pattern, _options = {}) ⇒ Object
25
26
27
28
29
30
|
# File 'lib/lydia/router.rb', line 25
def namespace(pattern, _options = {})
prev_namespace = @namespace ||= ''
@namespace += pattern
yield
@namespace = prev_namespace
end
|
.routes ⇒ Object
15
16
17
|
# File 'lib/lydia/router.rb', line 15
def routes
@routes ||= Hash.new { |h, k| h[k] = [] }
end
|
Instance Method Details
#_call(env) ⇒ Object
45
46
47
48
49
50
|
# File 'lib/lydia/router.rb', line 45
def _call(env)
@env = env
@request = new_request(env)
@response = new_response
process
end
|
#call(env) ⇒ Object
41
42
43
|
# File 'lib/lydia/router.rb', line 41
def call(env)
dup._call(env)
end
|
#dispatch(env) ⇒ Object
74
75
76
77
78
79
80
81
82
83
|
# File 'lib/lydia/router.rb', line 74
def dispatch(env)
routes[env['REQUEST_METHOD']].each do |route|
next unless route.match?(env)
@request.params.merge!(route.params) if route.params
catch(:next_route) do
return instance_eval(&route.block)
end
end
raise(NotFound, 'Not found')
end
|
#halt(input = nil) ⇒ Object
37
38
39
|
# File 'lib/lydia/router.rb', line 37
def halt(input = nil)
raise(Halted.new(input || halted), 'Halt')
end
|
#new_request(env) ⇒ Object
52
53
54
|
# File 'lib/lydia/router.rb', line 52
def new_request(env)
Rack::Request.new(env)
end
|
#new_response(body = [], status = 200, header = {}) ⇒ Object
56
57
58
|
# File 'lib/lydia/router.rb', line 56
def new_response(body = [], status = 200, = {})
Rack::Response.new(body, status, )
end
|
#next_route ⇒ Object
33
34
35
|
# File 'lib/lydia/router.rb', line 33
def next_route
throw :next_route
end
|
#process ⇒ Object
60
61
62
63
64
65
66
67
68
|
# File 'lib/lydia/router.rb', line 60
def process
dispatch(env)
rescue NotFound
not_found(env)
rescue Halted => exception
exception.content
rescue StandardError => exception
internal_server_error(env, exception)
end
|
#routes ⇒ Object
70
71
72
|
# File 'lib/lydia/router.rb', line 70
def routes
self.class.routes
end
|