Repository URL to install this package:
Version:
4.2.0 ▾
|
# frozen_string_literal: true
require 'sinatra/flash'
require 'sinatra/param'
require_relative 'validator'
# Top-level module documentation comment goes here...
module Sinatra
module Validator
# Helpers for validating parameters
module Param
def param_validator(identifier, &block)
validator = Validator.new(block)
Sinatra::Validator::Param::ValidateMethods.add identifier, validator
end
# Sinatra helpers for validating parameters
module Helpers
def validate_params(validator_identifier)
if validator_identifier.is_a? Symbol
validator_identifier = Sinatra::Validator::ValidatorIdentifier.new(validator_identifier)
end
validate Sinatra::Validator::Param::ValidateMethods.get(validator_identifier.identifier),
validator_identifier.args
end
end
# Extend validator to return 403 errors if parameter validation fails
class Validator < Sinatra::Validator::Validator
def handle_failure
raise @context.http_status(403)
end
end
# Keep hold of the list of valid validator methods
module ValidateMethods
@methods = {}
module_function
def add(identifier, validator)
@methods[identifier] = validator
end
def get(identifier)
raise "Unknown validator: '#{identifier}'" unless @methods.key? identifier
@methods[identifier]
end
end
def self.registered(app)
app.helpers Helpers
app.set(:validate_params) do |*identifiers|
condition do
filter_params
identifiers.each { |identifier| validate_params identifier }
end
end
end
end
end
register Sinatra::Validator::Param
end