Class: SPF::Mech::Include

Inherits:
SPF::Mech show all
Defined in:
lib/spf/model.rb

Constant Summary collapse

NAME =
'include'

Constants inherited from SPF::Mech

DEFAULT_QUALIFIER, EXPLANATION_TEMPLATES_BY_RESULT_CODE, NAME_PATTERN, QUALIFIER_PATTERN

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 SPF::Mech

#default_ipv4_prefix_length, #default_ipv6_prefix_length, #explain, #explanation_template, #initialize, #match_in_domain, #parse, #parse_end, #parse_name, #parse_qualifier, #qualifier, #to_s

Methods inherited from Term

#domain, #error, #initialize, 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

This class inherits a constructor from SPF::Mech

Instance Method Details

#intitialize(options = {}) ⇒ Object



525
526
527
528
# File 'lib/spf/model.rb', line 525

def intitialize(options = {})
  super(options)
  @nested_record = nil
end

#match(server, request, want_result = true) ⇒ Object



539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
# File 'lib/spf/model.rb', line 539

def match(server, request, want_result = true)

  server.count_dns_interactive_term(request)

  # Create sub-request with mutated authority domain:
  authority_domain = self.domain(server, request)
  sub_request = request.new_sub_request({:authority_domain => authority_domain})

  # Process sub-request:
  result = server.process(sub_request)

  # Translate result of sub-request (RFC 4408, 5.9):

  return false unless want_result

  return true if SPF::Result::Pass === result

  return false if
    SPF::Result::Fail     === result or
    SPF::Result::SoftFail === result or
    SPF::Result::Neutral  === result

  server.throw_result(:permerror, request,
    "Include domain '#{authority_domain}' has no applicable sender policy") if
    SPF::Result::None === result

  # Propagate any other results (including {Perm,Temp}Error) as-is:
  raise result
end

#nested_record(server = nil, request = nil, loose_match = false) ⇒ Object



569
570
571
572
573
574
575
# File 'lib/spf/model.rb', line 569

def nested_record(server=nil, request=nil, loose_match = false)
  return @nested_record if @nested_record
  return nil unless server and request
  authority_domain = self.domain(server, request)
  sub_request = request.new_sub_request({:authority_domain => authority_domain})
  return @nested_record = server.select_record(sub_request, loose_match)
end

#paramsObject



535
536
537
# File 'lib/spf/model.rb', line 535

def params
  return @domain_spec ? @domain_spec.to_s : nil
end

#parse_params(required = true) ⇒ Object



530
531
532
533
# File 'lib/spf/model.rb', line 530

def parse_params(required = true)
  @raw_params = @parse_text.dup
  self.parse_domain_spec(required)
end