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