Class: Sinatra::SwaggerExposer::SwaggerParameterPreprocessor
- Inherits:
-
Object
- Object
- Sinatra::SwaggerExposer::SwaggerParameterPreprocessor
- Includes:
- SwaggerParameterHelper
- Defined in:
- lib/sinatra/swagger-exposer/swagger-parameter-preprocessor.rb
Overview
Process the parameters for validation and enrichment
Constant Summary
Constants included from SwaggerParameterHelper
Sinatra::SwaggerExposer::SwaggerParameterHelper::HOW_TO_PASS, Sinatra::SwaggerExposer::SwaggerParameterHelper::HOW_TO_PASS_BODY, Sinatra::SwaggerExposer::SwaggerParameterHelper::HOW_TO_PASS_HEADER, Sinatra::SwaggerExposer::SwaggerParameterHelper::HOW_TO_PASS_PATH, Sinatra::SwaggerExposer::SwaggerParameterHelper::HOW_TO_PASS_QUERY, Sinatra::SwaggerExposer::SwaggerParameterHelper::PARAMS_DEFAULT, Sinatra::SwaggerExposer::SwaggerParameterHelper::PARAMS_EXAMPLE, Sinatra::SwaggerExposer::SwaggerParameterHelper::PARAMS_EXCLUSIVE_MAXIMUM, Sinatra::SwaggerExposer::SwaggerParameterHelper::PARAMS_EXCLUSIVE_MINIMUM, Sinatra::SwaggerExposer::SwaggerParameterHelper::PARAMS_FORMAT, Sinatra::SwaggerExposer::SwaggerParameterHelper::PARAMS_LIST, Sinatra::SwaggerExposer::SwaggerParameterHelper::PARAMS_MAXIMUM, Sinatra::SwaggerExposer::SwaggerParameterHelper::PARAMS_MAX_LENGTH, Sinatra::SwaggerExposer::SwaggerParameterHelper::PARAMS_MINIMUM, Sinatra::SwaggerExposer::SwaggerParameterHelper::PARAMS_MIN_LENGTH, Sinatra::SwaggerExposer::SwaggerParameterHelper::PRIMITIVE_TYPES, Sinatra::SwaggerExposer::SwaggerParameterHelper::PRIMITIVE_TYPES_FOR_NON_BODY, Sinatra::SwaggerExposer::SwaggerParameterHelper::TYPE_BOOLEAN, Sinatra::SwaggerExposer::SwaggerParameterHelper::TYPE_BYTE, Sinatra::SwaggerExposer::SwaggerParameterHelper::TYPE_DATE, Sinatra::SwaggerExposer::SwaggerParameterHelper::TYPE_DATE_TIME, Sinatra::SwaggerExposer::SwaggerParameterHelper::TYPE_DOUBLE, Sinatra::SwaggerExposer::SwaggerParameterHelper::TYPE_FILE, Sinatra::SwaggerExposer::SwaggerParameterHelper::TYPE_FLOAT, Sinatra::SwaggerExposer::SwaggerParameterHelper::TYPE_INTEGER, Sinatra::SwaggerExposer::SwaggerParameterHelper::TYPE_LONG, Sinatra::SwaggerExposer::SwaggerParameterHelper::TYPE_NUMBER, Sinatra::SwaggerExposer::SwaggerParameterHelper::TYPE_PASSWORD, Sinatra::SwaggerExposer::SwaggerParameterHelper::TYPE_STRING
Instance Method Summary collapse
- #check_param(params) ⇒ Object
-
#initialize(name, how_to_pass, required, type, default, params) ⇒ SwaggerParameterPreprocessor
constructor
A new instance of SwaggerParameterPreprocessor.
- #run(app, parsed_body) ⇒ Object
- #useful? ⇒ Boolean
-
#validate_numerical_value(value) ⇒ Object
Validate a numerical value.
-
#validate_numerical_value_internal(value, limit_param_name, exclusive_limit_param_name, limit_param_method, exclusive_limit_param_method) ⇒ Object
Validate the value of a number.
- #validate_param_value(value) ⇒ Object
-
#validate_param_value_boolean(value) ⇒ Object
Validate a boolean parameter.
-
#validate_param_value_date_time(value) ⇒ Object
Validate a date time parameter.
-
#validate_param_value_integer(value) ⇒ Object
Validate an integer parameter.
-
#validate_param_value_number(value) ⇒ Object
Validate a number parameter.
-
#validate_param_value_string(value) ⇒ Object
Validate a string parameter.
-
#validate_param_value_string_length(value, limit_param_name, limit_param_method) ⇒ Object
Validate the length of a string parameter.
Constructor Details
#initialize(name, how_to_pass, required, type, default, params) ⇒ SwaggerParameterPreprocessor
Returns a new instance of SwaggerParameterPreprocessor.
16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/sinatra/swagger-exposer/swagger-parameter-preprocessor.rb', line 16 def initialize(name, how_to_pass, required, type, default, params) @name = name.to_s @how_to_pass = how_to_pass @required = required @type = type @default = default @params = params # All headers are upcased if how_to_pass == HOW_TO_PASS_HEADER @name.upcase! end end |
Instance Method Details
#check_param(params) ⇒ Object
50 51 52 53 54 55 56 57 58 59 |
# File 'lib/sinatra/swagger-exposer/swagger-parameter-preprocessor.rb', line 50 def check_param(params) if params.key?(@name) params[@name] = validate_param_value(params[@name]) elsif @required raise SwaggerInvalidException.new("Mandatory parameter [#{@name}] is missing") elsif @default params[@name] = @default end params end |
#run(app, parsed_body) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/sinatra/swagger-exposer/swagger-parameter-preprocessor.rb', line 37 def run(app, parsed_body) case @how_to_pass when HOW_TO_PASS_PATH # can't validate when HOW_TO_PASS_QUERY check_param(app.params) when HOW_TO_PASS_HEADER check_param(app.headers) when HOW_TO_PASS_BODY check_param(parsed_body || {}) end end |
#useful? ⇒ Boolean
30 31 32 33 34 35 |
# File 'lib/sinatra/swagger-exposer/swagger-parameter-preprocessor.rb', line 30 def useful? @required || (!@default.nil?) || [TYPE_NUMBER, TYPE_INTEGER, TYPE_BOOLEAN, TYPE_DATE_TIME].include?(@type) || # Must check type (@params.key? PARAMS_MIN_LENGTH) || (@params.key? PARAMS_MAX_LENGTH) # Must check string end |
#validate_numerical_value(value) ⇒ Object
Validate a numerical value
122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/sinatra/swagger-exposer/swagger-parameter-preprocessor.rb', line 122 def validate_numerical_value(value) validate_numerical_value_internal( value, PARAMS_MINIMUM, PARAMS_EXCLUSIVE_MINIMUM, '>=', '>') validate_numerical_value_internal( value, PARAMS_MAXIMUM, PARAMS_EXCLUSIVE_MAXIMUM, '<=', '<') end |
#validate_numerical_value_internal(value, limit_param_name, exclusive_limit_param_name, limit_param_method, exclusive_limit_param_method) ⇒ Object
Validate the value of a number
174 175 176 177 178 179 180 181 182 |
# File 'lib/sinatra/swagger-exposer/swagger-parameter-preprocessor.rb', line 174 def validate_numerical_value_internal(value, limit_param_name, exclusive_limit_param_name, limit_param_method, exclusive_limit_param_method) if @params.key? limit_param_name target_value = @params[limit_param_name] method_to_call = @params[exclusive_limit_param_name] ? exclusive_limit_param_method : limit_param_method unless value.send(method_to_call, target_value) raise SwaggerInvalidException.new("Parameter [#{@name}] should be #{method_to_call} than [#{target_value}] but is [#{value}]") end end end |
#validate_param_value(value) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/sinatra/swagger-exposer/swagger-parameter-preprocessor.rb', line 61 def validate_param_value(value) case @type when TYPE_NUMBER return validate_param_value_number(value) when TYPE_INTEGER return validate_param_value_integer(value) when TYPE_BOOLEAN return validate_param_value_boolean(value) when TYPE_DATE_TIME return validate_param_value_date_time(value) else return validate_param_value_string(value) end end |
#validate_param_value_boolean(value) ⇒ Object
Validate a boolean parameter
77 78 79 80 81 82 83 84 85 |
# File 'lib/sinatra/swagger-exposer/swagger-parameter-preprocessor.rb', line 77 def validate_param_value_boolean(value) if (value == 'true') || value.is_a?(TrueClass) return true elsif (value == 'false') || value.is_a?(FalseClass) return false else raise SwaggerInvalidException.new("Parameter [#{@name}] should be an boolean but is [#{value}]") end end |
#validate_param_value_date_time(value) ⇒ Object
Validate a date time parameter
138 139 140 141 142 143 144 |
# File 'lib/sinatra/swagger-exposer/swagger-parameter-preprocessor.rb', line 138 def validate_param_value_date_time(value) begin DateTime.rfc3339(value) rescue ArgumentError raise SwaggerInvalidException.new("Parameter [#{@name}] should be a date time but is [#{value}]") end end |
#validate_param_value_integer(value) ⇒ Object
Validate an integer parameter
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/sinatra/swagger-exposer/swagger-parameter-preprocessor.rb', line 88 def validate_param_value_integer(value) begin f = Float(value) i = Integer(value) if f == i i else raise SwaggerInvalidException.new("Parameter [#{@name}] should be an integer but is [#{value}]") end value = Integer(value) validate_numerical_value(value) value rescue ArgumentError raise SwaggerInvalidException.new("Parameter [#{@name}] should be an integer but is [#{value}]") rescue TypeError raise SwaggerInvalidException.new("Parameter [#{@name}] should be an integer but is [#{value}]") end end |
#validate_param_value_number(value) ⇒ Object
Validate a number parameter
108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/sinatra/swagger-exposer/swagger-parameter-preprocessor.rb', line 108 def validate_param_value_number(value) begin value = Float(value) validate_numerical_value(value) return value rescue ArgumentError raise SwaggerInvalidException.new("Parameter [#{@name}] should be a float but is [#{value}]") rescue TypeError raise SwaggerInvalidException.new("Parameter [#{@name}] should be a float but is [#{value}]") end end |
#validate_param_value_string(value) ⇒ Object
Validate a string parameter
147 148 149 150 151 152 153 |
# File 'lib/sinatra/swagger-exposer/swagger-parameter-preprocessor.rb', line 147 def validate_param_value_string(value) if value validate_param_value_string_length(value, PARAMS_MIN_LENGTH, '>=') validate_param_value_string_length(value, PARAMS_MAX_LENGTH, '<=') end value end |
#validate_param_value_string_length(value, limit_param_name, limit_param_method) ⇒ Object
Validate the length of a string parameter
159 160 161 162 163 164 165 166 |
# File 'lib/sinatra/swagger-exposer/swagger-parameter-preprocessor.rb', line 159 def validate_param_value_string_length(value, limit_param_name, limit_param_method) if @params.key? limit_param_name target_value = @params[limit_param_name] unless value.length.send(limit_param_method, target_value) raise SwaggerInvalidException.new("Parameter [#{@name}] length should be #{limit_param_method} than #{target_value} but is #{value.length} for [#{value}]") end end end |