class PragmaticQL::ParamsParser

Main purpouse is to convert include_string from params (`account.names,account.email_identity.email`) to merged hash:

{

account: {
  names: {}
  email_identity: {
    email: {}
  }
}

}

…that will then get recognized by IncludeModel to respond to `IncludeModel#inclusive_of(:acount)

Attributes

include_string[R]

Public Class Methods

new(include_string: ) click to toggle source
# File lib/pragmatic_ql/params_parser.rb, line 21
def initialize(include_string: )
  @include_string = include_string
end

Public Instance Methods

include_model() click to toggle source
# File lib/pragmatic_ql/params_parser.rb, line 25
def include_model
  @include_model ||= IncludeModel.new(include_hash)
end

Private Instance Methods

include_hash() click to toggle source
# File lib/pragmatic_ql/params_parser.rb, line 31
def include_hash
  return {} if include_string.blank?
  include_list = include_string
    .split(',')
    .map { |con| con.split('.') }

  include_hash = {}
  parse_first_level(include_hash, include_list)
  include_hash.deep_symbolize_keys
end
parse_first_level(include_hash, include_list) click to toggle source
# File lib/pragmatic_ql/params_parser.rb, line 42
def parse_first_level(include_hash, include_list)
  include_list.each do |conditions|
    if conditions.is_a?(Array)
      name = conditions.shift
      include_hash[name] ||= {}
      include_hash[name].merge!(parse_second_level(include_hash[name], conditions))
    else
      include_hash[conditions] = {}
    end
  end
  include_hash
end
parse_second_level(include_hash, item) click to toggle source
# File lib/pragmatic_ql/params_parser.rb, line 55
def parse_second_level(include_hash, item)
  if item.is_a?(Array)
    if item.any?
      name = item.shift
      include_hash[name] ||= {}
      parse_second_level(include_hash[name], item)
    else
      {}
    end
  else
    include_hash.merge!({item => item})
  end
end