dns_mock 1.3.0 → 1.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7bc358120372b309038c4f457483268e58c22ff6e96667bbdf6a398896248749
4
- data.tar.gz: d468e04f015a7bd7f5f535454356d2f2affcf3517eb6e0fcc261bc38ddea388d
3
+ metadata.gz: 897efc00bc504413b9241457c05b0a0936a37f6b7d787442ea900ebd1f4c9666
4
+ data.tar.gz: afa0eaf67758320d173f5064932fe647931d5d9535cc2a2d60d283400ee32df0
5
5
  SHA512:
6
- metadata.gz: 318e2a60578aa2a01a0c548fbccd7477b2556f8d0403af15e26d0425e86a10bb2d596616bae764c7ceec8eaa6d89b09437c34bc6ff2ac5cc20890431289177e0
7
- data.tar.gz: f74189c81ad853915633bac2ff05f3f48d80a8a52e19198545416b850987fefa8b30475e2db202a8c032ecb7ecf60ab8c4da18645d0c5455620ddee05a0ff73b
6
+ metadata.gz: b62d6ddec01b675caa95ac157c005efc7fa5e794c4c98fd4b4a35f45586b0ee03f76a7398396bad6e7269475ae7710e7ccbf9c64adff430fa99440bc4fbe16c7
7
+ data.tar.gz: d3a57d14f992448037f76045d6083e36f523565d460ba5826f3f952779e0d49c4d36a9108b7a3a473a275dd7274f5c8e7fe58c4513036863d88beac8ed7f999d
data/.codeclimate.yml CHANGED
@@ -7,7 +7,7 @@ checks:
7
7
  plugins:
8
8
  rubocop:
9
9
  enabled: true
10
- channel: rubocop-1-16
10
+ channel: rubocop-1-20
11
11
 
12
12
  reek:
13
13
  enabled: true
data/.reek.yml CHANGED
@@ -17,17 +17,23 @@ detectors:
17
17
  - DnsMock::ContextGeneratorHelper#random_ip_v4_address
18
18
  - DnsMock::ContextGeneratorHelper#random_ip_v6_address
19
19
  - DnsMock::ContextGeneratorHelper#random_txt_record_context
20
+ - DnsMock::ContextGeneratorHelper#to_punycode_hostname
20
21
  - DnsMock::RecordsDictionaryHelper#create_records_dictionary_by_records
21
22
  - DnsMock::ServerHelper#start_random_server
22
23
  - DnsMock::ServerHelper#stop_all_running_servers
23
- - DnsMock::Server::RecordsDictionaryBuilder#rdns_lookup_prefix
24
24
  - DnsMock::ContextGeneratorHelper#random_port_number
25
25
  - DnsMock::TestFramework::RSpec::Helper#dns_mock_server
26
+ - DnsMock::ContextGeneratorHelper#to_rdns_hostaddress
27
+
28
+ DuplicateMethodCall:
29
+ exclude:
30
+ - DnsMock::ContextGeneratorHelper#create_records
26
31
 
27
32
  ControlParameter:
28
33
  exclude:
29
34
  - DnsMock::Error::Helper#raise_unless
30
35
  - DnsMock::Server#initialize
36
+ - DnsMock::ContextGeneratorHelper#to_punycode_hostname
31
37
 
32
38
  MissingSafeMethod:
33
39
  exclude:
data/.rubocop.yml CHANGED
@@ -28,6 +28,9 @@ Naming/VariableNumber:
28
28
  Naming/RescuedExceptionsVariableName:
29
29
  Enabled: false
30
30
 
31
+ Naming/InclusiveLanguage:
32
+ Enabled: false
33
+
31
34
  Style/Documentation:
32
35
  Enabled: false
33
36
 
@@ -136,6 +139,9 @@ Style/MultilineInPatternThen:
136
139
  Style/QuotedSymbols:
137
140
  Enabled: true
138
141
 
142
+ Style/RedundantSelfAssignmentBranch:
143
+ Enabled: true
144
+
139
145
  Layout/LineLength:
140
146
  Max: 150
141
147
 
@@ -167,6 +173,9 @@ Layout/EmptyLineAfterGuardClause:
167
173
  Layout/SpaceBeforeBrackets:
168
174
  Enabled: true
169
175
 
176
+ Layout/LineEndStringConcatenationIndentation:
177
+ Enabled: true
178
+
170
179
  Lint/NonDeterministicRequireOrder:
171
180
  Enabled: true
172
181
 
@@ -236,6 +245,9 @@ Lint/TripleQuotes:
236
245
  Lint/EmptyInPattern:
237
246
  Enabled: true
238
247
 
248
+ Lint/AmbiguousRange:
249
+ Enabled: true
250
+
239
251
  Gemspec/DateAssignment:
240
252
  Enabled: true
241
253
 
data/CHANGELOG.md CHANGED
@@ -2,13 +2,100 @@
2
2
 
3
3
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
4
4
 
5
+ ## [1.4.2] - 2021-09-04
6
+
7
+ ### Updated
8
+
9
+ - Updated gem development dependencies
10
+ - Updated gem version
11
+
12
+ ## [1.4.1] - 2021-08-16
13
+
14
+ ### Updated
15
+
16
+ - Updated gem development dependencies
17
+ - Updated gem version
18
+
19
+ ### Changed
20
+
21
+ - `faker` to `ffaker` development dependency
22
+
23
+ ## [1.4.0] - 2021-07-13
24
+
25
+ ### Added
26
+
27
+ - Added ability to use internationalized hostnames. All hostnames in UTF-8 will be represented as [Punycode](https://en.wikipedia.org/wiki/Punycode)
28
+ - Added `simpleidn` as runtime dependency
29
+ - Added `DnsMock::Representer::Punycode`, tests
30
+
31
+ ```ruby
32
+ records = {
33
+ 'mañana.com' => {
34
+ mx: %w[másletras.mañana.com]
35
+ }
36
+ }
37
+
38
+ DnsMock.start_server(port: 5300, records: records)
39
+ ```
40
+
41
+ ```bash
42
+ dig @localhost -p 5300 MX xn--maana-pta.com
43
+ ```
44
+
45
+ ```
46
+ ; <<>> DiG 9.10.6 <<>> @localhost -p 5300 MX xn--maana-pta.com
47
+ ; (2 servers found)
48
+ ;; global options: +cmd
49
+ ;; Got answer:
50
+ ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4612
51
+ ;; flags: rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
52
+ ;; WARNING: recursion requested but not available
53
+
54
+ ;; OPT PSEUDOSECTION:
55
+ ; EDNS: version: 0, flags:; udp: 4096
56
+ ;; QUESTION SECTION:
57
+ ;xn--maana-pta.com. IN MX
58
+
59
+ ;; ANSWER SECTION:
60
+ xn--maana-pta.com. 1 IN MX 10 xn--msletras-8ya.xn--maana-pta.com.
61
+
62
+ ;; Query time: 0 msec
63
+ ;; SERVER: 127.0.0.1#5300(127.0.0.1)
64
+ ;; WHEN: Tue Jul 13 15:38:47 EEST 2021
65
+ ;; MSG SIZE rcvd: 79
66
+ ```
67
+
68
+ ### Changed
69
+
70
+ - Refactored `DnsMock::Representer::RdnsLookup`, tests
71
+ - Updated `DnsMock::Record::Factory::Base`
72
+ - Updated `DnsMock::Server::RecordsDictionaryBuilder`, tests
73
+ - Updated `DnsMock::Record::Factory::Cname`, tests
74
+ - Updated `DnsMock::Record::Factory::Mx`, tests
75
+ - Updated `DnsMock::Record::Factory::Ns`, tests
76
+ - Updated `DnsMock::Record::Factory::Ptr`, tests
77
+ - Updated `DnsMock::Record::Factory::Soa`, tests
78
+ - Updated `DnsMock::ContextGeneratorHelper`, tests
79
+ - Updated reek config
80
+ - Updated gem documentation, version
81
+
82
+ ## [1.3.1] - 2021-07-07
83
+
84
+ ### Changed
85
+
86
+ - Updated gem development dependencies
87
+ - Updated rubocop/codeclimate config
88
+ - Updated gem documentation, version
89
+
5
90
  ## [1.3.0] - 2021-06-14
6
91
 
7
- Detecting random available port via OS features. Thanks [@ioquatix](https://github.com/ioquatix) for [suggestion](https://github.com/mocktools/ruby-dns-mock/issues/42) 🚀
92
+ ### Added
93
+
94
+ - Detecting random available port via OS features. Thanks [@ioquatix](https://github.com/ioquatix) for [suggestion](https://github.com/mocktools/ruby-dns-mock/issues/42) 🚀
8
95
 
9
96
  ### Removed
10
97
 
11
- - Removed `DnsMock::Server::RandomAvailablePort`
98
+ - Removed `DnsMock::Server::RandomAvailablePort`, tests
12
99
 
13
100
  ### Changed
14
101
 
@@ -53,9 +140,11 @@ Detecting random available port via OS features. Thanks [@ioquatix](https://gith
53
140
 
54
141
  ## [1.2.0] - 2021-02-04
55
142
 
56
- ### Ability to specify MX record priority
143
+ ### Added
57
144
 
58
- Added ability to specify custom priority of MX record if it needed. Now it impossible to define null or backup MX records. Please note, if you haven't specified a priority of MX record, it will be assigned automatically. MX records builder is assigning priority with step 10 from first item of defined MX records array.
145
+ - Ability to specify custom priority of MX record if it needed
146
+
147
+ Now is possible to define null or backup MX records. Please note, if you haven't specified a priority of MX record, it will be assigned automatically. MX records builder is assigning priority with step 10 from first item of defined MX records array.
59
148
 
60
149
  ```ruby
61
150
  records = {
@@ -88,9 +177,9 @@ example.com. 1 IN MX 40 mx3.domain.com.
88
177
 
89
178
  ## [1.1.0] - 2021-02-01
90
179
 
91
- ### RSpec native support
180
+ ### Added
92
181
 
93
- Added DnsMock helper which can simplify integration with RSpec.
182
+ - RSpec native support. DnsMock helper help you to simplify integration with RSpec
94
183
 
95
184
  ```ruby
96
185
  # spec/support/config/dns_mock.rb
@@ -122,9 +211,11 @@ end
122
211
 
123
212
  ## [1.0.0] - 2021-01-29
124
213
 
125
- ### Configurable record not found behaviour
214
+ ### Added
215
+
216
+ - Configurable strategy for record not found case
126
217
 
127
- Added configurable strategy for record not found case. By default it won't raise an exception when DNS record not found in mocked records dictionary:
218
+ By default it won't raise an exception when DNS record not found in mocked records dictionary:
128
219
 
129
220
  ```ruby
130
221
  DnsMock.start_server(port: 5300)
@@ -170,17 +261,19 @@ DnsMock.start_server(exception_if_not_found: true)
170
261
 
171
262
  ### Fixed
172
263
 
173
- Fixed RDNS lookup representatin for IP address in PTR record feature.
264
+ - RDNS lookup representatin for IP address in PTR record feature.
174
265
 
175
266
  ## [0.2.0] - 2021-01-26
176
267
 
177
- ### PTR record support
268
+ ### Added
269
+
270
+ - PTR record support. Ability to mock PTR records
178
271
 
179
- Added ability to mock PTR records. Please note, you can define host address without RDNS lookup prefix (`.in-addr.arpa`). `DnsMock` will do it for you.
272
+ Please note, you can define host address without RDNS lookup prefix (`.in-addr.arpa`). `DnsMock` will do it for you.
180
273
 
181
274
  ```ruby
182
275
  records = {
183
- '1.1.1.1' => {
276
+ '1.2.3.4' => {
184
277
  ptr: %w[domain_1.com domain_2.com]
185
278
  }
186
279
  }
@@ -189,7 +282,7 @@ DnsMock.start_server(records: records)
189
282
  ```
190
283
 
191
284
  ```bash
192
- dig @localhost -p 5300 -x 1.1.1.1
285
+ dig @localhost -p 5300 -x 1.2.3.4
193
286
  ```
194
287
 
195
288
  ```
@@ -197,8 +290,8 @@ dig @localhost -p 5300 -x 1.1.1.1
197
290
  ; (2 servers found)
198
291
 
199
292
  ;; ANSWER SECTION:
200
- 1.1.1.1.in-addr.arpa. 1 IN PTR domain_1.com.
201
- 1.1.1.1.in-addr.arpa. 1 IN PTR domain_2.com.
293
+ 4.3.2.1.in-addr.arpa. 1 IN PTR domain_1.com.
294
+ 4.3.2.1.in-addr.arpa. 1 IN PTR domain_2.com.
202
295
 
203
296
  ;; Query time: 0 msec
204
297
  ;; SERVER: 127.0.0.1#5300(127.0.0.1)
@@ -208,6 +301,6 @@ dig @localhost -p 5300 -x 1.1.1.1
208
301
 
209
302
  ## [0.1.0] - 2021-01-19
210
303
 
211
- ### First release
304
+ ### Added
212
305
 
213
- Implemented first version of `DnsMock`. Thanks [@le0pard](https://github.com/le0pard) for idea & support 🚀
306
+ - First release of `DnsMock`. Thanks [@le0pard](https://github.com/le0pard) for idea & support 🚀
data/Gemfile.lock CHANGED
@@ -1,31 +1,28 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dns_mock (1.3.0)
4
+ dns_mock (1.4.2)
5
+ simpleidn (~> 0.2.1)
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
8
9
  specs:
9
10
  ast (2.4.2)
10
- bundler-audit (0.8.0)
11
+ bundler-audit (0.9.0.1)
11
12
  bundler (>= 1.2.0, < 3)
12
13
  thor (~> 1.0)
13
14
  byebug (11.1.3)
14
15
  childprocess (4.1.0)
15
16
  coderay (1.1.3)
16
17
  colorize (0.8.1)
17
- concurrent-ruby (1.1.9)
18
18
  diff-lcs (1.4.4)
19
- dnsruby (1.61.5)
19
+ dnsruby (1.61.7)
20
20
  simpleidn (~> 0.1)
21
21
  docile (1.4.0)
22
- faker (2.18.0)
23
- i18n (>= 1.6, < 2)
24
22
  fasterer (0.9.0)
25
23
  colorize (~> 0.7)
26
24
  ruby_parser (>= 3.14.1)
27
- i18n (1.8.10)
28
- concurrent-ruby (~> 1.0)
25
+ ffaker (2.19.0)
29
26
  iniparse (1.5.0)
30
27
  json (2.5.1)
31
28
  kwalify (0.7.2)
@@ -35,7 +32,7 @@ GEM
35
32
  iniparse (~> 1.4)
36
33
  rexml (~> 3.2)
37
34
  parallel (1.20.1)
38
- parser (3.0.1.1)
35
+ parser (3.0.2.0)
39
36
  ast (~> 2.4.1)
40
37
  pry (0.13.1)
41
38
  coderay (~> 1.1)
@@ -43,13 +40,11 @@ GEM
43
40
  pry-byebug (3.9.0)
44
41
  byebug (~> 11.0)
45
42
  pry (~> 0.13.0)
46
- psych (3.3.2)
47
43
  rainbow (3.0.0)
48
- rake (13.0.3)
49
- reek (6.0.4)
44
+ rake (13.0.6)
45
+ reek (6.0.6)
50
46
  kwalify (~> 0.7.0)
51
47
  parser (~> 3.0.0)
52
- psych (~> 3.1)
53
48
  rainbow (>= 2.0, < 4.0)
54
49
  regexp_parser (2.1.1)
55
50
  rexml (3.2.5)
@@ -70,25 +65,25 @@ GEM
70
65
  diff-lcs (>= 1.2.0, < 2.0)
71
66
  rspec-support (~> 3.10.0)
72
67
  rspec-support (3.10.2)
73
- rubocop (1.16.1)
68
+ rubocop (1.20.0)
74
69
  parallel (~> 1.10)
75
70
  parser (>= 3.0.0.0)
76
71
  rainbow (>= 2.2.2, < 4.0)
77
72
  regexp_parser (>= 1.8, < 3.0)
78
73
  rexml
79
- rubocop-ast (>= 1.7.0, < 2.0)
74
+ rubocop-ast (>= 1.9.1, < 2.0)
80
75
  ruby-progressbar (~> 1.7)
81
76
  unicode-display_width (>= 1.4.0, < 3.0)
82
- rubocop-ast (1.7.0)
77
+ rubocop-ast (1.11.0)
83
78
  parser (>= 3.0.1.1)
84
- rubocop-performance (1.11.3)
79
+ rubocop-performance (1.11.5)
85
80
  rubocop (>= 1.7.0, < 2.0)
86
81
  rubocop-ast (>= 0.4.0)
87
82
  rubocop-rspec (2.4.0)
88
83
  rubocop (~> 1.0)
89
84
  rubocop-ast (>= 1.1.0)
90
85
  ruby-progressbar (1.11.0)
91
- ruby_parser (3.16.0)
86
+ ruby_parser (3.17.0)
92
87
  sexp_processor (~> 4.15, >= 4.15.1)
93
88
  sexp_processor (4.15.3)
94
89
  simplecov (0.17.1)
@@ -105,24 +100,24 @@ GEM
105
100
  unicode-display_width (2.0.0)
106
101
 
107
102
  PLATFORMS
108
- x86_64-darwin-19
103
+ x86_64-darwin-20
109
104
 
110
105
  DEPENDENCIES
111
- bundler (~> 2.2, >= 2.2.20)
112
- bundler-audit (~> 0.8.0)
106
+ bundler (~> 2.2, >= 2.2.27)
107
+ bundler-audit (~> 0.9.0.1)
113
108
  dns_mock!
114
- faker (~> 2.18)
115
109
  fasterer (~> 0.9.0)
110
+ ffaker (~> 2.19)
116
111
  overcommit (~> 0.58.0)
117
112
  pry-byebug (~> 3.9)
118
- rake (~> 13.0, >= 13.0.3)
119
- reek (~> 6.0, >= 6.0.4)
113
+ rake (~> 13.0, >= 13.0.6)
114
+ reek (~> 6.0, >= 6.0.6)
120
115
  rspec (~> 3.10)
121
116
  rspec-dns (~> 0.1.8)
122
- rubocop (~> 1.16, >= 1.16.1)
123
- rubocop-performance (~> 1.11, >= 1.11.3)
117
+ rubocop (~> 1.20)
118
+ rubocop-performance (~> 1.11, >= 1.11.5)
124
119
  rubocop-rspec (~> 2.4)
125
120
  simplecov (~> 0.17.1)
126
121
 
127
122
  BUNDLED WITH
128
- 2.2.20
123
+ 2.2.27
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Ruby DnsMock
1
+ # ![Ruby DnsMock - mimic any DNS records for your test environment and even more!](https://repository-images.githubusercontent.com/323097031/ba2a0780-df26-11eb-954b-5e3204587eb2)
2
2
 
3
3
  [![Maintainability](https://api.codeclimate.com/v1/badges/5ea9da61ef468b8ad4c4/maintainability)](https://codeclimate.com/github/mocktools/ruby-dns-mock/maintainability)
4
4
  [![Test Coverage](https://api.codeclimate.com/v1/badges/5ea9da61ef468b8ad4c4/test_coverage)](https://codeclimate.com/github/mocktools/ruby-dns-mock/test_coverage)
@@ -29,10 +29,11 @@
29
29
  ## Features
30
30
 
31
31
  - Ability to mimic any DNS records (`A`, `AAAA`, `CNAME`, `MX`, `NS`, `PTR`, `SOA` and `TXT`)
32
- - Zero runtime dependencies
32
+ - Automatically converts hostnames to RDNS/[Punycode](https://en.wikipedia.org/wiki/Punycode) representation
33
33
  - Lightweight UDP DNS mock server with dynamic/manual port assignment
34
34
  - Test framework agnostic (it's PORO, so you can use it outside of `RSpec`, `Test::Unit` or `MiniTest`)
35
35
  - Simple and intuitive DSL
36
+ - Only one runtime dependency
36
37
 
37
38
  ## Requirements
38
39
 
@@ -67,7 +68,7 @@ records = {
67
68
  ns: %w[ns1.domain.com ns2.domain.com],
68
69
  mx: %w[mx1.domain.com mx2.domain.com:50], # you can specify host(s) or host(s) with priority, use '.:0' for definition null MX record
69
70
  txt: %w[txt_record_1 txt_record_2],
70
- cname: 'some.domain.com',
71
+ cname: 'mañana.com', # you can specify hostname in UTF-8. It will be converted to xn--maana-pta.com automatically
71
72
  soa: [
72
73
  {
73
74
  mname: 'dns1.domain.com',
@@ -80,12 +81,12 @@ records = {
80
81
  }
81
82
  ]
82
83
  },
83
- '1.2.3.4' => {
84
+ '1.2.3.4' => { # You can define RDNS host address without lookup prefix. It will be converted to 4.3.2.1.in-addr.arpa automatically
84
85
  ptr: %w[domain_1.com domain_2.com]
85
86
  }
86
87
  }
87
88
 
88
- # Main DnsMock interface
89
+ # Public DnsMock interface
89
90
  # records:Hash, port:Integer, exception_if_not_found:Boolean
90
91
  # are optional params. By default creates dns mock server with
91
92
  # empty records. A free port for server will be randomly assigned
@@ -136,7 +137,7 @@ require 'dns_mock/test_framework/rspec'
136
137
 
137
138
  #### DnsMock RSpec helper
138
139
 
139
- Just add `DnsMock::TestFramework::RSpec::Helper` if you wanna use shortcut `dns_mock_server` for DnsMock server instance into your `RSpec.describe` blocks:
140
+ Just add `DnsMock::TestFramework::RSpec::Helper` if you wanna use shortcut `dns_mock_server` for DnsMock server instance inside of your `RSpec.describe` blocks:
140
141
 
141
142
  ```ruby
142
143
  # spec/support/config/dns_mock.rb
data/dns_mock.gemspec CHANGED
@@ -31,18 +31,20 @@ Gem::Specification.new do |spec|
31
31
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
32
  spec.require_paths = ['lib']
33
33
 
34
- spec.add_development_dependency 'bundler', '~> 2.2', '>= 2.2.20'
35
- spec.add_development_dependency 'bundler-audit', '~> 0.8.0'
36
- spec.add_development_dependency 'faker', '~> 2.18'
34
+ spec.add_runtime_dependency 'simpleidn', '~> 0.2.1'
35
+
36
+ spec.add_development_dependency 'bundler', '~> 2.2', '>= 2.2.27'
37
+ spec.add_development_dependency 'bundler-audit', '~> 0.9.0.1'
37
38
  spec.add_development_dependency 'fasterer', '~> 0.9.0'
39
+ spec.add_development_dependency 'ffaker', '~> 2.19'
38
40
  spec.add_development_dependency 'overcommit', '~> 0.58.0'
39
41
  spec.add_development_dependency 'pry-byebug', '~> 3.9'
40
- spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.3'
41
- spec.add_development_dependency 'reek', '~> 6.0', '>= 6.0.4'
42
+ spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.6'
43
+ spec.add_development_dependency 'reek', '~> 6.0', '>= 6.0.6'
42
44
  spec.add_development_dependency 'rspec', '~> 3.10'
43
45
  spec.add_development_dependency 'rspec-dns', '~> 0.1.8'
44
- spec.add_development_dependency 'rubocop', '~> 1.16', '>= 1.16.1'
45
- spec.add_development_dependency 'rubocop-performance', '~> 1.11', '>= 1.11.3'
46
+ spec.add_development_dependency 'rubocop', '~> 1.20'
47
+ spec.add_development_dependency 'rubocop-performance', '~> 1.11', '>= 1.11.5'
46
48
  spec.add_development_dependency 'rubocop-rspec', '~> 2.4'
47
49
  spec.add_development_dependency 'simplecov', '~> 0.17.1'
48
50
  end
data/lib/dns_mock/core.rb CHANGED
@@ -18,6 +18,11 @@ module DnsMock
18
18
  require_relative '../dns_mock/error/helper'
19
19
  end
20
20
 
21
+ module Representer
22
+ require_relative '../dns_mock/representer/punycode'
23
+ require_relative '../dns_mock/representer/rdns_lookup'
24
+ end
25
+
21
26
  module Record
22
27
  module Factory
23
28
  require_relative '../dns_mock/record/factory/base'
@@ -23,8 +23,13 @@ module DnsMock
23
23
  end
24
24
  end
25
25
 
26
- def initialize(dns_name = ::Resolv::DNS::Name, record_data:)
26
+ def initialize(
27
+ dns_name = ::Resolv::DNS::Name,
28
+ punycode_representer = DnsMock::Representer::Punycode,
29
+ record_data:
30
+ )
27
31
  @dns_name = dns_name
32
+ @punycode_representer = punycode_representer
28
33
  @record_data = record_data
29
34
  end
30
35
 
@@ -38,7 +43,7 @@ module DnsMock
38
43
 
39
44
  private
40
45
 
41
- attr_reader :dns_name, :record_data
46
+ attr_reader :dns_name, :punycode_representer, :record_data
42
47
 
43
48
  def record_type
44
49
  self.class.name.split('::').last.upcase
@@ -46,7 +51,7 @@ module DnsMock
46
51
 
47
52
  def create_dns_name(hostname)
48
53
  raise ::ArgumentError, "cannot interpret as DNS name: #{hostname}" unless hostname.is_a?(::String)
49
- dns_name.create("#{hostname}.")
54
+ dns_name.create("#{punycode_representer.call(hostname)}.")
50
55
  end
51
56
  end
52
57
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DnsMock
4
+ module Representer
5
+ Punycode = ::Class.new do
6
+ require 'simpleidn'
7
+
8
+ def self.call(hostname)
9
+ return hostname if hostname.ascii_only?
10
+
11
+ SimpleIDN.to_ascii(hostname)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DnsMock
4
+ module Representer
5
+ class RdnsLookup
6
+ IP_OCTET_GROUPS = /(\d+).(\d+).(\d+).(\d+)/.freeze
7
+ RDNS_LOOKUP_REPRESENTATION = '\4.\3.\2.\1.in-addr.arpa'
8
+
9
+ def self.call(host_address)
10
+ host_address.gsub(
11
+ DnsMock::Representer::RdnsLookup::IP_OCTET_GROUPS,
12
+ DnsMock::Representer::RdnsLookup::RDNS_LOOKUP_REPRESENTATION
13
+ )
14
+ end
15
+ end
16
+ end
17
+ end
@@ -6,8 +6,6 @@ module DnsMock
6
6
  include DnsMock::Error::Helper
7
7
 
8
8
  IP_ADDRESS_PATTERN = /\A((1\d|[1-9]|2[0-4])?\d|25[0-5])(\.\g<1>){3}\z/.freeze
9
- IP_OCTET_GROUPS = /(\d+).(\d+).(\d+).(\d+)/.freeze
10
- RDNS_LOOKUP_REPRESENTATION = '\4.\3.\2.\1.in-addr.arpa'
11
9
  TYPE_MAPPER = DnsMock::AVAILABLE_DNS_RECORD_TYPES.zip(
12
10
  [
13
11
  [DnsMock::Record::Builder::A, DnsMock::Record::Factory::A, ::Array],
@@ -27,7 +25,12 @@ module DnsMock
27
25
 
28
26
  attr_reader :records
29
27
 
30
- def initialize
28
+ def initialize(
29
+ punycode_representer = DnsMock::Representer::Punycode,
30
+ rdns_lookup_representer = DnsMock::Representer::RdnsLookup
31
+ )
32
+ @punycode_representer = punycode_representer
33
+ @rdns_lookup_representer = rdns_lookup_representer
31
34
  @records = {}
32
35
  end
33
36
 
@@ -35,7 +38,7 @@ module DnsMock
35
38
  raise_unless(DnsMock::Error::ArgumentType.new(records_to_build.class), records_to_build.is_a?(::Hash))
36
39
  records_to_build.each do |hostname, dns_records|
37
40
  raise_unless(DnsMock::Error::RecordHostType.new(hostname, hostname.class), hostname.is_a?(::String))
38
- records[rdns_lookup_prefix(hostname)] = dns_records.each_with_object({}) do |(record_type, records_data), records_instances_by_type|
41
+ records[representer(hostname)] = dns_records.each_with_object({}) do |(record_type, records_data), records_instances_by_type|
39
42
  records_instances_by_type[record_type] = build_records_instances_by_type(record_type, records_data)
40
43
  end
41
44
  end
@@ -45,13 +48,12 @@ module DnsMock
45
48
 
46
49
  private
47
50
 
48
- def rdns_lookup_prefix(hostname)
49
- return hostname unless hostname[DnsMock::Server::RecordsDictionaryBuilder::IP_ADDRESS_PATTERN]
51
+ attr_reader :punycode_representer, :rdns_lookup_representer
50
52
 
51
- hostname.gsub(
52
- DnsMock::Server::RecordsDictionaryBuilder::IP_OCTET_GROUPS,
53
- DnsMock::Server::RecordsDictionaryBuilder::RDNS_LOOKUP_REPRESENTATION
54
- )
53
+ def representer(hostname)
54
+ return rdns_lookup_representer.call(hostname) if hostname[DnsMock::Server::RecordsDictionaryBuilder::IP_ADDRESS_PATTERN]
55
+
56
+ punycode_representer.call(hostname)
55
57
  end
56
58
 
57
59
  def build_records_instances_by_type(record_type, records_to_build)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DnsMock
4
- VERSION = '1.3.0'
4
+ VERSION = '1.4.2'
5
5
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dns_mock
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladislav Trotsenko
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-14 00:00:00.000000000 Z
11
+ date: 2021-09-04 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: simpleidn
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.2.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.2.1
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -19,7 +33,7 @@ dependencies:
19
33
  version: '2.2'
20
34
  - - ">="
21
35
  - !ruby/object:Gem::Version
22
- version: 2.2.20
36
+ version: 2.2.27
23
37
  type: :development
24
38
  prerelease: false
25
39
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,49 +43,49 @@ dependencies:
29
43
  version: '2.2'
30
44
  - - ">="
31
45
  - !ruby/object:Gem::Version
32
- version: 2.2.20
46
+ version: 2.2.27
33
47
  - !ruby/object:Gem::Dependency
34
48
  name: bundler-audit
35
49
  requirement: !ruby/object:Gem::Requirement
36
50
  requirements:
37
51
  - - "~>"
38
52
  - !ruby/object:Gem::Version
39
- version: 0.8.0
53
+ version: 0.9.0.1
40
54
  type: :development
41
55
  prerelease: false
42
56
  version_requirements: !ruby/object:Gem::Requirement
43
57
  requirements:
44
58
  - - "~>"
45
59
  - !ruby/object:Gem::Version
46
- version: 0.8.0
60
+ version: 0.9.0.1
47
61
  - !ruby/object:Gem::Dependency
48
- name: faker
62
+ name: fasterer
49
63
  requirement: !ruby/object:Gem::Requirement
50
64
  requirements:
51
65
  - - "~>"
52
66
  - !ruby/object:Gem::Version
53
- version: '2.18'
67
+ version: 0.9.0
54
68
  type: :development
55
69
  prerelease: false
56
70
  version_requirements: !ruby/object:Gem::Requirement
57
71
  requirements:
58
72
  - - "~>"
59
73
  - !ruby/object:Gem::Version
60
- version: '2.18'
74
+ version: 0.9.0
61
75
  - !ruby/object:Gem::Dependency
62
- name: fasterer
76
+ name: ffaker
63
77
  requirement: !ruby/object:Gem::Requirement
64
78
  requirements:
65
79
  - - "~>"
66
80
  - !ruby/object:Gem::Version
67
- version: 0.9.0
81
+ version: '2.19'
68
82
  type: :development
69
83
  prerelease: false
70
84
  version_requirements: !ruby/object:Gem::Requirement
71
85
  requirements:
72
86
  - - "~>"
73
87
  - !ruby/object:Gem::Version
74
- version: 0.9.0
88
+ version: '2.19'
75
89
  - !ruby/object:Gem::Dependency
76
90
  name: overcommit
77
91
  requirement: !ruby/object:Gem::Requirement
@@ -109,7 +123,7 @@ dependencies:
109
123
  version: '13.0'
110
124
  - - ">="
111
125
  - !ruby/object:Gem::Version
112
- version: 13.0.3
126
+ version: 13.0.6
113
127
  type: :development
114
128
  prerelease: false
115
129
  version_requirements: !ruby/object:Gem::Requirement
@@ -119,7 +133,7 @@ dependencies:
119
133
  version: '13.0'
120
134
  - - ">="
121
135
  - !ruby/object:Gem::Version
122
- version: 13.0.3
136
+ version: 13.0.6
123
137
  - !ruby/object:Gem::Dependency
124
138
  name: reek
125
139
  requirement: !ruby/object:Gem::Requirement
@@ -129,7 +143,7 @@ dependencies:
129
143
  version: '6.0'
130
144
  - - ">="
131
145
  - !ruby/object:Gem::Version
132
- version: 6.0.4
146
+ version: 6.0.6
133
147
  type: :development
134
148
  prerelease: false
135
149
  version_requirements: !ruby/object:Gem::Requirement
@@ -139,7 +153,7 @@ dependencies:
139
153
  version: '6.0'
140
154
  - - ">="
141
155
  - !ruby/object:Gem::Version
142
- version: 6.0.4
156
+ version: 6.0.6
143
157
  - !ruby/object:Gem::Dependency
144
158
  name: rspec
145
159
  requirement: !ruby/object:Gem::Requirement
@@ -174,20 +188,14 @@ dependencies:
174
188
  requirements:
175
189
  - - "~>"
176
190
  - !ruby/object:Gem::Version
177
- version: '1.16'
178
- - - ">="
179
- - !ruby/object:Gem::Version
180
- version: 1.16.1
191
+ version: '1.20'
181
192
  type: :development
182
193
  prerelease: false
183
194
  version_requirements: !ruby/object:Gem::Requirement
184
195
  requirements:
185
196
  - - "~>"
186
197
  - !ruby/object:Gem::Version
187
- version: '1.16'
188
- - - ">="
189
- - !ruby/object:Gem::Version
190
- version: 1.16.1
198
+ version: '1.20'
191
199
  - !ruby/object:Gem::Dependency
192
200
  name: rubocop-performance
193
201
  requirement: !ruby/object:Gem::Requirement
@@ -197,7 +205,7 @@ dependencies:
197
205
  version: '1.11'
198
206
  - - ">="
199
207
  - !ruby/object:Gem::Version
200
- version: 1.11.3
208
+ version: 1.11.5
201
209
  type: :development
202
210
  prerelease: false
203
211
  version_requirements: !ruby/object:Gem::Requirement
@@ -207,7 +215,7 @@ dependencies:
207
215
  version: '1.11'
208
216
  - - ">="
209
217
  - !ruby/object:Gem::Version
210
- version: 1.11.3
218
+ version: 1.11.5
211
219
  - !ruby/object:Gem::Dependency
212
220
  name: rubocop-rspec
213
221
  requirement: !ruby/object:Gem::Requirement
@@ -299,6 +307,8 @@ files:
299
307
  - lib/dns_mock/record/factory/ptr.rb
300
308
  - lib/dns_mock/record/factory/soa.rb
301
309
  - lib/dns_mock/record/factory/txt.rb
310
+ - lib/dns_mock/representer/punycode.rb
311
+ - lib/dns_mock/representer/rdns_lookup.rb
302
312
  - lib/dns_mock/response/answer.rb
303
313
  - lib/dns_mock/response/message.rb
304
314
  - lib/dns_mock/server.rb
@@ -331,8 +341,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
331
341
  - !ruby/object:Gem::Version
332
342
  version: '0'
333
343
  requirements: []
334
- rubyforge_project:
335
- rubygems_version: 2.7.3
344
+ rubygems_version: 3.2.20
336
345
  signing_key:
337
346
  specification_version: 4
338
347
  summary: dns_mock