class SunspotMatchersTestunit::BaseMatcher

Attributes

args[RW]

Public Class Methods

new(session, args) click to toggle source
# File lib/sunspot_matchers_testunit/matchers.rb, line 7
def initialize(session, args)
  @session = session
  @args = args
  build_comparison_search
end

Public Instance Methods

actual_params() click to toggle source
# File lib/sunspot_matchers_testunit/matchers.rb, line 49
def actual_params
  @actual_params ||= query_params_for_search(actual_search)
end
compare_key(key) click to toggle source
# File lib/sunspot_matchers_testunit/matchers.rb, line 82
def compare_key(key)
  if(actual_params[key].is_a?(Array) || comparison_params[key].is_a?(Array))
    compare_multi_value(actual_params[key], comparison_params[key])
  else
    compare_single_value(actual_params[key], comparison_matcher_for_key(key))
  end
end
compare_multi_value(actual, comparison) click to toggle source
# File lib/sunspot_matchers_testunit/matchers.rb, line 107
def compare_multi_value(actual, comparison)
  filter_values(comparison).reject do |value|
    next false unless actual
    value_matcher = Regexp.new(Regexp.escape(value))
    actual.any?{ |actual_value| actual_value =~ value_matcher }
  end
end
compare_single_value(actual, comparison) click to toggle source
# File lib/sunspot_matchers_testunit/matchers.rb, line 98
def compare_single_value(actual, comparison)
  if comparison.is_a?(Regexp)
    return [] if comparison =~ actual
    return [comparison.source]
  end
  return [comparison] unless actual == comparison
  []
end
comparison_matcher_for_key(key) click to toggle source
# File lib/sunspot_matchers_testunit/matchers.rb, line 90
def comparison_matcher_for_key(key)
  if wildcard? && wildcard_matcher_for_keys.has_key?(key)
    wildcard_matcher_for_keys[key]
  else
    comparison_params[key]
  end
end
comparison_params() click to toggle source
# File lib/sunspot_matchers_testunit/matchers.rb, line 53
def comparison_params
  @comparison_params ||= query_params_for_search(@comparison_search)
end
differences() click to toggle source
# File lib/sunspot_matchers_testunit/matchers.rb, line 74
def differences
  keys_to_compare.inject({}) do |hsh, key|
    result = compare_key(key)
    hsh[key] = result unless result.empty?
    hsh
  end
end
field() click to toggle source
# File lib/sunspot_matchers_testunit/matchers.rb, line 41
def field
  @args && @args.first
end
filter_values(values) click to toggle source
# File lib/sunspot_matchers_testunit/matchers.rb, line 115
def filter_values(values)
  return values unless wildcard?
  field_matcher = Regexp.new(field.to_s)
  values.select{ |value| field_matcher =~ value }.collect{|value| value.gsub(/:.*/, '')}
end
match?() click to toggle source
# File lib/sunspot_matchers_testunit/matchers.rb, line 57
def match?
  differences.empty?
end
missing_param_error_message() click to toggle source
# File lib/sunspot_matchers_testunit/matchers.rb, line 61
def missing_param_error_message
  missing_params = differences
  actual_values = missing_params.keys.collect {|key| "#{key} => #{actual_params[key]}"}
  missing_values = missing_params.collect{ |key, value| "#{key} => #{value}"}
  "expected search params: #{actual_values.join(' and ')} to match expected: #{missing_values.join(' and ')}"
end
search_tuple() click to toggle source
# File lib/sunspot_matchers_testunit/matchers.rb, line 23
def search_tuple
  search_tuple = @session.is_a?(Array) ? @session : @session.searches.last
  raise 'no search found' unless search_tuple
  search_tuple
end
search_types() click to toggle source
# File lib/sunspot_matchers_testunit/matchers.rb, line 33
def search_types
  search_tuple.first
end
unexpected_match_error_message() click to toggle source
# File lib/sunspot_matchers_testunit/matchers.rb, line 68
def unexpected_match_error_message
  actual_values = keys_to_compare.collect {|key| "#{key} => #{actual_params[key]}"}
  comparison_values = keys_to_compare.collect {|key| "#{key} => #{comparison_params[key]}"}
  "expected search params: #{actual_values.join(' and ')} NOT to match expected: #{comparison_values.join(' and ')}"
end
wildcard?() click to toggle source
# File lib/sunspot_matchers_testunit/matchers.rb, line 37
def wildcard?
  @args && @args.last == any_param
end
wildcard_matcher_for_keys() click to toggle source
# File lib/sunspot_matchers_testunit/matchers.rb, line 121
def wildcard_matcher_for_keys
  {}
end