class Rack::App::Middlewares::Params::Validator
Constants
- ValidateError
Public Class Methods
new(app, descriptor)
click to toggle source
# File lib/rack/app/middlewares/params/validator.rb, line 4 def initialize(app, descriptor) @descriptor = descriptor @app = app end
Public Instance Methods
Protected Instance Methods
error(message)
click to toggle source
# File lib/rack/app/middlewares/params/validator.rb, line 81 def error(message) raise(ValidateError.new(message)) end
invalid_key_error(key)
click to toggle source
# File lib/rack/app/middlewares/params/validator.rb, line 89 def invalid_key_error(key) error "invalid key: #{key}" end
invalid_type_error(key, klass)
click to toggle source
# File lib/rack/app/middlewares/params/validator.rb, line 93 def invalid_type_error(key, klass) error "invalid type for #{key}: #{klass} expected" end
invalid_type_of_error(key, klass, of)
click to toggle source
# File lib/rack/app/middlewares/params/validator.rb, line 97 def invalid_type_of_error(key, klass, of) error "invalid type for #{key}: #{klass} of #{of} expected" end
missing_key_error(key, klass)
click to toggle source
# File lib/rack/app/middlewares/params/validator.rb, line 85 def missing_key_error(key, klass) error "missing key: #{key}(#{klass})" end
parse(type, str)
click to toggle source
# File lib/rack/app/middlewares/params/validator.rb, line 77 def parse(type, str) ::Rack::App::Utils::Parser.parse(type, str) end
unprocessable_response(validate_error)
click to toggle source
# File lib/rack/app/middlewares/params/validator.rb, line 19 def unprocessable_response(validate_error) response = Rack::Response.new response.status = 422 response.write("422 Unprocessable Entity\n") response.write(validate_error.message) response.finish end
validate(env)
click to toggle source
# File lib/rack/app/middlewares/params/validator.rb, line 27 def validate(env) params = Rack::App::Params.new(env).merged_params validation_results(env, params) end
validate_array(type, elements_type, key, *elements)
click to toggle source
# File lib/rack/app/middlewares/params/validator.rb, line 69 def validate_array(type, elements_type, key, *elements) values = elements.map { |str| parse(elements_type, str) } if values.include?(nil) invalid_type_of_error(key, type, elements_type) end end
validate_invalid_params(params)
click to toggle source
# File lib/rack/app/middlewares/params/validator.rb, line 62 def validate_invalid_params(params) valid_keys = @descriptor[:required].keys + @descriptor[:optional].keys (params.keys - valid_keys).each do |key| invalid_key_error(key) end end
validate_key(key, properties, params)
click to toggle source
# File lib/rack/app/middlewares/params/validator.rb, line 52 def validate_key(key, properties, params) missing_key_error(key, properties[:class]) unless params.key?(key) if properties[:of] validate_array(properties[:class], properties[:of], key, *params[key]) elsif parse(properties[:class], params[key]).nil? invalid_type_error(key, properties[:class]) end end
validate_optional_params(env, params)
click to toggle source
# File lib/rack/app/middlewares/params/validator.rb, line 44 def validate_optional_params(env, params) @descriptor[:optional].each do |key, properties| next unless params.key?(key) validate_key(key, properties, params) end end
validate_required_params(env, params)
click to toggle source
# File lib/rack/app/middlewares/params/validator.rb, line 38 def validate_required_params(env, params) @descriptor[:required].each do |key, properties| validate_key(key, properties, params) end end
validation_results(env, params)
click to toggle source
# File lib/rack/app/middlewares/params/validator.rb, line 32 def validation_results(env, params) validate_required_params(env, params) validate_optional_params(env, params) validate_invalid_params(params) end