class Coppertone::RecordEvaluator
A helper class for finding SPF records for a domain.
Attributes
record[R]
Public Class Methods
new(record)
click to toggle source
# File lib/coppertone/record_evaluator.rb, line 6 def initialize(record) @record = record end
Public Instance Methods
add_default_exp(result)
click to toggle source
# File lib/coppertone/record_evaluator.rb, line 43 def add_default_exp(result) result.explanation = Coppertone.config.default_explanation result end
add_exp_to_result(result, macro_context, request_context)
click to toggle source
# File lib/coppertone/record_evaluator.rb, line 32 def add_exp_to_result(result, macro_context, request_context) result = add_default_exp(result) return result unless record.exp computed_exp = record.exp.evaluate(macro_context, request_context) result.explanation = computed_exp if computed_exp result rescue Coppertone::Error result end
directive_result(macro_context, request_context)
click to toggle source
# File lib/coppertone/record_evaluator.rb, line 22 def directive_result(macro_context, request_context) record.directives.reduce(Result.none) do |memo, d| memo.none? ? d.evaluate(macro_context, request_context) : memo end end
evaluate(macro_context, request_context)
click to toggle source
# File lib/coppertone/record_evaluator.rb, line 10 def evaluate(macro_context, request_context) result = directive_result(macro_context, request_context) return result unless result.none? || result.fail? if result.fail? evaluate_fail_result(result, macro_context, request_context) else # Evaluate redirect evaluate_none_result(result, macro_context, request_context) end end
evaluate_fail_result(result, macro_context, request_context)
click to toggle source
# File lib/coppertone/record_evaluator.rb, line 28 def evaluate_fail_result(result, macro_context, request_context) add_exp_to_result(result, macro_context, request_context) end
evaluate_none_result(result, macro_context, request_context)
click to toggle source
# File lib/coppertone/record_evaluator.rb, line 54 def evaluate_none_result(result, macro_context, request_context) return result unless follow_redirect? finder = Coppertone::RedirectRecordFinder.new(record.redirect, macro_context, request_context) raise InvalidRedirectError unless finder.target && finder.record rc = macro_context.with_domain(finder.target) RecordEvaluator.new(finder.record).evaluate(rc, request_context) end
follow_redirect?()
click to toggle source
# File lib/coppertone/record_evaluator.rb, line 48 def follow_redirect? # Ignore the redirect if there's an all # mechanism in the record record.redirect && !record.include_all? end