lita-netping 0.5.0 → 0.6.0

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
  SHA1:
3
- metadata.gz: c4be87eefd9a97bf9ee291760508ae033132bb41
4
- data.tar.gz: ee2ea65ebdfec3986c5e3f591f99e4ee0691763b
3
+ metadata.gz: d8b70c3c276083c25dbe1a73adc20556f6a78e8e
4
+ data.tar.gz: fb9bf4ea069a8903e733a1b98cb42675a525ce6a
5
5
  SHA512:
6
- metadata.gz: bb13f837813965d634239ac1a75686906c7e43fa26aa8126d63741c6e89dc899c585d69b063883f1d54058021ba8424af94040e1b8dac8b6308a28d43737b992
7
- data.tar.gz: 00d7d3f926f31acb8feba3860b16e4b63fd4fd2799b6cec06b99ac02c140449db22d99f53295cbd29011aece8b9201fea4b74684b5e69bf66352bb7f6998f4a5
6
+ metadata.gz: e001e199b299409e30e1e1b85c08f1676f3bc159db605cd6b8bf935734a7e28183018d6c3f70e7a1c97c0092321627d1c7084c3c8596074ea33422a32a077d69
7
+ data.tar.gz: 7d244947a8a562b38a5350bb08240a6261425681ba812ccf08e09099e4694222eb90fd85fca11b29a3d7c49cf9d788bf26a4a7e05ea6fc7d64b23b86f5a6197e
@@ -1,8 +1,7 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.1
4
- script: bundle exec rake
5
- before_install:
6
- - gem update --system
3
+ - 2.2.5
4
+ - 2.3.1
7
5
  services:
8
6
  - redis-server
7
+ cache: bundler
@@ -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
@@ -26,18 +26,28 @@ none
26
26
  Examples:
27
27
 
28
28
  ```
29
- ping google.com - Ping google.com
29
+ ping google.com - Ping google.com via normal ICMP
30
+ ping icmp google.com - Ping google.com via normal ICMP (same as above)
31
+ ping http://www.google.com - Ping google.com via HTTP
32
+ ping tcp://ldap.server:389 - Ping a TCP service running on ldap.server on port 389
33
+ ping tcp app.server:8080 - Ping a TCP service running on app.server on port 8080
30
34
  ```
31
35
 
36
+ Supported protocols are:
37
+
38
+ * `http` - Ping a web service. It is usually simplest to just specify the URI like you would in a web browser.
39
+ * `icmp` - The default if none is specified. This is your standard ping.
40
+ * `tcp` - Verify that a TCP service is listening and responding. Note that this doesn't guarantee that the service is not misbehaving, just that it responds on the proper port.
41
+
32
42
  Syntax:
33
43
 
34
44
  ```
35
- ping <target> - Ping <target> (either DNS or IP address)
45
+ ping [protocol] <target> - Ping <target> (either DNS name, IP address, or URI)
36
46
  ```
37
47
 
38
48
  ## Note
39
49
 
40
- This plugin uses the net-ping library, and the "Net::Ping::External" check,
50
+ This plugin uses the net-ping library, and the ICMP ping uses the "Net::Ping::External" check,
41
51
  so it will use the "ping" equivalent on whatever host it's running on.
42
52
 
43
53
  ## License
@@ -7,3 +7,4 @@ Lita.load_locales Dir[File.expand_path(
7
7
  require 'lita/handlers/netping'
8
8
 
9
9
  require 'net/ping'
10
+ require 'uri'
@@ -2,7 +2,7 @@ module Lita
2
2
  module Handlers
3
3
  class Netping < Handler
4
4
  route(
5
- /^ping\s(?<target>.+)/,
5
+ /^ping(\s+(?<proto>\S+))?\s(?<target>\S+)/,
6
6
  :ping,
7
7
  command: true,
8
8
  help: {
@@ -11,13 +11,34 @@ module Lita
11
11
  )
12
12
 
13
13
  def ping(response)
14
+ proto = response.match_data['proto'] || 'icmp'
14
15
  target = response.match_data['target']
15
16
 
16
- response.reply(format(target, ping_target(target)))
17
+ # Update the protocol based on the target
18
+ proto = URI(target).scheme if target =~ %r{^(\S+)://\S+}
19
+
20
+ if valid_protocol?(proto)
21
+ response.reply(format(target, ping_target(proto.downcase, target)))
22
+ else
23
+ response.reply(t('ping.unsupported', proto: proto))
24
+ end
17
25
  end
18
26
 
19
27
  private
20
28
 
29
+ def extract_host_and_port(target)
30
+ if target =~ %r{^(\S+)://\S+}
31
+ host = URI(target).host
32
+ port = URI(target).port
33
+ elsif target =~ /:[0-9]+$/
34
+ host, _, port = target.rpartition(':')
35
+ else
36
+ host = target
37
+ port = nil
38
+ end
39
+ [host, port]
40
+ end
41
+
21
42
  def format(host, result)
22
43
  if result
23
44
  t('ping.success', host: host)
@@ -26,8 +47,25 @@ module Lita
26
47
  end
27
48
  end
28
49
 
29
- def ping_target(host)
30
- Net::Ping::External.new(host).ping
50
+ def ping_target(proto, target)
51
+ # dissect the target to get the hostname and port
52
+ host, port = extract_host_and_port(target)
53
+
54
+ case proto
55
+ when 'http'
56
+ # With HTTP, we can just pass the target
57
+ p = Net::Ping::HTTP.new(target)
58
+ when 'icmp'
59
+ # The default
60
+ p = Net::Ping::External.new(host)
61
+ when 'tcp'
62
+ p = Net::Ping::TCP.new(host, port)
63
+ end
64
+ proto == 'icmp' ? p.ping(host, 1, 1, 1) : p.ping
65
+ end
66
+
67
+ def valid_protocol?(proto)
68
+ %w(http icmp tcp).include?(proto.downcase)
31
69
  end
32
70
  end
33
71
 
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = 'lita-netping'
3
- spec.version = '0.5.0'
3
+ spec.version = '0.6.0'
4
4
  spec.authors = ['Eric Sigler']
5
5
  spec.email = ['me@esigler.com']
6
6
  spec.description = 'An IP ping plugin for Lita'
@@ -10,8 +10,8 @@ Gem::Specification.new do |spec|
10
10
  spec.metadata = { 'lita_plugin_type' => 'handler' }
11
11
 
12
12
  spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
13
- spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
14
- spec.test_files = spec.files.grep(/^(test|spec|features)\//)
13
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
14
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
15
15
  spec.require_paths = ['lib']
16
16
 
17
17
  spec.add_runtime_dependency 'lita', '>= 4.0'
@@ -4,8 +4,9 @@ en:
4
4
  netping:
5
5
  help:
6
6
  ping:
7
- syntax: ping <target>
8
- desc: Ping <target> (either DNS or IP address)
7
+ syntax: ping [protocol] <target>
8
+ desc: Ping [protocol] <target> (either DNS or IP address)
9
9
  ping:
10
10
  success: "%{host} responded to ping"
11
11
  fail: "%{host} did not respond to ping"
12
+ unsupported: "%{proto} is not a supported protocol"
@@ -11,9 +11,29 @@ describe Lita::Handlers::Netping, lita_handler: true do
11
11
  expect(replies.last).to eq('example.com responded to ping')
12
12
  end
13
13
 
14
+ it 'returns a success if the target is pingable via HTTP' do
15
+ send_command('ping http example.com')
16
+ expect(replies.last).to eq('example.com responded to ping')
17
+ end
18
+
19
+ it 'returns a success if the target is pingable via TCP' do
20
+ send_command('ping tcp 127.0.0.1:6379')
21
+ expect(replies.last).to eq('127.0.0.1:6379 responded to ping')
22
+ end
23
+
24
+ it 'returns a success if the target is pingable via TCP as a URI' do
25
+ send_command('ping tcp://127.0.0.1:6379')
26
+ expect(replies.last).to eq('tcp://127.0.0.1:6379 responded to ping')
27
+ end
28
+
14
29
  it 'returns a failure if the target is not pingable' do
15
30
  send_command('ping unknownhost.local')
16
31
  expect(replies.last).to eq('unknownhost.local did not respond to ping')
17
32
  end
33
+
34
+ it 'returns a failure if the protocol is not supported' do
35
+ send_command('ping xmpp://jabber.org')
36
+ expect(replies.last).to eq('xmpp is not a supported protocol')
37
+ end
18
38
  end
19
39
  end
@@ -1,6 +1,6 @@
1
1
  require 'simplecov'
2
2
  require 'coveralls'
3
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
3
+ SimpleCov.formatters = [
4
4
  SimpleCov::Formatter::HTMLFormatter,
5
5
  Coveralls::SimpleCov::Formatter
6
6
  ]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-netping
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.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-12-09 00:00:00.000000000 Z
11
+ date: 2016-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lita
@@ -132,6 +132,7 @@ files:
132
132
  - ".gitignore"
133
133
  - ".rubocop.yml"
134
134
  - ".travis.yml"
135
+ - CONTRIBUTING.md
135
136
  - Gemfile
136
137
  - LICENSE
137
138
  - README.md
@@ -163,10 +164,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
164
  version: '0'
164
165
  requirements: []
165
166
  rubyforge_project:
166
- rubygems_version: 2.2.2
167
+ rubygems_version: 2.4.5
167
168
  signing_key:
168
169
  specification_version: 4
169
170
  summary: An IP ping plugin for Lita
170
171
  test_files:
171
172
  - spec/lita/handlers/netping_spec.rb
172
173
  - spec/spec_helper.rb
174
+ has_rdoc: