Class: Sinatra::SwaggerExposer::Processing::SwaggerPrimitiveValueProcessor

Inherits:
SwaggerBaseValueProcessor show all
Includes:
SwaggerParameterHelper
Defined in:
lib/sinatra/swagger-exposer/processing/swagger-primitive-value-processor.rb

Overview

Validate primitive value

Constant Summary

Constants included from SwaggerParameterHelper

SwaggerParameterHelper::HOW_TO_PASS, SwaggerParameterHelper::HOW_TO_PASS_BODY, SwaggerParameterHelper::HOW_TO_PASS_HEADER, SwaggerParameterHelper::HOW_TO_PASS_PATH, SwaggerParameterHelper::HOW_TO_PASS_QUERY, SwaggerParameterHelper::PARAMS_DEFAULT, SwaggerParameterHelper::PARAMS_EXAMPLE, SwaggerParameterHelper::PARAMS_EXCLUSIVE_MAXIMUM, SwaggerParameterHelper::PARAMS_EXCLUSIVE_MINIMUM, SwaggerParameterHelper::PARAMS_FORMAT, SwaggerParameterHelper::PARAMS_LIST, SwaggerParameterHelper::PARAMS_MAXIMUM, SwaggerParameterHelper::PARAMS_MAX_LENGTH, SwaggerParameterHelper::PARAMS_MINIMUM, SwaggerParameterHelper::PARAMS_MIN_LENGTH, SwaggerParameterHelper::PRIMITIVE_TYPES, SwaggerParameterHelper::PRIMITIVE_TYPES_FOR_NON_BODY, SwaggerParameterHelper::TYPE_ARRAY, SwaggerParameterHelper::TYPE_BOOLEAN, SwaggerParameterHelper::TYPE_BYTE, SwaggerParameterHelper::TYPE_DATE, SwaggerParameterHelper::TYPE_DATE_TIME, SwaggerParameterHelper::TYPE_DOUBLE, SwaggerParameterHelper::TYPE_FILE, SwaggerParameterHelper::TYPE_FLOAT, SwaggerParameterHelper::TYPE_INTEGER, SwaggerParameterHelper::TYPE_LONG, SwaggerParameterHelper::TYPE_NUMBER, SwaggerParameterHelper::TYPE_PASSWORD, SwaggerParameterHelper::TYPE_STRING

Instance Attribute Summary collapse

Attributes inherited from SwaggerBaseValueProcessor

#name, #required

Instance Method Summary collapse

Methods inherited from SwaggerBaseValueProcessor

#process

Constructor Details

#initialize(name, required, type, default, params) ⇒ SwaggerPrimitiveValueProcessor

Initialize

Parameters:

  • name (String)

    the name

  • required (TrueClass)

    if the parameter is required

  • type (String)

    the type name

  • default (Object)

    the default value

  • params (Hash)

    parameters



26
27
28
29
30
# File 'lib/sinatra/swagger-exposer/processing/swagger-primitive-value-processor.rb', line 26

def initialize(name, required, type, default, params)
  super(name, required, default)
  @type = type
  @params = params
end

Instance Attribute Details

#paramsObject (readonly)

Returns the value of attribute params.



18
19
20
# File 'lib/sinatra/swagger-exposer/processing/swagger-primitive-value-processor.rb', line 18

def params
  @params
end

#typeObject (readonly)

Returns the value of attribute type.



18
19
20
# File 'lib/sinatra/swagger-exposer/processing/swagger-primitive-value-processor.rb', line 18

def type
  @type
end

Instance Method Details

#useful?Boolean

Returns:

  • (Boolean)


32
33
34
35
36
# File 'lib/sinatra/swagger-exposer/processing/swagger-primitive-value-processor.rb', line 32

def useful?
  super ||
    [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

Parameters:

  • value (Numeric)

    the value



100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/sinatra/swagger-exposer/processing/swagger-primitive-value-processor.rb', line 100

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

Parameters:

  • value

    the value to check

  • limit_param_name (Symbol)

    the param that contain the value to compare to

  • exclusive_limit_param_name (Symbol)

    the param that indicates if the comparison is absolute

  • limit_param_method (String)

    the comparison method to call

  • exclusive_limit_param_method (String)

    the absolute comparison method to call



152
153
154
155
156
157
158
159
160
# File 'lib/sinatra/swagger-exposer/processing/swagger-primitive-value-processor.rb', line 152

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("Value [#{name}] should be #{method_to_call} than [#{target_value}] but is [#{value}]")
    end
  end
end

#validate_value(value) ⇒ Object

Dispatch method



39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/sinatra/swagger-exposer/processing/swagger-primitive-value-processor.rb', line 39

def validate_value(value)
  case @type
    when TYPE_NUMBER
      return validate_value_number(value)
    when TYPE_INTEGER
      return validate_value_integer(value)
    when TYPE_BOOLEAN
      return validate_value_boolean(value)
    when TYPE_DATE_TIME
      return validate_value_date_time(value)
    else
      return validate_value_string(value)
  end
end

#validate_value_boolean(value) ⇒ Object

Validate a boolean



55
56
57
58
59
60
61
62
63
# File 'lib/sinatra/swagger-exposer/processing/swagger-primitive-value-processor.rb', line 55

def validate_value_boolean(value)
  if (value == 'true') || value.is_a?(TrueClass)
    true
  elsif (value == 'false') || value.is_a?(FalseClass)
    false
  else
    raise SwaggerInvalidException.new("Value [#{name}] should be an boolean but is [#{value}]")
  end
end

#validate_value_date_time(value) ⇒ Object

Validate a date time



116
117
118
119
120
121
122
# File 'lib/sinatra/swagger-exposer/processing/swagger-primitive-value-processor.rb', line 116

def validate_value_date_time(value)
  begin
    DateTime.rfc3339(value)
  rescue ArgumentError
    raise SwaggerInvalidException.new("Value [#{name}] should be a date time but is [#{value}]")
  end
end

#validate_value_integer(value) ⇒ Object

Validate an integer



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/sinatra/swagger-exposer/processing/swagger-primitive-value-processor.rb', line 66

def validate_value_integer(value)
  begin
    f = Float(value)
    i = Integer(value)
    if f == i
      i
    else
      raise SwaggerInvalidException.new("Value [#{name}] should be an integer but is [#{value}]")
    end
    value = Integer(value)
    validate_numerical_value(value)
    value
  rescue ArgumentError
    raise SwaggerInvalidException.new("Value [#{name}] should be an integer but is [#{value}]")
  rescue TypeError
    raise SwaggerInvalidException.new("Value [#{name}] should be an integer but is [#{value}]")
  end
end

#validate_value_number(value) ⇒ Object

Validate a number value



86
87
88
89
90
91
92
93
94
95
96
# File 'lib/sinatra/swagger-exposer/processing/swagger-primitive-value-processor.rb', line 86

def validate_value_number(value)
  begin
    value = Float(value)
    validate_numerical_value(value)
    return value
  rescue ArgumentError
    raise SwaggerInvalidException.new("Value [#{name}] should be a float but is [#{value}]")
  rescue TypeError
    raise SwaggerInvalidException.new("Value [#{name}] should be a float but is [#{value}]")
  end
end

#validate_value_string(value) ⇒ Object

Validate a string



125
126
127
128
129
130
131
# File 'lib/sinatra/swagger-exposer/processing/swagger-primitive-value-processor.rb', line 125

def validate_value_string(value)
  if value
    validate_value_string_length(value, PARAMS_MIN_LENGTH, '>=')
    validate_value_string_length(value, PARAMS_MAX_LENGTH, '<=')
  end
  value
end

#validate_value_string_length(value, limit_param_name, limit_param_method) ⇒ Object

Validate the length of a string

Parameters:

  • value

    the value to check

  • limit_param_name (Symbol)

    the param that contain the value to compare to

  • limit_param_method (String)

    the comparison method to call



137
138
139
140
141
142
143
144
# File 'lib/sinatra/swagger-exposer/processing/swagger-primitive-value-processor.rb', line 137

def validate_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("Value [#{name}] length should be #{limit_param_method} than #{target_value} but is #{value.length} for [#{value}]")
    end
  end
end