Sha256: 934dd1363495d728fe4bfade408ba16e8bcbd1e913b67cf1b2cb322a0ac60581

Contents?: true

Size: 983 Bytes

Versions: 1

Compression:

Stored size: 983 Bytes

Contents

require 'sinatra_permitted_params/version'

module Sinatra
  module PermittedParams
    class UnpermittedParamsError < StandardError; end

    WILDCARD_PARAMS = ['splat', 'captures']

    def permitted_params(permitted_keys, ignore: [])
      ignored_keys = stringify(ignore)
      permitted_keys = stringify(permitted_keys)

      filtered_params = reject_ignored_params(ignored_keys)

      check_params(filtered_params, permitted_keys)

      filtered_params
    end

    private

    def reject_ignored_params(ignored_keys)
      keys_to_ignore = ignored_keys + WILDCARD_PARAMS

      params.reject { |key, _| keys_to_ignore.include?(key) }
    end

    def check_params(filtered_params, permitted_keys)
      forbidden_keys = filtered_params.keys - permitted_keys
      return if forbidden_keys.empty?

      raise UnpermittedParamsError.new("Unpermitted params found: #{forbidden_keys.join(', ')}")
    end

    def stringify(values)
      values.map(&:to_s)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sinatra_permitted_params-0.1.0 lib/sinatra/permitted_params.rb