class MockDnsServer::PredicateFactory

Each method returns a predicate in the form of a lambda or proc that takes an incoming object (usually a Dnsruby::Message) object as a parameter and returns (as predicates do) true or false.

Public Instance Methods

a_request(qname) click to toggle source

Convenience method for testing a request of qtype 'A' with the given qname.

# File lib/mock_dns_server/predicate_factory.rb, line 67
def a_request(qname)
  qtype_and_qname('A', qname)
end
all(*predicates) click to toggle source

TODO: Case insensitive? TODO: Add sender to signature for tcp/udp, etc.?

# File lib/mock_dns_server/predicate_factory.rb, line 18
def all(*predicates)
  ->(message, protocol = nil) do
    predicates.all? { |p| p.call(message, protocol) }
  end
end
always_false() click to toggle source
# File lib/mock_dns_server/predicate_factory.rb, line 97
def always_false
  ->(_, _) { false }
end
always_true() click to toggle source
# File lib/mock_dns_server/predicate_factory.rb, line 93
def always_true
  ->(_, _) { true }
end
any(*predicates) click to toggle source
# File lib/mock_dns_server/predicate_factory.rb, line 24
def any(*predicates)
  ->(message, protocol = nil) do
    predicates.any? { |p| p.call(message, protocol) }
  end
end
axfr() click to toggle source
# File lib/mock_dns_server/predicate_factory.rb, line 48
def axfr
  qtype('AXFR')
end
dns() click to toggle source
# File lib/mock_dns_server/predicate_factory.rb, line 36
def dns
  ->(message, _ = nil) { message.is_a?(Dnsruby::Message) }
end
from_tcp() click to toggle source
# File lib/mock_dns_server/predicate_factory.rb, line 85
def from_tcp
  ->(_, protocol) { protocol == :tcp }
end
from_udp() click to toggle source
# File lib/mock_dns_server/predicate_factory.rb, line 89
def from_udp
  ->(_, protocol) { protocol == :udp }
end
ixfr() click to toggle source
# File lib/mock_dns_server/predicate_factory.rb, line 44
def ixfr
  qtype('IXFR')
end
mt(message) click to toggle source

shorthand for the MessageTransformers instance

# File lib/mock_dns_server/predicate_factory.rb, line 11
def mt(message)
  MessageTransformer.new(message)
end
none(*predicates) click to toggle source
# File lib/mock_dns_server/predicate_factory.rb, line 30
def none(*predicates)
  ->(message, protocol = nil) do
    predicates.none? { |p| p.call(message, protocol) }
  end
end
qclass(qclass) click to toggle source
# File lib/mock_dns_server/predicate_factory.rb, line 77
def qclass(qclass)
  ->(message, _ = nil) { dns.(message) && eq_case_insensitive(mt(message).qclass, qclass) }
end
qname(qname) click to toggle source
# File lib/mock_dns_server/predicate_factory.rb, line 81
def qname(qname)
  ->(message, _ = nil) { dns.(message) && eq_case_insensitive(mt(message).qname, qname) }
end
qtype(qtype) click to toggle source
# File lib/mock_dns_server/predicate_factory.rb, line 71
def qtype(qtype)
  ->(message, _ = nil) do
    dns.(message) && eq_case_insensitive(mt(message).qtype, qtype)
  end
end
qtype_and_qname(qtype, qname) click to toggle source

Convenience method for testing for a specific qtype and qname.

# File lib/mock_dns_server/predicate_factory.rb, line 62
def qtype_and_qname(qtype, qname)
  all(qtype(qtype), qname(qname))
end
soa() click to toggle source
# File lib/mock_dns_server/predicate_factory.rb, line 40
def soa
  qtype('SOA')
end
xfr() click to toggle source
# File lib/mock_dns_server/predicate_factory.rb, line 52
def xfr
  any(axfr, ixfr)
end
zone_load() click to toggle source

Returns true for messages relating to data from the zone load.

# File lib/mock_dns_server/predicate_factory.rb, line 57
def zone_load
  any(xfr, soa)
end

Private Instance Methods

eq_case_insensitive(s1, s2) click to toggle source
# File lib/mock_dns_server/predicate_factory.rb, line 103
def eq_case_insensitive(s1, s2)
  s1.downcase == s2.downcase
end