Class: Coppertone::RecordEvaluator

Inherits:
Object
  • Object
show all
Defined in:
lib/coppertone/record_evaluator.rb

Overview

A helper class for finding SPF records for a domain.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(record) ⇒ RecordEvaluator

Returns a new instance of RecordEvaluator.



6
7
8
# File 'lib/coppertone/record_evaluator.rb', line 6

def initialize(record)
  @record = record
end

Instance Attribute Details

#recordObject (readonly)

Returns the value of attribute record.



4
5
6
# File 'lib/coppertone/record_evaluator.rb', line 4

def record
  @record
end

Instance Method Details

#add_default_exp(result) ⇒ Object



43
44
45
46
# 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) ⇒ Object



32
33
34
35
36
37
38
39
40
41
# 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) ⇒ Object



22
23
24
25
26
# 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) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
# 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) ⇒ Object



28
29
30
# 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) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
# 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?Boolean

Returns:

  • (Boolean)


48
49
50
51
52
# 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