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.
7 8 9 10 |
# File 'lib/coppertone/record.rb', line 7 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
12 13 14 |
# File 'lib/coppertone/record.rb', line 12 def self.record?(record_text) Coppertone::RecordTermParser.record?(record_text) end |
.version_str ⇒ Object
109 110 111 |
# File 'lib/coppertone/record.rb', line 109 def self.version_str Coppertone::RecordTermParser::VERSION_STR end |
Instance Method Details
#all_directive ⇒ Object
25 26 27 |
# File 'lib/coppertone/record.rb', line 25 def all_directive @all_directive ||= directives.find(&:all?) end |
#context_dependent_evaluation? ⇒ Boolean
77 78 79 80 81 |
# File 'lib/coppertone/record.rb', line 77 def context_dependent_evaluation? return true if directives.any?(&:context_dependent?) redirect&.context_dependent? end |
#context_dependent_explanation? ⇒ Boolean
87 88 89 |
# File 'lib/coppertone/record.rb', line 87 def context_dependent_explanation? exp&.context_dependent? end |
#directives ⇒ Object
21 22 23 |
# File 'lib/coppertone/record.rb', line 21 def directives @directives ||= @terms.select { |t| t.is_a?(Coppertone::Directive) } end |
#dns_lookup_term_count ⇒ Object
33 34 35 36 37 38 39 |
# File 'lib/coppertone/record.rb', line 33 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
83 84 85 |
# File 'lib/coppertone/record.rb', line 83 def exp @exp ||= find_modifier(Coppertone::Modifier::Exp) end |
#find_modifier(klass) ⇒ Object
98 99 100 101 102 103 |
# File 'lib/coppertone/record.rb', line 98 def find_modifier(klass) arr = modifiers.select { |m| m.is_a?(klass) } raise DuplicateModifierError if arr.size > 1 arr.first end |
#find_redirect ⇒ Object
105 106 107 |
# File 'lib/coppertone/record.rb', line 105 def find_redirect find_modifier(Coppertone::Modifier::Redirect) end |
#include_all? ⇒ Boolean
29 30 31 |
# File 'lib/coppertone/record.rb', line 29 def include_all? all_directive ? true : false end |
#includes ⇒ Object
41 42 43 44 45 46 47 48 |
# File 'lib/coppertone/record.rb', line 41 def includes @includes ||= begin directives.select do |d| d.mechanism.is_a?(Coppertone::Mechanism::Include) end end end |
#modifiers ⇒ Object
50 51 52 |
# File 'lib/coppertone/record.rb', line 50 def modifiers @modifiers ||= @terms.select { |t| t.is_a?(Coppertone::Modifier) } end |
#netblock_mechanisms ⇒ Object
62 63 64 65 66 67 |
# File 'lib/coppertone/record.rb', line 62 def netblock_mechanisms @netblock_mechanisms ||= directives.select do |d| d.mechanism.is_a?(Coppertone::Mechanism::IPMechanism) end end |
#netblocks_only? ⇒ Boolean
69 70 71 72 73 74 75 |
# File 'lib/coppertone/record.rb', line 69 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
16 17 18 19 |
# File 'lib/coppertone/record.rb', line 16 def normalize_terms find_redirect # Checks for duplicate redirect modifiers exp # Checks for duplicate exp modifiers end |
#redirect ⇒ Object
54 55 56 |
# File 'lib/coppertone/record.rb', line 54 def redirect @redirect ||= find_redirect end |
#redirect_with_directives? ⇒ Boolean
58 59 60 |
# File 'lib/coppertone/record.rb', line 58 def redirect_with_directives? redirect && directives.any? end |
#to_s ⇒ Object
113 114 115 |
# File 'lib/coppertone/record.rb', line 113 def to_s "#{self.class.version_str} #{@terms.map(&:to_s).join(' ')}" end |
#unknown_modifiers ⇒ Object
93 94 95 96 |
# File 'lib/coppertone/record.rb', line 93 def unknown_modifiers @unknown_modifiers ||= modifiers.select { |m| KNOWN_MODS.select { |k| m.is_a?(k) }.empty? } end |