bind9mgr 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/bind9mgr.rb CHANGED
@@ -6,10 +6,13 @@ require File.join( File.dirname(__FILE__), 'resource_record' )
6
6
  require File.join( File.dirname(__FILE__), 'parser' )
7
7
 
8
8
  module Bind9mgr
9
- VERSION = '0.3.2'
9
+ VERSION = '0.3.3'
10
10
 
11
11
  ZONES_BIND_SUBDIR = 'primary'
12
12
 
13
13
  KLASSES = %w{IN CH}
14
14
  ALLOWED_TYPES = %w{A CNAME MX TXT PTR NS SRV SOA}
15
+
16
+ class ParserError < RuntimeError; end
17
+ class MalformedResourceRecord < RuntimeError; end
15
18
  end
data/lib/parser.rb CHANGED
@@ -28,7 +28,7 @@ module Bind9mgr
28
28
  [:type, :start, Proc.new{ |t| update_last_rr(nil, nil, nil, nil, t) }],
29
29
  [:klass, :soa, Proc.new{ |t| t == 'SOA' ? update_last_rr(nil, nil, nil, t, nil) : false }],
30
30
  [:soa, :start, Proc.new{ |t| rdata = [t] + @tokens.shift(7)
31
- raise RuntimeError, "Zone parsing error: parentices expected in SOA record.\n#{@content}" if (rdata[2] != '(') && (@tokens.first != ')')
31
+ raise ParserError, "Zone parsing error: parentices expected in SOA record.\n#{@content}" if (rdata[2] != '(') && (@tokens.first != ')')
32
32
  rdata.delete_at(2)
33
33
  @result.options[:support_email] = rdata[1]
34
34
  @result.options[:serial] = rdata[2]
@@ -53,7 +53,7 @@ module Bind9mgr
53
53
  token = @tokens.shift
54
54
  # puts "state: #{@state}, token: #{token}"
55
55
  possible_edges = @STATE_RULES.select{|arr|arr[0] == @state }
56
- raise "no possible_edges. cur_state: #{@state}" if possible_edges.count < 1
56
+ raise( ParserError, "no possible_edges. cur_state: #{@state}" ) if possible_edges.count < 1
57
57
 
58
58
  flag = false
59
59
  while ( possible_edges.count > 0 ) && flag == false
@@ -65,7 +65,7 @@ module Bind9mgr
65
65
  @state = current_edge[1] if flag
66
66
  end
67
67
 
68
- raise "no successful rules found. cur_state: #{@state}, token: #{token}" unless flag
68
+ raise( ParserError, "no successful rules found. cur_state: #{@state}, token: #{token}" ) unless flag
69
69
  cntr += 1
70
70
  end
71
71
 
@@ -1,6 +1,7 @@
1
1
  module Bind9mgr
2
2
  class ResourceRecord
3
3
  attr_accessor :owner, :ttl, :klass, :type, :rdata
4
+ attr_reader :errors
4
5
 
5
6
  def initialize owner = nil, ttl = nil, klass = nil, type = nil, rdata = nil
6
7
  @owner = owner
@@ -10,13 +11,40 @@ module Bind9mgr
10
11
  @rdata = rdata
11
12
  end
12
13
 
13
- def gen_rr_string
14
- raise ArgumentError, "RR Type not specified" unless @type
15
- raise ArgumentError, "RR Rdata not specified" unless @rdata
14
+ # Validations
15
+ ##
16
+
17
+ def valid?
18
+ @errors = []
19
+ (@errors << "Base type_and_rdata_shouldnt_be_blank"; return false) unless @type && @rdata
20
+ (@errors << "Owner invalid") if @owner && ( !@owner.kind_of?(String) || (@owner.length < 1) || (@owner.match(/^\d+$/)) || (@owner == 'localhost') )
21
+ (@errors << "Class invalid") if !klass.nil? && !KLASSES.include?( klass )
22
+ (@errors << "Type not_supported") unless ALLOWED_TYPES.include?( type )
23
+
24
+ validate_method_name = "validate_#{@type.downcase}"
25
+
26
+ self.class.send validate_method_name if self.class.respond_to?(validate_method_name)
27
+
28
+ return @errors.size == 0
29
+ end
30
+
31
+ def validate_a
32
+ @errors << "Base a record validation is under construction"
33
+ end
16
34
 
17
- raise( ArgumentError, "wrong owner: #{owner.inspect}" ) if owner == 'localhost'
18
- raise( ArgumentError, "wrong class: #{klass.inspect}" ) if !klass.nil? && !KLASSES.include?( klass )
19
- raise( ArgumentError, "wrong type: #{type.inspect}" ) unless ALLOWED_TYPES.include?( type )
35
+ def validate_cname
36
+ @errors << "Base cname record validation is under construction"
37
+ end
38
+
39
+ def validate_mx
40
+ @errors << "Base mx record validation is under construction"
41
+ end
42
+
43
+ ##
44
+ # Validations
45
+
46
+ def gen_rr_string
47
+ raise MalformedResourceRecord, "Owner:'#{@owner}', ttl:'#{@ttl}', class:'#{klass}', type:'#{type}', rdata:'#{rdata}'" unless self.valid?
20
48
 
21
49
  if @type == 'SOA'
22
50
  cont = ''
data/lib/zone.rb CHANGED
@@ -1,16 +1,5 @@
1
1
  module Bind9mgr
2
2
  class Zone
3
- RRClasses = ['IN', 'CH']
4
- RRTypes = [ 'A',
5
- 'MX',
6
- 'SRV',
7
- 'CNAME',
8
- 'SOA',
9
- 'NS',
10
- 'TXT',
11
- 'PTR'
12
- ]
13
-
14
3
  attr_accessor :default_ttl
15
4
  attr_accessor :file, :options
16
5
  attr_reader :records
@@ -74,7 +63,7 @@ module Bind9mgr
74
63
  begin
75
64
  p.parse File.read( @file )
76
65
  rescue
77
- raise RuntimeError, "Parser error. File: #{@file.inspect}.\nError: #{$!.to_s}\n#{$!.backtrace.join("\n")}"
66
+ raise ParserError, "Parser error. File: #{@file.inspect}.\nError: #{$!.to_s}\n#{$!.backtrace.join("\n")}"
78
67
  end
79
68
  end
80
69
 
@@ -29,6 +29,24 @@ describe Bind9mgr::ResourceRecord do
29
29
  @rr.should respond_to( :gen_rr_string )
30
30
  end
31
31
 
32
+ it "should raise error when wrong record exists on gen_rr_string" do
33
+ expect { @rr.gen_rr_string }.to raise_error
34
+ end
35
+
36
+ it "should fill errors array with something on validation" do
37
+ @rr.should_not be_valid
38
+ @rr.errors.size.should > 0
39
+ puts @rr.errors
40
+ end
41
+
42
+ it "should not raise error when valid record exists on gen_rr_string" do
43
+ @rr.owner = '@'
44
+ @rr.type = 'A'
45
+ @rr.rdata = '123.123.123.123'
46
+
47
+ expect { @rr.gen_rr_string }.not_to raise_error
48
+ end
49
+
32
50
  it "shoult have a list of allowed rr types" do
33
51
  Bind9mgr::ALLOWED_TYPES.should be_kind_of(Array)
34
52
  Bind9mgr::ALLOWED_TYPES.count.should > 0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bind9mgr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-09-21 00:00:00.000000000 +04:00
13
- default_executable:
12
+ date: 2011-10-05 00:00:00.000000000Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: hoe
17
- requirement: &24156520 !ruby/object:Gem::Requirement
16
+ requirement: &24264520 !ruby/object:Gem::Requirement
18
17
  none: false
19
18
  requirements:
20
19
  - - ~>
@@ -22,7 +21,7 @@ dependencies:
22
21
  version: '2.12'
23
22
  type: :development
24
23
  prerelease: false
25
- version_requirements: *24156520
24
+ version_requirements: *24264520
26
25
  description: This gem contains some classes to manage bind9 zone files
27
26
  email:
28
27
  - mikhail@mad-box.ru
@@ -51,7 +50,6 @@ files:
51
50
  - spec/parser_spec.rb
52
51
  - spec/resource_record_spec.rb
53
52
  - .gemtest
54
- has_rdoc: true
55
53
  homepage: https://github.com/madbox/bind9mgr
56
54
  licenses: []
57
55
  post_install_message:
@@ -74,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
74
72
  version: '0'
75
73
  requirements: []
76
74
  rubyforge_project: bind9mgr
77
- rubygems_version: 1.6.2
75
+ rubygems_version: 1.8.10
78
76
  signing_key:
79
77
  specification_version: 3
80
78
  summary: This gem contains some classes to manage bind9 zone files