splicer-dns_made_easy 1.0.1 → 1.1.0
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 +15 -0
- data/lib/splicer/dns_made_easy/domain.rb +22 -0
- data/lib/splicer/dns_made_easy/provider.rb +156 -86
- data/lib/splicer/dns_made_easy/record.rb +20 -0
- data/lib/splicer/dns_made_easy/version.rb +1 -1
- data/lib/splicer/dns_made_easy.rb +2 -0
- data/spec/splicer/dns_made_easy/domain_spec.rb +7 -0
- data/spec/splicer/dns_made_easy/provider_spec.rb +34 -0
- data/splicer-dns_made_easy.gemspec +1 -1
- metadata +13 -25
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
NzEyY2IyZTJjZDVlODIwNTk4NDU1ZmQ2OGNjMzMwZDQ4N2MwNGZlNg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MThlNzIwNzgwMjQwYjkzZWE3MjU0Mjg0MzFjYTAzNjhiYWE2OTMzMQ==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NmQ4ZWRjMDkzNDM1MzQ2N2E5NmM3MWFiNzBjZjdhNzg1NWU3N2E0Mzk0YTI0
|
10
|
+
MWM4MGYwNzE1YjQ0MjhjNzM4MTM4MWM1YzVjYzYzYzdjYTQ1NGEyNzhjMzY2
|
11
|
+
OGEzOTQ2OTA1N2IzMjAyOWRkN2QzMzQ3YWVlN2Q3Mzc2ZmU4OTM=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NDYxNjNiODUxODFkMzhlZTcyZDk4ZDMwMTRlNDlkM2Y5MTBkODJmMzc5OWRm
|
14
|
+
OTQ1NTY5NTY0MzFlZjUzZDRjNTYyYjMwZTdlMTY2NTI4OGYyYWM3YThiOTEx
|
15
|
+
MTFiNTIzZjc3NmYzNmJhNjNiZmI1YzkwOGUzNjM4M2M3YTQwZWM=
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Splicer
|
2
|
+
module DnsMadeEasy
|
3
|
+
|
4
|
+
class Domain
|
5
|
+
attr_reader :id, :data
|
6
|
+
|
7
|
+
def initialize(params={})
|
8
|
+
@id = params['id']
|
9
|
+
@data = params
|
10
|
+
end
|
11
|
+
|
12
|
+
def id?
|
13
|
+
!!@id
|
14
|
+
end
|
15
|
+
|
16
|
+
def persisted?
|
17
|
+
id?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
module Splicer
|
2
2
|
module DnsMadeEasy
|
3
3
|
|
4
|
-
|
4
|
+
# @author Matthew A. Johnston <warmwaffles@gmail.com>
|
5
|
+
class Provider < Splicer::Provider
|
5
6
|
attr_reader :client
|
6
7
|
|
7
8
|
def initialize(config)
|
@@ -9,120 +10,189 @@ module Splicer
|
|
9
10
|
@client = config.client
|
10
11
|
end
|
11
12
|
|
12
|
-
def
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
13
|
+
def create_zone(zone)
|
14
|
+
domain = find_domain(zone.name)
|
15
|
+
return false if domain.persisted?
|
16
|
+
|
17
|
+
client.post('dns/managed', name: zone.name)
|
18
|
+
|
19
|
+
zone.records.each do |record|
|
20
|
+
create_record(domain.id, record)
|
20
21
|
end
|
21
22
|
end
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
domain = search(zone.name)
|
26
|
-
id = domain['id']
|
27
|
-
client.delete("dns/managed/#{id}")
|
28
|
-
true
|
24
|
+
def update_zone(zone)
|
25
|
+
rewrite_zone(zone)
|
29
26
|
end
|
30
27
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
domain = search(zone.name)
|
35
|
-
unless domain
|
36
|
-
domain = create_domain(zone.name)
|
37
|
-
end
|
28
|
+
def rewrite_zone(zone)
|
29
|
+
domain = find_domain(zone.name)
|
30
|
+
return false unless domain.persisted?
|
38
31
|
|
39
|
-
|
40
|
-
|
41
|
-
unless records.empty?
|
42
|
-
delete_records(domain, records.collect { |r| r['id'] })
|
32
|
+
fetch_records(domain.id).each do |record|
|
33
|
+
delete_record(domain.id, record.id)
|
43
34
|
end
|
44
35
|
|
45
|
-
# Time to populate the zone
|
46
36
|
zone.records.each do |record|
|
47
|
-
create_record(domain, record)
|
37
|
+
create_record(domain.id, record)
|
48
38
|
end
|
49
39
|
end
|
50
40
|
|
51
|
-
def
|
52
|
-
domain =
|
53
|
-
unless domain
|
54
|
-
|
41
|
+
def delete_zone(zone)
|
42
|
+
domain = find_domain(zone.name)
|
43
|
+
return false unless domain.persisted?
|
44
|
+
client.delete(domain_resource_url(domain.id))
|
45
|
+
end
|
46
|
+
|
47
|
+
def delete_record_in_zone(record, zone)
|
48
|
+
domain = find_domain(zone.name)
|
49
|
+
return false unless domain.persisted?
|
50
|
+
|
51
|
+
record = find_records(record.name, record.type, domain.id)
|
52
|
+
return false if records.empty?
|
53
|
+
|
54
|
+
delete_record(domain_id, records.first.id)
|
55
|
+
end
|
56
|
+
|
57
|
+
def update_record_in_zone(record, zone)
|
58
|
+
domain = find_domain(zone.name)
|
59
|
+
return false unless domain.persisted?
|
60
|
+
|
61
|
+
records = find_records(record.name, record.type, domain.id)
|
62
|
+
return false if records.empty?
|
63
|
+
|
64
|
+
update_record(domain.id, records.first.id, record)
|
65
|
+
end
|
66
|
+
|
67
|
+
def create_record_in_zone(record, zone)
|
68
|
+
domain = find_domain(zone.name)
|
69
|
+
return false unless domain.persisted?
|
70
|
+
|
71
|
+
records = find_records(record.name, record.type, domain.id)
|
72
|
+
return false unless records.empty?
|
73
|
+
|
74
|
+
create_record(domain.id, record)
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
# @param [Integer] domain_id
|
80
|
+
# @return [Array<Splicer::DnsMadeEasy::Record>]
|
81
|
+
def fetch_records(domain_id)
|
82
|
+
response = JSON.parse(client.get(records_resource_url(domain_id)))
|
83
|
+
list = []
|
84
|
+
response['data'].each do |r|
|
85
|
+
list << Record.new(r)
|
55
86
|
end
|
87
|
+
list
|
88
|
+
rescue Splicer::Errors::RequestError => error
|
89
|
+
[]
|
90
|
+
end
|
56
91
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
92
|
+
# @param [Integer] domain_id
|
93
|
+
# @return [Array<Splicer::DnsMadeEasy::Record>]
|
94
|
+
def find_records(name, type, domain_id)
|
95
|
+
payload = {
|
96
|
+
type: type,
|
97
|
+
recordName: name ? name : ''
|
98
|
+
}
|
99
|
+
response = JSON.parse(client.get(records_resource_url(domain_id), payload))
|
100
|
+
if response['data'].is_a?(Array)
|
101
|
+
list = []
|
102
|
+
response['data'].each do |params|
|
103
|
+
list << Record.new(params)
|
61
104
|
end
|
62
|
-
|
105
|
+
list
|
106
|
+
else
|
107
|
+
[Record.new(response['data'])]
|
63
108
|
end
|
109
|
+
rescue Splicer::Errors::RequestError => error
|
110
|
+
[]
|
64
111
|
end
|
65
112
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
payload.merge!({ value: record.ip })
|
72
|
-
when Splicer::Records::AAAARecord
|
73
|
-
payload.merge!({ value: record.ip })
|
74
|
-
when Splicer::Records::CNAMERecord
|
75
|
-
payload.merge!({ value: record.cname })
|
76
|
-
when Splicer::Records::MXRecord
|
77
|
-
payload.merge!({ value: record.exchanger, mxLevel: record.priority })
|
78
|
-
when Splicer::Records::NSRecord
|
79
|
-
payload.merge!({ value: record.server })
|
80
|
-
when Splicer::Records::PTRRecord
|
81
|
-
payload.merge!({ value: record.host })
|
82
|
-
when Splicer::Records::SRVRecord
|
83
|
-
payload.merge!({
|
84
|
-
value: record.target,
|
85
|
-
weight: record.weight,
|
86
|
-
priority: record.priority,
|
87
|
-
port: record.port
|
88
|
-
})
|
89
|
-
when Splicer::Records::TXTRecord
|
90
|
-
payload.merge!({
|
91
|
-
value: record.text
|
92
|
-
})
|
93
|
-
else
|
94
|
-
return nil
|
95
|
-
end
|
96
|
-
client.post(domain_records_url(domain), payload)
|
113
|
+
# @param [Integer] domain_id
|
114
|
+
# @param [Splicer::Records::Record] splicer_record
|
115
|
+
# @return [String]
|
116
|
+
def create_record(domain_id, splicer_record)
|
117
|
+
client.post(records_resource_url(domain_id), record_resource_payload(splicer_record))
|
97
118
|
end
|
98
119
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
120
|
+
# @param [Integer] record_id
|
121
|
+
# @param [Integer] domain_id
|
122
|
+
# @param [Splicer::Records::Record] splicer_record
|
123
|
+
# @return [String]
|
124
|
+
def update_record(domain_id, record_id, splicer_record)
|
125
|
+
client.put(records_resource_url(domain_id, record_id), record_resource_payload(splicer_record).merge({id: record_id}))
|
104
126
|
end
|
105
127
|
|
106
|
-
|
107
|
-
|
128
|
+
# @param [Integer] record_id
|
129
|
+
# @param [Integer] domain_id
|
130
|
+
# @return [String]
|
131
|
+
def delete_record(domain_id, record_id)
|
132
|
+
client.delete(records_resource_url(domain_id, record_id), id: record_id)
|
108
133
|
end
|
109
134
|
|
110
|
-
|
111
|
-
|
135
|
+
# @param [Integer] domain_id
|
136
|
+
# @return [String]
|
137
|
+
def records_resource_url(domain_id, record_id=nil)
|
138
|
+
if record_id
|
139
|
+
"dns/managed/#{domain_id}/records/#{record_id}"
|
140
|
+
else
|
141
|
+
"dns/managed/#{domain_id}/records"
|
142
|
+
end
|
112
143
|
end
|
113
144
|
|
114
|
-
|
115
|
-
|
116
|
-
|
145
|
+
# @param [Integer] domain_id
|
146
|
+
# @return [String]
|
147
|
+
def domain_resource_url(domain_id)
|
148
|
+
"dns/managed/#{domain_id}"
|
117
149
|
end
|
118
150
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
def search(name)
|
123
|
-
JSON.parse(client.get("dns/managed/id/#{name}"))
|
151
|
+
def find_domain(name)
|
152
|
+
response = JSON.parse(client.get("dns/managed/id/#{name}"))
|
153
|
+
Domain.new(response)
|
124
154
|
rescue Splicer::Errors::RequestError => error
|
125
|
-
|
155
|
+
Domain.new
|
156
|
+
end
|
157
|
+
|
158
|
+
# Returns a hash for the record data
|
159
|
+
# @param [Splicer::Records::Record] record
|
160
|
+
# @return [Hash]
|
161
|
+
def record_resource_payload(record)
|
162
|
+
payload = {
|
163
|
+
type: record.type,
|
164
|
+
gtdLocation: 'DEFAULT',
|
165
|
+
name: record.name ? record.name : '',
|
166
|
+
ttl: record.ttl
|
167
|
+
}
|
168
|
+
case record
|
169
|
+
when Splicer::Records::ARecord
|
170
|
+
payload.merge!({ value: record.ip })
|
171
|
+
when Splicer::Records::AAAARecord
|
172
|
+
payload.merge!({ value: record.ip })
|
173
|
+
when Splicer::Records::CNAMERecord
|
174
|
+
payload.merge!({ value: record.cname })
|
175
|
+
when Splicer::Records::MXRecord
|
176
|
+
payload.merge!({ value: record.exchanger, mxLevel: record.priority })
|
177
|
+
when Splicer::Records::NSRecord
|
178
|
+
payload.merge!({ value: record.server })
|
179
|
+
when Splicer::Records::PTRRecord
|
180
|
+
payload.merge!({ value: record.host })
|
181
|
+
when Splicer::Records::SRVRecord
|
182
|
+
payload.merge!({
|
183
|
+
value: record.target,
|
184
|
+
weight: record.weight,
|
185
|
+
priority: record.priority,
|
186
|
+
port: record.port
|
187
|
+
})
|
188
|
+
when Splicer::Records::TXTRecord
|
189
|
+
payload.merge!({
|
190
|
+
value: record.text
|
191
|
+
})
|
192
|
+
else
|
193
|
+
payload = {}
|
194
|
+
end
|
195
|
+
payload
|
126
196
|
end
|
127
197
|
end
|
128
198
|
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Splicer
|
2
|
+
module DnsMadeEasy
|
3
|
+
|
4
|
+
class Record
|
5
|
+
attr_reader :id, :type, :value, :ttl, :data
|
6
|
+
def initialize(params={})
|
7
|
+
@id = params['id']
|
8
|
+
@type = params['type']
|
9
|
+
@value = params['value']
|
10
|
+
@ttl = params['ttl']
|
11
|
+
@data = params
|
12
|
+
end
|
13
|
+
|
14
|
+
def id?
|
15
|
+
!!@id
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -5,6 +5,8 @@ require 'json'
|
|
5
5
|
|
6
6
|
require 'splicer/dns_made_easy/version'
|
7
7
|
require 'splicer/dns_made_easy/time'
|
8
|
+
require 'splicer/dns_made_easy/domain'
|
9
|
+
require 'splicer/dns_made_easy/record'
|
8
10
|
require 'splicer/dns_made_easy/provider'
|
9
11
|
require 'splicer/dns_made_easy/config'
|
10
12
|
require 'splicer/dns_made_easy/client'
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Splicer::DnsMadeEasy::Provider do
|
4
|
+
let(:config) { Splicer::DnsMadeEasy::Config.new('key','secret') }
|
5
|
+
let(:provider) { Splicer::DnsMadeEasy::Provider.new(config) }
|
6
|
+
|
7
|
+
describe '#create_zone' do
|
8
|
+
subject { provider.create_zone(zone) }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#update_zone' do
|
12
|
+
subject { provider.update_zone(zone) }
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#rewrite_zone' do
|
16
|
+
subject { provider.rewrite_zone(zone) }
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#delete_zone' do
|
20
|
+
subject { provider.delete_zone(zone) }
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#delete_record_in_zone' do
|
24
|
+
subject { provider.delete_record_in_zone(record, zone) }
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#update_record_in_zone' do
|
28
|
+
subject { provider.update_record_in_zone(record, zone) }
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#create_record_in_zone' do
|
32
|
+
subject { provider.create_record_in_zone(record, zone) }
|
33
|
+
end
|
34
|
+
end
|
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency('splicer', '~> 1.
|
21
|
+
spec.add_dependency('splicer', '~> 1.1')
|
22
22
|
spec.add_dependency('rest-client')
|
23
23
|
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.3"
|
metadata
CHANGED
@@ -1,36 +1,32 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: splicer-dns_made_easy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
5
|
-
prerelease:
|
4
|
+
version: 1.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Matthew Johnston
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
11
|
+
date: 2013-05-13 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: splicer
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: '1.
|
19
|
+
version: '1.1'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: '1.
|
26
|
+
version: '1.1'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rest-client
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ! '>='
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ! '>='
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,7 +41,6 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: bundler
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,7 +55,6 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rake
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ! '>='
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ! '>='
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -78,7 +69,6 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: rspec
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
73
|
- - ! '>='
|
84
74
|
- !ruby/object:Gem::Version
|
@@ -86,7 +76,6 @@ dependencies:
|
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
80
|
- - ! '>='
|
92
81
|
- !ruby/object:Gem::Version
|
@@ -109,45 +98,44 @@ files:
|
|
109
98
|
- lib/splicer/dns_made_easy.rb
|
110
99
|
- lib/splicer/dns_made_easy/client.rb
|
111
100
|
- lib/splicer/dns_made_easy/config.rb
|
101
|
+
- lib/splicer/dns_made_easy/domain.rb
|
112
102
|
- lib/splicer/dns_made_easy/provider.rb
|
103
|
+
- lib/splicer/dns_made_easy/record.rb
|
113
104
|
- lib/splicer/dns_made_easy/time.rb
|
114
105
|
- lib/splicer/dns_made_easy/version.rb
|
115
106
|
- spec/spec_helper.rb
|
116
107
|
- spec/splicer/dns_made_easy/client_spec.rb
|
117
108
|
- spec/splicer/dns_made_easy/config_spec.rb
|
109
|
+
- spec/splicer/dns_made_easy/domain_spec.rb
|
110
|
+
- spec/splicer/dns_made_easy/provider_spec.rb
|
118
111
|
- splicer-dns_made_easy.gemspec
|
119
112
|
homepage: https://github.com/zippykid/dns_made_easy
|
120
113
|
licenses:
|
121
114
|
- MIT
|
115
|
+
metadata: {}
|
122
116
|
post_install_message:
|
123
117
|
rdoc_options: []
|
124
118
|
require_paths:
|
125
119
|
- lib
|
126
120
|
required_ruby_version: !ruby/object:Gem::Requirement
|
127
|
-
none: false
|
128
121
|
requirements:
|
129
122
|
- - ! '>='
|
130
123
|
- !ruby/object:Gem::Version
|
131
124
|
version: '0'
|
132
|
-
segments:
|
133
|
-
- 0
|
134
|
-
hash: 4133550921617049631
|
135
125
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
|
-
none: false
|
137
126
|
requirements:
|
138
127
|
- - ! '>='
|
139
128
|
- !ruby/object:Gem::Version
|
140
129
|
version: '0'
|
141
|
-
segments:
|
142
|
-
- 0
|
143
|
-
hash: 4133550921617049631
|
144
130
|
requirements: []
|
145
131
|
rubyforge_project:
|
146
|
-
rubygems_version:
|
132
|
+
rubygems_version: 2.0.3
|
147
133
|
signing_key:
|
148
|
-
specification_version:
|
134
|
+
specification_version: 4
|
149
135
|
summary: The splicer adapter for interacting DnsMadeEasy
|
150
136
|
test_files:
|
151
137
|
- spec/spec_helper.rb
|
152
138
|
- spec/splicer/dns_made_easy/client_spec.rb
|
153
139
|
- spec/splicer/dns_made_easy/config_spec.rb
|
140
|
+
- spec/splicer/dns_made_easy/domain_spec.rb
|
141
|
+
- spec/splicer/dns_made_easy/provider_spec.rb
|