class SearchEnjoy::Searching::Comparator

Public Class Methods

new(conditions) click to toggle source
# File lib/search_enjoy/searching.rb, line 15
def initialize(conditions)
  if conditions.instance_of? Query
    conditions = conditions.to_hash
  end

  @conditions = conditions
end

Public Instance Methods

check_condition(condition_subject, condition_body) click to toggle source
# File lib/search_enjoy/searching.rb, line 58
def check_condition(condition_subject, condition_body)
  if condition_body.instance_of? Hash
    compare(condition_subject, condition_body)
  elsif condition_body.instance_of? Array
    condition_body.include? condition_subject
  else
    condition_subject == condition_body
  end
end
check_must_conditions(subject, conditions) click to toggle source
# File lib/search_enjoy/searching.rb, line 30
def check_must_conditions(subject, conditions)
  conditions.each_pair do |attr, condition|
    next unless condition[:must]

    result = check_condition(subject[attr], condition[:value])

    result = !result if condition[:inverse]

    return false unless result
  end

  true
end
check_should_conditions(subject, conditions) click to toggle source
# File lib/search_enjoy/searching.rb, line 44
def check_should_conditions(subject, conditions)
  conditions.each_pair do |attr, condition|
    next if condition[:must]

    result = check_condition(subject[attr], condition[:value])

    result = !result if condition[:inverse]

    return true if result
  end

  false
end
compare(subject, conditions = @conditions) click to toggle source
# File lib/search_enjoy/searching.rb, line 23
def compare(subject, conditions = @conditions)
  return false unless check_must_conditions(subject, conditions)
  return false unless check_should_conditions(subject, conditions)

  true
end