Module: Sinatra::Browse
- Defined in:
- lib/sinatra/browse/parameter_types/integer.rb,
lib/sinatra/browse/parameter_types/boolean.rb,
lib/sinatra/browse/parameter_types/string.rb,
lib/sinatra/browse/parameter_types/float.rb,
lib/sinatra/browse/parameter_type.rb,
lib/sinatra/browse/validator.rb,
lib/sinatra/browse/format.rb,
lib/sinatra/browse/errors.rb,
lib/sinatra/browse/route.rb,
lib/sinatra/browse.rb
Defined Under Namespace
Modules: Errors Classes: BrowseFormat, ErbTemplate, JSON, ParameterType, Route, Validator, YAML
Class Method Summary collapse
- .format(f, browse_routes) ⇒ Object
- .parameter_type(name, &blk) ⇒ Object
- .registered(app) ⇒ Object
- .route_added(verb, path, block) ⇒ Object
Instance Method Summary collapse
- #browse_description ⇒ Object
- #browse_routes ⇒ Object
- #browse_routes_for(request_method, path_info) ⇒ Object
- #create_browse_route(request_method, path_info, description = browse_description, new_params = temp_browse_params) ⇒ Object
- #default_on_error(&blk) ⇒ Object
- #describe(description) ⇒ Object (also: #desc)
-
#param(name, type, options = {}) ⇒ Object
Main DSL methods.
- #parameter_options(parameter, options) ⇒ Object (also: #param_options)
- #reset_temp_params ⇒ Object
-
#temp_browse_params ⇒ Object
Internal stuff.
Class Method Details
.format(f, browse_routes) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/sinatra/browse/format.rb', line 7 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 |
.parameter_type(name, &blk) ⇒ Object
4 5 6 |
# File 'lib/sinatra/browse/parameter_type.rb', line 4 def self.parameter_type(name, &blk) const_set "#{name}Type", Class.new(ParameterType, &blk) end |
.registered(app) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/sinatra/browse.rb', line 74 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) ⇒ Object
124 125 126 127 128 129 |
# File 'lib/sinatra/browse.rb', line 124 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 |
Instance Method Details
#browse_description ⇒ Object
48 49 50 |
# File 'lib/sinatra/browse.rb', line 48 def browse_description @_browse_description ||= "" end |
#browse_routes ⇒ Object
44 45 46 |
# File 'lib/sinatra/browse.rb', line 44 def browse_routes @_browse_routes ||= {} end |
#browse_routes_for(request_method, path_info) ⇒ Object
52 53 54 |
# File 'lib/sinatra/browse.rb', line 52 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) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/sinatra/browse.rb', line 56 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) ⇒ Object
69 70 71 72 |
# File 'lib/sinatra/browse.rb', line 69 def default_on_error(&blk) @default_on_error = blk if block_given? @default_on_error end |
#describe(description) ⇒ Object Also known as: desc
28 29 30 |
# File 'lib/sinatra/browse.rb', line 28 def describe(description) @_browse_description = description end |
#param(name, type, options = {}) ⇒ Object
Main DSL methods
14 15 16 |
# File 'lib/sinatra/browse.rb', line 14 def param(name, type, = {}) temp_browse_params[name] = .merge({ type: type }) end |
#parameter_options(parameter, options) ⇒ Object Also known as: param_options
18 19 20 21 22 23 24 25 |
# File 'lib/sinatra/browse.rb', line 18 def (parameter, ) if temp_browse_params[parameter].nil? msg = "Tried to override undeclared parameter #{parameter}" raise Errors::UnknownParameterError, msg end temp_browse_params[parameter].merge! end |
#reset_temp_params ⇒ Object
40 41 42 |
# File 'lib/sinatra/browse.rb', line 40 def reset_temp_params @_temp_browse_params = {} end |
#temp_browse_params ⇒ Object
Internal stuff
36 37 38 |
# File 'lib/sinatra/browse.rb', line 36 def temp_browse_params @_temp_browse_params ||= reset_temp_params end |