ShogunPanda/devdnsd

View on GitHub
docs/DevDNSd/Rule.html

Summary

Maintainability
Test Coverage
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>
  Class: DevDNSd::Rule
  
    &mdash; Documentation by YARD 0.8.7.6
  
</title>

  <link rel="stylesheet" href="../css/style.css" type="text/css" charset="utf-8" />

  <link rel="stylesheet" href="../css/common.css" type="text/css" charset="utf-8" />

<script type="text/javascript" charset="utf-8">
  hasFrames = window.top.frames.main ? true : false;
  relpath = '../';
  framesUrl = "../frames.html#!DevDNSd/Rule.html";
</script>


  <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>

  <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>


  </head>
  <body>
    <div id="header">
      <div id="menu">
  
    <a href="../_index.html">Index (R)</a> &raquo;
    <span class='title'><span class='object_link'><a href="../DevDNSd.html" title="DevDNSd (module)">DevDNSd</a></span></span>
     &raquo; 
    <span class="title">Rule</span>
  

  <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
</div>

      <div id="search">
  
    <a class="full_list_link" id="class_list_link"
        href="../class_list.html">
      Class List
    </a>
  
    <a class="full_list_link" id="method_list_link"
        href="../method_list.html">
      Method List
    </a>
  
    <a class="full_list_link" id="file_list_link"
        href="../file_list.html">
      File List
    </a>
  
</div>
      <div class="clear"></div>
    </div>

    <iframe id="search_frame"></iframe>

    <div id="content"><h1>Class: DevDNSd::Rule
  
  
  
</h1>

<dl class="box">
  
    <dt class="r1">Inherits:</dt>
    <dd class="r1">
      <span class="inheritName">Object</span>
      
        <ul class="fullTree">
          <li>Object</li>
          
            <li class="next">DevDNSd::Rule</li>
          
        </ul>
        <a href="#" class="inheritanceTree">show all</a>
      
      </dd>
    
  
  
    
  
    
  
  
  
    <dt class="r2 last">Defined in:</dt>
    <dd class="r2 last">lib/devdnsd/rule.rb</dd>
  
</dl>
<div class="clear"></div>

<h2>Overview</h2><div class="docstring">
  <div class="discussion">
    <p>This class encapsulate a rule for matching an hostname.</p>


  </div>
</div>
<div class="tags">
  

</div>



  <h2>Instance Attribute Summary <small>(<a href="#" class="summary_toggle">collapse</a>)</small></h2>
  <ul class="summary">
    
      <li class="public ">
  <span class="summary_signature">
    
      <a href="#block-instance_method" title="#block (instance method)">- (Proc) <strong>block</strong> </a>
    

    
  </span>
  
  
  
    
    
  
  
  
  
  

  
    <span class="summary_desc"><div class='inline'><p>An optional block to compute the reply instead of using the <code>reply</code> parameter.</p>
</div></span>
  
</li>

    
      <li class="public ">
  <span class="summary_signature">
    
      <a href="#match-instance_method" title="#match (instance method)">- (String|Regexp) <strong>match</strong> </a>
    

    
  </span>
  
  
  
    
    
  
  
  
  
  

  
    <span class="summary_desc"><div class='inline'><p>The pattern to match.</p>
</div></span>
  
</li>

    
      <li class="public ">
  <span class="summary_signature">
    
      <a href="#options-instance_method" title="#options (instance method)">- (Hash) <strong>options</strong> </a>
    

    
  </span>
  
  
  
    
    
  
  
  
  
  

  
    <span class="summary_desc"><div class='inline'><p>A list of options for the request.</p>
</div></span>
  
</li>

    
      <li class="public ">
  <span class="summary_signature">
    
      <a href="#reply-instance_method" title="#reply (instance method)">- (String) <strong>reply</strong> </a>
    

    
  </span>
  
  
  
    
    
  
  
  
  
  

  
    <span class="summary_desc"><div class='inline'><p>The IP or hostname to reply back to the client.</p>
</div></span>
  
</li>

    
      <li class="public ">
  <span class="summary_signature">
    
      <a href="#type-instance_method" title="#type (instance method)">- (Symbol) <strong>type</strong> </a>
    

    
  </span>
  
  
  
    
    
  
  
  
  
  

  
    <span class="summary_desc"><div class='inline'><p>The type of request to match.</p>
</div></span>
  
</li>

    
  </ul>




  
    <h2>
      Class Method Summary
      <small>(<a href="#" class="summary_toggle">collapse</a>)</small>
    </h2>

    <ul class="summary">
      
        <li class="public ">
  <span class="summary_signature">
    
      <a href="#create-class_method" title="create (class method)">+ (Rule) <strong>create</strong>(match: /.+/, reply: &quot;127.0.0.1&quot;, type: :A, options: {}, &amp;block) </a>
    

    
  </span>
  
  
  
  
  
  
  

  
    <span class="summary_desc"><div class='inline'><p>Creates a new rule.</p>
</div></span>
  
</li>

      
        <li class="public ">
  <span class="summary_signature">
    
      <a href="#resource_class_to_symbol-class_method" title="resource_class_to_symbol (class method)">+ (Symbol) <strong>resource_class_to_symbol</strong>(klass) </a>
    

    
  </span>
  
  
  
  
  
  
  

  
    <span class="summary_desc"><div class='inline'><p>Converts a class to the correspondent symbol.</p>
</div></span>
  
</li>

      
        <li class="public ">
  <span class="summary_signature">
    
      <a href="#symbol_to_resource_class-class_method" title="symbol_to_resource_class (class method)">+ (Symbol) <strong>symbol_to_resource_class</strong>(symbol, locale = nil) </a>
    

    
  </span>
  
  
  
  
  
  
  

  
    <span class="summary_desc"><div class='inline'><p>Converts a symbol to the correspondent DNS resource class.</p>
</div></span>
  
</li>

      
    </ul>
  
    <h2>
      Instance Method Summary
      <small>(<a href="#" class="summary_toggle">collapse</a>)</small>
    </h2>

    <ul class="summary">
      
        <li class="public ">
  <span class="summary_signature">
    
      <a href="#block%3F-instance_method" title="#block? (instance method)">- (Boolean) <strong>block?</strong> </a>
    

    
      (also: #has_block?)
    
  </span>
  
  
  
  
  
  
  

  
    <span class="summary_desc"><div class='inline'><p>Checks if the rule is a regexp.</p>
</div></span>
  
</li>

      
        <li class="public ">
  <span class="summary_signature">
    
      <a href="#initialize-instance_method" title="#initialize (instance method)">- (Rule) <strong>initialize</strong>(match: /.+/, reply: &quot;127.0.0.1&quot;, type: :A, options: {}, &amp;block) </a>
    

    
  </span>
  
  
    <span class="note title constructor">constructor</span>
  
  
  
  
  
  

  
    <span class="summary_desc"><div class='inline'><p>Creates a new rule.</p>
</div></span>
  
</li>

      
        <li class="public ">
  <span class="summary_signature">
    
      <a href="#match_host-instance_method" title="#match_host (instance method)">- (MatchData|Boolean|Nil) <strong>match_host</strong>(hostname) </a>
    

    
  </span>
  
  
  
  
  
  
  

  
    <span class="summary_desc"><div class='inline'><p>Matches a hostname to the rule.</p>
</div></span>
  
</li>

      
        <li class="public ">
  <span class="summary_signature">
    
      <a href="#regexp%3F-instance_method" title="#regexp? (instance method)">- (Boolean) <strong>regexp?</strong> </a>
    

    
      (also: #is_regexp?)
    
  </span>
  
  
  
  
  
  
  

  
    <span class="summary_desc"><div class='inline'><p>Checks if the rule is a regexp.</p>
</div></span>
  
</li>

      
        <li class="public ">
  <span class="summary_signature">
    
      <a href="#resource_class-instance_method" title="#resource_class (instance method)">- (Array|Class) <strong>resource_class</strong> </a>
    

    
  </span>
  
  
  
  
  
  
  

  
    <span class="summary_desc"><div class='inline'><p>Returns the resource class(es) for the current rule.</p>
</div></span>
  
</li>

      
    </ul>
  

<div id="constructor_details" class="method_details_list">
  <h2>Constructor Details</h2>
  
    <div class="method_details first">
  <h3 class="signature first" id="initialize-instance_method">
  
    - (<tt><span class='object_link'><a href="" title="DevDNSd::Rule (class)">Rule</a></span></tt>) <strong>initialize</strong>(match: /.+/, reply: &quot;127.0.0.1&quot;, type: :A, options: {}, &amp;block) 
  

  

  
</h3><div class="docstring">
  <div class="discussion">
    <p>Creates a new rule.</p>


  </div>
</div>
<div class="tags">
  <p class="tag_title">Parameters:</p>
<ul class="param">
  
    <li>
      
        <span class='name'>match</span>
      
      
        <span class='type'>(<tt>String|Regexp</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>The pattern to match.</p>
</div>
      
    </li>
  
    <li>
      
        <span class='name'>reply</span>
      
      
        <span class='type'>(<tt>String|Symbol</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>The IP or hostname to reply back to the client. It can be omitted (and it will be ignored) if a block is provided.</p>
</div>
      
    </li>
  
    <li>
      
        <span class='name'>type</span>
      
      
        <span class='type'>(<tt>Symbol</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>The type of request to match.</p>
</div>
      
    </li>
  
    <li>
      
        <span class='name'>options</span>
      
      
        <span class='type'>(<tt>Hash</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>A list of options for the request.</p>
</div>
      
    </li>
  
    <li>
      
        <span class='name'>block</span>
      
      
        <span class='type'>(<tt>Proc</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>An optional block to compute the reply instead of using the <code>reply</code> parameter.</p>
</div>
      
    </li>
  
</ul>


  <p class="tag_title">See Also:</p>
  <ul class="see">
    
      <li><span class='object_link'><a href="#create-class_method" title="DevDNSd::Rule.create (method)">create</a></span></li>
    
  </ul>

</div><table class="source_code">
  <tr>
    <td>
      <pre class="lines">


74
75
76
77</pre>
    </td>
    <td>
      <pre class="code"><span class="info file"># File 'lib/devdnsd/rule.rb', line 74</span>

<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='label'>match:</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>.+</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='label'>reply:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>127.0.0.1</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>type:</span> <span class='symbol'>:A</span><span class='comma'>,</span> <span class='label'>options:</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
  <span class='id identifier rubyid_setup'>setup</span><span class='lparen'>(</span><span class='id identifier rubyid_match'>match</span><span class='comma'>,</span> <span class='id identifier rubyid_reply'>reply</span><span class='comma'>,</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
  <span class='id identifier rubyid_validate_rule'>validate_rule</span>
<span class='kw'>end</span></pre>
    </td>
  </tr>
</table>
</div>
  
</div>

  <div id="instance_attr_details" class="attr_details">
    <h2>Instance Attribute Details</h2>
    
      
      <span id="block=-instance_method"></span>
      <div class="method_details first">
  <h3 class="signature first" id="block-instance_method">
  
    - (<tt>Proc</tt>) <strong>block</strong> 
  

  

  
</h3><div class="docstring">
  <div class="discussion">
    <p>Returns An optional block to compute the reply instead of using the <code>reply</code> parameter. @see .create</p>


  </div>
</div>
<div class="tags">
  
<p class="tag_title">Returns:</p>
<ul class="return">
  
    <li>
      
      
        <span class='type'>(<tt>Proc</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>An optional block to compute the reply instead of using the <code>reply</code> parameter. @see .create</p>
</div>
      
    </li>
  
</ul>

</div><table class="source_code">
  <tr>
    <td>
      <pre class="lines">


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136</pre>
    </td>
    <td>
      <pre class="code"><span class="info file"># File 'lib/devdnsd/rule.rb', line 20</span>

<span class='kw'>class</span> <span class='const'>Rule</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:match</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:type</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:reply</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:options</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:block</span>

  <span class='comment'># Class methods
</span>  <span class='kw'>class</span> <span class='op'>&lt;&lt;</span> <span class='kw'>self</span>
    <span class='comment'># Creates a new rule.
</span>    <span class='comment'>#
</span>    <span class='comment'># @param match [String|Regexp] The pattern to match.
</span>    <span class='comment'># @param reply [String|Symbol] The IP or hostname to reply back to the client. It can be omitted (and it will be ignored) if a block is provided.
</span>    <span class='comment'># @param type [Symbol] The type of request to match.
</span>    <span class='comment'># @param options [Hash] A list of options for the request.
</span>    <span class='comment'># @param block [Proc] An optional block to compute the reply instead of using the `reply` parameter.
</span>    <span class='comment'># @return [Rule] The new rule.
</span>    <span class='kw'>def</span> <span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span><span class='label'>match:</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>.+</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='label'>reply:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>127.0.0.1</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>type:</span> <span class='symbol'>:A</span><span class='comma'>,</span> <span class='label'>options:</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
      <span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='label'>match:</span> <span class='id identifier rubyid_match'>match</span><span class='comma'>,</span> <span class='label'>reply:</span> <span class='id identifier rubyid_reply'>reply</span><span class='comma'>,</span> <span class='label'>type:</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='label'>options:</span> <span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
    <span class='kw'>end</span>

    <span class='comment'># Converts a class to the correspondent symbol.
</span>    <span class='comment'>#
</span>    <span class='comment'># @param klass [Class] The class to convert.
</span>    <span class='comment'># @return [Symbol] The symbol representation of the class.
</span>    <span class='kw'>def</span> <span class='id identifier rubyid_resource_class_to_symbol'>resource_class_to_symbol</span><span class='lparen'>(</span><span class='id identifier rubyid_klass'>klass</span><span class='rparen'>)</span>
      <span class='id identifier rubyid_klass'>klass</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>(.+::)?(.+)</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>\\2</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span>
    <span class='kw'>end</span>

    <span class='comment'># Converts a symbol to the correspondent DNS resource class.
</span>    <span class='comment'>#
</span>    <span class='comment'># @param symbol [Symbol] The symbol to convert.
</span>    <span class='comment'># @param locale [Symbol] The locale to use for the messages.
</span>    <span class='comment'># @return [Symbol] The class associated to the symbol.
</span>    <span class='kw'>def</span> <span class='id identifier rubyid_symbol_to_resource_class'>symbol_to_resource_class</span><span class='lparen'>(</span><span class='id identifier rubyid_symbol'>symbol</span><span class='comma'>,</span> <span class='id identifier rubyid_locale'>locale</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
      <span class='id identifier rubyid_symbol'>symbol</span> <span class='op'>=</span> <span class='id identifier rubyid_symbol'>symbol</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_upcase'>upcase</span>

      <span class='kw'>begin</span>
        <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Resolv::DNS::Resource::IN::</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_symbol'>symbol</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='period'>.</span><span class='id identifier rubyid_constantize'>constantize</span>
      <span class='kw'>rescue</span> <span class='op'>::</span><span class='const'>NameError</span>
        <span class='id identifier rubyid_i18n'>i18n</span> <span class='op'>=</span> <span class='const'>Bovem</span><span class='op'>::</span><span class='const'>I18n</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_locale'>locale</span><span class='comma'>,</span> <span class='label'>root:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>devdnsd</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>path:</span> <span class='op'>::</span><span class='const'>Pathname</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_dirname'>dirname</span><span class='lparen'>(</span><span class='kw'>__FILE__</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>/../../locales/</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
        <span class='id identifier rubyid_raise'>raise</span><span class='lparen'>(</span><span class='const'>DevDNSd</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>InvalidRule</span><span class='comma'>,</span> <span class='id identifier rubyid_i18n'>i18n</span><span class='period'>.</span><span class='id identifier rubyid_rule_invalid_resource'>rule_invalid_resource</span><span class='lparen'>(</span><span class='id identifier rubyid_symbol'>symbol</span><span class='rparen'>)</span><span class='rparen'>)</span>
      <span class='kw'>end</span>
    <span class='kw'>end</span>
  <span class='kw'>end</span>

  <span class='comment'># Creates a new rule.
</span>  <span class='comment'>#
</span>  <span class='comment'># @param match [String|Regexp] The pattern to match.
</span>  <span class='comment'># @param reply [String|Symbol] The IP or hostname to reply back to the client. It can be omitted (and it will be ignored) if a block is provided.
</span>  <span class='comment'># @param type [Symbol] The type of request to match.
</span>  <span class='comment'># @param options [Hash] A list of options for the request.
</span>  <span class='comment'># @param block [Proc] An optional block to compute the reply instead of using the `reply` parameter.
</span>  <span class='comment'># @see .create
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='label'>match:</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>.+</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='label'>reply:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>127.0.0.1</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>type:</span> <span class='symbol'>:A</span><span class='comma'>,</span> <span class='label'>options:</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
    <span class='id identifier rubyid_setup'>setup</span><span class='lparen'>(</span><span class='id identifier rubyid_match'>match</span><span class='comma'>,</span> <span class='id identifier rubyid_reply'>reply</span><span class='comma'>,</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
    <span class='id identifier rubyid_validate_rule'>validate_rule</span>
  <span class='kw'>end</span>

  <span class='comment'># Returns the resource class(es) for the current rule.
</span>  <span class='comment'>#
</span>  <span class='comment'># @return [Array|Class] The class(es) for the current rule.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_resource_class'>resource_class</span>
    <span class='id identifier rubyid_classes'>classes</span> <span class='op'>=</span> <span class='ivar'>@type</span><span class='period'>.</span><span class='id identifier rubyid_ensure_array'>ensure_array</span><span class='lparen'>(</span><span class='label'>no_duplicates:</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='label'>compact:</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='label'>flatten:</span> <span class='kw'>true</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_cls'>cls</span><span class='op'>|</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_symbol_to_resource_class'>symbol_to_resource_class</span><span class='lparen'>(</span><span class='id identifier rubyid_cls'>cls</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:locale</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
    <span class='id identifier rubyid_classes'>classes</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>==</span> <span class='int'>1</span> <span class='op'>?</span> <span class='id identifier rubyid_classes'>classes</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span> <span class='op'>:</span> <span class='id identifier rubyid_classes'>classes</span>
  <span class='kw'>end</span>

  <span class='comment'># Checks if the rule is a regexp.
</span>  <span class='comment'>#
</span>  <span class='comment'># @return [Boolean] `true` if the rule is a Regexp, `false` otherwise.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_regexp?'>regexp?</span>
    <span class='ivar'>@match</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>Regexp</span><span class='rparen'>)</span>
  <span class='kw'>end</span>
  <span class='id identifier rubyid_alias_method'>alias_method</span> <span class='symbol'>:is_regexp?</span><span class='comma'>,</span> <span class='symbol'>:regexp?</span>

  <span class='comment'># Checks if the rule is a regexp.
</span>  <span class='comment'>#
</span>  <span class='comment'># @return [Boolean] `true` if the rule has a block, `false` otherwise.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_block?'>block?</span>
    <span class='ivar'>@block</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
  <span class='kw'>end</span>
  <span class='id identifier rubyid_alias_method'>alias_method</span> <span class='symbol'>:has_block?</span><span class='comma'>,</span> <span class='symbol'>:block?</span>

  <span class='comment'># Matches a hostname to the rule.
</span>  <span class='comment'>#
</span>  <span class='comment'># @param hostname [String] The hostname to match.
</span>  <span class='comment'># @return [MatchData|Boolean|Nil] Return `true` or MatchData (if the pattern is a regexp) if the rule matches, `false` or `nil` otherwise.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_match_host'>match_host</span><span class='lparen'>(</span><span class='id identifier rubyid_hostname'>hostname</span><span class='rparen'>)</span>
    <span class='id identifier rubyid_regexp?'>regexp?</span> <span class='op'>?</span> <span class='ivar'>@match</span><span class='period'>.</span><span class='id identifier rubyid_match'>match</span><span class='lparen'>(</span><span class='id identifier rubyid_hostname'>hostname</span><span class='rparen'>)</span> <span class='op'>:</span> <span class='lparen'>(</span><span class='ivar'>@match</span> <span class='op'>==</span> <span class='id identifier rubyid_hostname'>hostname</span><span class='rparen'>)</span>
  <span class='kw'>end</span>

  <span class='id identifier rubyid_private'>private</span>

  <span class='comment'># :nodoc:
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_setup'>setup</span><span class='lparen'>(</span><span class='id identifier rubyid_match'>match</span><span class='comma'>,</span> <span class='id identifier rubyid_reply'>reply</span><span class='comma'>,</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
    <span class='ivar'>@match</span> <span class='op'>=</span> <span class='id identifier rubyid_match'>match</span>

    <span class='kw'>if</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='comment'># reply acts like a type, type is ignored
</span>      <span class='ivar'>@type</span> <span class='op'>=</span> <span class='id identifier rubyid_type'>type</span> <span class='op'>||</span> <span class='symbol'>:A</span>
      <span class='ivar'>@reply</span> <span class='op'>=</span> <span class='kw'>nil</span>
    <span class='kw'>else</span> <span class='comment'># reply acts like a reply
</span>      <span class='ivar'>@reply</span> <span class='op'>=</span> <span class='id identifier rubyid_reply'>reply</span> <span class='op'>||</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>127.0.0.1</span><span class='tstring_end'>&quot;</span></span>
      <span class='ivar'>@type</span> <span class='op'>=</span> <span class='id identifier rubyid_type'>type</span> <span class='op'>||</span> <span class='symbol'>:A</span>
    <span class='kw'>end</span>

    <span class='ivar'>@options</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span>
    <span class='ivar'>@block</span> <span class='op'>=</span> <span class='id identifier rubyid_block'>block</span>
    <span class='id identifier rubyid_locale'>locale</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:locale</span><span class='rbracket'>]</span> <span class='op'>:</span> <span class='symbol'>:en</span>
    <span class='ivar'>@i18n</span> <span class='op'>=</span> <span class='const'>Bovem</span><span class='op'>::</span><span class='const'>I18n</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_locale'>locale</span><span class='comma'>,</span> <span class='label'>root:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>devdnsd</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>path:</span> <span class='op'>::</span><span class='const'>Pathname</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_dirname'>dirname</span><span class='lparen'>(</span><span class='kw'>__FILE__</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>/../../locales/</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
  <span class='kw'>end</span>

  <span class='comment'># Validates a newly created rule.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_validate_rule'>validate_rule</span>
    <span class='id identifier rubyid_raise'>raise</span><span class='lparen'>(</span><span class='const'>DevDNSd</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>InvalidRule</span><span class='comma'>,</span> <span class='ivar'>@i18n</span><span class='period'>.</span><span class='id identifier rubyid_rule_invalid_call'>rule_invalid_call</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='ivar'>@reply</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span> <span class='op'>&amp;&amp;</span> <span class='ivar'>@block</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
    <span class='id identifier rubyid_raise'>raise</span><span class='lparen'>(</span><span class='const'>DevDNSd</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>InvalidRule</span><span class='comma'>,</span> <span class='ivar'>@i18n</span><span class='period'>.</span><span class='id identifier rubyid_rule_invalid_options'>rule_invalid_options</span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>Hash</span><span class='rparen'>)</span>
  <span class='kw'>end</span>
<span class='kw'>end</span></pre>
    </td>
  </tr>
</table>
</div>
    
      
      <span id="match=-instance_method"></span>
      <div class="method_details ">
  <h3 class="signature " id="match-instance_method">
  
    - (<tt>String|Regexp</tt>) <strong>match</strong> 
  

  

  
</h3><div class="docstring">
  <div class="discussion">
    <p>Returns The pattern to match. Default: <code>/.+/</code>.</p>


  </div>
</div>
<div class="tags">
  
<p class="tag_title">Returns:</p>
<ul class="return">
  
    <li>
      
      
        <span class='type'>(<tt>String|Regexp</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>The pattern to match. Default: <code>/.+/</code>.</p>
</div>
      
    </li>
  
</ul>

</div><table class="source_code">
  <tr>
    <td>
      <pre class="lines">


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136</pre>
    </td>
    <td>
      <pre class="code"><span class="info file"># File 'lib/devdnsd/rule.rb', line 20</span>

<span class='kw'>class</span> <span class='const'>Rule</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:match</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:type</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:reply</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:options</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:block</span>

  <span class='comment'># Class methods
</span>  <span class='kw'>class</span> <span class='op'>&lt;&lt;</span> <span class='kw'>self</span>
    <span class='comment'># Creates a new rule.
</span>    <span class='comment'>#
</span>    <span class='comment'># @param match [String|Regexp] The pattern to match.
</span>    <span class='comment'># @param reply [String|Symbol] The IP or hostname to reply back to the client. It can be omitted (and it will be ignored) if a block is provided.
</span>    <span class='comment'># @param type [Symbol] The type of request to match.
</span>    <span class='comment'># @param options [Hash] A list of options for the request.
</span>    <span class='comment'># @param block [Proc] An optional block to compute the reply instead of using the `reply` parameter.
</span>    <span class='comment'># @return [Rule] The new rule.
</span>    <span class='kw'>def</span> <span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span><span class='label'>match:</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>.+</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='label'>reply:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>127.0.0.1</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>type:</span> <span class='symbol'>:A</span><span class='comma'>,</span> <span class='label'>options:</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
      <span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='label'>match:</span> <span class='id identifier rubyid_match'>match</span><span class='comma'>,</span> <span class='label'>reply:</span> <span class='id identifier rubyid_reply'>reply</span><span class='comma'>,</span> <span class='label'>type:</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='label'>options:</span> <span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
    <span class='kw'>end</span>

    <span class='comment'># Converts a class to the correspondent symbol.
</span>    <span class='comment'>#
</span>    <span class='comment'># @param klass [Class] The class to convert.
</span>    <span class='comment'># @return [Symbol] The symbol representation of the class.
</span>    <span class='kw'>def</span> <span class='id identifier rubyid_resource_class_to_symbol'>resource_class_to_symbol</span><span class='lparen'>(</span><span class='id identifier rubyid_klass'>klass</span><span class='rparen'>)</span>
      <span class='id identifier rubyid_klass'>klass</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>(.+::)?(.+)</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>\\2</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span>
    <span class='kw'>end</span>

    <span class='comment'># Converts a symbol to the correspondent DNS resource class.
</span>    <span class='comment'>#
</span>    <span class='comment'># @param symbol [Symbol] The symbol to convert.
</span>    <span class='comment'># @param locale [Symbol] The locale to use for the messages.
</span>    <span class='comment'># @return [Symbol] The class associated to the symbol.
</span>    <span class='kw'>def</span> <span class='id identifier rubyid_symbol_to_resource_class'>symbol_to_resource_class</span><span class='lparen'>(</span><span class='id identifier rubyid_symbol'>symbol</span><span class='comma'>,</span> <span class='id identifier rubyid_locale'>locale</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
      <span class='id identifier rubyid_symbol'>symbol</span> <span class='op'>=</span> <span class='id identifier rubyid_symbol'>symbol</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_upcase'>upcase</span>

      <span class='kw'>begin</span>
        <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Resolv::DNS::Resource::IN::</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_symbol'>symbol</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='period'>.</span><span class='id identifier rubyid_constantize'>constantize</span>
      <span class='kw'>rescue</span> <span class='op'>::</span><span class='const'>NameError</span>
        <span class='id identifier rubyid_i18n'>i18n</span> <span class='op'>=</span> <span class='const'>Bovem</span><span class='op'>::</span><span class='const'>I18n</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_locale'>locale</span><span class='comma'>,</span> <span class='label'>root:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>devdnsd</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>path:</span> <span class='op'>::</span><span class='const'>Pathname</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_dirname'>dirname</span><span class='lparen'>(</span><span class='kw'>__FILE__</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>/../../locales/</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
        <span class='id identifier rubyid_raise'>raise</span><span class='lparen'>(</span><span class='const'>DevDNSd</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>InvalidRule</span><span class='comma'>,</span> <span class='id identifier rubyid_i18n'>i18n</span><span class='period'>.</span><span class='id identifier rubyid_rule_invalid_resource'>rule_invalid_resource</span><span class='lparen'>(</span><span class='id identifier rubyid_symbol'>symbol</span><span class='rparen'>)</span><span class='rparen'>)</span>
      <span class='kw'>end</span>
    <span class='kw'>end</span>
  <span class='kw'>end</span>

  <span class='comment'># Creates a new rule.
</span>  <span class='comment'>#
</span>  <span class='comment'># @param match [String|Regexp] The pattern to match.
</span>  <span class='comment'># @param reply [String|Symbol] The IP or hostname to reply back to the client. It can be omitted (and it will be ignored) if a block is provided.
</span>  <span class='comment'># @param type [Symbol] The type of request to match.
</span>  <span class='comment'># @param options [Hash] A list of options for the request.
</span>  <span class='comment'># @param block [Proc] An optional block to compute the reply instead of using the `reply` parameter.
</span>  <span class='comment'># @see .create
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='label'>match:</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>.+</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='label'>reply:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>127.0.0.1</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>type:</span> <span class='symbol'>:A</span><span class='comma'>,</span> <span class='label'>options:</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
    <span class='id identifier rubyid_setup'>setup</span><span class='lparen'>(</span><span class='id identifier rubyid_match'>match</span><span class='comma'>,</span> <span class='id identifier rubyid_reply'>reply</span><span class='comma'>,</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
    <span class='id identifier rubyid_validate_rule'>validate_rule</span>
  <span class='kw'>end</span>

  <span class='comment'># Returns the resource class(es) for the current rule.
</span>  <span class='comment'>#
</span>  <span class='comment'># @return [Array|Class] The class(es) for the current rule.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_resource_class'>resource_class</span>
    <span class='id identifier rubyid_classes'>classes</span> <span class='op'>=</span> <span class='ivar'>@type</span><span class='period'>.</span><span class='id identifier rubyid_ensure_array'>ensure_array</span><span class='lparen'>(</span><span class='label'>no_duplicates:</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='label'>compact:</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='label'>flatten:</span> <span class='kw'>true</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_cls'>cls</span><span class='op'>|</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_symbol_to_resource_class'>symbol_to_resource_class</span><span class='lparen'>(</span><span class='id identifier rubyid_cls'>cls</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:locale</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
    <span class='id identifier rubyid_classes'>classes</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>==</span> <span class='int'>1</span> <span class='op'>?</span> <span class='id identifier rubyid_classes'>classes</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span> <span class='op'>:</span> <span class='id identifier rubyid_classes'>classes</span>
  <span class='kw'>end</span>

  <span class='comment'># Checks if the rule is a regexp.
</span>  <span class='comment'>#
</span>  <span class='comment'># @return [Boolean] `true` if the rule is a Regexp, `false` otherwise.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_regexp?'>regexp?</span>
    <span class='ivar'>@match</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>Regexp</span><span class='rparen'>)</span>
  <span class='kw'>end</span>
  <span class='id identifier rubyid_alias_method'>alias_method</span> <span class='symbol'>:is_regexp?</span><span class='comma'>,</span> <span class='symbol'>:regexp?</span>

  <span class='comment'># Checks if the rule is a regexp.
</span>  <span class='comment'>#
</span>  <span class='comment'># @return [Boolean] `true` if the rule has a block, `false` otherwise.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_block?'>block?</span>
    <span class='ivar'>@block</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
  <span class='kw'>end</span>
  <span class='id identifier rubyid_alias_method'>alias_method</span> <span class='symbol'>:has_block?</span><span class='comma'>,</span> <span class='symbol'>:block?</span>

  <span class='comment'># Matches a hostname to the rule.
</span>  <span class='comment'>#
</span>  <span class='comment'># @param hostname [String] The hostname to match.
</span>  <span class='comment'># @return [MatchData|Boolean|Nil] Return `true` or MatchData (if the pattern is a regexp) if the rule matches, `false` or `nil` otherwise.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_match_host'>match_host</span><span class='lparen'>(</span><span class='id identifier rubyid_hostname'>hostname</span><span class='rparen'>)</span>
    <span class='id identifier rubyid_regexp?'>regexp?</span> <span class='op'>?</span> <span class='ivar'>@match</span><span class='period'>.</span><span class='id identifier rubyid_match'>match</span><span class='lparen'>(</span><span class='id identifier rubyid_hostname'>hostname</span><span class='rparen'>)</span> <span class='op'>:</span> <span class='lparen'>(</span><span class='ivar'>@match</span> <span class='op'>==</span> <span class='id identifier rubyid_hostname'>hostname</span><span class='rparen'>)</span>
  <span class='kw'>end</span>

  <span class='id identifier rubyid_private'>private</span>

  <span class='comment'># :nodoc:
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_setup'>setup</span><span class='lparen'>(</span><span class='id identifier rubyid_match'>match</span><span class='comma'>,</span> <span class='id identifier rubyid_reply'>reply</span><span class='comma'>,</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
    <span class='ivar'>@match</span> <span class='op'>=</span> <span class='id identifier rubyid_match'>match</span>

    <span class='kw'>if</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='comment'># reply acts like a type, type is ignored
</span>      <span class='ivar'>@type</span> <span class='op'>=</span> <span class='id identifier rubyid_type'>type</span> <span class='op'>||</span> <span class='symbol'>:A</span>
      <span class='ivar'>@reply</span> <span class='op'>=</span> <span class='kw'>nil</span>
    <span class='kw'>else</span> <span class='comment'># reply acts like a reply
</span>      <span class='ivar'>@reply</span> <span class='op'>=</span> <span class='id identifier rubyid_reply'>reply</span> <span class='op'>||</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>127.0.0.1</span><span class='tstring_end'>&quot;</span></span>
      <span class='ivar'>@type</span> <span class='op'>=</span> <span class='id identifier rubyid_type'>type</span> <span class='op'>||</span> <span class='symbol'>:A</span>
    <span class='kw'>end</span>

    <span class='ivar'>@options</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span>
    <span class='ivar'>@block</span> <span class='op'>=</span> <span class='id identifier rubyid_block'>block</span>
    <span class='id identifier rubyid_locale'>locale</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:locale</span><span class='rbracket'>]</span> <span class='op'>:</span> <span class='symbol'>:en</span>
    <span class='ivar'>@i18n</span> <span class='op'>=</span> <span class='const'>Bovem</span><span class='op'>::</span><span class='const'>I18n</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_locale'>locale</span><span class='comma'>,</span> <span class='label'>root:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>devdnsd</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>path:</span> <span class='op'>::</span><span class='const'>Pathname</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_dirname'>dirname</span><span class='lparen'>(</span><span class='kw'>__FILE__</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>/../../locales/</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
  <span class='kw'>end</span>

  <span class='comment'># Validates a newly created rule.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_validate_rule'>validate_rule</span>
    <span class='id identifier rubyid_raise'>raise</span><span class='lparen'>(</span><span class='const'>DevDNSd</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>InvalidRule</span><span class='comma'>,</span> <span class='ivar'>@i18n</span><span class='period'>.</span><span class='id identifier rubyid_rule_invalid_call'>rule_invalid_call</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='ivar'>@reply</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span> <span class='op'>&amp;&amp;</span> <span class='ivar'>@block</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
    <span class='id identifier rubyid_raise'>raise</span><span class='lparen'>(</span><span class='const'>DevDNSd</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>InvalidRule</span><span class='comma'>,</span> <span class='ivar'>@i18n</span><span class='period'>.</span><span class='id identifier rubyid_rule_invalid_options'>rule_invalid_options</span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>Hash</span><span class='rparen'>)</span>
  <span class='kw'>end</span>
<span class='kw'>end</span></pre>
    </td>
  </tr>
</table>
</div>
    
      
      <span id="options=-instance_method"></span>
      <div class="method_details ">
  <h3 class="signature " id="options-instance_method">
  
    - (<tt>Hash</tt>) <strong>options</strong> 
  

  

  
</h3><div class="docstring">
  <div class="discussion">
    <p>Returns A list of options for the request. Default is an empty hash. Supported key are <code>:priority</code> and <code>:ttl</code>, both integers</p>


  </div>
</div>
<div class="tags">
  
<p class="tag_title">Returns:</p>
<ul class="return">
  
    <li>
      
      
        <span class='type'>(<tt>Hash</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>A list of options for the request. Default is an empty hash. Supported key are <code>:priority</code> and <code>:ttl</code>, both integers</p>
</div>
      
    </li>
  
</ul>

</div><table class="source_code">
  <tr>
    <td>
      <pre class="lines">


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136</pre>
    </td>
    <td>
      <pre class="code"><span class="info file"># File 'lib/devdnsd/rule.rb', line 20</span>

<span class='kw'>class</span> <span class='const'>Rule</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:match</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:type</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:reply</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:options</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:block</span>

  <span class='comment'># Class methods
</span>  <span class='kw'>class</span> <span class='op'>&lt;&lt;</span> <span class='kw'>self</span>
    <span class='comment'># Creates a new rule.
</span>    <span class='comment'>#
</span>    <span class='comment'># @param match [String|Regexp] The pattern to match.
</span>    <span class='comment'># @param reply [String|Symbol] The IP or hostname to reply back to the client. It can be omitted (and it will be ignored) if a block is provided.
</span>    <span class='comment'># @param type [Symbol] The type of request to match.
</span>    <span class='comment'># @param options [Hash] A list of options for the request.
</span>    <span class='comment'># @param block [Proc] An optional block to compute the reply instead of using the `reply` parameter.
</span>    <span class='comment'># @return [Rule] The new rule.
</span>    <span class='kw'>def</span> <span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span><span class='label'>match:</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>.+</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='label'>reply:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>127.0.0.1</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>type:</span> <span class='symbol'>:A</span><span class='comma'>,</span> <span class='label'>options:</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
      <span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='label'>match:</span> <span class='id identifier rubyid_match'>match</span><span class='comma'>,</span> <span class='label'>reply:</span> <span class='id identifier rubyid_reply'>reply</span><span class='comma'>,</span> <span class='label'>type:</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='label'>options:</span> <span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
    <span class='kw'>end</span>

    <span class='comment'># Converts a class to the correspondent symbol.
</span>    <span class='comment'>#
</span>    <span class='comment'># @param klass [Class] The class to convert.
</span>    <span class='comment'># @return [Symbol] The symbol representation of the class.
</span>    <span class='kw'>def</span> <span class='id identifier rubyid_resource_class_to_symbol'>resource_class_to_symbol</span><span class='lparen'>(</span><span class='id identifier rubyid_klass'>klass</span><span class='rparen'>)</span>
      <span class='id identifier rubyid_klass'>klass</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>(.+::)?(.+)</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>\\2</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span>
    <span class='kw'>end</span>

    <span class='comment'># Converts a symbol to the correspondent DNS resource class.
</span>    <span class='comment'>#
</span>    <span class='comment'># @param symbol [Symbol] The symbol to convert.
</span>    <span class='comment'># @param locale [Symbol] The locale to use for the messages.
</span>    <span class='comment'># @return [Symbol] The class associated to the symbol.
</span>    <span class='kw'>def</span> <span class='id identifier rubyid_symbol_to_resource_class'>symbol_to_resource_class</span><span class='lparen'>(</span><span class='id identifier rubyid_symbol'>symbol</span><span class='comma'>,</span> <span class='id identifier rubyid_locale'>locale</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
      <span class='id identifier rubyid_symbol'>symbol</span> <span class='op'>=</span> <span class='id identifier rubyid_symbol'>symbol</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_upcase'>upcase</span>

      <span class='kw'>begin</span>
        <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Resolv::DNS::Resource::IN::</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_symbol'>symbol</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='period'>.</span><span class='id identifier rubyid_constantize'>constantize</span>
      <span class='kw'>rescue</span> <span class='op'>::</span><span class='const'>NameError</span>
        <span class='id identifier rubyid_i18n'>i18n</span> <span class='op'>=</span> <span class='const'>Bovem</span><span class='op'>::</span><span class='const'>I18n</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_locale'>locale</span><span class='comma'>,</span> <span class='label'>root:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>devdnsd</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>path:</span> <span class='op'>::</span><span class='const'>Pathname</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_dirname'>dirname</span><span class='lparen'>(</span><span class='kw'>__FILE__</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>/../../locales/</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
        <span class='id identifier rubyid_raise'>raise</span><span class='lparen'>(</span><span class='const'>DevDNSd</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>InvalidRule</span><span class='comma'>,</span> <span class='id identifier rubyid_i18n'>i18n</span><span class='period'>.</span><span class='id identifier rubyid_rule_invalid_resource'>rule_invalid_resource</span><span class='lparen'>(</span><span class='id identifier rubyid_symbol'>symbol</span><span class='rparen'>)</span><span class='rparen'>)</span>
      <span class='kw'>end</span>
    <span class='kw'>end</span>
  <span class='kw'>end</span>

  <span class='comment'># Creates a new rule.
</span>  <span class='comment'>#
</span>  <span class='comment'># @param match [String|Regexp] The pattern to match.
</span>  <span class='comment'># @param reply [String|Symbol] The IP or hostname to reply back to the client. It can be omitted (and it will be ignored) if a block is provided.
</span>  <span class='comment'># @param type [Symbol] The type of request to match.
</span>  <span class='comment'># @param options [Hash] A list of options for the request.
</span>  <span class='comment'># @param block [Proc] An optional block to compute the reply instead of using the `reply` parameter.
</span>  <span class='comment'># @see .create
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='label'>match:</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>.+</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='label'>reply:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>127.0.0.1</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>type:</span> <span class='symbol'>:A</span><span class='comma'>,</span> <span class='label'>options:</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
    <span class='id identifier rubyid_setup'>setup</span><span class='lparen'>(</span><span class='id identifier rubyid_match'>match</span><span class='comma'>,</span> <span class='id identifier rubyid_reply'>reply</span><span class='comma'>,</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
    <span class='id identifier rubyid_validate_rule'>validate_rule</span>
  <span class='kw'>end</span>

  <span class='comment'># Returns the resource class(es) for the current rule.
</span>  <span class='comment'>#
</span>  <span class='comment'># @return [Array|Class] The class(es) for the current rule.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_resource_class'>resource_class</span>
    <span class='id identifier rubyid_classes'>classes</span> <span class='op'>=</span> <span class='ivar'>@type</span><span class='period'>.</span><span class='id identifier rubyid_ensure_array'>ensure_array</span><span class='lparen'>(</span><span class='label'>no_duplicates:</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='label'>compact:</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='label'>flatten:</span> <span class='kw'>true</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_cls'>cls</span><span class='op'>|</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_symbol_to_resource_class'>symbol_to_resource_class</span><span class='lparen'>(</span><span class='id identifier rubyid_cls'>cls</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:locale</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
    <span class='id identifier rubyid_classes'>classes</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>==</span> <span class='int'>1</span> <span class='op'>?</span> <span class='id identifier rubyid_classes'>classes</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span> <span class='op'>:</span> <span class='id identifier rubyid_classes'>classes</span>
  <span class='kw'>end</span>

  <span class='comment'># Checks if the rule is a regexp.
</span>  <span class='comment'>#
</span>  <span class='comment'># @return [Boolean] `true` if the rule is a Regexp, `false` otherwise.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_regexp?'>regexp?</span>
    <span class='ivar'>@match</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>Regexp</span><span class='rparen'>)</span>
  <span class='kw'>end</span>
  <span class='id identifier rubyid_alias_method'>alias_method</span> <span class='symbol'>:is_regexp?</span><span class='comma'>,</span> <span class='symbol'>:regexp?</span>

  <span class='comment'># Checks if the rule is a regexp.
</span>  <span class='comment'>#
</span>  <span class='comment'># @return [Boolean] `true` if the rule has a block, `false` otherwise.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_block?'>block?</span>
    <span class='ivar'>@block</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
  <span class='kw'>end</span>
  <span class='id identifier rubyid_alias_method'>alias_method</span> <span class='symbol'>:has_block?</span><span class='comma'>,</span> <span class='symbol'>:block?</span>

  <span class='comment'># Matches a hostname to the rule.
</span>  <span class='comment'>#
</span>  <span class='comment'># @param hostname [String] The hostname to match.
</span>  <span class='comment'># @return [MatchData|Boolean|Nil] Return `true` or MatchData (if the pattern is a regexp) if the rule matches, `false` or `nil` otherwise.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_match_host'>match_host</span><span class='lparen'>(</span><span class='id identifier rubyid_hostname'>hostname</span><span class='rparen'>)</span>
    <span class='id identifier rubyid_regexp?'>regexp?</span> <span class='op'>?</span> <span class='ivar'>@match</span><span class='period'>.</span><span class='id identifier rubyid_match'>match</span><span class='lparen'>(</span><span class='id identifier rubyid_hostname'>hostname</span><span class='rparen'>)</span> <span class='op'>:</span> <span class='lparen'>(</span><span class='ivar'>@match</span> <span class='op'>==</span> <span class='id identifier rubyid_hostname'>hostname</span><span class='rparen'>)</span>
  <span class='kw'>end</span>

  <span class='id identifier rubyid_private'>private</span>

  <span class='comment'># :nodoc:
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_setup'>setup</span><span class='lparen'>(</span><span class='id identifier rubyid_match'>match</span><span class='comma'>,</span> <span class='id identifier rubyid_reply'>reply</span><span class='comma'>,</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
    <span class='ivar'>@match</span> <span class='op'>=</span> <span class='id identifier rubyid_match'>match</span>

    <span class='kw'>if</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='comment'># reply acts like a type, type is ignored
</span>      <span class='ivar'>@type</span> <span class='op'>=</span> <span class='id identifier rubyid_type'>type</span> <span class='op'>||</span> <span class='symbol'>:A</span>
      <span class='ivar'>@reply</span> <span class='op'>=</span> <span class='kw'>nil</span>
    <span class='kw'>else</span> <span class='comment'># reply acts like a reply
</span>      <span class='ivar'>@reply</span> <span class='op'>=</span> <span class='id identifier rubyid_reply'>reply</span> <span class='op'>||</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>127.0.0.1</span><span class='tstring_end'>&quot;</span></span>
      <span class='ivar'>@type</span> <span class='op'>=</span> <span class='id identifier rubyid_type'>type</span> <span class='op'>||</span> <span class='symbol'>:A</span>
    <span class='kw'>end</span>

    <span class='ivar'>@options</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span>
    <span class='ivar'>@block</span> <span class='op'>=</span> <span class='id identifier rubyid_block'>block</span>
    <span class='id identifier rubyid_locale'>locale</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:locale</span><span class='rbracket'>]</span> <span class='op'>:</span> <span class='symbol'>:en</span>
    <span class='ivar'>@i18n</span> <span class='op'>=</span> <span class='const'>Bovem</span><span class='op'>::</span><span class='const'>I18n</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_locale'>locale</span><span class='comma'>,</span> <span class='label'>root:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>devdnsd</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>path:</span> <span class='op'>::</span><span class='const'>Pathname</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_dirname'>dirname</span><span class='lparen'>(</span><span class='kw'>__FILE__</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>/../../locales/</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
  <span class='kw'>end</span>

  <span class='comment'># Validates a newly created rule.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_validate_rule'>validate_rule</span>
    <span class='id identifier rubyid_raise'>raise</span><span class='lparen'>(</span><span class='const'>DevDNSd</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>InvalidRule</span><span class='comma'>,</span> <span class='ivar'>@i18n</span><span class='period'>.</span><span class='id identifier rubyid_rule_invalid_call'>rule_invalid_call</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='ivar'>@reply</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span> <span class='op'>&amp;&amp;</span> <span class='ivar'>@block</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
    <span class='id identifier rubyid_raise'>raise</span><span class='lparen'>(</span><span class='const'>DevDNSd</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>InvalidRule</span><span class='comma'>,</span> <span class='ivar'>@i18n</span><span class='period'>.</span><span class='id identifier rubyid_rule_invalid_options'>rule_invalid_options</span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>Hash</span><span class='rparen'>)</span>
  <span class='kw'>end</span>
<span class='kw'>end</span></pre>
    </td>
  </tr>
</table>
</div>
    
      
      <span id="reply=-instance_method"></span>
      <div class="method_details ">
  <h3 class="signature " id="reply-instance_method">
  
    - (<tt>String</tt>) <strong>reply</strong> 
  

  

  
</h3><div class="docstring">
  <div class="discussion">
    <p>Returns The IP or hostname to reply back to the client. Default: <code>127.0.0.1</code>. @see .create</p>


  </div>
</div>
<div class="tags">
  
<p class="tag_title">Returns:</p>
<ul class="return">
  
    <li>
      
      
        <span class='type'>(<tt>String</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>The IP or hostname to reply back to the client. Default: <code>127.0.0.1</code>. @see .create</p>
</div>
      
    </li>
  
</ul>

</div><table class="source_code">
  <tr>
    <td>
      <pre class="lines">


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136</pre>
    </td>
    <td>
      <pre class="code"><span class="info file"># File 'lib/devdnsd/rule.rb', line 20</span>

<span class='kw'>class</span> <span class='const'>Rule</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:match</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:type</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:reply</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:options</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:block</span>

  <span class='comment'># Class methods
</span>  <span class='kw'>class</span> <span class='op'>&lt;&lt;</span> <span class='kw'>self</span>
    <span class='comment'># Creates a new rule.
</span>    <span class='comment'>#
</span>    <span class='comment'># @param match [String|Regexp] The pattern to match.
</span>    <span class='comment'># @param reply [String|Symbol] The IP or hostname to reply back to the client. It can be omitted (and it will be ignored) if a block is provided.
</span>    <span class='comment'># @param type [Symbol] The type of request to match.
</span>    <span class='comment'># @param options [Hash] A list of options for the request.
</span>    <span class='comment'># @param block [Proc] An optional block to compute the reply instead of using the `reply` parameter.
</span>    <span class='comment'># @return [Rule] The new rule.
</span>    <span class='kw'>def</span> <span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span><span class='label'>match:</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>.+</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='label'>reply:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>127.0.0.1</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>type:</span> <span class='symbol'>:A</span><span class='comma'>,</span> <span class='label'>options:</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
      <span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='label'>match:</span> <span class='id identifier rubyid_match'>match</span><span class='comma'>,</span> <span class='label'>reply:</span> <span class='id identifier rubyid_reply'>reply</span><span class='comma'>,</span> <span class='label'>type:</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='label'>options:</span> <span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
    <span class='kw'>end</span>

    <span class='comment'># Converts a class to the correspondent symbol.
</span>    <span class='comment'>#
</span>    <span class='comment'># @param klass [Class] The class to convert.
</span>    <span class='comment'># @return [Symbol] The symbol representation of the class.
</span>    <span class='kw'>def</span> <span class='id identifier rubyid_resource_class_to_symbol'>resource_class_to_symbol</span><span class='lparen'>(</span><span class='id identifier rubyid_klass'>klass</span><span class='rparen'>)</span>
      <span class='id identifier rubyid_klass'>klass</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>(.+::)?(.+)</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>\\2</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span>
    <span class='kw'>end</span>

    <span class='comment'># Converts a symbol to the correspondent DNS resource class.
</span>    <span class='comment'>#
</span>    <span class='comment'># @param symbol [Symbol] The symbol to convert.
</span>    <span class='comment'># @param locale [Symbol] The locale to use for the messages.
</span>    <span class='comment'># @return [Symbol] The class associated to the symbol.
</span>    <span class='kw'>def</span> <span class='id identifier rubyid_symbol_to_resource_class'>symbol_to_resource_class</span><span class='lparen'>(</span><span class='id identifier rubyid_symbol'>symbol</span><span class='comma'>,</span> <span class='id identifier rubyid_locale'>locale</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
      <span class='id identifier rubyid_symbol'>symbol</span> <span class='op'>=</span> <span class='id identifier rubyid_symbol'>symbol</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_upcase'>upcase</span>

      <span class='kw'>begin</span>
        <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Resolv::DNS::Resource::IN::</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_symbol'>symbol</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='period'>.</span><span class='id identifier rubyid_constantize'>constantize</span>
      <span class='kw'>rescue</span> <span class='op'>::</span><span class='const'>NameError</span>
        <span class='id identifier rubyid_i18n'>i18n</span> <span class='op'>=</span> <span class='const'>Bovem</span><span class='op'>::</span><span class='const'>I18n</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_locale'>locale</span><span class='comma'>,</span> <span class='label'>root:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>devdnsd</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>path:</span> <span class='op'>::</span><span class='const'>Pathname</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_dirname'>dirname</span><span class='lparen'>(</span><span class='kw'>__FILE__</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>/../../locales/</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
        <span class='id identifier rubyid_raise'>raise</span><span class='lparen'>(</span><span class='const'>DevDNSd</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>InvalidRule</span><span class='comma'>,</span> <span class='id identifier rubyid_i18n'>i18n</span><span class='period'>.</span><span class='id identifier rubyid_rule_invalid_resource'>rule_invalid_resource</span><span class='lparen'>(</span><span class='id identifier rubyid_symbol'>symbol</span><span class='rparen'>)</span><span class='rparen'>)</span>
      <span class='kw'>end</span>
    <span class='kw'>end</span>
  <span class='kw'>end</span>

  <span class='comment'># Creates a new rule.
</span>  <span class='comment'>#
</span>  <span class='comment'># @param match [String|Regexp] The pattern to match.
</span>  <span class='comment'># @param reply [String|Symbol] The IP or hostname to reply back to the client. It can be omitted (and it will be ignored) if a block is provided.
</span>  <span class='comment'># @param type [Symbol] The type of request to match.
</span>  <span class='comment'># @param options [Hash] A list of options for the request.
</span>  <span class='comment'># @param block [Proc] An optional block to compute the reply instead of using the `reply` parameter.
</span>  <span class='comment'># @see .create
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='label'>match:</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>.+</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='label'>reply:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>127.0.0.1</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>type:</span> <span class='symbol'>:A</span><span class='comma'>,</span> <span class='label'>options:</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
    <span class='id identifier rubyid_setup'>setup</span><span class='lparen'>(</span><span class='id identifier rubyid_match'>match</span><span class='comma'>,</span> <span class='id identifier rubyid_reply'>reply</span><span class='comma'>,</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
    <span class='id identifier rubyid_validate_rule'>validate_rule</span>
  <span class='kw'>end</span>

  <span class='comment'># Returns the resource class(es) for the current rule.
</span>  <span class='comment'>#
</span>  <span class='comment'># @return [Array|Class] The class(es) for the current rule.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_resource_class'>resource_class</span>
    <span class='id identifier rubyid_classes'>classes</span> <span class='op'>=</span> <span class='ivar'>@type</span><span class='period'>.</span><span class='id identifier rubyid_ensure_array'>ensure_array</span><span class='lparen'>(</span><span class='label'>no_duplicates:</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='label'>compact:</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='label'>flatten:</span> <span class='kw'>true</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_cls'>cls</span><span class='op'>|</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_symbol_to_resource_class'>symbol_to_resource_class</span><span class='lparen'>(</span><span class='id identifier rubyid_cls'>cls</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:locale</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
    <span class='id identifier rubyid_classes'>classes</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>==</span> <span class='int'>1</span> <span class='op'>?</span> <span class='id identifier rubyid_classes'>classes</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span> <span class='op'>:</span> <span class='id identifier rubyid_classes'>classes</span>
  <span class='kw'>end</span>

  <span class='comment'># Checks if the rule is a regexp.
</span>  <span class='comment'>#
</span>  <span class='comment'># @return [Boolean] `true` if the rule is a Regexp, `false` otherwise.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_regexp?'>regexp?</span>
    <span class='ivar'>@match</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>Regexp</span><span class='rparen'>)</span>
  <span class='kw'>end</span>
  <span class='id identifier rubyid_alias_method'>alias_method</span> <span class='symbol'>:is_regexp?</span><span class='comma'>,</span> <span class='symbol'>:regexp?</span>

  <span class='comment'># Checks if the rule is a regexp.
</span>  <span class='comment'>#
</span>  <span class='comment'># @return [Boolean] `true` if the rule has a block, `false` otherwise.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_block?'>block?</span>
    <span class='ivar'>@block</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
  <span class='kw'>end</span>
  <span class='id identifier rubyid_alias_method'>alias_method</span> <span class='symbol'>:has_block?</span><span class='comma'>,</span> <span class='symbol'>:block?</span>

  <span class='comment'># Matches a hostname to the rule.
</span>  <span class='comment'>#
</span>  <span class='comment'># @param hostname [String] The hostname to match.
</span>  <span class='comment'># @return [MatchData|Boolean|Nil] Return `true` or MatchData (if the pattern is a regexp) if the rule matches, `false` or `nil` otherwise.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_match_host'>match_host</span><span class='lparen'>(</span><span class='id identifier rubyid_hostname'>hostname</span><span class='rparen'>)</span>
    <span class='id identifier rubyid_regexp?'>regexp?</span> <span class='op'>?</span> <span class='ivar'>@match</span><span class='period'>.</span><span class='id identifier rubyid_match'>match</span><span class='lparen'>(</span><span class='id identifier rubyid_hostname'>hostname</span><span class='rparen'>)</span> <span class='op'>:</span> <span class='lparen'>(</span><span class='ivar'>@match</span> <span class='op'>==</span> <span class='id identifier rubyid_hostname'>hostname</span><span class='rparen'>)</span>
  <span class='kw'>end</span>

  <span class='id identifier rubyid_private'>private</span>

  <span class='comment'># :nodoc:
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_setup'>setup</span><span class='lparen'>(</span><span class='id identifier rubyid_match'>match</span><span class='comma'>,</span> <span class='id identifier rubyid_reply'>reply</span><span class='comma'>,</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
    <span class='ivar'>@match</span> <span class='op'>=</span> <span class='id identifier rubyid_match'>match</span>

    <span class='kw'>if</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='comment'># reply acts like a type, type is ignored
</span>      <span class='ivar'>@type</span> <span class='op'>=</span> <span class='id identifier rubyid_type'>type</span> <span class='op'>||</span> <span class='symbol'>:A</span>
      <span class='ivar'>@reply</span> <span class='op'>=</span> <span class='kw'>nil</span>
    <span class='kw'>else</span> <span class='comment'># reply acts like a reply
</span>      <span class='ivar'>@reply</span> <span class='op'>=</span> <span class='id identifier rubyid_reply'>reply</span> <span class='op'>||</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>127.0.0.1</span><span class='tstring_end'>&quot;</span></span>
      <span class='ivar'>@type</span> <span class='op'>=</span> <span class='id identifier rubyid_type'>type</span> <span class='op'>||</span> <span class='symbol'>:A</span>
    <span class='kw'>end</span>

    <span class='ivar'>@options</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span>
    <span class='ivar'>@block</span> <span class='op'>=</span> <span class='id identifier rubyid_block'>block</span>
    <span class='id identifier rubyid_locale'>locale</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:locale</span><span class='rbracket'>]</span> <span class='op'>:</span> <span class='symbol'>:en</span>
    <span class='ivar'>@i18n</span> <span class='op'>=</span> <span class='const'>Bovem</span><span class='op'>::</span><span class='const'>I18n</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_locale'>locale</span><span class='comma'>,</span> <span class='label'>root:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>devdnsd</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>path:</span> <span class='op'>::</span><span class='const'>Pathname</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_dirname'>dirname</span><span class='lparen'>(</span><span class='kw'>__FILE__</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>/../../locales/</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
  <span class='kw'>end</span>

  <span class='comment'># Validates a newly created rule.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_validate_rule'>validate_rule</span>
    <span class='id identifier rubyid_raise'>raise</span><span class='lparen'>(</span><span class='const'>DevDNSd</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>InvalidRule</span><span class='comma'>,</span> <span class='ivar'>@i18n</span><span class='period'>.</span><span class='id identifier rubyid_rule_invalid_call'>rule_invalid_call</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='ivar'>@reply</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span> <span class='op'>&amp;&amp;</span> <span class='ivar'>@block</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
    <span class='id identifier rubyid_raise'>raise</span><span class='lparen'>(</span><span class='const'>DevDNSd</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>InvalidRule</span><span class='comma'>,</span> <span class='ivar'>@i18n</span><span class='period'>.</span><span class='id identifier rubyid_rule_invalid_options'>rule_invalid_options</span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>Hash</span><span class='rparen'>)</span>
  <span class='kw'>end</span>
<span class='kw'>end</span></pre>
    </td>
  </tr>
</table>
</div>
    
      
      <span id="type=-instance_method"></span>
      <div class="method_details ">
  <h3 class="signature " id="type-instance_method">
  
    - (<tt>Symbol</tt>) <strong>type</strong> 
  

  

  
</h3><div class="docstring">
  <div class="discussion">
    <p>Returns The type of request to match. Default: <code>:A</code>. @see .create</p>


  </div>
</div>
<div class="tags">
  
<p class="tag_title">Returns:</p>
<ul class="return">
  
    <li>
      
      
        <span class='type'>(<tt>Symbol</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>The type of request to match. Default: <code>:A</code>. @see .create</p>
</div>
      
    </li>
  
</ul>

</div><table class="source_code">
  <tr>
    <td>
      <pre class="lines">


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136</pre>
    </td>
    <td>
      <pre class="code"><span class="info file"># File 'lib/devdnsd/rule.rb', line 20</span>

<span class='kw'>class</span> <span class='const'>Rule</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:match</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:type</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:reply</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:options</span>
  <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:block</span>

  <span class='comment'># Class methods
</span>  <span class='kw'>class</span> <span class='op'>&lt;&lt;</span> <span class='kw'>self</span>
    <span class='comment'># Creates a new rule.
</span>    <span class='comment'>#
</span>    <span class='comment'># @param match [String|Regexp] The pattern to match.
</span>    <span class='comment'># @param reply [String|Symbol] The IP or hostname to reply back to the client. It can be omitted (and it will be ignored) if a block is provided.
</span>    <span class='comment'># @param type [Symbol] The type of request to match.
</span>    <span class='comment'># @param options [Hash] A list of options for the request.
</span>    <span class='comment'># @param block [Proc] An optional block to compute the reply instead of using the `reply` parameter.
</span>    <span class='comment'># @return [Rule] The new rule.
</span>    <span class='kw'>def</span> <span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span><span class='label'>match:</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>.+</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='label'>reply:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>127.0.0.1</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>type:</span> <span class='symbol'>:A</span><span class='comma'>,</span> <span class='label'>options:</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
      <span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='label'>match:</span> <span class='id identifier rubyid_match'>match</span><span class='comma'>,</span> <span class='label'>reply:</span> <span class='id identifier rubyid_reply'>reply</span><span class='comma'>,</span> <span class='label'>type:</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='label'>options:</span> <span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
    <span class='kw'>end</span>

    <span class='comment'># Converts a class to the correspondent symbol.
</span>    <span class='comment'>#
</span>    <span class='comment'># @param klass [Class] The class to convert.
</span>    <span class='comment'># @return [Symbol] The symbol representation of the class.
</span>    <span class='kw'>def</span> <span class='id identifier rubyid_resource_class_to_symbol'>resource_class_to_symbol</span><span class='lparen'>(</span><span class='id identifier rubyid_klass'>klass</span><span class='rparen'>)</span>
      <span class='id identifier rubyid_klass'>klass</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>(.+::)?(.+)</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>\\2</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span>
    <span class='kw'>end</span>

    <span class='comment'># Converts a symbol to the correspondent DNS resource class.
</span>    <span class='comment'>#
</span>    <span class='comment'># @param symbol [Symbol] The symbol to convert.
</span>    <span class='comment'># @param locale [Symbol] The locale to use for the messages.
</span>    <span class='comment'># @return [Symbol] The class associated to the symbol.
</span>    <span class='kw'>def</span> <span class='id identifier rubyid_symbol_to_resource_class'>symbol_to_resource_class</span><span class='lparen'>(</span><span class='id identifier rubyid_symbol'>symbol</span><span class='comma'>,</span> <span class='id identifier rubyid_locale'>locale</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
      <span class='id identifier rubyid_symbol'>symbol</span> <span class='op'>=</span> <span class='id identifier rubyid_symbol'>symbol</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_upcase'>upcase</span>

      <span class='kw'>begin</span>
        <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Resolv::DNS::Resource::IN::</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_symbol'>symbol</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='period'>.</span><span class='id identifier rubyid_constantize'>constantize</span>
      <span class='kw'>rescue</span> <span class='op'>::</span><span class='const'>NameError</span>
        <span class='id identifier rubyid_i18n'>i18n</span> <span class='op'>=</span> <span class='const'>Bovem</span><span class='op'>::</span><span class='const'>I18n</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_locale'>locale</span><span class='comma'>,</span> <span class='label'>root:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>devdnsd</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>path:</span> <span class='op'>::</span><span class='const'>Pathname</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_dirname'>dirname</span><span class='lparen'>(</span><span class='kw'>__FILE__</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>/../../locales/</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
        <span class='id identifier rubyid_raise'>raise</span><span class='lparen'>(</span><span class='const'>DevDNSd</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>InvalidRule</span><span class='comma'>,</span> <span class='id identifier rubyid_i18n'>i18n</span><span class='period'>.</span><span class='id identifier rubyid_rule_invalid_resource'>rule_invalid_resource</span><span class='lparen'>(</span><span class='id identifier rubyid_symbol'>symbol</span><span class='rparen'>)</span><span class='rparen'>)</span>
      <span class='kw'>end</span>
    <span class='kw'>end</span>
  <span class='kw'>end</span>

  <span class='comment'># Creates a new rule.
</span>  <span class='comment'>#
</span>  <span class='comment'># @param match [String|Regexp] The pattern to match.
</span>  <span class='comment'># @param reply [String|Symbol] The IP or hostname to reply back to the client. It can be omitted (and it will be ignored) if a block is provided.
</span>  <span class='comment'># @param type [Symbol] The type of request to match.
</span>  <span class='comment'># @param options [Hash] A list of options for the request.
</span>  <span class='comment'># @param block [Proc] An optional block to compute the reply instead of using the `reply` parameter.
</span>  <span class='comment'># @see .create
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='label'>match:</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>.+</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='label'>reply:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>127.0.0.1</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>type:</span> <span class='symbol'>:A</span><span class='comma'>,</span> <span class='label'>options:</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
    <span class='id identifier rubyid_setup'>setup</span><span class='lparen'>(</span><span class='id identifier rubyid_match'>match</span><span class='comma'>,</span> <span class='id identifier rubyid_reply'>reply</span><span class='comma'>,</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
    <span class='id identifier rubyid_validate_rule'>validate_rule</span>
  <span class='kw'>end</span>

  <span class='comment'># Returns the resource class(es) for the current rule.
</span>  <span class='comment'>#
</span>  <span class='comment'># @return [Array|Class] The class(es) for the current rule.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_resource_class'>resource_class</span>
    <span class='id identifier rubyid_classes'>classes</span> <span class='op'>=</span> <span class='ivar'>@type</span><span class='period'>.</span><span class='id identifier rubyid_ensure_array'>ensure_array</span><span class='lparen'>(</span><span class='label'>no_duplicates:</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='label'>compact:</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='label'>flatten:</span> <span class='kw'>true</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_cls'>cls</span><span class='op'>|</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_symbol_to_resource_class'>symbol_to_resource_class</span><span class='lparen'>(</span><span class='id identifier rubyid_cls'>cls</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:locale</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
    <span class='id identifier rubyid_classes'>classes</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>==</span> <span class='int'>1</span> <span class='op'>?</span> <span class='id identifier rubyid_classes'>classes</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span> <span class='op'>:</span> <span class='id identifier rubyid_classes'>classes</span>
  <span class='kw'>end</span>

  <span class='comment'># Checks if the rule is a regexp.
</span>  <span class='comment'>#
</span>  <span class='comment'># @return [Boolean] `true` if the rule is a Regexp, `false` otherwise.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_regexp?'>regexp?</span>
    <span class='ivar'>@match</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>Regexp</span><span class='rparen'>)</span>
  <span class='kw'>end</span>
  <span class='id identifier rubyid_alias_method'>alias_method</span> <span class='symbol'>:is_regexp?</span><span class='comma'>,</span> <span class='symbol'>:regexp?</span>

  <span class='comment'># Checks if the rule is a regexp.
</span>  <span class='comment'>#
</span>  <span class='comment'># @return [Boolean] `true` if the rule has a block, `false` otherwise.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_block?'>block?</span>
    <span class='ivar'>@block</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
  <span class='kw'>end</span>
  <span class='id identifier rubyid_alias_method'>alias_method</span> <span class='symbol'>:has_block?</span><span class='comma'>,</span> <span class='symbol'>:block?</span>

  <span class='comment'># Matches a hostname to the rule.
</span>  <span class='comment'>#
</span>  <span class='comment'># @param hostname [String] The hostname to match.
</span>  <span class='comment'># @return [MatchData|Boolean|Nil] Return `true` or MatchData (if the pattern is a regexp) if the rule matches, `false` or `nil` otherwise.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_match_host'>match_host</span><span class='lparen'>(</span><span class='id identifier rubyid_hostname'>hostname</span><span class='rparen'>)</span>
    <span class='id identifier rubyid_regexp?'>regexp?</span> <span class='op'>?</span> <span class='ivar'>@match</span><span class='period'>.</span><span class='id identifier rubyid_match'>match</span><span class='lparen'>(</span><span class='id identifier rubyid_hostname'>hostname</span><span class='rparen'>)</span> <span class='op'>:</span> <span class='lparen'>(</span><span class='ivar'>@match</span> <span class='op'>==</span> <span class='id identifier rubyid_hostname'>hostname</span><span class='rparen'>)</span>
  <span class='kw'>end</span>

  <span class='id identifier rubyid_private'>private</span>

  <span class='comment'># :nodoc:
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_setup'>setup</span><span class='lparen'>(</span><span class='id identifier rubyid_match'>match</span><span class='comma'>,</span> <span class='id identifier rubyid_reply'>reply</span><span class='comma'>,</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
    <span class='ivar'>@match</span> <span class='op'>=</span> <span class='id identifier rubyid_match'>match</span>

    <span class='kw'>if</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='comment'># reply acts like a type, type is ignored
</span>      <span class='ivar'>@type</span> <span class='op'>=</span> <span class='id identifier rubyid_type'>type</span> <span class='op'>||</span> <span class='symbol'>:A</span>
      <span class='ivar'>@reply</span> <span class='op'>=</span> <span class='kw'>nil</span>
    <span class='kw'>else</span> <span class='comment'># reply acts like a reply
</span>      <span class='ivar'>@reply</span> <span class='op'>=</span> <span class='id identifier rubyid_reply'>reply</span> <span class='op'>||</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>127.0.0.1</span><span class='tstring_end'>&quot;</span></span>
      <span class='ivar'>@type</span> <span class='op'>=</span> <span class='id identifier rubyid_type'>type</span> <span class='op'>||</span> <span class='symbol'>:A</span>
    <span class='kw'>end</span>

    <span class='ivar'>@options</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span>
    <span class='ivar'>@block</span> <span class='op'>=</span> <span class='id identifier rubyid_block'>block</span>
    <span class='id identifier rubyid_locale'>locale</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:locale</span><span class='rbracket'>]</span> <span class='op'>:</span> <span class='symbol'>:en</span>
    <span class='ivar'>@i18n</span> <span class='op'>=</span> <span class='const'>Bovem</span><span class='op'>::</span><span class='const'>I18n</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_locale'>locale</span><span class='comma'>,</span> <span class='label'>root:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>devdnsd</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>path:</span> <span class='op'>::</span><span class='const'>Pathname</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_dirname'>dirname</span><span class='lparen'>(</span><span class='kw'>__FILE__</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>/../../locales/</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
  <span class='kw'>end</span>

  <span class='comment'># Validates a newly created rule.
</span>  <span class='kw'>def</span> <span class='id identifier rubyid_validate_rule'>validate_rule</span>
    <span class='id identifier rubyid_raise'>raise</span><span class='lparen'>(</span><span class='const'>DevDNSd</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>InvalidRule</span><span class='comma'>,</span> <span class='ivar'>@i18n</span><span class='period'>.</span><span class='id identifier rubyid_rule_invalid_call'>rule_invalid_call</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='ivar'>@reply</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span> <span class='op'>&amp;&amp;</span> <span class='ivar'>@block</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
    <span class='id identifier rubyid_raise'>raise</span><span class='lparen'>(</span><span class='const'>DevDNSd</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>InvalidRule</span><span class='comma'>,</span> <span class='ivar'>@i18n</span><span class='period'>.</span><span class='id identifier rubyid_rule_invalid_options'>rule_invalid_options</span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>Hash</span><span class='rparen'>)</span>
  <span class='kw'>end</span>
<span class='kw'>end</span></pre>
    </td>
  </tr>
</table>
</div>
    
  </div>


  <div id="class_method_details" class="method_details_list">
    <h2>Class Method Details</h2>

    
      <div class="method_details first">
  <h3 class="signature first" id="create-class_method">
  
    + (<tt><span class='object_link'><a href="" title="DevDNSd::Rule (class)">Rule</a></span></tt>) <strong>create</strong>(match: /.+/, reply: &quot;127.0.0.1&quot;, type: :A, options: {}, &amp;block) 
  

  

  
</h3><div class="docstring">
  <div class="discussion">
    <p>Creates a new rule.</p>


  </div>
</div>
<div class="tags">
  <p class="tag_title">Parameters:</p>
<ul class="param">
  
    <li>
      
        <span class='name'>match</span>
      
      
        <span class='type'>(<tt>String|Regexp</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>The pattern to match.</p>
</div>
      
    </li>
  
    <li>
      
        <span class='name'>reply</span>
      
      
        <span class='type'>(<tt>String|Symbol</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>The IP or hostname to reply back to the client. It can be omitted (and it will be ignored) if a block is provided.</p>
</div>
      
    </li>
  
    <li>
      
        <span class='name'>type</span>
      
      
        <span class='type'>(<tt>Symbol</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>The type of request to match.</p>
</div>
      
    </li>
  
    <li>
      
        <span class='name'>options</span>
      
      
        <span class='type'>(<tt>Hash</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>A list of options for the request.</p>
</div>
      
    </li>
  
    <li>
      
        <span class='name'>block</span>
      
      
        <span class='type'>(<tt>Proc</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>An optional block to compute the reply instead of using the <code>reply</code> parameter.</p>
</div>
      
    </li>
  
</ul>

<p class="tag_title">Returns:</p>
<ul class="return">
  
    <li>
      
      
        <span class='type'>(<tt><span class='object_link'><a href="" title="DevDNSd::Rule (class)">Rule</a></span></tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>The new rule.</p>
</div>
      
    </li>
  
</ul>

</div><table class="source_code">
  <tr>
    <td>
      <pre class="lines">


37
38
39</pre>
    </td>
    <td>
      <pre class="code"><span class="info file"># File 'lib/devdnsd/rule.rb', line 37</span>

<span class='kw'>def</span> <span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span><span class='label'>match:</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>.+</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='label'>reply:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>127.0.0.1</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>type:</span> <span class='symbol'>:A</span><span class='comma'>,</span> <span class='label'>options:</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
  <span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='label'>match:</span> <span class='id identifier rubyid_match'>match</span><span class='comma'>,</span> <span class='label'>reply:</span> <span class='id identifier rubyid_reply'>reply</span><span class='comma'>,</span> <span class='label'>type:</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='label'>options:</span> <span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
    </td>
  </tr>
</table>
</div>
    
      <div class="method_details ">
  <h3 class="signature " id="resource_class_to_symbol-class_method">
  
    + (<tt>Symbol</tt>) <strong>resource_class_to_symbol</strong>(klass) 
  

  

  
</h3><div class="docstring">
  <div class="discussion">
    <p>Converts a class to the correspondent symbol.</p>


  </div>
</div>
<div class="tags">
  <p class="tag_title">Parameters:</p>
<ul class="param">
  
    <li>
      
        <span class='name'>klass</span>
      
      
        <span class='type'>(<tt>Class</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>The class to convert.</p>
</div>
      
    </li>
  
</ul>

<p class="tag_title">Returns:</p>
<ul class="return">
  
    <li>
      
      
        <span class='type'>(<tt>Symbol</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>The symbol representation of the class.</p>
</div>
      
    </li>
  
</ul>

</div><table class="source_code">
  <tr>
    <td>
      <pre class="lines">


45
46
47</pre>
    </td>
    <td>
      <pre class="code"><span class="info file"># File 'lib/devdnsd/rule.rb', line 45</span>

<span class='kw'>def</span> <span class='id identifier rubyid_resource_class_to_symbol'>resource_class_to_symbol</span><span class='lparen'>(</span><span class='id identifier rubyid_klass'>klass</span><span class='rparen'>)</span>
  <span class='id identifier rubyid_klass'>klass</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>(.+::)?(.+)</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>\\2</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span>
<span class='kw'>end</span></pre>
    </td>
  </tr>
</table>
</div>
    
      <div class="method_details ">
  <h3 class="signature " id="symbol_to_resource_class-class_method">
  
    + (<tt>Symbol</tt>) <strong>symbol_to_resource_class</strong>(symbol, locale = nil) 
  

  

  
</h3><div class="docstring">
  <div class="discussion">
    <p>Converts a symbol to the correspondent DNS resource class.</p>


  </div>
</div>
<div class="tags">
  <p class="tag_title">Parameters:</p>
<ul class="param">
  
    <li>
      
        <span class='name'>symbol</span>
      
      
        <span class='type'>(<tt>Symbol</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>The symbol to convert.</p>
</div>
      
    </li>
  
    <li>
      
        <span class='name'>locale</span>
      
      
        <span class='type'>(<tt>Symbol</tt>)</span>
      
      
        <em class="default">(defaults to: <tt>nil</tt>)</em>
      
      
        &mdash;
        <div class='inline'><p>The locale to use for the messages.</p>
</div>
      
    </li>
  
</ul>

<p class="tag_title">Returns:</p>
<ul class="return">
  
    <li>
      
      
        <span class='type'>(<tt>Symbol</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>The class associated to the symbol.</p>
</div>
      
    </li>
  
</ul>

</div><table class="source_code">
  <tr>
    <td>
      <pre class="lines">


54
55
56
57
58
59
60
61
62
63</pre>
    </td>
    <td>
      <pre class="code"><span class="info file"># File 'lib/devdnsd/rule.rb', line 54</span>

<span class='kw'>def</span> <span class='id identifier rubyid_symbol_to_resource_class'>symbol_to_resource_class</span><span class='lparen'>(</span><span class='id identifier rubyid_symbol'>symbol</span><span class='comma'>,</span> <span class='id identifier rubyid_locale'>locale</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
  <span class='id identifier rubyid_symbol'>symbol</span> <span class='op'>=</span> <span class='id identifier rubyid_symbol'>symbol</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_upcase'>upcase</span>

  <span class='kw'>begin</span>
    <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Resolv::DNS::Resource::IN::</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_symbol'>symbol</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='period'>.</span><span class='id identifier rubyid_constantize'>constantize</span>
  <span class='kw'>rescue</span> <span class='op'>::</span><span class='const'>NameError</span>
    <span class='id identifier rubyid_i18n'>i18n</span> <span class='op'>=</span> <span class='const'>Bovem</span><span class='op'>::</span><span class='const'>I18n</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_locale'>locale</span><span class='comma'>,</span> <span class='label'>root:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>devdnsd</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>path:</span> <span class='op'>::</span><span class='const'>Pathname</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_dirname'>dirname</span><span class='lparen'>(</span><span class='kw'>__FILE__</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>/../../locales/</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
    <span class='id identifier rubyid_raise'>raise</span><span class='lparen'>(</span><span class='const'>DevDNSd</span><span class='op'>::</span><span class='const'>Errors</span><span class='op'>::</span><span class='const'>InvalidRule</span><span class='comma'>,</span> <span class='id identifier rubyid_i18n'>i18n</span><span class='period'>.</span><span class='id identifier rubyid_rule_invalid_resource'>rule_invalid_resource</span><span class='lparen'>(</span><span class='id identifier rubyid_symbol'>symbol</span><span class='rparen'>)</span><span class='rparen'>)</span>
  <span class='kw'>end</span>
<span class='kw'>end</span></pre>
    </td>
  </tr>
</table>
</div>
    
  </div>

  <div id="instance_method_details" class="method_details_list">
    <h2>Instance Method Details</h2>

    
      <div class="method_details first">
  <h3 class="signature first" id="block?-instance_method">
  
    - (<tt>Boolean</tt>) <strong>block?</strong> 
  

  
    <span class="aliases">Also known as:
    <span class="names"><span id='has_block?-instance_method'>has_block?</span></span>
    </span>
  

  
</h3><div class="docstring">
  <div class="discussion">
    <p>Checks if the rule is a regexp.</p>


  </div>
</div>
<div class="tags">
  
<p class="tag_title">Returns:</p>
<ul class="return">
  
    <li>
      
      
        <span class='type'>(<tt>Boolean</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p><code>true</code> if the rule has a block, <code>false</code> otherwise.</p>
</div>
      
    </li>
  
</ul>

</div><table class="source_code">
  <tr>
    <td>
      <pre class="lines">


98
99
100</pre>
    </td>
    <td>
      <pre class="code"><span class="info file"># File 'lib/devdnsd/rule.rb', line 98</span>

<span class='kw'>def</span> <span class='id identifier rubyid_block?'>block?</span>
  <span class='ivar'>@block</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
<span class='kw'>end</span></pre>
    </td>
  </tr>
</table>
</div>
    
      <div class="method_details ">
  <h3 class="signature " id="match_host-instance_method">
  
    - (<tt>MatchData|Boolean|Nil</tt>) <strong>match_host</strong>(hostname) 
  

  

  
</h3><div class="docstring">
  <div class="discussion">
    <p>Matches a hostname to the rule.</p>


  </div>
</div>
<div class="tags">
  <p class="tag_title">Parameters:</p>
<ul class="param">
  
    <li>
      
        <span class='name'>hostname</span>
      
      
        <span class='type'>(<tt>String</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>The hostname to match.</p>
</div>
      
    </li>
  
</ul>

<p class="tag_title">Returns:</p>
<ul class="return">
  
    <li>
      
      
        <span class='type'>(<tt>MatchData|Boolean|Nil</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>Return <code>true</code> or MatchData (if the pattern is a regexp) if the rule matches, <code>false</code> or <code>nil</code> otherwise.</p>
</div>
      
    </li>
  
</ul>

</div><table class="source_code">
  <tr>
    <td>
      <pre class="lines">


107
108
109</pre>
    </td>
    <td>
      <pre class="code"><span class="info file"># File 'lib/devdnsd/rule.rb', line 107</span>

<span class='kw'>def</span> <span class='id identifier rubyid_match_host'>match_host</span><span class='lparen'>(</span><span class='id identifier rubyid_hostname'>hostname</span><span class='rparen'>)</span>
  <span class='id identifier rubyid_regexp?'>regexp?</span> <span class='op'>?</span> <span class='ivar'>@match</span><span class='period'>.</span><span class='id identifier rubyid_match'>match</span><span class='lparen'>(</span><span class='id identifier rubyid_hostname'>hostname</span><span class='rparen'>)</span> <span class='op'>:</span> <span class='lparen'>(</span><span class='ivar'>@match</span> <span class='op'>==</span> <span class='id identifier rubyid_hostname'>hostname</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
    </td>
  </tr>
</table>
</div>
    
      <div class="method_details ">
  <h3 class="signature " id="regexp?-instance_method">
  
    - (<tt>Boolean</tt>) <strong>regexp?</strong> 
  

  
    <span class="aliases">Also known as:
    <span class="names"><span id='is_regexp?-instance_method'>is_regexp?</span></span>
    </span>
  

  
</h3><div class="docstring">
  <div class="discussion">
    <p>Checks if the rule is a regexp.</p>


  </div>
</div>
<div class="tags">
  
<p class="tag_title">Returns:</p>
<ul class="return">
  
    <li>
      
      
        <span class='type'>(<tt>Boolean</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p><code>true</code> if the rule is a Regexp, <code>false</code> otherwise.</p>
</div>
      
    </li>
  
</ul>

</div><table class="source_code">
  <tr>
    <td>
      <pre class="lines">


90
91
92</pre>
    </td>
    <td>
      <pre class="code"><span class="info file"># File 'lib/devdnsd/rule.rb', line 90</span>

<span class='kw'>def</span> <span class='id identifier rubyid_regexp?'>regexp?</span>
  <span class='ivar'>@match</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>Regexp</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
    </td>
  </tr>
</table>
</div>
    
      <div class="method_details ">
  <h3 class="signature " id="resource_class-instance_method">
  
    - (<tt>Array|Class</tt>) <strong>resource_class</strong> 
  

  

  
</h3><div class="docstring">
  <div class="discussion">
    <p>Returns the resource class(es) for the current rule.</p>


  </div>
</div>
<div class="tags">
  
<p class="tag_title">Returns:</p>
<ul class="return">
  
    <li>
      
      
        <span class='type'>(<tt>Array|Class</tt>)</span>
      
      
      
        &mdash;
        <div class='inline'><p>The class(es) for the current rule.</p>
</div>
      
    </li>
  
</ul>

</div><table class="source_code">
  <tr>
    <td>
      <pre class="lines">


82
83
84
85</pre>
    </td>
    <td>
      <pre class="code"><span class="info file"># File 'lib/devdnsd/rule.rb', line 82</span>

<span class='kw'>def</span> <span class='id identifier rubyid_resource_class'>resource_class</span>
  <span class='id identifier rubyid_classes'>classes</span> <span class='op'>=</span> <span class='ivar'>@type</span><span class='period'>.</span><span class='id identifier rubyid_ensure_array'>ensure_array</span><span class='lparen'>(</span><span class='label'>no_duplicates:</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='label'>compact:</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='label'>flatten:</span> <span class='kw'>true</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_cls'>cls</span><span class='op'>|</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_symbol_to_resource_class'>symbol_to_resource_class</span><span class='lparen'>(</span><span class='id identifier rubyid_cls'>cls</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:locale</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
  <span class='id identifier rubyid_classes'>classes</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>==</span> <span class='int'>1</span> <span class='op'>?</span> <span class='id identifier rubyid_classes'>classes</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span> <span class='op'>:</span> <span class='id identifier rubyid_classes'>classes</span>
<span class='kw'>end</span></pre>
    </td>
  </tr>
</table>
</div>
    
  </div>

</div>

    <div id="footer">
  Generated on Thu Aug 18 15:49:58 2016 by
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
  0.8.7.6 (ruby-2.3.0).
</div>

  </body>
</html>