dns_mock 1.3.1 → 1.4.3

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: cb90f7f7c21ba2fff7de8259e0ac994a0781c212d7de77c05eebbe209b2f7f4c
4
- data.tar.gz: e6ac11bad8d86f035063f2b6ca09c681a66988a647c7051a2a80de5b3f0d0ff9
3
+ metadata.gz: 4933cef6e91f5f8ab417d85c8c13c66dd4e19569706f62d7c87b1a237688d2c1
4
+ data.tar.gz: fe2d61a447e7113ef074e5084209484372b10e6df56671423a1e7d4dafea1873
5
5
  SHA512:
6
- metadata.gz: a50714bf62ee1976954cd4cd351399b29d67d240a89e4da379e8da4a5b33c12f323bbed706e5233f23d9edafa609fce52a0f6f3454aab414254368a5069a552f
7
- data.tar.gz: 1d2ad40b18259ba6132215bb486dd2d8e9c0e7cf1df195b1538589c0d8fbc034f2436f3d062fed9823e61df54c50c4c958340f9b8e4a04093044ce6bc708ded9
6
+ metadata.gz: 962f933bf2c18aedd85f33f3b4cf9b4e568e018651d87e7463002eac6a05e9f55c61c751f150a989c54c0ca891a13f164928d0945ae64aee04e9219fa8ba3538
7
+ data.tar.gz: 8473f6cd8236855da9cec38daa37a8aa4d3dd441962802c9bf80a2981ea3ef0fa65bffe80985677a6ac9181c5d0908e46769d8f39d3b25af7c0b44a2e4776ea4
data/.codeclimate.yml CHANGED
@@ -7,7 +7,7 @@ checks:
7
7
  plugins:
8
8
  rubocop:
9
9
  enabled: true
10
- channel: rubocop-1-18
10
+ channel: rubocop-1-22
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
@@ -139,6 +139,18 @@ Style/MultilineInPatternThen:
139
139
  Style/QuotedSymbols:
140
140
  Enabled: true
141
141
 
142
+ Style/RedundantSelfAssignmentBranch:
143
+ Enabled: true
144
+
145
+ Style/NumberedParameters:
146
+ Enabled: true
147
+
148
+ Style/NumberedParametersLimit:
149
+ Enabled: true
150
+
151
+ Style/SelectByRegexp:
152
+ Enabled: true
153
+
142
154
  Layout/LineLength:
143
155
  Max: 150
144
156
 
@@ -242,9 +254,24 @@ Lint/TripleQuotes:
242
254
  Lint/EmptyInPattern:
243
255
  Enabled: true
244
256
 
257
+ Lint/AmbiguousRange:
258
+ Enabled: true
259
+
260
+ Lint/AmbiguousOperatorPrecedence:
261
+ Enabled: true
262
+
263
+ Lint/IncompatibleIoSelectWithFiberScheduler:
264
+ Enabled: true
265
+
266
+ Lint/RequireRelativeSelfPath:
267
+ Enabled: true
268
+
245
269
  Gemspec/DateAssignment:
246
270
  Enabled: true
247
271
 
272
+ Security/IoMethods:
273
+ Enabled: true
274
+
248
275
  Performance/AncestorsInclude:
249
276
  Enabled: true
250
277
 
@@ -328,3 +355,9 @@ RSpec/IdenticalEqualityAssertion:
328
355
 
329
356
  RSpec/Rails/AvoidSetupHook:
330
357
  Enabled: true
358
+
359
+ RSpec/ExcessiveDocstringSpacing:
360
+ Enabled: true
361
+
362
+ RSpec/SubjectDeclaration:
363
+ Enabled: true
data/CHANGELOG.md CHANGED
@@ -2,6 +2,90 @@
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.3] - 2021-10-07
6
+
7
+ ### Updated
8
+
9
+ - Updated gem development dependencies
10
+ - Updated gem version
11
+
12
+ ## [1.4.2] - 2021-09-04
13
+
14
+ ### Updated
15
+
16
+ - Updated gem development dependencies
17
+ - Updated gem version
18
+
19
+ ## [1.4.1] - 2021-08-16
20
+
21
+ ### Updated
22
+
23
+ - Updated gem development dependencies
24
+ - Updated gem version
25
+
26
+ ### Changed
27
+
28
+ - `faker` to `ffaker` development dependency
29
+
30
+ ## [1.4.0] - 2021-07-13
31
+
32
+ ### Added
33
+
34
+ - Added ability to use internationalized hostnames. All hostnames in UTF-8 will be represented as [Punycode](https://en.wikipedia.org/wiki/Punycode)
35
+ - Added `simpleidn` as runtime dependency
36
+ - Added `DnsMock::Representer::Punycode`, tests
37
+
38
+ ```ruby
39
+ records = {
40
+ 'mañana.com' => {
41
+ mx: %w[másletras.mañana.com]
42
+ }
43
+ }
44
+
45
+ DnsMock.start_server(port: 5300, records: records)
46
+ ```
47
+
48
+ ```bash
49
+ dig @localhost -p 5300 MX xn--maana-pta.com
50
+ ```
51
+
52
+ ```
53
+ ; <<>> DiG 9.10.6 <<>> @localhost -p 5300 MX xn--maana-pta.com
54
+ ; (2 servers found)
55
+ ;; global options: +cmd
56
+ ;; Got answer:
57
+ ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4612
58
+ ;; flags: rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
59
+ ;; WARNING: recursion requested but not available
60
+
61
+ ;; OPT PSEUDOSECTION:
62
+ ; EDNS: version: 0, flags:; udp: 4096
63
+ ;; QUESTION SECTION:
64
+ ;xn--maana-pta.com. IN MX
65
+
66
+ ;; ANSWER SECTION:
67
+ xn--maana-pta.com. 1 IN MX 10 xn--msletras-8ya.xn--maana-pta.com.
68
+
69
+ ;; Query time: 0 msec
70
+ ;; SERVER: 127.0.0.1#5300(127.0.0.1)
71
+ ;; WHEN: Tue Jul 13 15:38:47 EEST 2021
72
+ ;; MSG SIZE rcvd: 79
73
+ ```
74
+
75
+ ### Changed
76
+
77
+ - Refactored `DnsMock::Representer::RdnsLookup`, tests
78
+ - Updated `DnsMock::Record::Factory::Base`
79
+ - Updated `DnsMock::Server::RecordsDictionaryBuilder`, tests
80
+ - Updated `DnsMock::Record::Factory::Cname`, tests
81
+ - Updated `DnsMock::Record::Factory::Mx`, tests
82
+ - Updated `DnsMock::Record::Factory::Ns`, tests
83
+ - Updated `DnsMock::Record::Factory::Ptr`, tests
84
+ - Updated `DnsMock::Record::Factory::Soa`, tests
85
+ - Updated `DnsMock::ContextGeneratorHelper`, tests
86
+ - Updated reek config
87
+ - Updated gem documentation, version
88
+
5
89
  ## [1.3.1] - 2021-07-07
6
90
 
7
91
  ### Changed
@@ -12,11 +96,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
12
96
 
13
97
  ## [1.3.0] - 2021-06-14
14
98
 
15
- Detecting random available port via OS features. Thanks [@ioquatix](https://github.com/ioquatix) for [suggestion](https://github.com/mocktools/ruby-dns-mock/issues/42) 🚀
99
+ ### Added
100
+
101
+ - Detecting random available port via OS features. Thanks [@ioquatix](https://github.com/ioquatix) for [suggestion](https://github.com/mocktools/ruby-dns-mock/issues/42) 🚀
16
102
 
17
103
  ### Removed
18
104
 
19
- - Removed `DnsMock::Server::RandomAvailablePort`
105
+ - Removed `DnsMock::Server::RandomAvailablePort`, tests
20
106
 
21
107
  ### Changed
22
108
 
@@ -61,9 +147,11 @@ Detecting random available port via OS features. Thanks [@ioquatix](https://gith
61
147
 
62
148
  ## [1.2.0] - 2021-02-04
63
149
 
64
- ### Ability to specify MX record priority
150
+ ### Added
65
151
 
66
- 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.
152
+ - Ability to specify custom priority of MX record if it needed
153
+
154
+ 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.
67
155
 
68
156
  ```ruby
69
157
  records = {
@@ -96,9 +184,9 @@ example.com. 1 IN MX 40 mx3.domain.com.
96
184
 
97
185
  ## [1.1.0] - 2021-02-01
98
186
 
99
- ### RSpec native support
187
+ ### Added
100
188
 
101
- Added DnsMock helper which can simplify integration with RSpec.
189
+ - RSpec native support. DnsMock helper help you to simplify integration with RSpec
102
190
 
103
191
  ```ruby
104
192
  # spec/support/config/dns_mock.rb
@@ -130,9 +218,11 @@ end
130
218
 
131
219
  ## [1.0.0] - 2021-01-29
132
220
 
133
- ### Configurable record not found behaviour
221
+ ### Added
222
+
223
+ - Configurable strategy for record not found case
134
224
 
135
- 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:
225
+ By default it won't raise an exception when DNS record not found in mocked records dictionary:
136
226
 
137
227
  ```ruby
138
228
  DnsMock.start_server(port: 5300)
@@ -178,13 +268,15 @@ DnsMock.start_server(exception_if_not_found: true)
178
268
 
179
269
  ### Fixed
180
270
 
181
- Fixed RDNS lookup representatin for IP address in PTR record feature.
271
+ - RDNS lookup representatin for IP address in PTR record feature.
182
272
 
183
273
  ## [0.2.0] - 2021-01-26
184
274
 
185
- ### PTR record support
275
+ ### Added
276
+
277
+ - PTR record support. Ability to mock PTR records
186
278
 
187
- 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.
279
+ Please note, you can define host address without RDNS lookup prefix (`.in-addr.arpa`). `DnsMock` will do it for you.
188
280
 
189
281
  ```ruby
190
282
  records = {
@@ -216,6 +308,6 @@ dig @localhost -p 5300 -x 1.2.3.4
216
308
 
217
309
  ## [0.1.0] - 2021-01-19
218
310
 
219
- ### First release
311
+ ### Added
220
312
 
221
- Implemented first version of `DnsMock`. Thanks [@le0pard](https://github.com/le0pard) for idea & support 🚀
313
+ - 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.1)
4
+ dns_mock (1.4.3)
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
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.20.0)
29
26
  iniparse (1.5.0)
30
27
  json (2.5.1)
31
28
  kwalify (0.7.2)
@@ -34,8 +31,8 @@ GEM
34
31
  childprocess (>= 0.6.3, < 5)
35
32
  iniparse (~> 1.4)
36
33
  rexml (~> 3.2)
37
- parallel (1.20.1)
38
- parser (3.0.1.1)
34
+ parallel (1.21.0)
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.4)
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,24 @@ 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.18.3)
68
+ rubocop (1.22.1)
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.12.0, < 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.12.0)
83
78
  parser (>= 3.0.1.1)
84
- rubocop-performance (1.11.4)
79
+ rubocop-performance (1.11.5)
85
80
  rubocop (>= 1.7.0, < 2.0)
86
81
  rubocop-ast (>= 0.4.0)
87
- rubocop-rspec (2.4.0)
88
- rubocop (~> 1.0)
89
- rubocop-ast (>= 1.1.0)
82
+ rubocop-rspec (2.5.0)
83
+ rubocop (~> 1.19)
90
84
  ruby-progressbar (1.11.0)
91
- ruby_parser (3.16.0)
85
+ ruby_parser (3.17.0)
92
86
  sexp_processor (~> 4.15, >= 4.15.1)
93
87
  sexp_processor (4.15.3)
94
88
  simplecov (0.17.1)
@@ -101,28 +95,28 @@ GEM
101
95
  thor (1.1.0)
102
96
  unf (0.1.4)
103
97
  unf_ext
104
- unf_ext (0.0.7.7)
105
- unicode-display_width (2.0.0)
98
+ unf_ext (0.0.8)
99
+ unicode-display_width (2.1.0)
106
100
 
107
101
  PLATFORMS
108
102
  x86_64-darwin-20
109
103
 
110
104
  DEPENDENCIES
111
- bundler (~> 2.2, >= 2.2.22)
112
- bundler-audit (~> 0.8.0)
105
+ bundler (~> 2.2, >= 2.2.28)
106
+ bundler-audit (~> 0.9.0.1)
113
107
  dns_mock!
114
- faker (~> 2.18)
115
108
  fasterer (~> 0.9.0)
109
+ ffaker (~> 2.20)
116
110
  overcommit (~> 0.58.0)
117
111
  pry-byebug (~> 3.9)
118
- rake (~> 13.0, >= 13.0.4)
119
- reek (~> 6.0, >= 6.0.4)
112
+ rake (~> 13.0, >= 13.0.6)
113
+ reek (~> 6.0, >= 6.0.6)
120
114
  rspec (~> 3.10)
121
115
  rspec-dns (~> 0.1.8)
122
- rubocop (~> 1.18, >= 1.18.3)
123
- rubocop-performance (~> 1.11, >= 1.11.4)
124
- rubocop-rspec (~> 2.4)
116
+ rubocop (~> 1.22, >= 1.22.1)
117
+ rubocop-performance (~> 1.11, >= 1.11.5)
118
+ rubocop-rspec (~> 2.5)
125
119
  simplecov (~> 0.17.1)
126
120
 
127
121
  BUNDLED WITH
128
- 2.2.22
122
+ 2.2.28
data/README.md CHANGED
@@ -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',
@@ -85,7 +86,7 @@ records = {
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
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- lib = File.expand_path('lib', __dir__)
3
+ lib = ::File.expand_path('lib', __dir__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
  require 'dns_mock/version'
6
6
 
@@ -28,21 +28,23 @@ Gem::Specification.new do |spec|
28
28
 
29
29
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
30
30
  spec.bindir = 'exe'
31
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
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.22'
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.28'
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.20'
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.4'
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.18', '>= 1.18.3'
45
- spec.add_development_dependency 'rubocop-performance', '~> 1.11', '>= 1.11.4'
46
- spec.add_development_dependency 'rubocop-rspec', '~> 2.4'
46
+ spec.add_development_dependency 'rubocop', '~> 1.22', '>= 1.22.1'
47
+ spec.add_development_dependency 'rubocop-performance', '~> 1.11', '>= 1.11.5'
48
+ spec.add_development_dependency 'rubocop-rspec', '~> 2.5'
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'
@@ -14,7 +14,7 @@ module DnsMock
14
14
  record_data, custom_record_preference = parse_mx_record_data(record_data)
15
15
  target_factory.new(
16
16
  record_data: [
17
- custom_record_preference&.to_i || record_preference * DnsMock::Record::Builder::Mx::RECORD_PREFERENCE_STEP,
17
+ custom_record_preference&.to_i || (record_preference * DnsMock::Record::Builder::Mx::RECORD_PREFERENCE_STEP),
18
18
  record_data
19
19
  ]
20
20
  ).create
@@ -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.1'
4
+ VERSION = '1.4.3'
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.1
4
+ version: 1.4.3
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-07-07 00:00:00.000000000 Z
11
+ date: 2021-10-07 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.22
36
+ version: 2.2.28
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.22
46
+ version: 2.2.28
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.20'
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.20'
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.4
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.4
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,20 @@ dependencies:
174
188
  requirements:
175
189
  - - "~>"
176
190
  - !ruby/object:Gem::Version
177
- version: '1.18'
191
+ version: '1.22'
178
192
  - - ">="
179
193
  - !ruby/object:Gem::Version
180
- version: 1.18.3
194
+ version: 1.22.1
181
195
  type: :development
182
196
  prerelease: false
183
197
  version_requirements: !ruby/object:Gem::Requirement
184
198
  requirements:
185
199
  - - "~>"
186
200
  - !ruby/object:Gem::Version
187
- version: '1.18'
201
+ version: '1.22'
188
202
  - - ">="
189
203
  - !ruby/object:Gem::Version
190
- version: 1.18.3
204
+ version: 1.22.1
191
205
  - !ruby/object:Gem::Dependency
192
206
  name: rubocop-performance
193
207
  requirement: !ruby/object:Gem::Requirement
@@ -197,7 +211,7 @@ dependencies:
197
211
  version: '1.11'
198
212
  - - ">="
199
213
  - !ruby/object:Gem::Version
200
- version: 1.11.4
214
+ version: 1.11.5
201
215
  type: :development
202
216
  prerelease: false
203
217
  version_requirements: !ruby/object:Gem::Requirement
@@ -207,21 +221,21 @@ dependencies:
207
221
  version: '1.11'
208
222
  - - ">="
209
223
  - !ruby/object:Gem::Version
210
- version: 1.11.4
224
+ version: 1.11.5
211
225
  - !ruby/object:Gem::Dependency
212
226
  name: rubocop-rspec
213
227
  requirement: !ruby/object:Gem::Requirement
214
228
  requirements:
215
229
  - - "~>"
216
230
  - !ruby/object:Gem::Version
217
- version: '2.4'
231
+ version: '2.5'
218
232
  type: :development
219
233
  prerelease: false
220
234
  version_requirements: !ruby/object:Gem::Requirement
221
235
  requirements:
222
236
  - - "~>"
223
237
  - !ruby/object:Gem::Version
224
- version: '2.4'
238
+ version: '2.5'
225
239
  - !ruby/object:Gem::Dependency
226
240
  name: simplecov
227
241
  requirement: !ruby/object:Gem::Requirement
@@ -299,6 +313,8 @@ files:
299
313
  - lib/dns_mock/record/factory/ptr.rb
300
314
  - lib/dns_mock/record/factory/soa.rb
301
315
  - lib/dns_mock/record/factory/txt.rb
316
+ - lib/dns_mock/representer/punycode.rb
317
+ - lib/dns_mock/representer/rdns_lookup.rb
302
318
  - lib/dns_mock/response/answer.rb
303
319
  - lib/dns_mock/response/message.rb
304
320
  - lib/dns_mock/server.rb