Class: RubyDNS::RuleBasedServer::Rule
- Inherits:
-
Object
- Object
- RubyDNS::RuleBasedServer::Rule
- Defined in:
- lib/rubydns/rule_based_server.rb
Overview
Represents a single rule in the server.
Instance Method Summary collapse
-
#call(server, name, resource_class, transaction) ⇒ Object
Invoke the rule, if it matches the incoming request, it is evaluated and returns
true
, otherwise returnsfalse
. -
#initialize(pattern, callback) ⇒ Rule
constructor
A new instance of Rule.
-
#match(name, resource_class) ⇒ Object
Returns true if the name and resource_class are sufficient:.
- #to_s ⇒ Object
Constructor Details
#initialize(pattern, callback) ⇒ Rule
Returns a new instance of Rule.
28 29 30 31 |
# File 'lib/rubydns/rule_based_server.rb', line 28 def initialize(pattern, callback) @pattern = pattern @callback = callback end |
Instance Method Details
#call(server, name, resource_class, transaction) ⇒ Object
Invoke the rule, if it matches the incoming request, it is evaluated and returns true
, otherwise returns false
.
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# 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) ⇒ Object
Returns true if the name and resource_class are sufficient:
34 35 36 37 38 39 40 41 42 43 44 |
# 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 ⇒ Object
90 91 92 |
# File 'lib/rubydns/rule_based_server.rb', line 90 def to_s @pattern.inspect end |