walkon 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/walkon/daemon.rb +7 -12
- data/lib/walkon/device.rb +17 -5
- data/lib/walkon/entrance_music.rb +8 -9
- data/lib/walkon/hci_tool.rb +11 -5
- data/lib/walkon/version.rb +1 -1
- data/spec/fixtures/music/{00:A1:5D:AB:B2:E9.mp3 → iPhone5.mp3} +0 -0
- data/spec/walkon/daemon_spec.rb +14 -8
- data/spec/walkon/device_spec.rb +15 -4
- data/spec/walkon/entrance_music_spec.rb +33 -14
- data/spec/walkon/hci_tool_spec.rb +8 -9
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3dd89fe98df5e1a8190fb561b248585b550b5b64
|
4
|
+
data.tar.gz: aaaca1c64f5c8f14e32cbe42e6d482cfe567d462
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 30cc38a8b631df17479412c7ee84bd0c633bc14a9d855b70f8f0c6f806508f364375f74a7b3864aae9f8516b1f6d89319df1864355c26b0541d21b7fde4ab97a
|
7
|
+
data.tar.gz: e8d491fc4c29125883e785b532b0a6fa9f611e161be14af43d07e4195a08405ed5ef28674da45988fd90299052bcd0b4746157d855e1cffb17061e4bed1286ec
|
data/lib/walkon/daemon.rb
CHANGED
@@ -25,22 +25,17 @@ module Walkon
|
|
25
25
|
loop { check_for_devices }
|
26
26
|
end
|
27
27
|
|
28
|
+
private
|
28
29
|
def check_for_devices
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
end
|
35
|
-
end
|
30
|
+
@devices = scanned_device_ess_ids.reject { |ess_id|
|
31
|
+
devices.include? ess_id
|
32
|
+
}.map { |ess_id|
|
33
|
+
Device.play! ess_id
|
34
|
+
}
|
36
35
|
end
|
37
36
|
|
38
|
-
def
|
37
|
+
def scanned_device_ess_ids
|
39
38
|
HciTool.scan
|
40
39
|
end
|
41
|
-
|
42
|
-
def play_entrance_music_for device
|
43
|
-
device.entrance_music.play if device.has_entrance_music?
|
44
|
-
end
|
45
40
|
end
|
46
41
|
end
|
data/lib/walkon/device.rb
CHANGED
@@ -1,14 +1,26 @@
|
|
1
1
|
require 'walkon/entrance_music'
|
2
2
|
|
3
|
-
# Represents a single Bluetooth device in the building.
|
3
|
+
# Represents a single Bluetooth device in the building. When HciTool
|
4
|
+
# detects the device on the network, it plays the entrance music.
|
4
5
|
|
5
6
|
module Walkon
|
6
7
|
class Device
|
7
|
-
attr_reader :
|
8
|
+
attr_reader :ess_id, :entrance_music
|
8
9
|
|
9
|
-
def initialize
|
10
|
-
@
|
11
|
-
@entrance_music = EntranceMusic.new
|
10
|
+
def initialize from_ess_id
|
11
|
+
@ess_id = from_ess_id
|
12
|
+
@entrance_music = EntranceMusic.new from_ess_id
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.play! for_ess_id
|
16
|
+
device = new for_ess_id
|
17
|
+
device.play
|
18
|
+
device
|
19
|
+
end
|
20
|
+
|
21
|
+
def play
|
22
|
+
return unless has_entrance_music?
|
23
|
+
entrance_music.play
|
12
24
|
end
|
13
25
|
|
14
26
|
def has_entrance_music?
|
@@ -1,14 +1,11 @@
|
|
1
|
-
require 'walkon/device'
|
2
|
-
|
3
1
|
# Finds and plays the entrance music for a given device.
|
4
2
|
|
5
3
|
module Walkon
|
6
4
|
class EntranceMusic
|
7
|
-
attr_reader :
|
5
|
+
attr_reader :filename
|
8
6
|
|
9
|
-
def initialize
|
10
|
-
@
|
11
|
-
@filename = "#{prefix}/#{@device.mac_address}.mp3"
|
7
|
+
def initialize with_file_name
|
8
|
+
@filename = "#{prefix}/#{with_file_name}.mp3"
|
12
9
|
end
|
13
10
|
|
14
11
|
def exists?
|
@@ -18,11 +15,13 @@ module Walkon
|
|
18
15
|
alias present? exists?
|
19
16
|
|
20
17
|
def play
|
21
|
-
|
22
|
-
|
18
|
+
present? and play_track
|
19
|
+
end
|
20
|
+
|
21
|
+
def play_track
|
22
|
+
`xmms #{filename}` == ''
|
23
23
|
end
|
24
24
|
|
25
|
-
private
|
26
25
|
def prefix
|
27
26
|
if Walkon.env == 'test'
|
28
27
|
File.expand_path "../../../spec/fixtures/music", __FILE__
|
data/lib/walkon/hci_tool.rb
CHANGED
@@ -13,17 +13,23 @@ module Walkon
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def scan
|
16
|
-
@results
|
17
|
-
|
18
|
-
|
16
|
+
@results += scan_results_ess_ids
|
17
|
+
@results = @results.uniq
|
18
|
+
@results
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
def scan_results_ess_ids
|
23
|
+
each_line = /\A(..:..:..:..:..:..)\s(.*)\Z/
|
24
|
+
scan_results.reduce([]) do |collection, line|
|
25
|
+
line.scan each_line do |(mac_addr,ess_id)|
|
26
|
+
collection << ess_id.strip
|
19
27
|
end
|
20
28
|
|
21
29
|
collection
|
22
30
|
end
|
23
31
|
end
|
24
32
|
|
25
|
-
private
|
26
|
-
FOR_MAC_ADDRESS = /(..:..:..:..:..:..)/
|
27
33
|
def scan_results
|
28
34
|
`hcitool scan`.split "\n"
|
29
35
|
end
|
data/lib/walkon/version.rb
CHANGED
File without changes
|
data/spec/walkon/daemon_spec.rb
CHANGED
@@ -3,22 +3,28 @@ require 'walkon/daemon'
|
|
3
3
|
|
4
4
|
module Walkon
|
5
5
|
describe Daemon do
|
6
|
-
|
7
|
-
|
6
|
+
it "runs the loop" do
|
7
|
+
expect(subject).to respond_to(:run)
|
8
|
+
end
|
8
9
|
|
10
|
+
it "starts from the command line" do
|
11
|
+
expect(subject.class).to respond_to(:start)
|
12
|
+
end
|
13
|
+
|
14
|
+
context "when a new device is detected" do
|
9
15
|
before do
|
10
|
-
|
11
|
-
|
12
|
-
subject.check_for_devices
|
16
|
+
allow(HciTool).to receive(:scan).and_return ['iPhone5']
|
17
|
+
allow(Device).to receive(:play!).and_return Device.new('iPhone5')
|
18
|
+
subject.send :check_for_devices
|
13
19
|
end
|
14
20
|
|
15
|
-
it "adds the sample
|
16
|
-
expect(subject.devices.map(&:
|
21
|
+
it "adds the sample ess id to devices" do
|
22
|
+
expect(subject.devices.map(&:ess_id)).to include('iPhone5')
|
17
23
|
end
|
18
24
|
|
19
25
|
it "plays device's entrance music" do
|
20
26
|
expect(subject.devices).to_not be_empty
|
21
|
-
device = subject.devices.
|
27
|
+
device = subject.devices.first
|
22
28
|
expect(device).to_not be_nil
|
23
29
|
expect(device).to have_entrance_music
|
24
30
|
end
|
data/spec/walkon/device_spec.rb
CHANGED
@@ -3,14 +3,25 @@ require 'walkon/device'
|
|
3
3
|
|
4
4
|
module Walkon
|
5
5
|
describe Device do
|
6
|
-
subject { Device.new '
|
6
|
+
subject { Device.new 'iPhone5' }
|
7
7
|
|
8
|
-
it "requires a
|
9
|
-
expect(subject.
|
8
|
+
it "requires a ess id for identification" do
|
9
|
+
expect(subject.ess_id).to_not be_nil
|
10
|
+
expect(subject.ess_id).to eq('iPhone5')
|
10
11
|
end
|
11
12
|
|
12
|
-
it "uses
|
13
|
+
it "uses ess id to find entrance music in configured dir" do
|
13
14
|
expect(subject).to have_entrance_music
|
14
15
|
end
|
16
|
+
|
17
|
+
it "delegates to the entrance music to play" do
|
18
|
+
allow(subject.entrance_music).to receive(:play_track).and_return true
|
19
|
+
expect(subject.play).to eq(true)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "does not play when no entrance music" do
|
23
|
+
allow(subject).to receive(:has_entrance_music?).and_return false
|
24
|
+
expect(subject.play).to_not eq(true)
|
25
|
+
end
|
15
26
|
end
|
16
27
|
end
|
@@ -3,24 +3,43 @@ require 'walkon/entrance_music'
|
|
3
3
|
|
4
4
|
module Walkon
|
5
5
|
describe EntranceMusic do
|
6
|
-
|
7
|
-
let(:device) do
|
8
|
-
dev = double :device
|
9
|
-
dev.stub(:mac_address) { mac_address }
|
10
|
-
dev
|
11
|
-
end
|
12
|
-
subject { EntranceMusic.new device }
|
6
|
+
subject { EntranceMusic.new 'iPhone5' }
|
13
7
|
|
14
|
-
|
15
|
-
|
16
|
-
|
8
|
+
context "when the mp3 file is found" do
|
9
|
+
before do
|
10
|
+
allow(File).to receive(:exists?).with(subject.filename).and_return true
|
11
|
+
end
|
12
|
+
|
13
|
+
it "is considered to be present" do
|
14
|
+
expect(subject).to be_present
|
15
|
+
end
|
16
|
+
|
17
|
+
it "is considered to be existant" do
|
18
|
+
expect(subject).to be_exists
|
19
|
+
end
|
17
20
|
|
18
|
-
|
19
|
-
|
21
|
+
it "runs an xmms command to play the track" do
|
22
|
+
allow(subject).to receive(:play_track).and_return true
|
23
|
+
expect(subject.play).to eq(true)
|
24
|
+
end
|
20
25
|
end
|
21
26
|
|
22
|
-
|
23
|
-
|
27
|
+
context "when the mp3 file is not found" do
|
28
|
+
before do
|
29
|
+
allow(File).to receive(:exists?).with(subject.filename).and_return false
|
30
|
+
end
|
31
|
+
|
32
|
+
it "is considered not present" do
|
33
|
+
expect(subject).to_not be_present
|
34
|
+
end
|
35
|
+
|
36
|
+
it "is considered non-existant" do
|
37
|
+
expect(subject).to_not be_exists
|
38
|
+
end
|
39
|
+
|
40
|
+
it "will not run the xmms command to play track" do
|
41
|
+
expect(subject.play).to eq(false)
|
42
|
+
end
|
24
43
|
end
|
25
44
|
end
|
26
45
|
end
|
@@ -2,25 +2,24 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module Walkon
|
4
4
|
describe HciTool do
|
5
|
-
let
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
).split("\n")
|
5
|
+
let :results do
|
6
|
+
[
|
7
|
+
'Scanning...',
|
8
|
+
'00:A1:5D:AB:B2:E9 iPhone5'
|
9
|
+
]
|
11
10
|
end
|
12
11
|
|
13
12
|
before do
|
14
|
-
subject.
|
13
|
+
allow(subject).to receive(:scan_results).and_return results
|
15
14
|
end
|
16
15
|
|
17
16
|
it "starts with no results" do
|
18
17
|
expect(subject.results).to be_empty
|
19
18
|
end
|
20
19
|
|
21
|
-
it "finds
|
20
|
+
it "finds ess ids with a scan" do
|
22
21
|
expect(subject.scan).to_not be_empty
|
23
|
-
expect(subject.results.first).to eq(
|
22
|
+
expect(subject.results.first).to eq('iPhone5')
|
24
23
|
end
|
25
24
|
end
|
26
25
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: walkon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Scott
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-06-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -81,7 +81,7 @@ files:
|
|
81
81
|
- lib/walkon/hci_tool.rb
|
82
82
|
- lib/walkon/version.rb
|
83
83
|
- lib/walkon.rb
|
84
|
-
- spec/fixtures/music/
|
84
|
+
- spec/fixtures/music/iPhone5.mp3
|
85
85
|
- spec/spec_helper.rb
|
86
86
|
- spec/walkon/daemon_spec.rb
|
87
87
|
- spec/walkon/device_spec.rb
|
@@ -115,7 +115,7 @@ signing_key:
|
|
115
115
|
specification_version: 4
|
116
116
|
summary: Play your entrance music
|
117
117
|
test_files:
|
118
|
-
- spec/fixtures/music/
|
118
|
+
- spec/fixtures/music/iPhone5.mp3
|
119
119
|
- spec/spec_helper.rb
|
120
120
|
- spec/walkon/daemon_spec.rb
|
121
121
|
- spec/walkon/device_spec.rb
|