Class: Rackables::SimpleEndpoint
- Inherits:
-
Object
- Object
- Rackables::SimpleEndpoint
- Defined in:
- lib/rackables/simple_endpoint.rb
Overview
Simplest example:
use Rackables::SimpleEndpoint, '/ping_monitor' do
'pong'
end
HTTP verb requirements can optionally be specified:
use Rackables::SimpleEndpoint, '/ping_monitor' => :get do
'only GET requests will match'
end
use Rackables::SimpleEndpoint, '/ping_monitor' => [:get, :post] do
'only GET and POST requests will match'
end
Rack::Request Rack::Response objects are yielded to block:
use Rackables::SimpleEndpoint, '/json' do |request, response|
response['Content-Type'] = 'application/json'
%({"foo": "#{request[:foo]}"})
end
Example with regular expression – match data object is yielded as third argument to block
use Rackables::SimpleEndpoint, %r{^/(john|paul|george|ringo)} do |request, response, match|
"Hello, #{match[1]}"
end
A :pass symbol returned from block will not return a response; control will continue down the Rack stack:
use Rackables::SimpleEndpoint, '/api_key' do |request, response|
request.env['myapp.user']. ? '12345' : :pass
end
# Unauthorized access to /api_key will receive a 404
run NotFoundApp
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(app, arg, &block) ⇒ SimpleEndpoint
constructor
A new instance of SimpleEndpoint.
Constructor Details
#initialize(app, arg, &block) ⇒ SimpleEndpoint
Returns a new instance of SimpleEndpoint.
43 44 45 46 47 48 |
# File 'lib/rackables/simple_endpoint.rb', line 43 def initialize(app, arg, &block) @app = app @path = extract_path(arg) @verbs = extract_verbs(arg) @block = block end |
Instance Method Details
#call(env) ⇒ Object
50 51 52 53 54 55 56 57 58 59 |
# File 'lib/rackables/simple_endpoint.rb', line 50 def call(env) match = match_path(env['PATH_INFO']) if match && valid_method?(env['REQUEST_METHOD']) request, response = ::Rack::Request.new(env), ::Rack::Response.new response.body = @block.call(request, response, (match unless match == true)) response.body == :pass ? @app.call(env) : response.finish else @app.call(env) end end |