class Filemaker::Api::QueryCommands::CompoundFind
Convenient compound find query builder
Attributes
key_maps_string[R]
key_values[R]
Public Class Methods
new(query)
click to toggle source
# File lib/filemaker/api/query_commands/findquery.rb, line 40 def initialize(query) @query = query @key_values = {} @key_maps = [] @key_maps_string = '' @counter = 0 become_array(@query).each do |hash| build_key_map(build_key_values(hash)) end translate_key_maps end
Public Instance Methods
to_s()
click to toggle source
# File lib/filemaker/api/query_commands/findquery.rb, line 54 def to_s "#{key_values}, #{key_maps_string}" end
Private Instance Methods
become_array(value)
click to toggle source
# File lib/filemaker/api/query_commands/findquery.rb, line 96 def become_array(value) value.is_a?(Array) ? value : [value] end
build_key_map(q_tag_array)
click to toggle source
# File lib/filemaker/api/query_commands/findquery.rb, line 79 def build_key_map(q_tag_array) omit = q_tag_array.delete('-omit') len = q_tag_array.length result = q_tag_array.flatten.combination(len).select do |c| # q_tag_array.all? { |a| (a & c).size > 0 } q_tag_array.all? { |a| !(a & c).empty? } end result = result.each { |c| c.unshift('-omit') if omit } @key_maps.concat result end
build_key_values(hash)
click to toggle source
# File lib/filemaker/api/query_commands/findquery.rb, line 60 def build_key_values(hash) q_tag_array = [] omit = hash.delete('-omit') hash.each do |key, value| q_tag = [] become_array(value).each do |v| @key_values["-q#{@counter}"] = key @key_values["-q#{@counter}.value"] = v q_tag << "q#{@counter}" @counter += 1 end q_tag_array << q_tag end (q_tag_array << '-omit') if omit q_tag_array end
translate_key_maps()
click to toggle source
# File lib/filemaker/api/query_commands/findquery.rb, line 90 def translate_key_maps @key_maps_string << @key_maps.map do |a| "#{'!' if a.delete('-omit')}(#{a.join(',')})" end.join(';') end