11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
# File 'lib/sinatra/swagger/spec_enforcer.rb', line 11
def self.registered(app)
app.helpers Helpers
app.before do
spec = swagger_spec
unless spec.nil?
_, captures, spec = spec.values
invalidities = Hash[(spec['parameters'] || []).map { |details|
param_name = details['name']
parameter = case details['in']
when "query"
params[param_name]
when "path"
captures[param_name]
else
raise NotImplementedError, "Can't cope with #{details['in']} parameters right now"
end
if !parameter
next [param_name, :missing] if details['required'] && details['required'] != "false"
next unless details['default']
parameter = details['default']
end
begin
parameter = ::Swagger.cast(parameter.to_s, details['type']) if parameter
rescue ArgumentError
next [param_name, :incorrect_type]
end
if %w{integer number}.include? details['type']
too_large = details['maximum'] && parameter > details['maximum']
too_small = details['minimum'] && parameter < details['minimum']
next [param_name, :out_of_range] if too_large || too_small
end
params[param_name] = parameter
nil
}.compact]
halt 400, invalidities.to_json if invalidities.any?
end
end
end
|