module JSONAPI::IncludeDirective::Parser
Utilities to create an IncludeDirective
hash from various types of inputs.
Public Instance Methods
deep_merge!(src, ext)
click to toggle source
@api private
# File lib/jsonapi/include_directive/parser.rb, line 54 def deep_merge!(src, ext) ext.each do |k, v| if src[k].is_a?(Hash) && v.is_a?(Hash) deep_merge!(src[k], v) else src[k] = v end end end
parse_array(include_array)
click to toggle source
@api private
# File lib/jsonapi/include_directive/parser.rb, line 47 def parse_array(include_array) include_array.each_with_object({}) do |x, hash| deep_merge!(hash, parse_include_args(x)) end end
parse_hash(include_hash)
click to toggle source
@api private
# File lib/jsonapi/include_directive/parser.rb, line 40 def parse_hash(include_hash) include_hash.each_with_object({}) do |(key, value), hash| hash[key.to_sym] = parse_include_args(value) end end
parse_include_args(include_args)
click to toggle source
@api private
# File lib/jsonapi/include_directive/parser.rb, line 9 def parse_include_args(include_args) case include_args when Symbol { include_args => {} } when Hash parse_hash(include_args) when Array parse_array(include_args) when String parse_string(include_args) else {} end end
parse_path_string(include_path)
click to toggle source
@api private
# File lib/jsonapi/include_directive/parser.rb, line 33 def parse_path_string(include_path) include_path.split('.') .reverse .reduce({}) { |a, e| { e.to_sym => a } } end
parse_string(include_string)
click to toggle source
@api private
# File lib/jsonapi/include_directive/parser.rb, line 25 def parse_string(include_string) include_string.split(',') .each_with_object({}) do |path, hash| deep_merge!(hash, parse_path_string(path)) end end