sinatra-swagger-exposer 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/Gemfile +0 -1
- data/README.md +1 -0
- data/lib/sinatra/swagger-exposer/configuration/swagger-configuration-utilities.rb +124 -0
- data/lib/sinatra/swagger-exposer/configuration/swagger-endpoint-parameter.rb +15 -20
- data/lib/sinatra/swagger-exposer/configuration/swagger-endpoint-response.rb +39 -7
- data/lib/sinatra/swagger-exposer/configuration/swagger-endpoint.rb +21 -8
- data/lib/sinatra/swagger-exposer/configuration/swagger-hash-like.rb +45 -0
- data/lib/sinatra/swagger-exposer/configuration/swagger-info.rb +9 -8
- data/lib/sinatra/swagger-exposer/configuration/swagger-response-header.rb +68 -0
- data/lib/sinatra/swagger-exposer/configuration/swagger-response-headers.rb +33 -0
- data/lib/sinatra/swagger-exposer/configuration/swagger-type-property.rb +7 -6
- data/lib/sinatra/swagger-exposer/configuration/swagger-type.rb +10 -9
- data/lib/sinatra/swagger-exposer/configuration/swagger-types.rb +4 -20
- data/lib/sinatra/swagger-exposer/processing/swagger-array-value-processor.rb +46 -0
- data/lib/sinatra/swagger-exposer/processing/{swagger-base-value-preprocessor.rb → swagger-base-value-processor.rb} +9 -7
- data/lib/sinatra/swagger-exposer/processing/{swagger-parameter-preprocessor.rb → swagger-parameter-processor.rb} +9 -9
- data/lib/sinatra/swagger-exposer/processing/{swagger-primitive-value-preprocessor.rb → swagger-primitive-value-processor.rb} +46 -46
- data/lib/sinatra/swagger-exposer/processing/{swagger-preprocessor-dispatcher.rb → swagger-processor-dispatcher.rb} +11 -11
- data/lib/sinatra/swagger-exposer/processing/swagger-request-processor.rb +123 -0
- data/lib/sinatra/swagger-exposer/processing/swagger-response-processor.rb +47 -0
- data/lib/sinatra/swagger-exposer/processing/swagger-type-value-processor.rb +37 -0
- data/lib/sinatra/swagger-exposer/swagger-content-creator.rb +3 -7
- data/lib/sinatra/swagger-exposer/swagger-exposer.rb +99 -33
- data/lib/sinatra/swagger-exposer/swagger-parameter-helper.rb +19 -19
- data/lib/sinatra/swagger-exposer/swagger-request-processor-creator.rb +180 -0
- data/lib/sinatra/swagger-exposer/version.rb +1 -1
- data/sinatra-swagger-exposer.gemspec +9 -8
- metadata +29 -11
- data/lib/sinatra/swagger-exposer/processing/swagger-array-value-preprocessor.rb +0 -46
- data/lib/sinatra/swagger-exposer/processing/swagger-request-preprocessor.rb +0 -64
- data/lib/sinatra/swagger-exposer/processing/swagger-type-value-preprocessor.rb +0 -37
- data/lib/sinatra/swagger-exposer/swagger-preprocessor-creator.rb +0 -137
- data/lib/sinatra/swagger-exposer/swagger-utilities.rb +0 -108
@@ -25,16 +25,16 @@ module Sinatra
|
|
25
25
|
TYPE_ARRAY = 'array'
|
26
26
|
|
27
27
|
PRIMITIVE_TYPES = [
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
28
|
+
TYPE_INTEGER,
|
29
|
+
TYPE_LONG,
|
30
|
+
TYPE_FLOAT,
|
31
|
+
TYPE_DOUBLE,
|
32
|
+
TYPE_STRING,
|
33
|
+
TYPE_BYTE,
|
34
|
+
TYPE_BOOLEAN,
|
35
|
+
TYPE_DATE,
|
36
|
+
TYPE_DATE_TIME,
|
37
|
+
TYPE_PASSWORD,
|
38
38
|
]
|
39
39
|
|
40
40
|
TYPE_FILE = 'file'
|
@@ -56,15 +56,15 @@ module Sinatra
|
|
56
56
|
PARAMS_MAX_LENGTH = :maxLength
|
57
57
|
|
58
58
|
PARAMS_LIST = [
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
59
|
+
PARAMS_FORMAT,
|
60
|
+
PARAMS_DEFAULT,
|
61
|
+
PARAMS_EXAMPLE,
|
62
|
+
PARAMS_MINIMUM,
|
63
|
+
PARAMS_MAXIMUM,
|
64
|
+
PARAMS_EXCLUSIVE_MINIMUM,
|
65
|
+
PARAMS_EXCLUSIVE_MAXIMUM,
|
66
|
+
PARAMS_MIN_LENGTH,
|
67
|
+
PARAMS_MAX_LENGTH,
|
68
68
|
]
|
69
69
|
|
70
70
|
end
|
@@ -0,0 +1,180 @@
|
|
1
|
+
require_relative 'swagger-parameter-helper'
|
2
|
+
|
3
|
+
require_relative 'processing/swagger-array-value-processor'
|
4
|
+
require_relative 'processing/swagger-processor-dispatcher'
|
5
|
+
require_relative 'processing/swagger-primitive-value-processor'
|
6
|
+
require_relative 'processing/swagger-request-processor'
|
7
|
+
require_relative 'processing/swagger-response-processor'
|
8
|
+
require_relative 'processing/swagger-type-value-processor'
|
9
|
+
|
10
|
+
module Sinatra
|
11
|
+
|
12
|
+
module SwaggerExposer
|
13
|
+
|
14
|
+
# Create processor from configuration
|
15
|
+
class SwaggerProcessorCreator
|
16
|
+
|
17
|
+
include Sinatra::SwaggerExposer::SwaggerParameterHelper
|
18
|
+
|
19
|
+
# Initialize
|
20
|
+
# @param types [Sinatra::SwaggerExposer::SwaggerTypes]
|
21
|
+
def initialize(types)
|
22
|
+
@types = types
|
23
|
+
end
|
24
|
+
|
25
|
+
# Create an endpoint processor
|
26
|
+
# @param swagger_endpoint [Sinatra::SwaggerExposer::Configuration::SwaggerEndpoint] the endpoint
|
27
|
+
# @return [Sinatra::SwaggerExposer::Processing::SwaggerRequestProcessor]
|
28
|
+
def create_request_processor(swagger_endpoint)
|
29
|
+
request_processor = Sinatra::SwaggerExposer::Processing::SwaggerRequestProcessor.new(swagger_endpoint.produces)
|
30
|
+
|
31
|
+
swagger_endpoint.parameters.each do |parameter|
|
32
|
+
processor = create_parameter_value_processor(parameter)
|
33
|
+
dispatcher = Sinatra::SwaggerExposer::Processing::SwaggerProcessorDispatcher.new(
|
34
|
+
parameter.how_to_pass,
|
35
|
+
processor
|
36
|
+
)
|
37
|
+
if dispatcher.useful?
|
38
|
+
request_processor.add_dispatcher(dispatcher)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
swagger_endpoint.responses.each_pair do |code, endpoint_response|
|
43
|
+
response_value_processor = create_response_value_processor(endpoint_response)
|
44
|
+
response_processor = Sinatra::SwaggerExposer::Processing::SwaggerResponseProcessor.new(
|
45
|
+
endpoint_response,
|
46
|
+
response_value_processor
|
47
|
+
)
|
48
|
+
request_processor.add_response_processor(
|
49
|
+
code,
|
50
|
+
response_processor.useful? ? response_processor : nil
|
51
|
+
)
|
52
|
+
end
|
53
|
+
|
54
|
+
request_processor
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
# Create a response processor
|
60
|
+
# @param endpoint_response [Sinatra::SwaggerExposer::Configuration::SwaggerEndpointResponse]
|
61
|
+
# @return [Sinatra::SwaggerExposer::Processing::SwaggerTypeValueProcessor]
|
62
|
+
def create_response_value_processor(endpoint_response)
|
63
|
+
response_type = endpoint_response.type
|
64
|
+
if response_type == TYPE_ARRAY
|
65
|
+
processor_for_values = create_processor_for_type('Response', endpoint_response.items, false)
|
66
|
+
Sinatra::SwaggerExposer::Processing::SwaggerArrayValueProcessor.new('Response', true, processor_for_values)
|
67
|
+
elsif response_type == TYPE_FILE
|
68
|
+
# Don't validate the files' content
|
69
|
+
nil
|
70
|
+
elsif response_type
|
71
|
+
create_processor_for_type('Response', response_type, false)
|
72
|
+
else
|
73
|
+
nil
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Create a parameter processor for a parameter
|
78
|
+
# @param parameter [Sinatra::SwaggerExposer::Configuration::SwaggerEndpointParameter]
|
79
|
+
# @return [Sinatra::SwaggerExposer::Processing::SwaggerTypeValueProcessor]
|
80
|
+
def create_parameter_value_processor(parameter)
|
81
|
+
type_name = parameter.type
|
82
|
+
if type_name == TYPE_ARRAY
|
83
|
+
if PRIMITIVE_TYPES.include? parameter.items
|
84
|
+
processor_for_values = Sinatra::SwaggerExposer::Processing::SwaggerPrimitiveValueProcessor.new(
|
85
|
+
parameter.name,
|
86
|
+
false,
|
87
|
+
parameter.items,
|
88
|
+
parameter.default,
|
89
|
+
parameter.params
|
90
|
+
)
|
91
|
+
else
|
92
|
+
processor_for_values = create_processor_for_type(parameter.name, parameter.items, false)
|
93
|
+
end
|
94
|
+
Sinatra::SwaggerExposer::Processing::SwaggerArrayValueProcessor.new(
|
95
|
+
parameter.name,
|
96
|
+
parameter.required,
|
97
|
+
processor_for_values
|
98
|
+
)
|
99
|
+
elsif PRIMITIVE_TYPES.include? type_name
|
100
|
+
Sinatra::SwaggerExposer::Processing::SwaggerPrimitiveValueProcessor.new(
|
101
|
+
parameter.name,
|
102
|
+
parameter.required,
|
103
|
+
type_name,
|
104
|
+
parameter.default,
|
105
|
+
parameter.params
|
106
|
+
)
|
107
|
+
else
|
108
|
+
create_processor_for_type(parameter.name, parameter.type, parameter.required)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# Create a type parameter processor for a type parameter
|
113
|
+
# @param parameter_name [String] the parameter name
|
114
|
+
# @param parameter_type [String] the parameter type
|
115
|
+
# @param parameter_required [TrueClass] if the parameter is required
|
116
|
+
# @return [Sinatra::SwaggerExposer::Processing::SwaggerTypeValueProcessor]
|
117
|
+
def create_processor_for_type(parameter_name, parameter_type, parameter_required)
|
118
|
+
attributes_processors = create_attributes_processors_for_type(parameter_type)
|
119
|
+
Sinatra::SwaggerExposer::Processing::SwaggerTypeValueProcessor.new(
|
120
|
+
parameter_name,
|
121
|
+
parameter_required,
|
122
|
+
attributes_processors
|
123
|
+
)
|
124
|
+
end
|
125
|
+
|
126
|
+
# Get attributes processor for a type
|
127
|
+
# @param type_name [String] the type name
|
128
|
+
# @return [Array<Sinatra::SwaggerExposer::Processing::SwaggerBaseValueProcessor>]
|
129
|
+
def create_attributes_processors_for_type(type_name)
|
130
|
+
type = @types[type_name]
|
131
|
+
attributes_processors = []
|
132
|
+
type.properties.each_pair do |property_name, property|
|
133
|
+
attributes_processors <<
|
134
|
+
create_processor_for_property(
|
135
|
+
property_name,
|
136
|
+
property,
|
137
|
+
type.required.include?(property.name)
|
138
|
+
)
|
139
|
+
end
|
140
|
+
if type.extends
|
141
|
+
attributes_processors = attributes_processors + create_attributes_processors_for_type(type.extends)
|
142
|
+
end
|
143
|
+
attributes_processors
|
144
|
+
end
|
145
|
+
|
146
|
+
# Create a processor for a type property
|
147
|
+
# @param type_property [Sinatra::SwaggerExposer::Configuration::SwaggerTypeProperty]
|
148
|
+
# @return [Sinatra::SwaggerExposer::Processing::SwaggerBaseValueProcessor]
|
149
|
+
def create_processor_for_property(name, type_property, required)
|
150
|
+
property_type = type_property.type
|
151
|
+
if property_type == TYPE_ARRAY
|
152
|
+
if PRIMITIVE_TYPES.include? type_property.items
|
153
|
+
processor_for_values = Sinatra::SwaggerExposer::Processing::SwaggerPrimitiveValueProcessor.new(
|
154
|
+
name,
|
155
|
+
false,
|
156
|
+
type_property.items,
|
157
|
+
type_property.properties[:default],
|
158
|
+
type_property.properties
|
159
|
+
)
|
160
|
+
else
|
161
|
+
processor_for_values = create_processor_for_type(name, type_property.items, false)
|
162
|
+
end
|
163
|
+
Sinatra::SwaggerExposer::Processing::SwaggerArrayValueProcessor.new(name, required, processor_for_values)
|
164
|
+
elsif PRIMITIVE_TYPES.include? property_type
|
165
|
+
Sinatra::SwaggerExposer::Processing::SwaggerPrimitiveValueProcessor.new(
|
166
|
+
name,
|
167
|
+
required,
|
168
|
+
property_type,
|
169
|
+
type_property.properties[:default],
|
170
|
+
type_property.properties
|
171
|
+
)
|
172
|
+
else
|
173
|
+
create_processor_for_type(name, property_type, required)
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
end
|
178
|
+
|
179
|
+
end
|
180
|
+
end
|
@@ -6,19 +6,20 @@ require 'sinatra/swagger-exposer/version'
|
|
6
6
|
excluded_patterns = ['test/', 'example/', '.travis.yml', '.gitignore']
|
7
7
|
|
8
8
|
Gem::Specification.new do |spec|
|
9
|
-
spec.name
|
10
|
-
spec.version
|
11
|
-
spec.authors
|
9
|
+
spec.name = 'sinatra-swagger-exposer'
|
10
|
+
spec.version = Sinatra::SwaggerExposer::VERSION
|
11
|
+
spec.authors = ['Julien Kirch']
|
12
12
|
|
13
|
-
spec.summary
|
14
|
-
spec.description
|
15
|
-
spec.homepage
|
16
|
-
spec.license
|
13
|
+
spec.summary = %q{Expose swagger API from your Sinatra app}
|
14
|
+
spec.description = %q{This Sinatra extension enable you to add metadata to your code to expose your API as a Swagger endpoint and to validate and enrich the invocation parameters}
|
15
|
+
spec.homepage = 'https://github.com/archiloque/sinatra-swagger-exposer'
|
16
|
+
spec.license = 'MIT'
|
17
17
|
|
18
|
-
spec.files
|
18
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| excluded_patterns.any? { |ep| f.start_with?(ep) } }
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
21
|
spec.add_dependency 'sinatra', '~> 1.4'
|
22
|
+
spec.add_dependency 'mime-types', '~> 2.6.2'
|
22
23
|
|
23
24
|
spec.add_development_dependency 'bundler'
|
24
25
|
spec.add_development_dependency 'rake', '~> 10.0'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra-swagger-exposer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Julien Kirch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.4'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: mime-types
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.6.2
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.6.2
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -107,27 +121,31 @@ files:
|
|
107
121
|
- LICENSE.txt
|
108
122
|
- README.md
|
109
123
|
- Rakefile
|
124
|
+
- lib/sinatra/swagger-exposer/configuration/swagger-configuration-utilities.rb
|
110
125
|
- lib/sinatra/swagger-exposer/configuration/swagger-endpoint-parameter.rb
|
111
126
|
- lib/sinatra/swagger-exposer/configuration/swagger-endpoint-response.rb
|
112
127
|
- lib/sinatra/swagger-exposer/configuration/swagger-endpoint.rb
|
128
|
+
- lib/sinatra/swagger-exposer/configuration/swagger-hash-like.rb
|
113
129
|
- lib/sinatra/swagger-exposer/configuration/swagger-info.rb
|
114
130
|
- lib/sinatra/swagger-exposer/configuration/swagger-parameter-validation-helper.rb
|
131
|
+
- lib/sinatra/swagger-exposer/configuration/swagger-response-header.rb
|
132
|
+
- lib/sinatra/swagger-exposer/configuration/swagger-response-headers.rb
|
115
133
|
- lib/sinatra/swagger-exposer/configuration/swagger-type-property.rb
|
116
134
|
- lib/sinatra/swagger-exposer/configuration/swagger-type.rb
|
117
135
|
- lib/sinatra/swagger-exposer/configuration/swagger-types.rb
|
118
|
-
- lib/sinatra/swagger-exposer/processing/swagger-array-value-
|
119
|
-
- lib/sinatra/swagger-exposer/processing/swagger-base-value-
|
120
|
-
- lib/sinatra/swagger-exposer/processing/swagger-parameter-
|
121
|
-
- lib/sinatra/swagger-exposer/processing/swagger-
|
122
|
-
- lib/sinatra/swagger-exposer/processing/swagger-
|
123
|
-
- lib/sinatra/swagger-exposer/processing/swagger-request-
|
124
|
-
- lib/sinatra/swagger-exposer/processing/swagger-
|
136
|
+
- lib/sinatra/swagger-exposer/processing/swagger-array-value-processor.rb
|
137
|
+
- lib/sinatra/swagger-exposer/processing/swagger-base-value-processor.rb
|
138
|
+
- lib/sinatra/swagger-exposer/processing/swagger-parameter-processor.rb
|
139
|
+
- lib/sinatra/swagger-exposer/processing/swagger-primitive-value-processor.rb
|
140
|
+
- lib/sinatra/swagger-exposer/processing/swagger-processor-dispatcher.rb
|
141
|
+
- lib/sinatra/swagger-exposer/processing/swagger-request-processor.rb
|
142
|
+
- lib/sinatra/swagger-exposer/processing/swagger-response-processor.rb
|
143
|
+
- lib/sinatra/swagger-exposer/processing/swagger-type-value-processor.rb
|
125
144
|
- lib/sinatra/swagger-exposer/swagger-content-creator.rb
|
126
145
|
- lib/sinatra/swagger-exposer/swagger-exposer.rb
|
127
146
|
- lib/sinatra/swagger-exposer/swagger-invalid-exception.rb
|
128
147
|
- lib/sinatra/swagger-exposer/swagger-parameter-helper.rb
|
129
|
-
- lib/sinatra/swagger-exposer/swagger-
|
130
|
-
- lib/sinatra/swagger-exposer/swagger-utilities.rb
|
148
|
+
- lib/sinatra/swagger-exposer/swagger-request-processor-creator.rb
|
131
149
|
- lib/sinatra/swagger-exposer/version.rb
|
132
150
|
- sinatra-swagger-exposer.gemspec
|
133
151
|
homepage: https://github.com/archiloque/sinatra-swagger-exposer
|
@@ -1,46 +0,0 @@
|
|
1
|
-
require_relative '../swagger-parameter-helper'
|
2
|
-
require_relative '../swagger-invalid-exception'
|
3
|
-
require_relative 'swagger-base-value-preprocessor'
|
4
|
-
|
5
|
-
module Sinatra
|
6
|
-
|
7
|
-
module SwaggerExposer
|
8
|
-
|
9
|
-
module Processing
|
10
|
-
|
11
|
-
# Validate arrays parameters
|
12
|
-
class SwaggerArrayValuePreprocessor < SwaggerBaseValuePreprocessor
|
13
|
-
|
14
|
-
include Sinatra::SwaggerExposer::SwaggerParameterHelper
|
15
|
-
|
16
|
-
attr_reader :preprocessor_for_values
|
17
|
-
|
18
|
-
# Initialize
|
19
|
-
# @param name [String] the name
|
20
|
-
# @param required [TrueClass] if the parameter is required
|
21
|
-
# @param preprocessor_for_values [Sinatra::SwaggerExposer::Processing::SwaggerBaseValuePreprocessor] processor for the values
|
22
|
-
def initialize(name, required, preprocessor_for_values)
|
23
|
-
super(name, required)
|
24
|
-
@preprocessor_for_values = preprocessor_for_values
|
25
|
-
end
|
26
|
-
|
27
|
-
def useful?
|
28
|
-
true
|
29
|
-
end
|
30
|
-
|
31
|
-
def validate_param_value(value)
|
32
|
-
if value
|
33
|
-
if value.is_a? Array
|
34
|
-
value.collect { |i| @preprocessor_for_values.validate_param_value(i) }
|
35
|
-
else
|
36
|
-
raise SwaggerInvalidException.new("Parameter [#{name}] should be an array but is [#{value}]")
|
37
|
-
end
|
38
|
-
else
|
39
|
-
nil
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
|
3
|
-
require_relative '../swagger-invalid-exception'
|
4
|
-
|
5
|
-
module Sinatra
|
6
|
-
|
7
|
-
module SwaggerExposer
|
8
|
-
|
9
|
-
module Processing
|
10
|
-
|
11
|
-
# A preprocessor for a request, apply the parameters preprocessors then execute the query code
|
12
|
-
class SwaggerRequestPreprocessor
|
13
|
-
|
14
|
-
attr_reader :preprocessors_dispatchers
|
15
|
-
|
16
|
-
def initialize
|
17
|
-
@preprocessors_dispatchers = []
|
18
|
-
end
|
19
|
-
|
20
|
-
def add_dispatcher(dispatcher)
|
21
|
-
@preprocessors_dispatchers << dispatcher
|
22
|
-
end
|
23
|
-
|
24
|
-
VALID_JSON_CONTENT_TYPES = ['application/json', 'application/json; charset=utf-8']
|
25
|
-
|
26
|
-
# Run the preprocessor the call the route content
|
27
|
-
# @param app the sinatra app being run
|
28
|
-
# @params block_params [Array] the block parameters
|
29
|
-
# @param block the block containing the route content
|
30
|
-
def run(app, block_params, &block)
|
31
|
-
parsed_body = {}
|
32
|
-
if VALID_JSON_CONTENT_TYPES.include? app.env['CONTENT_TYPE']
|
33
|
-
body = app.request.body.read
|
34
|
-
unless body.empty?
|
35
|
-
begin
|
36
|
-
parsed_body = JSON.parse(body)
|
37
|
-
rescue JSON::ParserError => e
|
38
|
-
return [400, {:code => 400, :message => e.message}.to_json]
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
app.params['parsed_body'] = parsed_body
|
43
|
-
unless @preprocessors_dispatchers.empty?
|
44
|
-
@preprocessors_dispatchers.each do |preprocessor_dispatcher|
|
45
|
-
begin
|
46
|
-
preprocessor_dispatcher.process(app, parsed_body)
|
47
|
-
rescue SwaggerInvalidException => e
|
48
|
-
app.content_type :json
|
49
|
-
return [400, {:code => 400, :message => e.message}.to_json]
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
if block
|
54
|
-
# Execute the block in the context of the app
|
55
|
-
app.instance_exec(*block_params, &block)
|
56
|
-
else
|
57
|
-
''
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|