dns_mock 1.3.0 → 1.4.2

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
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