lita-whois 0.0.5 → 0.1.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: 11f0e3a475fc1963ddef311fcd72d553860e9ec0
4
- data.tar.gz: 590fe459c9a02c59319a69dbcb73ed4a2e017fb9
3
+ metadata.gz: 39ea8d3ef372b75007280071a0208e01bd09ac8e
4
+ data.tar.gz: 0a8237bb38bc43e6d77c16b06ff090ecc1a17d23
5
5
  SHA512:
6
- metadata.gz: 6cd6646e7b6bc4342066db5030d1ed7c66c73d771f78756e17ecf04cd9c1cf74638ef7edc98239136af44ffa7b00cd7e815f6ace7c37635a8e08eadcaa63d03a
7
- data.tar.gz: ec632ea9a92e1942cfbf622ac0c7feb65d56da53a70efb64092ffb682219e04c8e110f352a635fb04c15580e22857922c858f1e0c09ed59a28081f4a0796ffbb
6
+ metadata.gz: 979dadb1dee9a38c1fee8b9829dd3050bf71df1e797bed237df8d209c6f6adc376ed42c3fb85df9e72092ba794a85def7d0b7ceffa936f1e14cb748c89542333
7
+ data.tar.gz: e4a20b44b49fa4122d51400a6c97de0d9584e059c904fbebbf259c50df8bf4440500004f925ecf28a75f880005d5a0bce0d79e200f3106f5f2228e1e817131dc
@@ -0,0 +1,8 @@
1
+ Documentation:
2
+ Enabled: false
3
+
4
+ FileName:
5
+ Enabled: false
6
+
7
+ MethodLength:
8
+ Max: 15
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ script: bundle exec rake
5
+ before_install:
6
+ - gem update --system
7
+ services:
8
+ - redis-server
@@ -0,0 +1,9 @@
1
+ Pull requests are awesome! Pull requests with tests are even more awesome!
2
+
3
+ ## Quick steps
4
+
5
+ 1. Fork the repo.
6
+ 2. Run the tests: `bundle && rake`
7
+ 3. Add a test for your change. Only refactoring and documentation changes require no new tests. If you are adding functionality or fixing a bug, it needs a test!
8
+ 4. Make the test pass.
9
+ 5. Push to your fork and submit a pull request.
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # lita-whois
2
2
 
3
- WHOIS handler for lita chat bot
3
+ WHOIS handler for searching domain, TLD, IPv4, and IPv6 WHOIS records.
4
4
 
5
5
  ## Installation
6
6
 
@@ -12,11 +12,17 @@ gem "lita-whois"
12
12
 
13
13
  ## Configuration
14
14
 
15
-
15
+ None
16
16
 
17
17
  ## Usage
18
18
 
19
- TODO: Describe the plugin's features and how to use them.
19
+ Basics:
20
+ ```
21
+ Lita whois example.com - Get the WHOIS info for a domain
22
+ Lita whois .io - Get the WHOIS info for a TLD
23
+ Lita whois 8.8.8.8 - Get the WHOIS info for an IPv4 address
24
+ Lita whois 2001:418:141e:196::fc4 - Get the WHOIS info for an IPv6 address
25
+ ```
20
26
 
21
27
  ## License
22
28
 
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+ require 'rubocop/rake_task'
3
4
 
4
5
  RSpec::Core::RakeTask.new(:spec)
6
+ Rubocop::RakeTask.new(:rubocop)
5
7
 
6
- task :default => :spec
8
+ task default: [ :spec, :rubocop ]
@@ -1,2 +1,10 @@
1
- require "cocaine"
2
- require "lita/handlers/whois"
1
+ require 'lita'
2
+
3
+ Lita.load_locales Dir[File.expand_path(
4
+ File.join('..', '..', 'locales', '*.yml'), __FILE__
5
+ )]
6
+
7
+ require 'lita/handlers/whois'
8
+
9
+ require 'ipaddress'
10
+ require 'whois'
@@ -1,15 +1,71 @@
1
- require "lita"
2
-
3
1
  module Lita
4
2
  module Handlers
5
3
  class Whois < Handler
6
- route(/^whois\s+(.+)/, :whois, help: {"whois DOMAIN" => "Get the WHOIS info for a domain."})
7
-
8
- def whois(response)
9
- domain = response.match_data[1]
10
- line = ::Cocaine::CommandLine.new("whois", ':domain')
11
- response.reply(line.run(domain: domain))
4
+ route(
5
+ /^whois\s(\w+).(\w+)$/,
6
+ :whois_domain,
7
+ help: {
8
+ 'whois example.com' => 'Get the WHOIS info for a domain'
9
+ }
10
+ )
11
+
12
+ route(
13
+ /^whois\s.(\w+)$/,
14
+ :whois_tld,
15
+ help: {
16
+ 'whois .io' => 'Get the WHOIS info for a TLD'
17
+ }
18
+ )
19
+
20
+ route(
21
+ /^whois\s(.+)$/,
22
+ :whois_ip,
23
+ help: {
24
+ 'whois 8.8.8.8' => 'Get the WHOIS info for an IPv4 or IPv6 address'
25
+ }
26
+ )
27
+
28
+ def whois_domain(response)
29
+ response.reply(lookup("#{response.matches[0][0]}." \
30
+ "#{response.matches[0][1]}"))
31
+ end
32
+
33
+ def whois_tld(response)
34
+ response.reply(lookup(".#{response.matches[0][0]}"))
35
+ end
36
+
37
+ def whois_ip(response)
38
+ if IPAddress.valid? response.matches[0][0]
39
+ response.reply(reverse_lookup(response.matches[0][0]))
12
40
  end
41
+ end
42
+
43
+ private
44
+
45
+ def lookup(domain)
46
+ client = ::Whois::Client.new
47
+ record = nil
48
+ begin
49
+ record = client.lookup(domain)
50
+ rescue ::Whois::ServerNotFound
51
+ return "Cannot find a WHOIS server for #{domain}"
52
+ end
53
+
54
+ record.to_s
55
+ end
56
+
57
+ def reverse_lookup(ip)
58
+ client = ::Whois::Client.new
59
+ record = nil
60
+ begin
61
+ record = client.lookup(ip)
62
+ rescue ::Whois::AllocationUnknown, ::Whois::ServerNotFound,
63
+ ::Whois::NoInterfaceError
64
+ return "Cannot find a WHOIS server for #{ip}"
65
+ end
66
+
67
+ record.to_s
68
+ end
13
69
  end
14
70
 
15
71
  Lita.register_handler(Whois)
@@ -1,22 +1,27 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "lita-whois"
3
- spec.version = "0.0.5"
4
- spec.authors = ["glebtv"]
5
- spec.email = ["glebtv@gmail.com"]
3
+ spec.version = "0.1.0"
4
+ spec.authors = ["glebtv", "Eric Sigler"]
5
+ spec.email = ["glebtv@gmail.com", "me@esigler.com"]
6
6
  spec.description = %q{WHOIS handler for lita chat bot}
7
7
  spec.summary = %q{WHOIS handler for lita chat bot}
8
8
  spec.homepage = "https://github.com/glebtv/lita-whois"
9
9
  spec.license = "MIT"
10
+ spec.metadata = { "lita_plugin_type" => "handler" }
10
11
 
11
12
  spec.files = `git ls-files`.split($/)
12
13
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
13
14
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
14
15
  spec.require_paths = ["lib"]
15
16
 
16
- spec.add_runtime_dependency "lita", "~> 2.4"
17
- spec.add_runtime_dependency "cocaine"
17
+ spec.add_runtime_dependency "lita", ">= 3.0"
18
+ spec.add_runtime_dependency "whois"
19
+ spec.add_runtime_dependency "ipaddress"
18
20
 
19
21
  spec.add_development_dependency "bundler", "~> 1.3"
20
22
  spec.add_development_dependency "rake"
21
- spec.add_development_dependency "rspec", ">= 2.14"
23
+ spec.add_development_dependency "rspec", ">= 3.0.0.beta2"
24
+ spec.add_development_dependency "simplecov"
25
+ spec.add_development_dependency "coveralls"
26
+ spec.add_development_dependency "rubocop"
22
27
  end
@@ -0,0 +1,4 @@
1
+ en:
2
+ lita:
3
+ handlers:
4
+ whois:
@@ -1,4 +1,122 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe Lita::Handlers::Whois, lita_handler: true do
4
+ it { routes_command('whois example.com').to(:whois_domain) }
5
+ it { routes_command('whois .io').to(:whois_tld) }
6
+ it { routes_command('whois 8.8.8.8').to(:whois_ip) }
7
+ it { routes_command('whois 2001:418:141e:196::fc4').to(:whois_ip) }
8
+
9
+ describe '#whois_domain' do
10
+ let(:domain_good) do
11
+ client = double
12
+ expect(client).to receive(:lookup) { 'Generic response example.com' }
13
+ client
14
+ end
15
+
16
+ let(:domain_bad) do
17
+ client = double
18
+ expect(client).to receive(:lookup) { 'Bad domain asdfasfldjf.com' }
19
+ client
20
+ end
21
+
22
+ let(:domain_err) do
23
+ client = double
24
+ expect(client).to receive(:lookup).and_raise(Whois::ServerNotFound)
25
+ client
26
+ end
27
+
28
+ it 'shows a record when the domain exists' do
29
+ expect(Whois::Client).to receive(:new) { domain_good }
30
+ send_command('whois example.com')
31
+ expect(replies.last).to eq('Generic response example.com')
32
+ end
33
+
34
+ it 'shows an error when the domain is not registered' do
35
+ expect(Whois::Client).to receive(:new) { domain_bad }
36
+ send_command('whois asdfasfldjf.com')
37
+ expect(replies.last).to eq('Bad domain asdfasfldjf.com')
38
+ end
39
+
40
+ it 'shows an error when the domain does not have a WHOIS' do
41
+ expect(Whois::Client).to receive(:new) { domain_err }
42
+ send_command('whois asdf.sdf')
43
+ expect(replies.last).to eq('Cannot find a WHOIS server for asdf.sdf')
44
+ end
45
+ end
46
+
47
+ describe '#whois_tld' do
48
+ let(:tld_good) do
49
+ client = double
50
+ expect(client).to receive(:lookup) { 'Generic TLD response .io' }
51
+ client
52
+ end
53
+
54
+ let(:tld_bad) do
55
+ client = double
56
+ expect(client).to receive(:lookup) { 'Invalid TLD response .wtf' }
57
+ client
58
+ end
59
+
60
+ it 'shows a record when the tld exists' do
61
+ expect(Whois::Client).to receive(:new) { tld_good }
62
+ send_command('whois .io')
63
+ expect(replies.last).to eq('Generic TLD response .io')
64
+ end
65
+
66
+ it 'shows an error when the tld does not exist' do
67
+ expect(Whois::Client).to receive(:new) { tld_bad }
68
+ send_command('whois .wtf')
69
+ expect(replies.last).to eq('Invalid TLD response .wtf')
70
+ end
71
+ end
72
+
73
+ describe '#whois_ipv4' do
74
+ let(:ipv4_good) do
75
+ client = double
76
+ expect(client).to receive(:lookup) { 'Generic IPv4 response 8.8.8.8' }
77
+ client
78
+ end
79
+
80
+ let(:ipv4_err) do
81
+ client = double
82
+ expect(client).to receive(:lookup).and_raise(Whois::ServerNotFound)
83
+ client
84
+ end
85
+
86
+ let(:ipv6_good) do
87
+ client = double
88
+ expect(client).to receive(:lookup) { 'IPv6 resp 2001:418:141e:196::fc4' }
89
+ client
90
+ end
91
+
92
+ let(:ipv6_err) do
93
+ client = double
94
+ expect(client).to receive(:lookup).and_raise(Whois::ServerNotFound)
95
+ client
96
+ end
97
+
98
+ it 'shows results for the IPv4 address' do
99
+ expect(Whois::Client).to receive(:new) { ipv4_good }
100
+ send_command('whois 8.8.8.8')
101
+ expect(replies.last).to eq('Generic IPv4 response 8.8.8.8')
102
+ end
103
+
104
+ it 'shows an error when the IP is invalid' do
105
+ expect(Whois::Client).to receive(:new) { ipv4_err }
106
+ send_command('whois 0.0.0.0')
107
+ expect(replies.last).to eq('Cannot find a WHOIS server for 0.0.0.0')
108
+ end
109
+
110
+ it 'shows results for the IPv6 address' do
111
+ expect(Whois::Client).to receive(:new) { ipv6_good }
112
+ send_command('whois 2001:418:141e:196::fc4')
113
+ expect(replies.last).to eq('IPv6 resp 2001:418:141e:196::fc4')
114
+ end
115
+
116
+ it 'shows an error when the IP is invalid' do
117
+ expect(Whois::Client).to receive(:new) { ipv6_err }
118
+ send_command('whois ::')
119
+ expect(replies.last).to eq('Cannot find a WHOIS server for ::')
120
+ end
121
+ end
4
122
  end
@@ -1,2 +1,10 @@
1
- require "lita-whois"
2
- require "lita/rspec"
1
+ require 'simplecov'
2
+ require 'coveralls'
3
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
4
+ SimpleCov::Formatter::HTMLFormatter,
5
+ Coveralls::SimpleCov::Formatter
6
+ ]
7
+ SimpleCov.start { add_filter '/spec/' }
8
+
9
+ require 'lita-whois'
10
+ require 'lita/rspec'
metadata CHANGED
@@ -1,93 +1,154 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-whois
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - glebtv
8
+ - Eric Sigler
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-09-22 00:00:00.000000000 Z
12
+ date: 2014-04-02 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: lita
15
16
  requirement: !ruby/object:Gem::Requirement
16
17
  requirements:
17
- - - ~>
18
+ - - ">="
18
19
  - !ruby/object:Gem::Version
19
- version: '2.4'
20
+ version: '3.0'
20
21
  type: :runtime
21
22
  prerelease: false
22
23
  version_requirements: !ruby/object:Gem::Requirement
23
24
  requirements:
24
- - - ~>
25
+ - - ">="
25
26
  - !ruby/object:Gem::Version
26
- version: '2.4'
27
+ version: '3.0'
27
28
  - !ruby/object:Gem::Dependency
28
- name: cocaine
29
+ name: whois
29
30
  requirement: !ruby/object:Gem::Requirement
30
31
  requirements:
31
- - - '>='
32
+ - - ">="
32
33
  - !ruby/object:Gem::Version
33
34
  version: '0'
34
35
  type: :runtime
35
36
  prerelease: false
36
37
  version_requirements: !ruby/object:Gem::Requirement
37
38
  requirements:
38
- - - '>='
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: ipaddress
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
39
54
  - !ruby/object:Gem::Version
40
55
  version: '0'
41
56
  - !ruby/object:Gem::Dependency
42
57
  name: bundler
43
58
  requirement: !ruby/object:Gem::Requirement
44
59
  requirements:
45
- - - ~>
60
+ - - "~>"
46
61
  - !ruby/object:Gem::Version
47
62
  version: '1.3'
48
63
  type: :development
49
64
  prerelease: false
50
65
  version_requirements: !ruby/object:Gem::Requirement
51
66
  requirements:
52
- - - ~>
67
+ - - "~>"
53
68
  - !ruby/object:Gem::Version
54
69
  version: '1.3'
55
70
  - !ruby/object:Gem::Dependency
56
71
  name: rake
57
72
  requirement: !ruby/object:Gem::Requirement
58
73
  requirements:
59
- - - '>='
74
+ - - ">="
60
75
  - !ruby/object:Gem::Version
61
76
  version: '0'
62
77
  type: :development
63
78
  prerelease: false
64
79
  version_requirements: !ruby/object:Gem::Requirement
65
80
  requirements:
66
- - - '>='
81
+ - - ">="
67
82
  - !ruby/object:Gem::Version
68
83
  version: '0'
69
84
  - !ruby/object:Gem::Dependency
70
85
  name: rspec
71
86
  requirement: !ruby/object:Gem::Requirement
72
87
  requirements:
73
- - - '>='
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: 3.0.0.beta2
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: 3.0.0.beta2
98
+ - !ruby/object:Gem::Dependency
99
+ name: simplecov
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: coveralls
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rubocop
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
74
131
  - !ruby/object:Gem::Version
75
- version: '2.14'
132
+ version: '0'
76
133
  type: :development
77
134
  prerelease: false
78
135
  version_requirements: !ruby/object:Gem::Requirement
79
136
  requirements:
80
- - - '>='
137
+ - - ">="
81
138
  - !ruby/object:Gem::Version
82
- version: '2.14'
139
+ version: '0'
83
140
  description: WHOIS handler for lita chat bot
84
141
  email:
85
142
  - glebtv@gmail.com
143
+ - me@esigler.com
86
144
  executables: []
87
145
  extensions: []
88
146
  extra_rdoc_files: []
89
147
  files:
90
- - .gitignore
148
+ - ".gitignore"
149
+ - ".rubocop.yml"
150
+ - ".travis.yml"
151
+ - CONTRIBUTING.md
91
152
  - Gemfile
92
153
  - LICENSE
93
154
  - README.md
@@ -95,29 +156,31 @@ files:
95
156
  - lib/lita-whois.rb
96
157
  - lib/lita/handlers/whois.rb
97
158
  - lita-whois.gemspec
159
+ - locales/en.yml
98
160
  - spec/lita/handlers/whois_spec.rb
99
161
  - spec/spec_helper.rb
100
162
  homepage: https://github.com/glebtv/lita-whois
101
163
  licenses:
102
164
  - MIT
103
- metadata: {}
165
+ metadata:
166
+ lita_plugin_type: handler
104
167
  post_install_message:
105
168
  rdoc_options: []
106
169
  require_paths:
107
170
  - lib
108
171
  required_ruby_version: !ruby/object:Gem::Requirement
109
172
  requirements:
110
- - - '>='
173
+ - - ">="
111
174
  - !ruby/object:Gem::Version
112
175
  version: '0'
113
176
  required_rubygems_version: !ruby/object:Gem::Requirement
114
177
  requirements:
115
- - - '>='
178
+ - - ">="
116
179
  - !ruby/object:Gem::Version
117
180
  version: '0'
118
181
  requirements: []
119
182
  rubyforge_project:
120
- rubygems_version: 2.0.6
183
+ rubygems_version: 2.2.2
121
184
  signing_key:
122
185
  specification_version: 4
123
186
  summary: WHOIS handler for lita chat bot