presence 0.0.2 → 0.0.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.
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Presence
2
2
 
3
+ [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/subakva/presence)
4
+ [![Build Status](https://secure.travis-ci.org/subakva/presence.png)](http://travis-ci.org/subakva/presence)
5
+
3
6
  Monitors the local network for presence of network clients by MAC address.
4
7
 
5
8
  ## Installation
@@ -18,7 +21,13 @@ Install the gem
18
21
 
19
22
  ## Usage
20
23
 
21
- TODO: Write usage instructions here
24
+ $ presence_scan
25
+
26
+ ## Reference
27
+
28
+ * Source: https://github.com/subakva/presence/
29
+ * RDoc: http://rdoc.info/github/subakva/presence/master/frames
30
+ * arping: https://github.com/ThomasHabets/arping
22
31
 
23
32
  ## Contributing
24
33
 
@@ -1,8 +1,8 @@
1
1
  module Presence
2
2
  # Wrapper class for shell command execution.
3
3
  class Commands
4
- def arping(ip)
5
- cmd = "sudo arping -c 1 #{ip}"
4
+ def arping(ip, retries = 1)
5
+ cmd = "sudo arping -c #{retries} #{ip}"
6
6
  result = run(cmd)
7
7
  [cmd, result]
8
8
  end
@@ -5,7 +5,7 @@ module Presence
5
5
  # Scans a network for connected clients, captures the MAC address, and
6
6
  # dispatches related events to any registered listeners.
7
7
  class Scanner
8
- PAIR = '[0-9a-f]{2}'
8
+ PAIR = '[0-9a-fA-F]{2}'
9
9
  SEP = '\:'
10
10
  MAC_REGEXP = Regexp.new("(#{6.times.map {PAIR}.join(SEP)})")
11
11
 
@@ -14,6 +14,7 @@ module Presence
14
14
  def initialize(options = nil)
15
15
  options ||= {}
16
16
  self.options = {
17
+ retries: 1,
17
18
  ip_prefix: nil,
18
19
  octet_range: (1..255)
19
20
  }.merge(options)
@@ -45,6 +46,10 @@ module Presence
45
46
  options[:octet_range]
46
47
  end
47
48
 
49
+ def retries
50
+ options[:retries]
51
+ end
52
+
48
53
  def scan
49
54
  dispatch(:scan_started, ip_prefix, octet_range)
50
55
  octet_range.each do |i|
@@ -54,7 +59,7 @@ module Presence
54
59
  end
55
60
 
56
61
  def scan_ip(ip)
57
- cmd, result = @commands.arping(ip)
62
+ cmd, result = @commands.arping(ip, retries)
58
63
  dispatch(:ip_scanned, ip, cmd, result)
59
64
  process_scan_result(ip, cmd, result)
60
65
  end
@@ -1,3 +1,3 @@
1
1
  module Presence
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -19,13 +19,14 @@ describe Presence::Scanner do
19
19
  listener
20
20
  }
21
21
  let(:octet_range) { (30..32) }
22
- let(:scanner) { Presence::Scanner.new(octet_range: octet_range) }
22
+ let(:retries) { 1 }
23
+ let(:scanner) { Presence::Scanner.new(octet_range: octet_range, retries: retries) }
23
24
 
24
25
  before {
25
26
  commands.stub(:local_ip).and_return(local_ip)
26
27
  commands.stub(:arping).and_return([arping_cmd, 'No such jeaun'])
27
- commands.stub(:arping).with(local_ip).and_return([arping_cmd, local_mac])
28
- commands.stub(:arping).with(ip).and_return([arping_cmd, mac])
28
+ commands.stub(:arping).with(local_ip, retries).and_return([arping_cmd, local_mac])
29
+ commands.stub(:arping).with(ip, retries).and_return([arping_cmd, mac])
29
30
  }
30
31
 
31
32
  describe '.check_env' do
@@ -105,8 +106,17 @@ describe Presence::Scanner do
105
106
  end
106
107
 
107
108
  describe '#scan_ip' do
109
+ context 'with a retries option' do
110
+ let(:retries) { 4 }
111
+
112
+ it 'uses the configured number of retries' do
113
+ commands.should_receive(:arping).with(ip, 4).and_return([arping_cmd, mac])
114
+ scanner.scan_ip(ip)
115
+ end
116
+ end
117
+
108
118
  it 'executes arping to check for a mac address' do
109
- commands.should_receive(:arping).with(ip).and_return([arping_cmd, mac])
119
+ commands.should_receive(:arping).with(ip, 1).and_return([arping_cmd, mac])
110
120
  scanner.scan_ip(ip)
111
121
  end
112
122
 
@@ -129,7 +139,7 @@ describe Presence::Scanner do
129
139
 
130
140
  context 'with a non-existent IP' do
131
141
  before {
132
- commands.stub(:arping).with(ip).and_return([arping_cmd, 'No such jeaun'])
142
+ commands.stub(:arping).with(ip, 1).and_return([arping_cmd, 'No such jeaun'])
133
143
  }
134
144
 
135
145
  it 'does not dispatch a mac_found event' do
metadata CHANGED
@@ -1,80 +1,80 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: presence
3
3
  version: !ruby/object:Gem::Version
4
+ version: 0.0.3
4
5
  prerelease:
5
- version: 0.0.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jason Wadsworth
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-24 00:00:00.000000000 Z
12
+ date: 2012-11-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- prerelease: false
16
- type: :development
15
+ name: rake
17
16
  requirement: !ruby/object:Gem::Requirement
18
17
  none: false
19
18
  requirements:
20
19
  - - ~>
21
20
  - !ruby/object:Gem::Version
22
21
  version: 0.9.2
22
+ type: :development
23
+ prerelease: false
23
24
  version_requirements: !ruby/object:Gem::Requirement
24
25
  none: false
25
26
  requirements:
26
27
  - - ~>
27
28
  - !ruby/object:Gem::Version
28
29
  version: 0.9.2
29
- name: rake
30
30
  - !ruby/object:Gem::Dependency
31
- prerelease: false
32
- type: :development
31
+ name: rspec
33
32
  requirement: !ruby/object:Gem::Requirement
34
33
  none: false
35
34
  requirements:
36
35
  - - ~>
37
36
  - !ruby/object:Gem::Version
38
37
  version: 2.11.0
38
+ type: :development
39
+ prerelease: false
39
40
  version_requirements: !ruby/object:Gem::Requirement
40
41
  none: false
41
42
  requirements:
42
43
  - - ~>
43
44
  - !ruby/object:Gem::Version
44
45
  version: 2.11.0
45
- name: rspec
46
46
  - !ruby/object:Gem::Dependency
47
- prerelease: false
48
- type: :development
47
+ name: cane
49
48
  requirement: !ruby/object:Gem::Requirement
50
49
  none: false
51
50
  requirements:
52
51
  - - ~>
53
52
  - !ruby/object:Gem::Version
54
53
  version: 2.3.0
54
+ type: :development
55
+ prerelease: false
55
56
  version_requirements: !ruby/object:Gem::Requirement
56
57
  none: false
57
58
  requirements:
58
59
  - - ~>
59
60
  - !ruby/object:Gem::Version
60
61
  version: 2.3.0
61
- name: cane
62
62
  - !ruby/object:Gem::Dependency
63
- prerelease: false
64
- type: :development
63
+ name: simplecov
65
64
  requirement: !ruby/object:Gem::Requirement
66
65
  none: false
67
66
  requirements:
68
67
  - - ~>
69
68
  - !ruby/object:Gem::Version
70
69
  version: 0.7.1
70
+ type: :development
71
+ prerelease: false
71
72
  version_requirements: !ruby/object:Gem::Requirement
72
73
  none: false
73
74
  requirements:
74
75
  - - ~>
75
76
  - !ruby/object:Gem::Version
76
77
  version: 0.7.1
77
- name: simplecov
78
78
  description: Monitors the local network for presence of network clients by MAC address.
79
79
  email:
80
80
  - jdwadsworth@gmail.com