sinatra-swagger-exposer-ng 0.5.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.
Files changed (35) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +37 -0
  3. data/CODE_OF_CONDUCT.md +13 -0
  4. data/Gemfile +6 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.md +118 -0
  7. data/Rakefile +9 -0
  8. data/lib/sinatra/swagger-exposer/configuration/swagger-configuration-utilities.rb +124 -0
  9. data/lib/sinatra/swagger-exposer/configuration/swagger-endpoint-parameter.rb +113 -0
  10. data/lib/sinatra/swagger-exposer/configuration/swagger-endpoint-response.rb +96 -0
  11. data/lib/sinatra/swagger-exposer/configuration/swagger-endpoint.rb +101 -0
  12. data/lib/sinatra/swagger-exposer/configuration/swagger-hash-like.rb +45 -0
  13. data/lib/sinatra/swagger-exposer/configuration/swagger-info.rb +73 -0
  14. data/lib/sinatra/swagger-exposer/configuration/swagger-parameter-validation-helper.rb +106 -0
  15. data/lib/sinatra/swagger-exposer/configuration/swagger-response-header.rb +68 -0
  16. data/lib/sinatra/swagger-exposer/configuration/swagger-response-headers.rb +33 -0
  17. data/lib/sinatra/swagger-exposer/configuration/swagger-type-property.rb +83 -0
  18. data/lib/sinatra/swagger-exposer/configuration/swagger-type.rb +128 -0
  19. data/lib/sinatra/swagger-exposer/configuration/swagger-types.rb +35 -0
  20. data/lib/sinatra/swagger-exposer/processing/swagger-array-value-processor.rb +46 -0
  21. data/lib/sinatra/swagger-exposer/processing/swagger-base-value-processor.rb +50 -0
  22. data/lib/sinatra/swagger-exposer/processing/swagger-file-processor-dispatcher.rb +35 -0
  23. data/lib/sinatra/swagger-exposer/processing/swagger-primitive-value-processor.rb +165 -0
  24. data/lib/sinatra/swagger-exposer/processing/swagger-processor-dispatcher.rb +69 -0
  25. data/lib/sinatra/swagger-exposer/processing/swagger-request-processor.rb +128 -0
  26. data/lib/sinatra/swagger-exposer/processing/swagger-response-processor.rb +47 -0
  27. data/lib/sinatra/swagger-exposer/processing/swagger-type-value-processor.rb +37 -0
  28. data/lib/sinatra/swagger-exposer/swagger-content-creator.rb +55 -0
  29. data/lib/sinatra/swagger-exposer/swagger-exposer.rb +258 -0
  30. data/lib/sinatra/swagger-exposer/swagger-invalid-exception.rb +16 -0
  31. data/lib/sinatra/swagger-exposer/swagger-parameter-helper.rb +73 -0
  32. data/lib/sinatra/swagger-exposer/swagger-request-processor-creator.rb +188 -0
  33. data/lib/sinatra/swagger-exposer/version.rb +5 -0
  34. data/sinatra-swagger-exposer.gemspec +30 -0
  35. metadata +176 -0
@@ -0,0 +1,45 @@
1
+ require_relative '../swagger-invalid-exception'
2
+
3
+ require_relative 'swagger-configuration-utilities'
4
+
5
+ module Sinatra
6
+
7
+ module SwaggerExposer
8
+
9
+ module Configuration
10
+
11
+ # A hash-like for groups of things
12
+ class SwaggerHashLike
13
+
14
+ include SwaggerConfigurationUtilities
15
+
16
+ def initialize(things)
17
+ @things = things
18
+ end
19
+
20
+ def [](name)
21
+ @things[name]
22
+ end
23
+
24
+ def key?(name)
25
+ @things.key? name
26
+ end
27
+
28
+ def check_duplicate(name, type_name)
29
+ if key?(name)
30
+ raise SwaggerInvalidException.new("#{type_name} [#{name}] already exist with value #{@things[name]}")
31
+ end
32
+ end
33
+
34
+ def to_swagger
35
+ if @things.empty?
36
+ nil
37
+ else
38
+ hash_to_swagger(@things)
39
+ end
40
+ end
41
+
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,73 @@
1
+ require_relative '../swagger-invalid-exception'
2
+
3
+ require_relative 'swagger-configuration-utilities'
4
+
5
+ module Sinatra
6
+
7
+ module SwaggerExposer
8
+
9
+ module Configuration
10
+
11
+ # The info declaration
12
+ class SwaggerInfo
13
+
14
+ include SwaggerConfigurationUtilities
15
+
16
+ def initialize(values)
17
+ @values = process(values, 'info', INFO_FIELDS, values)
18
+ end
19
+
20
+ # Known fields for the info field
21
+ INFO_FIELDS = {
22
+ :version => String,
23
+ :title => String,
24
+ :description => String,
25
+ :termsOfService => String,
26
+ :contact => {:name => String, :email => String, :url => String},
27
+ :license => {:name => String, :url => String},
28
+ }
29
+
30
+ # Recursive function
31
+ def process(current_hash, current_field_name, current_fields, top_level_hash)
32
+ result = {}
33
+
34
+ current_hash.each_pair do |current_key, current_value|
35
+ key_sym = current_key.to_sym
36
+ if current_fields.key? key_sym
37
+
38
+ field_content = current_fields[key_sym]
39
+ if field_content == String
40
+ if current_value.is_a? String
41
+ result[key_sym] = current_value
42
+ else
43
+ raise SwaggerInvalidException.new("Property [#{current_key}] value [#{current_value}] should be a String for #{current_field_name}: #{top_level_hash}")
44
+ end
45
+ else
46
+ if current_value.is_a? Hash
47
+ sub_params = process(current_value, current_field_name, field_content, top_level_hash)
48
+ if sub_params
49
+ result[key_sym] = sub_params
50
+ end
51
+ else
52
+ raise SwaggerInvalidException.new("Property [#{current_key}] value [#{current_value}] should be a Hash for #{current_field_name}: #{top_level_hash}")
53
+ end
54
+ end
55
+ else
56
+ raise SwaggerInvalidException.new("Unknown property [#{current_key}] for #{current_field_name}#{list_or_none(current_fields.keys, 'values')}")
57
+ end
58
+ end
59
+ result.empty? ? nil : result
60
+ end
61
+
62
+ def to_swagger
63
+ @values
64
+ end
65
+
66
+ def to_s
67
+ @values.to_json
68
+ end
69
+
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,106 @@
1
+ require_relative '../swagger-parameter-helper'
2
+
3
+ module Sinatra
4
+
5
+ module SwaggerExposer
6
+
7
+ module Configuration
8
+
9
+ # Helper for validating parameters
10
+ module SwaggerParameterValidationHelper
11
+
12
+ include Sinatra::SwaggerExposer::SwaggerParameterHelper
13
+
14
+ # Validate parameters
15
+ # @param type [String] the parameter type
16
+ # @param params [Hash]
17
+ def validate_params(type, params)
18
+ validate_limit_parameters(type, params)
19
+ validate_length_parameters(type, params)
20
+ end
21
+
22
+ # Test if a parameter is a boolean
23
+ # @param name the parameter's name
24
+ # @param value value the parameter's value
25
+ # @return [NilClass]
26
+ def check_boolean(name, value)
27
+ unless [true, false].include? value
28
+ raise SwaggerInvalidException.new("Invalid boolean value [#{value}] for [#{name}]")
29
+ end
30
+ end
31
+
32
+ # Validate the limit parameters
33
+ # @param type [String] the parameter type
34
+ # @param params [Hash] the parameters
35
+ def validate_limit_parameters(type, params)
36
+ max = validate_limit_parameter(type, params, PARAMS_MAXIMUM, PARAMS_EXCLUSIVE_MAXIMUM)
37
+ min = validate_limit_parameter(type, params, PARAMS_MINIMUM, PARAMS_EXCLUSIVE_MINIMUM)
38
+ if min && max && (max < min)
39
+ raise SwaggerInvalidException.new("Minimum value [#{min}] can't be more than maximum value [#{max}]")
40
+ end
41
+ end
42
+
43
+ # Validate a limit param like maximum and exclusiveMaximum
44
+ # @param type [String] the parameter type
45
+ # @param params [Hash] the parameters
46
+ # @param limit_param_name [Symbol] the limit parameter name
47
+ # @param exclusive_limit_param_name [Symbol] the exclusive limit parameter name
48
+ def validate_limit_parameter(type, params, limit_param_name, exclusive_limit_param_name)
49
+ parameter_value = nil
50
+ if params.key? limit_param_name
51
+ unless [TYPE_INTEGER, TYPE_NUMBER].include? @type
52
+ raise SwaggerInvalidException.new("Parameter #{limit_param_name} can only be specified for types #{TYPE_INTEGER} or #{TYPE_NUMBER} and not for [#{@type}]")
53
+ end
54
+ parameter_value = params[limit_param_name]
55
+ unless parameter_value.is_a? Numeric
56
+ raise SwaggerInvalidException.new("Parameter #{limit_param_name} must be a numeric and can not be [#{parameter_value}]")
57
+ end
58
+ end
59
+
60
+ if params.key? exclusive_limit_param_name
61
+ check_boolean(exclusive_limit_param_name, params[exclusive_limit_param_name])
62
+ unless params.key? limit_param_name
63
+ raise SwaggerInvalidException.new("You can't have a #{exclusive_limit_param_name} value without a #{limit_param_name}")
64
+ end
65
+ end
66
+ parameter_value
67
+ end
68
+
69
+ # Validate the length parameters minLength and maxLength
70
+ # @param type [String] the parameter type
71
+ # @param params [Hash] the parameters
72
+ def validate_length_parameters(type, params)
73
+ min_length = validate_length_parameter(type, params, PARAMS_MIN_LENGTH)
74
+ max_length = validate_length_parameter(type, params, PARAMS_MAX_LENGTH)
75
+
76
+ if min_length && max_length && (max_length < min_length)
77
+ raise SwaggerInvalidException.new("Minimum length #{min_length} can't be more than maximum length #{max_length}")
78
+ end
79
+ end
80
+
81
+ # Validate a length param like minLength and maxLength
82
+ # @param type [String] the parameter type
83
+ # @param params [Hash] the parameters
84
+ # @param length_param_name [Symbol] the length parameter name
85
+ # @return [Integer] the parameter value if it is present
86
+ def validate_length_parameter(type, params, length_param_name)
87
+ if params.key? length_param_name
88
+ if type == TYPE_STRING
89
+ parameter_value = params[length_param_name]
90
+ unless parameter_value.is_a? Integer
91
+ raise SwaggerInvalidException.new("Parameter #{length_param_name} must be an integer and can not be [#{parameter_value}]")
92
+ end
93
+ parameter_value
94
+ else
95
+ raise SwaggerInvalidException.new("Parameter #{length_param_name} can only be specified for type #{TYPE_STRING} and not for [#{@type}]")
96
+ end
97
+
98
+ else
99
+ nil
100
+ end
101
+ end
102
+
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,68 @@
1
+ require_relative '../swagger-invalid-exception'
2
+
3
+ require_relative 'swagger-parameter-validation-helper'
4
+ require_relative 'swagger-type-property'
5
+ require_relative 'swagger-configuration-utilities'
6
+
7
+ module Sinatra
8
+
9
+ module SwaggerExposer
10
+
11
+ module Configuration
12
+
13
+ class SwaggerResponseHeader
14
+
15
+ include SwaggerConfigurationUtilities
16
+ include SwaggerParameterValidationHelper
17
+
18
+ attr_reader :type, :name, :description
19
+
20
+ PRIMITIVE_HEADERS_TYPES = [
21
+ TYPE_STRING,
22
+ TYPE_NUMBER,
23
+ TYPE_INTEGER,
24
+ TYPE_BOOLEAN,
25
+ ]
26
+
27
+ # Create a new instance
28
+ # @param name [String] the name
29
+ # @param description [String] the description
30
+ # @param type [String] the type name
31
+ def initialize(name, type, description)
32
+ check_name(name)
33
+ @name = name
34
+
35
+ if description
36
+ @description = description
37
+ end
38
+
39
+ get_type(type, PRIMITIVE_HEADERS_TYPES)
40
+ end
41
+
42
+
43
+ # Return the swagger version
44
+ # @return [Hash]
45
+ def to_swagger
46
+ result = {
47
+ :type => @type,
48
+ }
49
+
50
+ if @description
51
+ result[:description] = @description
52
+ end
53
+
54
+ result
55
+ end
56
+
57
+ def to_s
58
+ {
59
+ :name => @name,
60
+ :type => @type,
61
+ :description => @description,
62
+ }.to_json
63
+ end
64
+
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,33 @@
1
+ require_relative 'swagger-hash-like'
2
+ require_relative 'swagger-response-header'
3
+
4
+ module Sinatra
5
+
6
+ module SwaggerExposer
7
+
8
+ module Configuration
9
+
10
+ # Contain all the declared response headers
11
+ class SwaggerResponseHeaders < SwaggerHashLike
12
+
13
+ attr_reader :response_headers
14
+
15
+ def initialize
16
+ @response_headers = {}
17
+ super(@response_headers)
18
+ end
19
+
20
+ # Add a new swagger response header
21
+ # @param name [String] the type name
22
+ # @param type [Object] the type
23
+ # @param description [String] the description
24
+ def add_response_header(name, type, description)
25
+ name = name.to_s
26
+ check_duplicate(name, 'Response header')
27
+ @response_headers[name] = SwaggerResponseHeader.new(name, type, description)
28
+ end
29
+
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,83 @@
1
+ require_relative '../swagger-invalid-exception'
2
+
3
+ require_relative 'swagger-configuration-utilities'
4
+ require_relative 'swagger-parameter-validation-helper'
5
+
6
+ module Sinatra
7
+
8
+ module SwaggerExposer
9
+
10
+ module Configuration
11
+ # A property of a type
12
+ class SwaggerTypeProperty
13
+
14
+ attr_reader :name, :type, :items
15
+
16
+ include SwaggerConfigurationUtilities
17
+ include SwaggerParameterValidationHelper
18
+
19
+ OTHER_PROPERTIES = [:example, :description, :format, :minLength, :maxLength, :default]
20
+ PROPERTIES = [:type] + OTHER_PROPERTIES
21
+
22
+ def initialize(type_name, property_name, property_properties, known_types)
23
+ @name = property_name
24
+
25
+ unless property_properties.is_a? Hash
26
+ raise SwaggerInvalidException.new("Property [#{property_name}] value [#{property_properties}] of [#{type_name}] should be a hash")
27
+ end
28
+
29
+ if property_properties.key? :type
30
+ get_type(property_properties[:type], PRIMITIVE_TYPES + known_types)
31
+ end
32
+
33
+ white_list_params(property_properties, PROPERTIES)
34
+
35
+ validate_params(@type, property_properties)
36
+
37
+ @other_properties = property_properties.select do |key, value|
38
+ OTHER_PROPERTIES.include? key
39
+ end
40
+ end
41
+
42
+ def properties
43
+ @other_properties
44
+ end
45
+
46
+ def to_swagger
47
+ result = @other_properties.clone
48
+
49
+ if @type
50
+ if @type == TYPE_ARRAY
51
+ result[:type] = TYPE_ARRAY
52
+ if @items
53
+ if PRIMITIVE_TYPES.include? @items
54
+ result[:items] = {:type => @items}
55
+ else
56
+ result[:items] = ref_to_type(@items)
57
+ end
58
+ end
59
+ else
60
+ if PRIMITIVE_TYPES.include? @type
61
+ result[:type] = @type
62
+ else
63
+ result['$ref'] = "#/definitions/#{@type}"
64
+ end
65
+ end
66
+ end
67
+
68
+ result
69
+ end
70
+
71
+ def to_s
72
+ {
73
+ :name => @name,
74
+ :type => @type,
75
+ :items => @items,
76
+ :other_properties => @other_properties,
77
+ }.to_json
78
+ end
79
+
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,128 @@
1
+ require_relative '../swagger-invalid-exception'
2
+
3
+ require_relative 'swagger-configuration-utilities'
4
+ require_relative 'swagger-type-property'
5
+
6
+ module Sinatra
7
+
8
+ module SwaggerExposer
9
+
10
+ module Configuration
11
+ # A type
12
+ class SwaggerType
13
+
14
+ attr_reader :properties, :required, :extends
15
+
16
+ include SwaggerConfigurationUtilities
17
+
18
+ PROPERTY_PROPERTIES = :properties
19
+ PROPERTY_REQUIRED = :required
20
+ PROPERTY_EXAMPLE = :example
21
+ PROPERTY_EXTENDS = :extends
22
+ PROPERTIES = [PROPERTY_PROPERTIES, PROPERTY_REQUIRED, PROPERTY_EXAMPLE, PROPERTY_EXTENDS]
23
+
24
+ def initialize(type_name, type_properties, known_types)
25
+ white_list_params(type_properties, PROPERTIES)
26
+ @properties = process_properties(type_name, type_properties, known_types)
27
+ @required = process_required(type_name, type_properties, @properties.keys)
28
+ @example = process_example(type_name, type_properties, @properties.keys)
29
+ @extends = process_extends(type_properties, known_types)
30
+ end
31
+
32
+ def process_properties(type_name, type_content, known_types)
33
+ possible_value = check_attribute_empty_or_bad(type_name, type_content, PROPERTY_PROPERTIES, Hash)
34
+ if possible_value
35
+ possible_value
36
+ else
37
+ result = {}
38
+ type_content[PROPERTY_PROPERTIES].each_pair do |property_name, property_properties|
39
+ result[property_name.to_s] = SwaggerTypeProperty.new(type_name, property_name, property_properties, known_types)
40
+ end
41
+ result
42
+ end
43
+ end
44
+
45
+ def process_required(type_name, type_content, properties_names)
46
+ possible_value = check_attribute_empty_or_bad(type_name, type_content, PROPERTY_REQUIRED, Array)
47
+ if possible_value
48
+ possible_value
49
+ else
50
+ type_content[PROPERTY_REQUIRED].each do |property_name|
51
+ property_name = property_name.to_s
52
+ unless properties_names.include? property_name
53
+ raise SwaggerInvalidException.new("Required property [#{property_name}] of [#{type_name}] is unknown#{list_or_none(properties_names, 'properties')}")
54
+ end
55
+ end
56
+ type_content[PROPERTY_REQUIRED]
57
+ end
58
+ end
59
+
60
+ def process_example(type_name, type_content, properties_names)
61
+ possible_value = check_attribute_empty_or_bad(type_name, type_content, PROPERTY_EXAMPLE, Hash)
62
+ if possible_value
63
+ possible_value
64
+ else
65
+ type_content[PROPERTY_EXAMPLE].each_pair do |property_name, property_value|
66
+ property_name = property_name.to_s
67
+ unless properties_names.include? property_name
68
+ raise SwaggerInvalidException.new("Example property [#{property_name}] with value [#{property_value}] of [#{type_name}] is unknown#{list_or_none(properties_names, 'properties')}")
69
+ end
70
+ end
71
+ type_content[PROPERTY_EXAMPLE]
72
+ end
73
+ end
74
+
75
+ def check_attribute_empty_or_bad(type_name, type_content, attribute_name, attribute_class)
76
+ if !type_content.key?(attribute_name)
77
+ attribute_class.new
78
+ elsif !type_content[attribute_name].is_a? attribute_class
79
+ raise SwaggerInvalidException.new("Attribute [#{attribute_name}] of #{type_name} is not an hash: #{type_content[attribute_name]}")
80
+ end
81
+ end
82
+
83
+ def process_extends(type_properties, known_types)
84
+ if type_properties.key? PROPERTY_EXTENDS
85
+ check_type(type_properties[PROPERTY_EXTENDS], known_types)
86
+ @extends = type_properties[PROPERTY_EXTENDS]
87
+ end
88
+ end
89
+
90
+ def to_swagger
91
+ result = {:type => 'object'}
92
+
93
+ unless @properties.empty?
94
+ result[PROPERTY_PROPERTIES] = hash_to_swagger(@properties)
95
+ end
96
+
97
+ unless @required.empty?
98
+ result[PROPERTY_REQUIRED] = @required
99
+ end
100
+
101
+ unless @example.empty?
102
+ result[PROPERTY_EXAMPLE] = @example
103
+ end
104
+
105
+ if @extends
106
+ result = {
107
+ :allOf => [
108
+ ref_to_type(@extends),
109
+ result
110
+ ]
111
+ }
112
+ end
113
+
114
+ result
115
+ end
116
+
117
+ def to_s
118
+ {
119
+ :properties => @properties,
120
+ :required => @required,
121
+ :example => @example,
122
+ }.to_json
123
+ end
124
+
125
+ end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,35 @@
1
+ require_relative 'swagger-hash-like'
2
+ require_relative 'swagger-type'
3
+
4
+ module Sinatra
5
+
6
+ module SwaggerExposer
7
+
8
+ module Configuration
9
+
10
+ # Contain all the declared types
11
+ class SwaggerTypes < SwaggerHashLike
12
+
13
+ attr_reader :types
14
+
15
+ def initialize
16
+ @types = {}
17
+ super(types)
18
+ end
19
+
20
+ # Add a new swagger type
21
+ # @param name [String] the type name
22
+ # @param params [Hash] the type params
23
+ def add_type(name, params)
24
+ check_duplicate(name, 'Type')
25
+ @types[name] = SwaggerType.new(name, params, @types.keys)
26
+ end
27
+
28
+ def types_names
29
+ @types.keys
30
+ end
31
+
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,46 @@
1
+ require_relative '../swagger-parameter-helper'
2
+ require_relative '../swagger-invalid-exception'
3
+ require_relative 'swagger-base-value-processor'
4
+
5
+ module Sinatra
6
+
7
+ module SwaggerExposer
8
+
9
+ module Processing
10
+
11
+ # Validate arrays
12
+ class SwaggerArrayValueProcessor < SwaggerBaseValueProcessor
13
+
14
+ include Sinatra::SwaggerExposer::SwaggerParameterHelper
15
+
16
+ attr_reader :processor_for_values
17
+
18
+ # Initialize
19
+ # @param name [String] the name
20
+ # @param required [TrueClass] if the parameter is required
21
+ # @param processor_for_values [Sinatra::SwaggerExposer::Processing::SwaggerBaseValueProcessor] processor for the values
22
+ def initialize(name, required, processor_for_values)
23
+ super(name, required, nil)
24
+ @processor_for_values = processor_for_values
25
+ end
26
+
27
+ def useful?
28
+ true
29
+ end
30
+
31
+ def validate_value(value)
32
+ if value
33
+ if value.is_a? Array
34
+ value.collect { |i| @processor_for_values.validate_value(i) }
35
+ else
36
+ raise SwaggerInvalidException.new("Value [#{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
@@ -0,0 +1,50 @@
1
+ require_relative '../swagger-parameter-helper'
2
+ require_relative '../swagger-invalid-exception'
3
+
4
+ module Sinatra
5
+
6
+ module SwaggerExposer
7
+
8
+ module Processing
9
+
10
+ # Base class for value processor
11
+ class SwaggerBaseValueProcessor
12
+
13
+ attr_reader :name, :required
14
+
15
+ include Sinatra::SwaggerExposer::SwaggerParameterHelper
16
+
17
+ # Initialize
18
+ # @param name [String] the name
19
+ # @param required [TrueClass] if the parameter is required
20
+ # @param default [Object] the default value
21
+ def initialize(name, required, default)
22
+ @name = name.to_s
23
+ @required = required
24
+ @default = default
25
+ end
26
+
27
+ # Test if the processor is useful
28
+ # @return [TrueClass]
29
+ def useful?
30
+ @required || (!@default.nil?)
31
+ end
32
+
33
+ def process(params)
34
+ unless params.is_a? Hash
35
+ raise SwaggerInvalidException.new("Value [#{@name}] should be an object but is a [#{params.class}]")
36
+ end
37
+ if params.key?(@name) && (!params[@name].nil?)
38
+ params[@name] = validate_value(params[@name])
39
+ elsif @required
40
+ raise SwaggerInvalidException.new("Mandatory value [#{@name}] is missing")
41
+ elsif @default
42
+ params[@name] = @default
43
+ end
44
+ params
45
+ end
46
+
47
+ end
48
+ end
49
+ end
50
+ end