Sha256: 60f9690997c733d2b71b27557253ae5f96070802c403bc2c63c11048b4c3a316
Contents?: true
Size: 1.55 KB
Versions: 1
Compression:
Stored size: 1.55 KB
Contents
module JSONAPI class IncludeDirective # Utilities to create an IncludeDirective hash from various types of # inputs. module Parser module_function # @api private 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 # @api private def parse_string(include_string) include_string.split(',') .map(&:strip) .each_with_object({}) do |path, hash| deep_merge!(hash, parse_path_string(path)) end end # @api private def parse_path_string(include_path) include_path.split('.') .reverse .reduce({}) { |a, e| { e.to_sym => a } } end # @api private def parse_hash(include_hash) include_hash.each_with_object({}) do |(key, value), hash| hash[key.to_sym] = parse_include_args(value) end end # @api private def parse_array(include_array) include_array.each_with_object({}) do |x, hash| deep_merge!(hash, parse_include_args(x)) end end # @api private 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 end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
jsonapi-0.1.1.beta2 | lib/jsonapi/include_directive/parser.rb |