Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
uoy-faculty-sinatra / lib / sinatra / param_validator.rb
Size: Mime:
# 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