Class: Coppertone::Record
- Inherits:
-
Object
- Object
- Coppertone::Record
- Defined in:
- lib/coppertone/record.rb
Overview
Represents an SPF record. Includes class level methods for parsing record from a text string.
Constant Summary collapse
- KNOWN_MODS =
[Coppertone::Modifier::Exp, Coppertone::Modifier::Redirect].freeze
Instance Attribute Summary collapse
-
#text ⇒ Object
readonly
Returns the value of attribute text.
Class Method Summary collapse
Instance Method Summary collapse
- #all_directive ⇒ Object
- #context_dependent_evaluation? ⇒ Boolean
- #context_dependent_explanation? ⇒ Boolean
- #directives ⇒ Object
- #dns_lookup_term_count ⇒ Object
- #exp ⇒ Object
- #find_modifier(klass) ⇒ Object
- #find_redirect ⇒ Object
- #include_all? ⇒ Boolean
- #includes ⇒ Object
-
#initialize(raw_text) ⇒ Record
constructor
A new instance of Record.
- #modifiers ⇒ Object
- #netblock_mechanisms ⇒ Object
- #netblocks_only? ⇒ Boolean
- #normalize_terms ⇒ Object
- #redirect ⇒ Object
- #redirect_with_directives? ⇒ Boolean
- #to_s ⇒ Object
- #unknown_modifiers ⇒ Object
Constructor Details
#initialize(raw_text) ⇒ Record
Returns a new instance of Record.
6 7 8 9 |
# File 'lib/coppertone/record.rb', line 6 def initialize(raw_text) @terms = Coppertone::RecordTermParser.new(raw_text).terms normalize_terms end |
Instance Attribute Details
#text ⇒ Object (readonly)
Returns the value of attribute text.
5 6 7 |
# File 'lib/coppertone/record.rb', line 5 def text @text end |
Class Method Details
.record?(record_text) ⇒ Boolean
11 12 13 |
# File 'lib/coppertone/record.rb', line 11 def self.record?(record_text) Coppertone::RecordTermParser.record?(record_text) end |
.version_str ⇒ Object
105 106 107 |
# File 'lib/coppertone/record.rb', line 105 def self.version_str Coppertone::RecordTermParser::VERSION_STR end |
Instance Method Details
#all_directive ⇒ Object
24 25 26 |
# File 'lib/coppertone/record.rb', line 24 def all_directive @all_directive ||= directives.find(&:all?) end |
#context_dependent_evaluation? ⇒ Boolean
75 76 77 78 |
# File 'lib/coppertone/record.rb', line 75 def context_dependent_evaluation? return true if directives.any?(&:context_dependent?) redirect && redirect.context_dependent? end |
#context_dependent_explanation? ⇒ Boolean
84 85 86 |
# File 'lib/coppertone/record.rb', line 84 def context_dependent_explanation? exp && exp.context_dependent? end |
#directives ⇒ Object
20 21 22 |
# File 'lib/coppertone/record.rb', line 20 def directives @directives ||= @terms.select { |t| t.is_a?(Coppertone::Directive) } end |
#dns_lookup_term_count ⇒ Object
32 33 34 35 36 37 38 |
# File 'lib/coppertone/record.rb', line 32 def dns_lookup_term_count @dns_lookup_term_count ||= begin base = redirect.nil? ? 0 : 1 base + directives.count(&:dns_lookup_term?) end end |
#exp ⇒ Object
80 81 82 |
# File 'lib/coppertone/record.rb', line 80 def exp @exp ||= find_modifier(Coppertone::Modifier::Exp) end |
#find_modifier(klass) ⇒ Object
95 96 97 98 99 |
# File 'lib/coppertone/record.rb', line 95 def find_modifier(klass) arr = modifiers.select { |m| m.is_a?(klass) } raise DuplicateModifierError if arr.size > 1 arr.first end |
#find_redirect ⇒ Object
101 102 103 |
# File 'lib/coppertone/record.rb', line 101 def find_redirect find_modifier(Coppertone::Modifier::Redirect) end |
#include_all? ⇒ Boolean
28 29 30 |
# File 'lib/coppertone/record.rb', line 28 def include_all? all_directive ? true : false end |
#includes ⇒ Object
40 41 42 43 44 45 46 47 |
# File 'lib/coppertone/record.rb', line 40 def includes @includes ||= begin directives.select do |d| d.mechanism.is_a?(Coppertone::Mechanism::Include) end end end |
#modifiers ⇒ Object
49 50 51 |
# File 'lib/coppertone/record.rb', line 49 def modifiers @modifiers ||= @terms.select { |t| t.is_a?(Coppertone::Modifier) } end |
#netblock_mechanisms ⇒ Object
61 62 63 64 65 66 |
# File 'lib/coppertone/record.rb', line 61 def netblock_mechanisms @netblock_mechanisms ||= directives.select do |d| d.mechanism.is_a?(Coppertone::Mechanism::IPMechanism) end end |
#netblocks_only? ⇒ Boolean
68 69 70 71 72 73 |
# File 'lib/coppertone/record.rb', line 68 def netblocks_only? return false if redirect directives.reject(&:all?).reject do |d| d.mechanism.is_a?(Coppertone::Mechanism::IPMechanism) end.empty? end |
#normalize_terms ⇒ Object
15 16 17 18 |
# File 'lib/coppertone/record.rb', line 15 def normalize_terms find_redirect # Checks for duplicate redirect modifiers exp # Checks for duplicate exp modifiers end |
#redirect ⇒ Object
53 54 55 |
# File 'lib/coppertone/record.rb', line 53 def redirect @redirect ||= find_redirect end |
#redirect_with_directives? ⇒ Boolean
57 58 59 |
# File 'lib/coppertone/record.rb', line 57 def redirect_with_directives? redirect && directives.any? end |
#to_s ⇒ Object
109 110 111 |
# File 'lib/coppertone/record.rb', line 109 def to_s "#{self.class.version_str} #{@terms.map(&:to_s).join(' ')}" end |
#unknown_modifiers ⇒ Object
90 91 92 93 |
# File 'lib/coppertone/record.rb', line 90 def unknown_modifiers @unknown_modifiers ||= modifiers.select { |m| KNOWN_MODS.select { |k| m.is_a?(k) }.empty? } end |