Module: Sinatra::Browse
- Defined in:
- lib/sinatra/browse/parameter_types/date_time.rb,
lib/sinatra/browse/parameter_types/min_max.rb,
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/route.rb,
lib/sinatra/browse.rb
Defined Under Namespace
Modules: ParameterTypes Classes: BrowseFormat, ErbTemplate, JSON, ParameterType, Route, Validator, YAML
Class Method Summary collapse
- .format(f, browse_routes) ⇒ 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)
-
#parameter(name, type, options = {}) ⇒ Object
(also: #param)
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 |
.registered(app) ⇒ Object
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 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/sinatra/browse.rb', line 94 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
144 145 146 147 148 149 |
# File 'lib/sinatra/browse.rb', line 144 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
68 69 70 |
# File 'lib/sinatra/browse.rb', line 68 def browse_description @_browse_description ||= "" end |
#browse_routes ⇒ Object
64 65 66 |
# File 'lib/sinatra/browse.rb', line 64 def browse_routes @_browse_routes ||= {} end |
#browse_routes_for(request_method, path_info) ⇒ Object
72 73 74 |
# File 'lib/sinatra/browse.rb', line 72 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
76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/sinatra/browse.rb', line 76 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
89 90 91 92 |
# File 'lib/sinatra/browse.rb', line 89 def default_on_error(&blk) @default_on_error = blk if block_given? @default_on_error end |
#describe(description) ⇒ Object Also known as: desc
48 49 50 |
# File 'lib/sinatra/browse.rb', line 48 def describe(description) @_browse_description = description end |
#parameter(name, type, options = {}) ⇒ Object Also known as: param
Main DSL methods
33 34 35 |
# File 'lib/sinatra/browse.rb', line 33 def parameter(name, type, = {}) temp_browse_params[name] = .merge({ type: type }) end |
#parameter_options(parameter, options) ⇒ Object Also known as: param_options
38 39 40 41 42 43 44 45 |
# File 'lib/sinatra/browse.rb', line 38 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
60 61 62 |
# File 'lib/sinatra/browse.rb', line 60 def reset_temp_params @_temp_browse_params = {} end |
#temp_browse_params ⇒ Object
Internal stuff
56 57 58 |
# File 'lib/sinatra/browse.rb', line 56 def temp_browse_params @_temp_browse_params ||= reset_temp_params end |