lita-dig 0.6.0 → 1.0.0

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
  SHA1:
3
- metadata.gz: dd450053b2cc6687b35f8e825832b880c97f2d68
4
- data.tar.gz: 2a15a7d2abca1bb1f5bc984f16ce7b539846c8fc
3
+ metadata.gz: 5de3a41ed27249f73a9315e60d701d2f807387c5
4
+ data.tar.gz: 76aa3b30845a86948f8f13dcba372b63600a9917
5
5
  SHA512:
6
- metadata.gz: 993da854a9d85a80f8e4d22b23060d0aa385372e8d2b0ecc44ac5537499f6ec01cb0516948754274b68b62515e90c0031c54a339a62b6f23287a5c594c7c3ed1
7
- data.tar.gz: bb1486f720ac3c07c34e13d232f87b52f9fbfa06f53046437c6f82d5af22a65d987d67a63f0f93e87eba1466b259a617e316a12ed6759b45f2260fb293a03e83
6
+ metadata.gz: 5d446145c9446119a844048ecc48dd16573a6085ef2f9ea0fe754fc11461cd8f70a6b9e27e32ea66f9ec5fed0b9694c1fa4ce883587ce2fe91848d58e49fb10a
7
+ data.tar.gz: 902402a6643c66864c223572432deb1acb63b395f3fc7d08eb0c127f168debdc07efb57a0957a726e88f06a1f6ede8a4d085c65c7e3c9820cd9fba47a0e9bbc7
data/.gitignore CHANGED
@@ -1,5 +1,6 @@
1
1
  *.gem
2
2
  *.rbc
3
+ *.swp
3
4
  .bundle
4
5
  .config
5
6
  .yardoc
@@ -1,9 +1,3 @@
1
- ClassLength:
2
- Max: 200
3
-
4
- CyclomaticComplexity:
5
- Max: 75
6
-
7
1
  Documentation:
8
2
  Exclude:
9
3
  - lib/lita/handlers/dig.rb
@@ -11,6 +5,3 @@ Documentation:
11
5
  FileName:
12
6
  Exclude:
13
7
  - lib/lita-dig.rb
14
-
15
- MethodLength:
16
- Max: 200
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
data/Rakefile CHANGED
@@ -3,6 +3,6 @@ require 'rspec/core/rake_task'
3
3
  require 'rubocop/rake_task'
4
4
 
5
5
  RSpec::Core::RakeTask.new(:spec)
6
- Rubocop::RakeTask.new(:rubocop)
6
+ RuboCop::RakeTask.new(:rubocop)
7
7
 
8
8
  task default: [:spec, :rubocop]
@@ -1,8 +1,19 @@
1
1
  module Lita
2
2
  module Handlers
3
3
  class Dig < Handler
4
+ DNS_TYPES = %w(a ns md cname soa mb mg mr null wks ptr hinfo minfo
5
+ mx txt rp afsdb x25 isdn rt nsap nsapptr sig key px
6
+ gpos aaaa loc nxt eid nimloc srv atma naptr kx cert
7
+ dname opt ds sshfp rrsig nsec dnskey uinfo uid gid
8
+ unspec tkey tsig ixfr axfr mailb maila any)
9
+
4
10
  route(
5
- /^dig\s(\S+)(\s\+short)?$/,
11
+ /^dig
12
+ (?:\s\@)?(?<resolver>\S+)?
13
+ \s(?<record>\S+)
14
+ (?<type>\s\w+)?
15
+ (?<short>\s\+short)?$
16
+ /x,
6
17
  :resolve,
7
18
  command: true,
8
19
  help: {
@@ -10,182 +21,20 @@ module Lita
10
21
  }
11
22
  )
12
23
 
13
- route(
14
- /^dig\s(?!\@)(\S+)\s(\S+)$/,
15
- :resolve_type,
16
- command: true,
17
- help: {
18
- t('help.resolve_type.syntax') => t('help.resolve_type.desc')
19
- }
20
- )
21
-
22
- route(
23
- /^dig\s\@(\S+)\s(\S+)(\s\+short)?$/,
24
- :resolve_svr,
25
- command: true,
26
- help: {
27
- t('help.resolve_svr.syntax') => t('help.resolve_svr.desc')
28
- }
29
- )
30
-
31
- route(
32
- /^dig\s\@(\S+)\s(\S+)\s(\S+)$/,
33
- :resolve_svr_type,
34
- command: true,
35
- help: {
36
- t('help.resolve_svr_type.syntax') => t('help.resolve_svr_type.desc')
37
- }
38
- )
39
-
40
24
  def resolve(response)
41
- name = response.matches[0][0]
42
- if response.matches[0][1] == ' +short'
43
- response.reply(format_lookup_short(lookup(name, 'a')))
44
- else
45
- response.reply(format_lookup(lookup(name, 'a')))
46
- end
47
- end
48
-
49
- def resolve_type(response)
50
- name = response.matches[0][0]
51
- type = response.matches[0][1]
52
- response.reply(format_lookup(lookup(name, type))) \
53
- unless type == '+short'
54
- end
55
-
56
- def resolve_svr(response)
57
- resolver = response.matches[0][0]
58
- name = response.matches[0][1]
59
- if response.matches[0][2] == ' +short'
60
- response.reply(format_lookup_short(lookup(name, 'a', resolver)))
61
- else
62
- response.reply(format_lookup(lookup(name, 'a', resolver)))
63
- end
64
- end
65
-
66
- def resolve_svr_type(response)
67
- resolver = response.matches[0][0]
68
- name = response.matches[0][1]
69
- type = response.matches[0][2]
70
- response.reply(format_lookup(lookup(name, type, resolver))) \
71
- unless type == '+short'
25
+ resolver = response.match_data['resolver'] || '8.8.8.8'
26
+ record = response.match_data['record']
27
+ type = (response.match_data['type'] || 'a').strip
28
+ short = response.match_data['short']
29
+ result = lookup(record, type, resolver)
30
+ response.reply(format_lookup(result, short))
72
31
  end
73
32
 
74
33
  private
75
34
 
76
35
  def lookup(argument, type, server = nil)
77
- case type
78
- when 'a', 'A'
79
- type = Net::DNS::A
80
- when 'ns', 'NS'
81
- type = Net::DNS::NS
82
- when 'md', 'MD'
83
- type = Net::DNS::MD
84
- when 'cname', 'CNAME'
85
- type = Net::DNS::CNAME
86
- when 'soa', 'SOA'
87
- type = Net::DNS::SOA
88
- when 'mb', 'MB'
89
- type = Net::DNS::MB
90
- when 'mg', 'MG'
91
- type = Net::DNS::MG
92
- when 'mr', 'MR'
93
- type = Net::DNS::MR
94
- when 'null', 'NULL'
95
- type = Net::DNS::NULL
96
- when 'wks', 'WKS'
97
- type = Net::DNS::WKS
98
- when 'ptr', 'PTR'
99
- type = Net::DNS::PTR
100
- when 'hinfo', 'HINFO'
101
- type = Net::DNS::HINFO
102
- when 'minfo', 'MINFO'
103
- type = Net::DNS::MINFO
104
- when 'mx', 'MX'
105
- type = Net::DNS::MX
106
- when 'txt', 'TXT'
107
- type = Net::DNS::TXT
108
- when 'rp', 'RP'
109
- type = Net::DNS::RP
110
- when 'afsdb', 'AFSDB'
111
- type = Net::DNS::AFSDB
112
- when 'x25', 'X25'
113
- type = Net::DNS::X25
114
- when 'isdn', 'ISDN'
115
- type = Net::DNS::ISDN
116
- when 'rt', 'RT'
117
- type = Net::DNS::RT
118
- when 'nsap', 'NSAP'
119
- type = Net::DNS::NSAP
120
- when 'nsapptr', 'NSAPPTR'
121
- type = Net::DNS::NSAPPTR
122
- when 'sig', 'SIG'
123
- type = Net::DNS::SIG
124
- when 'key', 'KEY'
125
- type = Net::DNS::KEY
126
- when 'px', 'PX'
127
- type = Net::DNS::PX
128
- when 'gpos', 'GPOS'
129
- type = Net::DNS::GPOS
130
- when 'aaaa', 'AAAA'
131
- type = Net::DNS::AAAA
132
- when 'loc', 'LOC'
133
- type = Net::DNS::LOC
134
- when 'nxt', 'NXT'
135
- type = Net::DNS::NXT
136
- when 'eid', 'EID'
137
- type = Net::DNS::EID
138
- when 'nimloc', 'NIMLOC'
139
- type = Net::DNS::NIMLOC
140
- when 'srv', 'SRV'
141
- type = Net::DNS::SRV
142
- when 'atma', 'ATMA'
143
- type = Net::DNS::ATMA
144
- when 'naptr', 'NAPTR'
145
- type = Net::DNS::NAPTR
146
- when 'kx', 'KX'
147
- type = Net::DNS::KX
148
- when 'cert', 'CERT'
149
- type = Net::DNS::CERT
150
- when 'dname', 'DNAME'
151
- type = Net::DNS::DNAME
152
- when 'opt', 'OPT'
153
- type = Net::DNS::OPT
154
- when 'ds', 'DS'
155
- type = Net::DNS::DS
156
- when 'sshfp', 'SSHFP'
157
- type = Net::DNS::SSHFP
158
- when 'rrsig', 'RRSIG'
159
- type = Net::DNS::RRSIG
160
- when 'nsec', 'NSEC'
161
- type = Net::DNS::NSEC
162
- when 'dnskey', 'DNSKEY'
163
- type = Net::DNS::DNSKEY
164
- when 'uinfo', 'UINFO'
165
- type = Net::DNS::UINFO
166
- when 'uid', 'UID'
167
- type = Net::DNS::UID
168
- when 'gid', 'GID'
169
- type = Net::DNS::GID
170
- when 'unspec', 'UNSPEC'
171
- type = Net::DNS::UNSPEC
172
- when 'tkey', 'TKEY'
173
- type = Net::DNS::TKEY
174
- when 'tsig', 'TSIG'
175
- type = Net::DNS::TSIG
176
- when 'ixfr', 'IXFR'
177
- type = Net::DNS::IXFR
178
- when 'axfr', 'AXFR'
179
- type = Net::DNS::AXFR
180
- when 'mailb', 'MAILB'
181
- type = Net::DNS::MAILB
182
- when 'maila', 'MAILA'
183
- type = Net::DNS::MAILA
184
- when 'any', 'ANY'
185
- type = Net::DNS::ANY
186
- else
187
- return t('error.unknown_type')
188
- end
36
+ return t('error.unknown_type') unless DNS_TYPES.include?(type.downcase)
37
+ type = Object.const_get('Net::DNS::' + type.upcase)
189
38
 
190
39
  resolver = Net::DNS::Resolver.new
191
40
  resolver.nameservers = server unless server.nil?
@@ -197,14 +46,14 @@ module Lita
197
46
  end
198
47
  end
199
48
 
200
- def format_lookup(lookup)
201
- lookup.to_s
202
- end
203
-
204
- def format_lookup_short(lookup)
49
+ def format_lookup(lookup, compact = false)
205
50
  result = ''
206
- lookup.each_address do |ip|
207
- result += "#{ip}\n"
51
+ if compact
52
+ lookup.each_address do |ip|
53
+ result += "#{ip}\n"
54
+ end
55
+ else
56
+ result = lookup.to_s
208
57
  end
209
58
  result
210
59
  end
@@ -1,10 +1,10 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = 'lita-dig'
3
- spec.version = '0.6.0'
3
+ spec.version = '1.0.0'
4
4
  spec.authors = ['Eric Sigler']
5
5
  spec.email = ['me@esigler.com']
6
- spec.description = %q(A Lita handler for resolving DNS records)
7
- spec.summary = %q(A Lita handler for resolving DNS records)
6
+ spec.description = 'A Lita handler for resolving DNS records'
7
+ spec.summary = 'A Lita handler for resolving DNS records'
8
8
  spec.homepage = 'https://github.com/esigler/lita-dig'
9
9
  spec.license = 'MIT'
10
10
  spec.metadata = { 'lita_plugin_type' => 'handler' }
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
14
14
  spec.test_files = spec.files.grep(/^(test|spec|features)\//)
15
15
  spec.require_paths = ['lib']
16
16
 
17
- spec.add_runtime_dependency 'lita', '>= 3.1'
17
+ spec.add_runtime_dependency 'lita', '>= 4.0'
18
18
  spec.add_runtime_dependency 'net-dns'
19
19
 
20
20
  spec.add_development_dependency 'bundler', '~> 1.3'
@@ -8,14 +8,7 @@ en:
8
8
  unable_to_resolve: "Unable to resolve %{argument}"
9
9
  help:
10
10
  resolve:
11
- syntax: dig <name> [+short]
12
- desc: Lookup the A record for <name> using the default resolver [optionally just IP addressses]
13
- resolve_type:
14
- syntax: dig <name> <type>
15
- desc: Lookup the <type> record for <name> using the default resolver
16
- resolve_svr:
17
- syntax: dig @<server> <name> [+short]
18
- desc: Lookup the A record for <name> using <server> as a resolver [optionally just IP addressses]
19
- resolve_svr_type:
20
- syntax: dig @<server> <record> <type>
21
- desc: Lookup the <type> record for <name> using <server> as a resolver
11
+ syntax: dig [@<server>] <name> [<type>] [+short]
12
+ desc: |
13
+ "Lookup the <type> record for <name> using <server> as a resolver.
14
+ <type> defaults to A, and <server> defaults to 8.8.8.8"
@@ -29,12 +29,23 @@ describe Lita::Handlers::Dig, lita_handler: true do
29
29
  client
30
30
  end
31
31
 
32
- it { routes_command('dig example.com').to(:resolve) }
33
- it { routes_command('dig example.com MX').to(:resolve_type) }
34
- it { routes_command('dig @8.8.8.8 example.com').to(:resolve_svr) }
35
- it { routes_command('dig @8.8.8.8 example.com MX').to(:resolve_svr_type) }
36
- it { routes_command('dig example.com +short').to(:resolve) }
37
- it { routes_command('dig @8.8.8.8 example.com +short').to(:resolve_svr) }
32
+ let(:resolve_short) do
33
+ list = double
34
+ allow(list).to receive(:each_address).and_yield('1.2.3.4')
35
+ client = double
36
+ allow(client).to receive(:nameservers=) { '' }
37
+ expect(client).to receive(:query) { list }
38
+ client
39
+ end
40
+
41
+ it do
42
+ is_expected.to route_command('dig example.com').to(:resolve)
43
+ is_expected.to route_command('dig example.com MX').to(:resolve)
44
+ is_expected.to route_command('dig @8.8.8.8 example.com').to(:resolve)
45
+ is_expected.to route_command('dig @8.8.8.8 example.com MX').to(:resolve)
46
+ is_expected.to route_command('dig example.com +short').to(:resolve)
47
+ is_expected.to route_command('dig @8.8.8.8 example.com +short').to(:resolve)
48
+ end
38
49
 
39
50
  describe '#resolve' do
40
51
  it 'shows a record if the domain exists' do
@@ -43,6 +54,12 @@ describe Lita::Handlers::Dig, lita_handler: true do
43
54
  expect(replies.last).to eq('Generic A response example.com')
44
55
  end
45
56
 
57
+ it 'shows a short record if the domain exists' do
58
+ expect(Net::DNS::Resolver).to receive(:new) { resolve_short }
59
+ send_command('dig example.com +short')
60
+ expect(replies.last).to eq("1.2.3.4\n")
61
+ end
62
+
46
63
  it 'shows a warning if the domain does not exist' do
47
64
  expect(Net::DNS::Resolver).to receive(:new) { resolve_unknown }
48
65
  send_command('dig example.com')
@@ -54,9 +71,7 @@ describe Lita::Handlers::Dig, lita_handler: true do
54
71
  send_command('dig example.com')
55
72
  expect(replies.last).to eq('Unable to resolve example.com')
56
73
  end
57
- end
58
74
 
59
- describe '#resolve_type' do
60
75
  it 'resolves a uppercase record with a particular type' do
61
76
  expect(Net::DNS::Resolver).to receive(:new) { resolve_mx }
62
77
  send_command('dig example.com MX')
@@ -96,9 +111,7 @@ describe Lita::Handlers::Dig, lita_handler: true do
96
111
  send_command('dig example.com MX')
97
112
  expect(replies.last).to eq('Unable to resolve example.com')
98
113
  end
99
- end
100
114
 
101
- describe '#resolve_svr' do
102
115
  it 'shows a record if the domain exists' do
103
116
  expect(Net::DNS::Resolver).to receive(:new) { resolve }
104
117
  send_command('dig @8.8.8.8 example.com')
@@ -116,9 +129,7 @@ describe Lita::Handlers::Dig, lita_handler: true do
116
129
  send_command('dig @8.8.8.8 example.com')
117
130
  expect(replies.last).to eq('Unable to resolve example.com')
118
131
  end
119
- end
120
132
 
121
- describe '#resolve_type' do
122
133
  it 'resolves a uppercase record with a particular type' do
123
134
  expect(Net::DNS::Resolver).to receive(:new) { resolve_mx }
124
135
  send_command('dig @8.8.8.8 example.com MX')
@@ -8,3 +8,5 @@ SimpleCov.start { add_filter '/spec/' }
8
8
 
9
9
  require 'lita-dig'
10
10
  require 'lita/rspec'
11
+
12
+ Lita.version_3_compatibility_mode = false
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-dig
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Sigler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-13 00:00:00.000000000 Z
11
+ date: 2014-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lita
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '3.1'
19
+ version: '4.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '3.1'
26
+ version: '4.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: net-dns
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -163,7 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
163
  version: '0'
164
164
  requirements: []
165
165
  rubyforge_project:
166
- rubygems_version: 2.2.1
166
+ rubygems_version: 2.2.2
167
167
  signing_key:
168
168
  specification_version: 4
169
169
  summary: A Lita handler for resolving DNS records