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