module Apitizer::Helper
Constants
- Error
Public Class Methods
action_scope(action)
click to toggle source
# File lib/apitizer/helper.rb, line 17 def self.action_scope(action) member_action?(action) ? :member : :collection end
build_query(parameters)
click to toggle source
# File lib/apitizer/helper.rb, line 32 def self.build_query(parameters) query = Rack::Utils.build_nested_query(prepare_parameters(parameters)) query.encode!('UTF-8') end
deep_merge(one, two)
click to toggle source
# File lib/apitizer/helper.rb, line 21 def self.deep_merge(one, two) merger = Proc.new do |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 end one.merge(two, &merger) end
extract_hash!(arguments)
click to toggle source
# File lib/apitizer/helper.rb, line 28 def self.extract_hash!(arguments) arguments.last.is_a?(Hash) ? arguments.pop : {} end
member_action?(action)
click to toggle source
# File lib/apitizer/helper.rb, line 7 def self.member_action?(action) if Apitizer.member_actions.include?(action) true elsif Apitizer.collection_actions.include?(action) false else raise Error, 'Unknown action' end end
Private Class Methods
prepare_parameters(value)
click to toggle source
# File lib/apitizer/helper.rb, line 39 def self.prepare_parameters(value) # PATCH 1: https://github.com/rack/rack/issues/557 # PATCH 2: https://github.com/rack/rack/pull/698 case value when NilClass, String value when Symbol, Integer, TrueClass, FalseClass value.to_s when Array value = value.map { |v| prepare_parameters(v) }.compact if value.any? { |v| v.is_a?(Hash) } value = Hash[(0...value.length).to_a.zip(value)] end value.empty? ? nil : value when Hash value = Hash[ value.map do |k, v| v = prepare_parameters(v) v.nil? ? nil : [ k, v ] end.compact ] value.empty? ? nil : value else if value.respond_to?(:to_a) prepare_parameters(value.to_a) elsif value.respond_to?(:to_h) prepare_parameters(value.to_h) else raise ArgumentError, 'Unknown parameter class' end end end