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
@@ -1,37 +0,0 @@
|
|
1
|
-
require_relative 'swagger-base-value-preprocessor'
|
2
|
-
|
3
|
-
module Sinatra
|
4
|
-
|
5
|
-
module SwaggerExposer
|
6
|
-
|
7
|
-
module Processing
|
8
|
-
|
9
|
-
# A preprocessor for a type parameter
|
10
|
-
class SwaggerTypeValuePreprocessor < SwaggerBaseValuePreprocessor
|
11
|
-
|
12
|
-
attr_reader :attributes_preprocessors
|
13
|
-
|
14
|
-
# Initialize
|
15
|
-
# @param name [String] the name
|
16
|
-
# @param required [TrueClass] if the parameter is required
|
17
|
-
# @param attributes_preprocessors [Array[Sinatra::SwaggerExposer::Processing::SwaggerBaseValuePreprocessor]] the attributes preprocessors
|
18
|
-
def initialize(name, required, attributes_preprocessors)
|
19
|
-
super(name, required)
|
20
|
-
@attributes_preprocessors = attributes_preprocessors
|
21
|
-
end
|
22
|
-
|
23
|
-
def useful?
|
24
|
-
super || (!(@attributes_preprocessors.empty?))
|
25
|
-
end
|
26
|
-
|
27
|
-
def validate_param_value(value)
|
28
|
-
@attributes_preprocessors.each do |attribute_preprocessor|
|
29
|
-
attribute_preprocessor.process(value)
|
30
|
-
end
|
31
|
-
value
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,137 +0,0 @@
|
|
1
|
-
require_relative 'swagger-utilities'
|
2
|
-
require_relative 'processing/swagger-array-value-preprocessor'
|
3
|
-
require_relative 'processing/swagger-preprocessor-dispatcher'
|
4
|
-
require_relative 'processing/swagger-primitive-value-preprocessor'
|
5
|
-
require_relative 'processing/swagger-request-preprocessor'
|
6
|
-
require_relative 'processing/swagger-type-value-preprocessor'
|
7
|
-
|
8
|
-
module Sinatra
|
9
|
-
|
10
|
-
module SwaggerExposer
|
11
|
-
|
12
|
-
# Create processor from configuration
|
13
|
-
class SwaggerPreprocessorCreator
|
14
|
-
|
15
|
-
include Sinatra::SwaggerExposer::SwaggerUtilities
|
16
|
-
|
17
|
-
# Initialize
|
18
|
-
# @param types [Sinatra::SwaggerExposer::SwaggerTypes]
|
19
|
-
def initialize(types)
|
20
|
-
@types = types
|
21
|
-
end
|
22
|
-
|
23
|
-
# Create an endpoint processor
|
24
|
-
# @param swagger_endpoint [Sinatra::SwaggerExposer::Configuration::SwaggerEndpoint] the endpoint
|
25
|
-
# @return [Sinatra::SwaggerExposer::Processing::SwaggerRequestPreprocessor]
|
26
|
-
def create_endpoint_processor(swagger_endpoint)
|
27
|
-
request_preprocessor = Sinatra::SwaggerExposer::Processing::SwaggerRequestPreprocessor.new
|
28
|
-
swagger_endpoint.parameters.each do |parameter|
|
29
|
-
preprocessor = create_value_preprocessor(parameter)
|
30
|
-
dispatcher = Sinatra::SwaggerExposer::Processing::SwaggerPreprocessorDispatcher.new(parameter.how_to_pass, preprocessor)
|
31
|
-
if dispatcher.useful?
|
32
|
-
request_preprocessor.add_dispatcher(dispatcher)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
request_preprocessor
|
36
|
-
end
|
37
|
-
|
38
|
-
private
|
39
|
-
|
40
|
-
# Create a parameter preprocessor for a parameter
|
41
|
-
# @param parameter [Sinatra::SwaggerExposer::Configuration::SwaggerEndpointParameter]
|
42
|
-
def create_value_preprocessor(parameter)
|
43
|
-
type_name = parameter.type
|
44
|
-
if type_name == TYPE_ARRAY
|
45
|
-
if PRIMITIVE_TYPES.include? parameter.items
|
46
|
-
preprocessor_for_values = Sinatra::SwaggerExposer::Processing::SwaggerPrimitiveValuePreprocessor.new(
|
47
|
-
parameter.name,
|
48
|
-
false,
|
49
|
-
parameter.items,
|
50
|
-
parameter.default,
|
51
|
-
parameter.params
|
52
|
-
)
|
53
|
-
else
|
54
|
-
preprocessor_for_values = create_preprocessor_for_type(parameter.name, parameter.items, false)
|
55
|
-
end
|
56
|
-
Sinatra::SwaggerExposer::Processing::SwaggerArrayValuePreprocessor.new(parameter.name, parameter.required, preprocessor_for_values)
|
57
|
-
elsif PRIMITIVE_TYPES.include? type_name
|
58
|
-
Sinatra::SwaggerExposer::Processing::SwaggerPrimitiveValuePreprocessor.new(
|
59
|
-
parameter.name,
|
60
|
-
parameter.required,
|
61
|
-
type_name,
|
62
|
-
parameter.default,
|
63
|
-
parameter.params
|
64
|
-
)
|
65
|
-
else
|
66
|
-
create_preprocessor_for_type(parameter.name, parameter.type, parameter.required)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
# Create a type parameter preprocessor for a type parameter
|
71
|
-
# @param parameter_name [String] the parameter name
|
72
|
-
# @param parameter_type [String] the parameter type
|
73
|
-
# @param parameter_required [TrueClass] if the parameter is required
|
74
|
-
# @return [Sinatra::SwaggerExposer::Processing::SwaggerTypeValuePreprocessor]
|
75
|
-
def create_preprocessor_for_type(parameter_name, parameter_type, parameter_required)
|
76
|
-
attributes_preprocessors = create_attributes_preprocessors_for_type(parameter_type)
|
77
|
-
Sinatra::SwaggerExposer::Processing::SwaggerTypeValuePreprocessor.new(
|
78
|
-
parameter_name,
|
79
|
-
parameter_required,
|
80
|
-
attributes_preprocessors
|
81
|
-
)
|
82
|
-
end
|
83
|
-
|
84
|
-
# Get attributes preprocessor for a type
|
85
|
-
# @param type_name [String] the type name
|
86
|
-
# @return [Array[Sinatra::SwaggerExposer::Processing::SwaggerPrimitiveValuePreprocessor]]
|
87
|
-
def create_attributes_preprocessors_for_type(type_name)
|
88
|
-
type = @types[type_name]
|
89
|
-
attributes_preprocessors = []
|
90
|
-
type.properties.each_pair do |property_name, property|
|
91
|
-
attributes_preprocessors <<
|
92
|
-
create_preprocessor_for_property(
|
93
|
-
property_name,
|
94
|
-
property,
|
95
|
-
type.required.include?(property.name)
|
96
|
-
)
|
97
|
-
end
|
98
|
-
if type.extends
|
99
|
-
attributes_preprocessors = attributes_preprocessors + create_attributes_preprocessors_for_type(type.extends)
|
100
|
-
end
|
101
|
-
attributes_preprocessors
|
102
|
-
end
|
103
|
-
|
104
|
-
# Create a processor for a type property
|
105
|
-
# @param type_property [Sinatra::SwaggerExposer::Configuration::SwaggerTypeProperty]
|
106
|
-
def create_preprocessor_for_property(name, type_property, required)
|
107
|
-
property_type = type_property.type
|
108
|
-
if property_type == TYPE_ARRAY
|
109
|
-
if PRIMITIVE_TYPES.include? type_property.items
|
110
|
-
preprocessor_for_values = Sinatra::SwaggerExposer::Processing::SwaggerPrimitiveValuePreprocessor.new(
|
111
|
-
name,
|
112
|
-
false,
|
113
|
-
type_property.items,
|
114
|
-
type_property.properties[:default],
|
115
|
-
type_property.properties
|
116
|
-
)
|
117
|
-
else
|
118
|
-
preprocessor_for_values = create_preprocessor_for_type(name, type_property.items, false)
|
119
|
-
end
|
120
|
-
Sinatra::SwaggerExposer::Processing::SwaggerArrayValuePreprocessor.new(name, required, preprocessor_for_values)
|
121
|
-
elsif PRIMITIVE_TYPES.include? property_type
|
122
|
-
Sinatra::SwaggerExposer::Processing::SwaggerPrimitiveValuePreprocessor.new(
|
123
|
-
name,
|
124
|
-
required,
|
125
|
-
property_type,
|
126
|
-
type_property.properties[:default],
|
127
|
-
type_property.properties
|
128
|
-
)
|
129
|
-
else
|
130
|
-
create_preprocessor_for_type(name, property_type, required)
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
end
|
135
|
-
|
136
|
-
end
|
137
|
-
end
|
@@ -1,108 +0,0 @@
|
|
1
|
-
require_relative 'swagger-invalid-exception'
|
2
|
-
require_relative 'swagger-parameter-helper'
|
3
|
-
|
4
|
-
module Sinatra
|
5
|
-
|
6
|
-
module SwaggerExposer
|
7
|
-
|
8
|
-
module SwaggerUtilities
|
9
|
-
|
10
|
-
include ::Sinatra::SwaggerExposer::SwaggerParameterHelper
|
11
|
-
|
12
|
-
def ref_to_type(type)
|
13
|
-
{'$ref' => "#/definitions/#{type}"}
|
14
|
-
end
|
15
|
-
|
16
|
-
def hash_to_swagger(hash)
|
17
|
-
result = {}
|
18
|
-
hash.each_pair do |key, value|
|
19
|
-
result[key] = value.to_swagger
|
20
|
-
end
|
21
|
-
result
|
22
|
-
end
|
23
|
-
|
24
|
-
# Transform a type into a String
|
25
|
-
# @return [String]
|
26
|
-
def type_to_s(value)
|
27
|
-
if [TrueClass, FalseClass].include? value
|
28
|
-
TYPE_BOOLEAN
|
29
|
-
elsif value == DateTime
|
30
|
-
TYPE_DATE_TIME
|
31
|
-
elsif value.is_a? Class
|
32
|
-
value.to_s.downcase
|
33
|
-
else
|
34
|
-
value
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def get_type(type, possible_values)
|
39
|
-
@type = type
|
40
|
-
if type.nil?
|
41
|
-
raise SwaggerInvalidException.new('Type is nil')
|
42
|
-
elsif type.is_a?(String) || @type.is_a?(Class)
|
43
|
-
@type = type_to_s(@type)
|
44
|
-
check_type(@type, possible_values)
|
45
|
-
elsif @type.is_a? Array
|
46
|
-
@items = type_to_s(get_array_type(@type))
|
47
|
-
check_type(@items, possible_values)
|
48
|
-
@type = TYPE_ARRAY
|
49
|
-
else
|
50
|
-
raise SwaggerInvalidException.new("Type [#{@type}] of has an unknown type, should be a class, a string or an array")
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
# Validate if a parameter is in a list of available values
|
55
|
-
# @param params [Hash] the parameters
|
56
|
-
# @param allowed_values [Enumerable, #include?] the allowed values
|
57
|
-
# @param ignored_values [Enumerable, #include?] values to ignore
|
58
|
-
# @return [Hash] the filtered hash
|
59
|
-
def white_list_params(params, allowed_values, ignored_values = [])
|
60
|
-
result = {}
|
61
|
-
params.each_pair do |key, value|
|
62
|
-
if allowed_values.include? key
|
63
|
-
result[key] = value
|
64
|
-
elsif !ignored_values.include?(key)
|
65
|
-
raise SwaggerInvalidException.new("Unknown property [#{key}] with value [#{value}]#{list_or_none(allowed_values, 'properties')}")
|
66
|
-
end
|
67
|
-
end
|
68
|
-
result
|
69
|
-
end
|
70
|
-
|
71
|
-
def list_or_none(list, name)
|
72
|
-
if list.empty?
|
73
|
-
", no available #{name}"
|
74
|
-
else
|
75
|
-
", possible #{name} are #{list.join(', ')}"
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
private
|
80
|
-
|
81
|
-
def get_array_type(array)
|
82
|
-
if array.empty?
|
83
|
-
raise SwaggerInvalidException.new('Type is an empty array, you should specify a type as the array content')
|
84
|
-
elsif array.length > 1
|
85
|
-
raise SwaggerInvalidException.new("Type [#{array}] has more than one entry, it should only have one")
|
86
|
-
else
|
87
|
-
type_to_s(array[0])
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
# Validate if a type is in a list of available values
|
92
|
-
# @param type [String] the parameter
|
93
|
-
# @param allowed_values [Enumerable, #include?] the allowed values
|
94
|
-
# @return [NilClass]
|
95
|
-
def check_type(type, allowed_values)
|
96
|
-
if allowed_values.empty?
|
97
|
-
raise SwaggerInvalidException.new("Unknown type [#{type}], no available type")
|
98
|
-
elsif !allowed_values.include?(type)
|
99
|
-
raise SwaggerInvalidException.new("Unknown type [#{type}]#{list_or_none(allowed_values, 'types')}")
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
end
|
104
|
-
|
105
|
-
end
|
106
|
-
|
107
|
-
end
|
108
|
-
|