dns-zonefile 1.1.6 → 1.1.9

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 5ec11df0243060f498e791d455121e688836e89e
4
- data.tar.gz: 60e6d94574f023f6eb9446af7ae8bf44e26291e4
2
+ SHA256:
3
+ metadata.gz: 4edd1610f1ecdf845654917cd1f3ea2aa83f1196a87be9bf97c59a34d10392ec
4
+ data.tar.gz: cf115e357d4763424d310592ebf0eb5d18366fff4a2bb451c61a80371317b62e
5
5
  SHA512:
6
- metadata.gz: 4e16724a0649b230bc9fc34a8689f5852c16e08ac415e1f8b419e4950944756c207b3f451333c90b77cb15280e64674c302454aa9982711ab45139519de42bc7
7
- data.tar.gz: d0ff6c4667591e49e23d579078ec584067d436ce3d37fad5d6e7d4b3c088972cdd838c74969732fcac1436d91ae374689cd56b82feda690eb0a338bcafb1db06
6
+ metadata.gz: 3416c7cc446f189fe4c03e128f37c2b2b9b886c911a7a11345ade49c6ae6bc2a138cf95cc76f77721950ff820bd5817d1e874b9fc90420af42333f54572b4592
7
+ data.tar.gz: e0ee661f673016703e919225b9fc04b3e40ce59effbba2417c0f5489c9db6109f4c8aac23ffed06f2252fbb08c5d65f6c4f5860bd8caa4ccb384adbccc0d178b
@@ -1,4 +1,10 @@
1
1
  language: ruby
2
2
 
3
+ before_install:
4
+ - yes | gem update --system --force
5
+ - gem install bundler
6
+
3
7
  rvm:
4
- - 2.3
8
+ - 2.5
9
+ - 2.6
10
+ - 2.7
@@ -30,3 +30,7 @@ $ rake
30
30
  ## Tests
31
31
 
32
32
  Submit unit tests for your changes. You can test your changes on your machine by [running the test suite](#testing).
33
+
34
+ ## Publishing
35
+
36
+ Once a PR is merged into master, bump the version in `lib/dns/zonefile/version.rb` and commit that change. Next, add a new tag with that version number and push the tag to GitHub. Finally, if you are a maintainer with access rights for rubygems.org, run `gem build dnsimple-zonefile.gemspec` followed by `gem push dnsimple-zonefile-x.x.x.gem` where x.x.x is the version number you just set.
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in dns-zonefile.gemspec
4
4
  gemspec
data/Rakefile CHANGED
@@ -3,4 +3,4 @@ require "rspec/core/rake_task"
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ task default: :spec
@@ -1,42 +1,41 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path("../lib", __FILE__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'dns/zonefile/version'
3
+ require "dns/zonefile/version"
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = "dns-zonefile"
8
- spec.version = DNS::Zonefile::VERSION
9
- spec.authors = ["Craig R Webster", "Anthony Eden"]
10
- spec.email = ["craig@barkingiguana.com", "anthonyeden@gmail.com"]
6
+ spec.name = "dns-zonefile"
7
+ spec.version = DNS::Zonefile::VERSION
8
+ spec.authors = ["Craig R Webster", "Anthony Eden"]
9
+ spec.email = ["craig@barkingiguana.com", "anthonyeden@gmail.com"]
11
10
 
12
- spec.summary = %q{Work with zonefiles (RFC 1035 section 5 and RFC 1034 section 3.6.1)}
13
- spec.description = <<-EOD
14
- The format of a DNS Zonefile is defined in RFC 1035 section 5 and RFC
15
- 1034 section 3.6.1. To anyone who's using BIND they'll look very
16
- familiar.
17
-
18
- This is an attempt to use Ruby parse them into an object graph which can
19
- be investigated programatically, manipulated, validated or printed into
20
- some canonical form.
11
+ spec.summary = "Work with zonefiles (RFC 1035 section 5 and RFC 1034 section 3.6.1)"
12
+ spec.description = <<~EOD
13
+ The format of a DNS Zonefile is defined in RFC 1035 section 5 and RFC
14
+ 1034 section 3.6.1. To anyone who's using BIND they'll look very
15
+ familiar.
16
+
17
+ This is an attempt to use Ruby parse them into an object graph which can
18
+ be investigated programatically, manipulated, validated or printed into
19
+ some canonical form.
21
20
  EOD
22
- spec.homepage = "https://github.com/craigw/dns-zonefile"
21
+ spec.homepage = "https://github.com/craigw/dns-zonefile"
23
22
 
24
23
  # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
25
24
  # delete this section to allow pushing this gem to any host.
26
25
  if spec.respond_to?(:metadata)
27
- spec.metadata['allowed_push_host'] = "https://rubygems.org"
26
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
28
27
  else
29
28
  raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
30
29
  end
31
30
 
32
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
33
- spec.bindir = "exe"
34
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
32
+ spec.bindir = "exe"
33
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
35
34
  spec.require_paths = ["lib"]
36
35
 
37
- spec.add_dependency "treetop", '~> 1.6'
38
- spec.add_dependency "polyglot", '~> 0.3'
39
- spec.add_development_dependency "bundler", "~> 1.11"
40
- spec.add_development_dependency "rake", "~> 10.0"
36
+ spec.add_dependency "treetop", "~> 1.6"
37
+ spec.add_dependency "polyglot", "~> 0.3"
38
+ spec.add_development_dependency "bundler", "~> 2.1"
39
+ spec.add_development_dependency "rake", "~> 13.0"
41
40
  spec.add_development_dependency "rspec", "~> 3.0"
42
41
  end
@@ -1,8 +1,8 @@
1
1
  # First make sure you have installed the `dns-zonefile` gem.
2
- #
2
+ #
3
3
  # Run this script with `ruby basic.rb`
4
4
 
5
- require 'dns/zonefile'
5
+ require "dns/zonefile"
6
6
 
7
7
  zonefile = "example.com.zonefile"
8
8
  zone = DNS::Zonefile.parse(File.read(zonefile))
@@ -1,11 +1,11 @@
1
1
  # First make sure you have installed the `dns-zonefile` gem.
2
- #
2
+ #
3
3
  # Run this script with `ruby basic.rb`
4
4
 
5
- require 'dns/zonefile'
5
+ require "dns/zonefile"
6
6
 
7
7
  zonefile = "example.com.zonefile"
8
- zone = DNS::Zonefile.load(File.read(zonefile), 'example.com.')
8
+ zone = DNS::Zonefile.load(File.read(zonefile), "example.com.")
9
9
 
10
10
  puts zone.soa.origin
11
11
  puts zone.soa.nameserver
@@ -1,86 +1,84 @@
1
- require 'dns/zonefile/version'
2
- require 'treetop'
3
- Treetop.load File.expand_path('../zonefile', __FILE__)
1
+ require "dns/zonefile/version"
2
+ require "treetop"
3
+ Treetop.load File.expand_path("../zonefile", __FILE__)
4
4
 
5
5
  module DNS
6
6
  module Zonefile
7
7
  class << self
8
8
  def parse(zone_string)
9
- parser = ZonefileParser.new
10
- if result = parser.parse(zone_string)
11
- result
12
- else
13
- raise ParsingError, parser.failure_reason
14
- end
9
+ parser = ZonefileParser.new
10
+ result = parser.parse(zone_string)
11
+ return result if result
12
+ raise ParsingError, parser.failure_reason
15
13
  end
16
14
 
17
- def load(zone_string, alternate_origin=nil)
18
- Zone.new(parse(zone_string).entries, alternate_origin)
15
+ def load(zone_string, alternate_origin = nil)
16
+ Zone.new(parse(zone_string).entries, alternate_origin)
19
17
  end
20
18
  end
21
19
 
22
- class ParsingError < RuntimeError ; end
23
- class UnknownRecordType < RuntimeError ; end
20
+ class ParsingError < RuntimeError; end
21
+ class UnknownRecordType < RuntimeError; end
24
22
  class Zone
25
- attr_reader :origin, :soa
23
+ attr_reader :origin
26
24
  attr_reader :records
27
25
 
28
- def initialize(entries, alternate_origin=nil)
29
- alternate_origin ||= '.'
30
- @records = []
31
- @vars = {'origin'=>alternate_origin, :last_host=>'.'}
32
- entries.each do |e|
33
- case e.parse_type
34
- when :variable
35
- case key = e.name.text_value.downcase
36
- when 'ttl'
37
- @vars[key] = e.value.text_value.to_i
38
- else
39
- @vars[key] = e.value.text_value
40
- end
41
- when :soa
42
- @records << SOA.new(@vars, e)
43
- when :record
44
- case e.record_type
45
- when 'A' then @records << A.new(@vars, e)
46
- when 'AAAA' then @records << AAAA.new(@vars, e)
47
- when 'CNAME' then @records << CNAME.new(@vars, e)
48
- when 'MX' then @records << MX.new(@vars, e)
49
- when 'NAPTR' then @records << NAPTR.new(@vars, e)
50
- when 'NS' then @records << NS.new(@vars, e)
51
- when 'PTR' then @records << PTR.new(@vars, e)
52
- when 'SRV' then @records << SRV.new(@vars, e)
53
- when 'SPF' then @records << SPF.new(@vars, e)
54
- when 'SSHFP' then @records << SSHFP.new(@vars, e)
55
- when 'TXT' then @records << TXT.new(@vars, e)
56
- when 'SOA' then ;
57
- else
58
- raise UnknownRecordType, "Unknown record type: #{e.record_type}"
59
- end
60
- end
61
- end
26
+ def initialize(entries, alternate_origin = nil)
27
+ alternate_origin ||= "."
28
+ @records = []
29
+ @vars = {"origin" => alternate_origin, :last_host => "."}
30
+ entries.each do |e|
31
+ case e.parse_type
32
+ when :variable
33
+ key = e.name.text_value.downcase
34
+ @vars[key] = case key
35
+ when "ttl"
36
+ e.value.text_value.to_i
37
+ else
38
+ e.value.text_value
39
+ end
40
+ when :soa
41
+ @records << SOA.new(@vars, e)
42
+ when :record
43
+ case e.record_type
44
+ when "A" then @records << A.new(@vars, e)
45
+ when "AAAA" then @records << AAAA.new(@vars, e)
46
+ when "CAA" then @records << CAA.new(@vars, e)
47
+ when "CNAME" then @records << CNAME.new(@vars, e)
48
+ when "MX" then @records << MX.new(@vars, e)
49
+ when "NAPTR" then @records << NAPTR.new(@vars, e)
50
+ when "NS" then @records << NS.new(@vars, e)
51
+ when "PTR" then @records << PTR.new(@vars, e)
52
+ when "SRV" then @records << SRV.new(@vars, e)
53
+ when "SPF" then @records << SPF.new(@vars, e)
54
+ when "SSHFP" then @records << SSHFP.new(@vars, e)
55
+ when "TXT" then @records << TXT.new(@vars, e)
56
+ when "SOA" then
57
+ # No-op
58
+ else
59
+ raise UnknownRecordType, "Unknown record type: #{e.record_type}"
60
+ end
61
+ end
62
+ end
62
63
  end
63
64
 
64
65
  def soa
65
- records_of(SOA).first
66
+ records_of(SOA).first
66
67
  end
67
68
 
68
69
  def records_of(kl)
69
- @records.select{|r| r.instance_of? kl}
70
+ @records.select { |r| r.instance_of? kl }
70
71
  end
71
72
  end
72
73
 
73
74
  class Record
74
75
  # assign, with handling for global TTL
75
76
  def self.writer_for_ttl(*attribs)
76
- attribs.each do |attrib|
77
- c = <<-MTH
78
- def #{attrib}=(val)
79
- @#{attrib} = val || @vars['ttl']
80
- end
81
- MTH
82
- class_eval c, __FILE__, __LINE__
83
- end
77
+ attribs.each do |attrib|
78
+ define_method "#{attrib}=" do |val|
79
+ instance_variable_set("@#{attrib}", val || @vars["ttl"])
80
+ end
81
+ end
84
82
  end
85
83
 
86
84
  attr_reader :ttl
@@ -88,47 +86,45 @@ module DNS
88
86
  writer_for_ttl :ttl
89
87
 
90
88
  def klass
91
- @klass = nil if @klass == ''
92
- @klass ||= 'IN'
89
+ @klass = nil if @klass == ""
90
+ @klass ||= "IN"
93
91
  end
94
92
 
95
93
  private
94
+
96
95
  def qualify_host(host)
97
- origin = vars['origin']
98
- host = vars[:last_host] if host =~ /^\s*$/
96
+ origin = vars["origin"]
97
+ host = vars[:last_host] if /^\s*$/.match?(host)
99
98
  host = host.gsub(/@/, origin)
100
- if host =~ /\.$/
99
+ if /\.$/.match?(host)
101
100
  host
101
+ elsif /^\./.match?(origin)
102
+ host + origin
102
103
  else
103
- if origin =~ /^\./
104
- host + origin
105
- else
106
- host + "." + origin
107
- end
104
+ host + "." + origin
108
105
  end
109
106
  end
110
107
  attr_accessor :vars
111
-
112
108
  end
113
109
 
114
110
  class SOA < Record
115
111
  attr_accessor :origin, :nameserver, :responsible_party, :serial, :refresh_time, :retry_time, :expiry_time, :nxttl
116
112
 
117
- def initialize(vars, zonefile_soa=nil)
118
- @vars = vars
119
- if zonefile_soa
120
- self.origin = qualify_host(zonefile_soa.origin.to_s)
121
- @vars[:last_host] = self.origin
122
- self.ttl = zonefile_soa.ttl.to_i
123
- self.klass = zonefile_soa.klass.to_s
124
- self.nameserver = qualify_host(zonefile_soa.ns.to_s)
125
- self.responsible_party = qualify_host(zonefile_soa.rp.to_s)
126
- self.serial = zonefile_soa.serial.to_i
127
- self.refresh_time = zonefile_soa.refresh.to_i
128
- self.retry_time = zonefile_soa.reretry.to_i
129
- self.expiry_time = zonefile_soa.expiry.to_i
130
- self.nxttl = zonefile_soa.nxttl.to_i
131
- end
113
+ def initialize(vars, zonefile_soa = nil)
114
+ @vars = vars
115
+ if zonefile_soa
116
+ self.origin = qualify_host(zonefile_soa.origin.to_s)
117
+ @vars[:last_host] = origin
118
+ self.ttl = zonefile_soa.ttl.to_i
119
+ self.klass = zonefile_soa.klass.to_s
120
+ self.nameserver = qualify_host(zonefile_soa.ns.to_s)
121
+ self.responsible_party = qualify_host(zonefile_soa.rp.to_s)
122
+ self.serial = zonefile_soa.serial.to_i
123
+ self.refresh_time = zonefile_soa.refresh.to_i
124
+ self.retry_time = zonefile_soa.reretry.to_i
125
+ self.expiry_time = zonefile_soa.expiry.to_i
126
+ self.nxttl = zonefile_soa.nxttl.to_i
127
+ end
132
128
  end
133
129
  end
134
130
 
@@ -136,69 +132,86 @@ module DNS
136
132
  attr_accessor :host, :address
137
133
 
138
134
  def initialize(vars, zonefile_record)
139
- @vars = vars
140
- if zonefile_record
141
- self.host = qualify_host(zonefile_record.host.to_s)
142
- @vars[:last_host] = self.host
143
- self.ttl = zonefile_record.ttl.to_i
144
- self.klass = zonefile_record.klass.to_s
145
- self.address = zonefile_record.ip_address.to_s
146
- end
135
+ @vars = vars
136
+ if zonefile_record
137
+ self.host = qualify_host(zonefile_record.host.to_s)
138
+ @vars[:last_host] = host
139
+ self.ttl = zonefile_record.ttl.to_i
140
+ self.klass = zonefile_record.klass.to_s
141
+ self.address = zonefile_record.ip_address.to_s
142
+ end
147
143
  end
148
144
  end
149
145
 
150
146
  class AAAA < A
151
147
  end
152
148
 
149
+ class CAA < Record
150
+ attr_accessor :host, :flags, :tag, :value
151
+
152
+ def initialize(vars, zonefile_record)
153
+ @vars = vars
154
+ if zonefile_record
155
+ self.host = qualify_host(zonefile_record.host.to_s)
156
+ @vars[:last_host] = host
157
+ self.ttl = zonefile_record.ttl.to_i
158
+ self.klass = zonefile_record.klass.to_s
159
+ self.flags = zonefile_record.flags.to_i
160
+ self.tag = zonefile_record.tag.to_s
161
+ self.value = zonefile_record.value.to_s
162
+ end
163
+ end
164
+ end
165
+
153
166
  class CNAME < Record
154
167
  attr_accessor :host, :domainname
155
168
 
156
169
  def initialize(vars, zonefile_record)
157
- @vars = vars
158
- if zonefile_record
159
- self.host = qualify_host(zonefile_record.host.to_s)
160
- @vars[:last_host] = self.host
161
- self.ttl = zonefile_record.ttl.to_i
162
- self.klass = zonefile_record.klass.to_s
163
- self.domainname = qualify_host(zonefile_record.target.to_s)
164
- end
170
+ @vars = vars
171
+ if zonefile_record
172
+ self.host = qualify_host(zonefile_record.host.to_s)
173
+ @vars[:last_host] = host
174
+ self.ttl = zonefile_record.ttl.to_i
175
+ self.klass = zonefile_record.klass.to_s
176
+ self.domainname = qualify_host(zonefile_record.target.to_s)
177
+ end
165
178
  end
166
179
 
167
- alias :target :domainname
168
- alias :alias :host
180
+ alias target domainname
181
+ alias alias host
169
182
  end
170
183
 
171
184
  class MX < Record
172
185
  attr_accessor :host, :priority, :domainname
173
186
 
174
187
  def initialize(vars, zonefile_record)
175
- @vars = vars
176
- if zonefile_record
177
- self.host = qualify_host(zonefile_record.host.to_s)
178
- @vars[:last_host] = self.host
179
- self.ttl = zonefile_record.ttl.to_i
180
- self.klass = zonefile_record.klass.to_s
181
- self.priority = zonefile_record.priority.to_i
182
- self.domainname = qualify_host(zonefile_record.exchanger.to_s)
183
- end
188
+ @vars = vars
189
+ if zonefile_record
190
+ self.host = qualify_host(zonefile_record.host.to_s)
191
+ @vars[:last_host] = host
192
+ self.ttl = zonefile_record.ttl.to_i
193
+ self.klass = zonefile_record.klass.to_s
194
+ self.priority = zonefile_record.priority.to_i
195
+ self.domainname = qualify_host(zonefile_record.exchanger.to_s)
196
+ end
184
197
  end
185
198
 
186
- alias :exchange :domainname
187
- alias :exchanger :domainname
199
+ alias exchange domainname
200
+ alias exchanger domainname
188
201
  end
189
202
 
190
203
  class NAPTR < Record
191
204
  attr_accessor :host, :data
192
205
 
193
206
  def initialize(vars, zonefile_record)
194
- @vars = vars
195
- if zonefile_record
196
- self.host = qualify_host(zonefile_record.host.to_s)
197
- @vars[:last_host] = self.host
198
- self.ttl = zonefile_record.ttl.to_i
199
- self.klass = zonefile_record.klass.to_s
200
- self.data = zonefile_record.data.to_s
201
- end
207
+ @vars = vars
208
+ if zonefile_record
209
+ self.host = qualify_host(zonefile_record.host.to_s)
210
+ @vars[:last_host] = host
211
+ self.ttl = zonefile_record.ttl.to_i
212
+ self.klass = zonefile_record.klass.to_s
213
+ self.data = zonefile_record.data.to_s
214
+ end
202
215
  end
203
216
  end
204
217
 
@@ -206,54 +219,54 @@ module DNS
206
219
  attr_accessor :host, :domainname
207
220
 
208
221
  def initialize(vars, zonefile_record)
209
- @vars = vars
210
- if zonefile_record
211
- self.host = qualify_host(zonefile_record.host.to_s)
212
- @vars[:last_host] = self.host
213
- self.ttl = zonefile_record.ttl.to_i
214
- self.klass = zonefile_record.klass.to_s
215
- self.domainname = qualify_host(zonefile_record.nameserver.to_s)
216
- end
222
+ @vars = vars
223
+ if zonefile_record
224
+ self.host = qualify_host(zonefile_record.host.to_s)
225
+ @vars[:last_host] = host
226
+ self.ttl = zonefile_record.ttl.to_i
227
+ self.klass = zonefile_record.klass.to_s
228
+ self.domainname = qualify_host(zonefile_record.nameserver.to_s)
229
+ end
217
230
  end
218
231
 
219
- alias :nameserver :domainname
232
+ alias nameserver domainname
220
233
  end
221
234
 
222
235
  class PTR < Record
223
236
  attr_accessor :host, :domainname
224
237
 
225
238
  def initialize(vars, zonefile_record)
226
- @vars = vars
227
- if zonefile_record
228
- self.host = qualify_host(zonefile_record.host.to_s)
229
- @vars[:last_host] = self.host
230
- self.ttl = zonefile_record.ttl.to_i
231
- self.klass = zonefile_record.klass.to_s
232
- self.domainname = qualify_host(zonefile_record.target.to_s)
233
- end
239
+ @vars = vars
240
+ if zonefile_record
241
+ self.host = qualify_host(zonefile_record.host.to_s)
242
+ @vars[:last_host] = host
243
+ self.ttl = zonefile_record.ttl.to_i
244
+ self.klass = zonefile_record.klass.to_s
245
+ self.domainname = qualify_host(zonefile_record.target.to_s)
246
+ end
234
247
  end
235
248
 
236
- alias :target :domainname
249
+ alias target domainname
237
250
  end
238
251
 
239
252
  class SRV < Record
240
253
  attr_accessor :host, :priority, :weight, :port, :domainname
241
254
 
242
255
  def initialize(vars, zonefile_record)
243
- @vars = vars
244
- if zonefile_record
245
- self.host = qualify_host(zonefile_record.host.to_s)
246
- @vars[:last_host] = self.host
247
- self.ttl = zonefile_record.ttl.to_i
248
- self.klass = zonefile_record.klass.to_s
249
- self.priority = zonefile_record.priority.to_i
250
- self.weight = zonefile_record.weight.to_i
251
- self.port = zonefile_record.port.to_i
252
- self.domainname = qualify_host(zonefile_record.target.to_s)
253
- end
256
+ @vars = vars
257
+ if zonefile_record
258
+ self.host = qualify_host(zonefile_record.host.to_s)
259
+ @vars[:last_host] = host
260
+ self.ttl = zonefile_record.ttl.to_i
261
+ self.klass = zonefile_record.klass.to_s
262
+ self.priority = zonefile_record.priority.to_i
263
+ self.weight = zonefile_record.weight.to_i
264
+ self.port = zonefile_record.port.to_i
265
+ self.domainname = qualify_host(zonefile_record.target.to_s)
266
+ end
254
267
  end
255
268
 
256
- alias :target :domainname
269
+ alias target domainname
257
270
  end
258
271
 
259
272
  class SSHFP < Record
@@ -262,13 +275,13 @@ module DNS
262
275
  def initialize(vars, zonefile_record)
263
276
  @vars = vars
264
277
  if zonefile_record
265
- self.host = qualify_host(zonefile_record.host.to_s)
266
- @vars[:last_host] = self.host
267
- self.ttl = zonefile_record.ttl.to_i
268
- self.klass = zonefile_record.klass.to_s
269
- self.alg = zonefile_record.alg.to_i
270
- self.fptype = zonefile_record.fptype.to_i
271
- self.fp = zonefile_record.fp.to_s
278
+ self.host = qualify_host(zonefile_record.host.to_s)
279
+ @vars[:last_host] = host
280
+ self.ttl = zonefile_record.ttl.to_i
281
+ self.klass = zonefile_record.klass.to_s
282
+ self.alg = zonefile_record.alg.to_i
283
+ self.fptype = zonefile_record.fptype.to_i
284
+ self.fp = zonefile_record.fp.to_s
272
285
  end
273
286
  end
274
287
  end
@@ -277,14 +290,14 @@ module DNS
277
290
  attr_accessor :host, :data
278
291
 
279
292
  def initialize(vars, zonefile_record)
280
- @vars = vars
281
- if zonefile_record
282
- self.host = qualify_host(zonefile_record.host.to_s)
283
- @vars[:last_host] = self.host
284
- self.ttl = zonefile_record.ttl.to_i
285
- self.klass = zonefile_record.klass.to_s
286
- self.data = zonefile_record.data.to_s
287
- end
293
+ @vars = vars
294
+ if zonefile_record
295
+ self.host = qualify_host(zonefile_record.host.to_s)
296
+ @vars[:last_host] = host
297
+ self.ttl = zonefile_record.ttl.to_i
298
+ self.klass = zonefile_record.klass.to_s
299
+ self.data = zonefile_record.data.to_s
300
+ end
288
301
  end
289
302
  end
290
303
 
@@ -53,7 +53,7 @@ grammar Zonefile
53
53
  end
54
54
 
55
55
  rule resource_record
56
- record:(a_record / aaaa_record / cname_record / mx_record / naptr_record / ns_record / ptr_record / srv_record / spf_record / sshfp_record / txt_record / soa_record) space* comment? linebreak {
56
+ record:(a_record / aaaa_record / caa_record / cname_record / mx_record / naptr_record / ns_record / ptr_record / srv_record / spf_record / sshfp_record / txt_record / soa_record) space* comment? linebreak {
57
57
  def zone
58
58
  p = parent
59
59
  while p.respond_to?(:parent) && p.parent
@@ -128,6 +128,28 @@ grammar Zonefile
128
128
  }
129
129
  end
130
130
 
131
+ rule caa_record
132
+ (
133
+ host space ms_age ttl klass "CAA" space flags:integer space tag:unquoted_string space value:caa_value
134
+ ) {
135
+ def to_s
136
+ "#{host} #{ttl} #{klass} CAA #{flags} #{tag} #{value}"
137
+ end
138
+
139
+ def record_type
140
+ "CAA"
141
+ end
142
+ }
143
+ end
144
+
145
+ rule caa_value
146
+ (quoted_string / unquoted_string) {
147
+ def to_s
148
+ text_value
149
+ end
150
+ }
151
+ end
152
+
131
153
  rule cname_record
132
154
  (
133
155
  host space ms_age ttl klass "CNAME" space target:host /
@@ -1,5 +1,5 @@
1
1
  module DNS
2
2
  module Zonefile
3
- VERSION = "1.1.6"
3
+ VERSION = "1.1.9"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dns-zonefile
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.6
4
+ version: 1.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Craig R Webster
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2017-07-13 00:00:00.000000000 Z
12
+ date: 2020-09-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: treetop
@@ -45,28 +45,28 @@ dependencies:
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '1.11'
48
+ version: '2.1'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '1.11'
55
+ version: '2.1'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: rake
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: '10.0'
62
+ version: '13.0'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '10.0'
69
+ version: '13.0'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rspec
72
72
  requirement: !ruby/object:Gem::Requirement
@@ -141,8 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
141
141
  - !ruby/object:Gem::Version
142
142
  version: '0'
143
143
  requirements: []
144
- rubyforge_project:
145
- rubygems_version: 2.5.1
144
+ rubygems_version: 3.1.2
146
145
  signing_key:
147
146
  specification_version: 4
148
147
  summary: Work with zonefiles (RFC 1035 section 5 and RFC 1034 section 3.6.1)