class Zoom::Params

Constants

EMPTY_ARRAY
EMPTY_HASH

Public Class Methods

new(parameters = {}) click to toggle source

delegate :keys, :key?, :has_key?, :values, :has_value?, :value?, :empty?,

:include?, :as_json, :to_s, :each_key, to: :@parameters
Calls superclass method
# File lib/zoom/params.rb, line 8
def initialize(parameters = {})
  @parameters = parameters
  super
end

Public Instance Methods

except(*keys) click to toggle source
# File lib/zoom/params.rb, line 33
def except(*keys)
  dup.except!(keys.flatten)
end
except!(keys) click to toggle source
# File lib/zoom/params.rb, line 37
def except!(keys)
  keys.each { |key| delete(key) }
  self
end
find_missing_keys(keys) click to toggle source
# File lib/zoom/params.rb, line 58
def find_missing_keys(keys)
  keys.each_with_object([]) do |k, array|
    array << k if self[k].nil?
  end
end
hash_filter(filter) click to toggle source
# File lib/zoom/params.rb, line 45
def hash_filter(filter)
  # Slicing filters out non-declared keys.
  slice(*filter.keys).each do |key, value|
    next unless value
    next unless key? key
    next if filter[key] == EMPTY_ARRAY
    next if filter[key] == EMPTY_HASH
    # Declaration { user: :name } or { user: [:name, :age, { address: ... }] }.
    self.class.new(value).permit(filter[key])
  end
  filter.keys
end
permit(*filters) click to toggle source
# File lib/zoom/params.rb, line 20
def permit(*filters)
  permitted_keys = filters.flatten.each_with_object([]) do |filter, array|
                     case filter
                     when Symbol, String
                       array << filter
                     when Hash
                       array << hash_filter(filter)
                     end
                   end
  non_permitted_params = @parameters.keys - permitted_keys.flatten
  raise Zoom::ParameterNotPermitted, non_permitted_params.to_s unless non_permitted_params.empty?
end
permit_value(key, values) click to toggle source
# File lib/zoom/params.rb, line 64
def permit_value(key, values)
  value = @parameters[key]
  if !values.include?(value)
    raise Zoom::ParameterValueNotPermitted, "#{key}: #{value}"
  end
end
require(*keys) click to toggle source
# File lib/zoom/params.rb, line 14
def require(*keys)
  missing_keys = find_missing_keys(keys.flatten)
  return self.class.new(except(keys)) if missing_keys.empty?
  raise Zoom::ParameterMissing, missing_keys.to_s
end