module Sinatra::Browse
Public Class Methods
format(f, browse_routes)
click to toggle source
# File lib/sinatra/browse/format.rb, line 6 def self.format(f, browse_routes) case f when "html" ErbTemplate.new(browse_routes, "html.erb") when "json" JSON.new(browse_routes) when "yaml", "yml" YAML.new(browse_routes) when "markdown" ErbTemplate.new(browse_routes, "markdown.erb") end end
registered(app)
click to toggle source
# File lib/sinatra/browse.rb, line 93 def self.registered(app) @app = app app.enable :remove_undefined_parameters app.set allowed_undefined_parameters: [] app.disable :show_head_routes app.class_eval { def _default_on_error(error_hash) halt 400, { error: "parameter validation failed", parameter: error_hash[:parameter], value: error_hash[:value], reason: error_hash[:reason] }.to_json end } app.default_on_error { |error_hash| _default_on_error(error_hash) } app.before do browse_route = app.browse_routes_for(request.request_method, request.path_info) if browse_route if settings.remove_undefined_parameters browse_route.delete_undefined(params, settings.allowed_undefined_parameters) end validation_successful, error_hash = browse_route.process(params) unless validation_successful if error_hash[:on_error].respond_to?(:to_proc) error_proc = error_hash.delete(:on_error).to_proc instance_exec error_hash, &error_proc else instance_exec error_hash, &app.default_on_error end end end end app.describe "Displays this browsable API." app.param :format, :String, in: ["html", "json", "yaml", "yml"], default: "html" app.get '/browse' do Sinatra::Browse.format(params["format"], app.browse_routes).generate end end
route_added(verb, path, block)
click to toggle source
# File lib/sinatra/browse.rb, line 143 def self.route_added(verb, path, block) return if verb == "HEAD" && !@app.settings.show_head_routes @app.create_browse_route(verb, path) @app.reset_temp_params @app.desc "" end
Public Instance Methods
_default_on_error(error_hash)
click to toggle source
# File lib/sinatra/browse.rb, line 102 def _default_on_error(error_hash) halt 400, { error: "parameter validation failed", parameter: error_hash[:parameter], value: error_hash[:value], reason: error_hash[:reason] }.to_json end
browse_description()
click to toggle source
# File lib/sinatra/browse.rb, line 67 def browse_description @_browse_description ||= "" end
browse_routes()
click to toggle source
# File lib/sinatra/browse.rb, line 63 def browse_routes @_browse_routes ||= {} end
browse_routes_for(request_method, path_info)
click to toggle source
# File lib/sinatra/browse.rb, line 71 def browse_routes_for(request_method, path_info) browse_routes.values.find { |v| v.matches?(request_method, path_info) } end
create_browse_route(request_method, path_info, description = browse_description, new_params = temp_browse_params)
click to toggle source
# File lib/sinatra/browse.rb, line 75 def create_browse_route(request_method, path_info, description = browse_description, new_params = temp_browse_params) new_route = Route.new(request_method, path_info, browse_description, new_params) browse_routes[new_route.name] = new_route end
default_on_error(&blk)
click to toggle source
# File lib/sinatra/browse.rb, line 88 def default_on_error(&blk) @default_on_error = blk if block_given? @default_on_error end
describe(description)
click to toggle source
# File lib/sinatra/browse.rb, line 47 def describe(description) @_browse_description = description end
Also aliased as: desc
parameter(name, type, options = {})
click to toggle source
Main DSL methods
# File lib/sinatra/browse.rb, line 32 def parameter(name, type, options = {}) temp_browse_params[name] = options.merge({ type: type }) end
Also aliased as: param
parameter_options(parameter, options)
click to toggle source
# File lib/sinatra/browse.rb, line 37 def parameter_options(parameter, options) if temp_browse_params[parameter].nil? msg = "Tried to override undeclared parameter #{parameter}" raise Errors::UnknownParameterError, msg end temp_browse_params[parameter].merge! options end
Also aliased as: param_options
reset_temp_params()
click to toggle source
# File lib/sinatra/browse.rb, line 59 def reset_temp_params @_temp_browse_params = {} end
temp_browse_params()
click to toggle source
Internal stuff
# File lib/sinatra/browse.rb, line 55 def temp_browse_params @_temp_browse_params ||= reset_temp_params end