class RubyDNS::RuleBasedServer::Rule
Represents a single rule in the server.
Public Class Methods
new(pattern, callback)
click to toggle source
# File lib/rubydns/rule_based_server.rb, line 28 def initialize(pattern, callback) @pattern = pattern @callback = callback end
Public Instance Methods
call(server, name, resource_class, transaction)
click to toggle source
Invoke the rule, if it matches the incoming request, it is evaluated and returns ‘true`, otherwise returns `false`.
# File lib/rubydns/rule_based_server.rb, line 47 def call(server, name, resource_class, transaction) unless match(name, resource_class) server.logger.debug "<#{transaction.query.id}> Resource class #{resource_class} failed to match #{@pattern[1].inspect}!" return false end # Does this rule match against the supplied name? case @pattern[0] when Regexp match_data = @pattern[0].match(name) if match_data server.logger.debug "<#{transaction.query.id}> Regexp pattern matched with #{match_data.inspect}." @callback[transaction, match_data] return true end when String if @pattern[0] == name server.logger.debug "<#{transaction.query.id}> String pattern matched." @callback[transaction] return true end else if (@pattern[0].call(name, resource_class) rescue false) server.logger.debug "<#{transaction.query.id}> Callable pattern matched." @callback[transaction] return true end end server.logger.debug "<#{transaction.query.id}> No pattern matched." # We failed to match the pattern. return false end
match(name, resource_class)
click to toggle source
Returns true if the name and resource_class are sufficient:
# File lib/rubydns/rule_based_server.rb, line 34 def match(name, resource_class) # If the pattern doesn't specify any resource classes, we implicitly pass this test: return true if @pattern.size < 2 # Otherwise, we try to match against some specific resource classes: if Class === @pattern[1] @pattern[1] == resource_class else @pattern[1].include?(resource_class) rescue false end end
to_s()
click to toggle source
# File lib/rubydns/rule_based_server.rb, line 90 def to_s @pattern.inspect end