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