Class: SPF::Mod

Inherits:
Term
  • Object
show all
Defined in:
lib/spf/model.rb

Direct Known Subclasses

GlobalMod, PositionalMod, UnknownMod

Defined Under Namespace

Classes: Exp, Redirect

Constant Summary

Constants inherited from Term

Term::DOMAIN_END_PATTERN, Term::DOMAIN_SPEC_PATTERN, Term::HEXWORD_PATTERN, Term::IPV4_ADDRESS_PATTERN, Term::IPV6_ADDRESS_PATTERN, Term::MACRO_DELIMITER, Term::MACRO_EXPAND_PATTERN, Term::MACRO_LITERAL_PATTERN, Term::MACRO_STRING_PATTERN, Term::MACRO_TRANSFORMERS_PATTERN, Term::NAME_PATTERN, Term::QNUM_PATTERN, Term::TOPLABEL_PATTERN, Term::TWO_HEXWORDS_OR_IPV4_ADDRESS_PATTERN

Instance Attribute Summary

Attributes inherited from Term

#domain_spec, #errors, #ip_address, #ip_netblocks, #ip_network, #ipv4_prefix_length, #ipv6_prefix_length, #raw_params

Instance Method Summary collapse

Methods inherited from Term

#domain, #error, new_from_string, #parse_domain_spec, #parse_ipv4_address, #parse_ipv4_ipv6_prefix_lengths, #parse_ipv4_network, #parse_ipv4_prefix_length, #parse_ipv6_address, #parse_ipv6_network, #parse_ipv6_prefix_length, #text

Constructor Details

#initialize(options = {}) ⇒ Mod

Returns a new instance of Mod.



655
656
657
658
659
660
661
662
663
664
665
666
667
# File 'lib/spf/model.rb', line 655

def initialize(options = {})
  super

  @parse_text  = options[:parse_text]
  @text        = options[:text]
  @domain_spec = options[:domain_spec]

  @parse_text = @text.dup unless @parse_text

  if @domain_spec and not SPF::MacroString === @domain_spec
    @domain_spec = SPF::MacroString.new({:text => @domain_spec})
  end
end

Instance Method Details

#parseObject



669
670
671
672
673
674
# File 'lib/spf/model.rb', line 669

def parse
  error(SPF::NothingToParseError('Nothing to parse for modifier')) unless @parse_text
  self.parse_name         if @errors.empty?
  self.parse_params(true) if @errors.empty?
  self.parse_end          if @errors.empty?
end

#parse_endObject



697
698
699
700
701
702
# File 'lib/spf/model.rb', line 697

def parse_end
  unless @parse_text == ''
    error(SPF::JunkInTermError.new("Junk encountered in modifier #{@text}", @text, @parse_text))
  end
  @parse_text = nil
end

#parse_nameObject



676
677
678
679
680
681
682
683
684
# File 'lib/spf/model.rb', line 676

def parse_name
  @parse_text.sub!(/^(#{self.class::NAME})=/i, '')
  if $1
    @name = $1
  else
    error(SPF::InvalidModError.new(
      "Unexpected modifier name encoutered in #{@text}"))
  end
end

#parse_params(required = false) ⇒ Object



686
687
688
689
690
691
692
693
694
695
# File 'lib/spf/model.rb', line 686

def parse_params(required = false)
  # Parse generic macro string of parameters text (should be overridden in sub-classes):
  @parse_text.sub!(/^(#{MACRO_STRING_PATTERN})$/x, '')
  if $1
    @params_text = $1
  elsif required
    error(SPF::InvalidMacroStringError.new(
      "Invalid macro string encountered in #{@text}"))
  end
end

#to_sObject



704
705
706
707
708
709
710
# File 'lib/spf/model.rb', line 704

def to_s
  return sprintf(
    '%s=%s',
    @name,
    @params ? @params : ''
  )
end