Sha256: 48d2dc6edd1ec47ddba0463cc0e405931e6eac980766b4676c4361f27482d606
Contents?: true
Size: 1.82 KB
Versions: 2
Compression:
Stored size: 1.82 KB
Contents
# frozen_string_literal: true require 'pry' module Zoom class Params < SimpleDelegator # delegate :keys, :key?, :has_key?, :values, :has_value?, :value?, :empty?, # :include?, :as_json, :to_s, :each_key, to: :@parameters def initialize(parameters = {}) @parameters = parameters super end 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 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 def except(*keys) dup.except!(keys.flatten) end def except!(keys) keys.each { |key| delete(key) } self end EMPTY_ARRAY = [].freeze EMPTY_HASH = {}.freeze 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 def find_missing_keys(keys) keys.each_with_object([]) do |k, array| array << k if self[k].nil? end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
zoom_rb-0.8.2 | lib/zoom/params.rb |
zoom_rb-0.8.1 | lib/zoom/params.rb |