dns_mock 1.3.1 → 1.4.3

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