airport_events 0.0.2 → 0.1.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.
- data/README.md +2 -2
- data/Versionfile +22 -0
- data/lib/airport_events.rb +11 -7
- data/lib/airport_events/airport.rb +1 -1
- data/lib/airport_events/kernel_log_parser.rb +2 -2
- data/lib/airport_events/logger.rb +2 -2
- data/lib/airport_events/publisher.rb +31 -0
- data/lib/airport_events/version.rb +1 -1
- data/spec/airport_spec.rb +13 -0
- data/spec/kernel_log_parser_spec.rb +0 -0
- data/spec/logger_spec.rb +0 -0
- data/spec/publisher_spec.rb +23 -0
- metadata +75 -71
- checksums.yaml +0 -7
- data/lib/airport_events/event_dispatcher.rb +0 -36
data/README.md
CHANGED
@@ -41,11 +41,11 @@ require 'airport_events'
|
|
41
41
|
# Create a new Watcher instance and set up some event listeners.
|
42
42
|
watcher = AirportEvents::Watcher.new
|
43
43
|
|
44
|
-
watcher.
|
44
|
+
watcher.on :connected do |ssid, date|
|
45
45
|
puts "Connected to #{ssid} on #{date}"
|
46
46
|
end
|
47
47
|
|
48
|
-
watcher.
|
48
|
+
watcher.on :disconnected do |date|
|
49
49
|
puts "Disconnected on #{date}"
|
50
50
|
end
|
51
51
|
|
data/Versionfile
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
automate_git
|
4
|
+
|
5
|
+
read_version do
|
6
|
+
contents = File.read File.join(Dir.pwd, "lib/airport_events/version.rb")
|
7
|
+
instance_eval(contents)
|
8
|
+
AirportEvents::VERSION
|
9
|
+
end
|
10
|
+
|
11
|
+
write_version do |currentVersion, nextVersion|
|
12
|
+
contents = File.read File.join(Dir.pwd, "lib/airport_events/version.rb")
|
13
|
+
contents = contents.sub(currentVersion.to_s, nextVersion.to_s)
|
14
|
+
|
15
|
+
File.open(File.join(Dir.pwd, "lib/airport_events/version.rb"), 'w') do |file|
|
16
|
+
file.write contents
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# after :version do |currentVersion|
|
21
|
+
# system("gem build airport_events.gemspec")
|
22
|
+
# end
|
data/lib/airport_events.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
require_relative 'airport_events/
|
1
|
+
require_relative 'airport_events/publisher'
|
2
2
|
require_relative 'airport_events/airport'
|
3
3
|
require_relative 'airport_events/kernel_log_parser'
|
4
4
|
require_relative 'airport_events/logger'
|
5
5
|
|
6
6
|
module AirportEvents
|
7
7
|
class Watcher
|
8
|
-
include
|
8
|
+
include Publisher
|
9
9
|
|
10
10
|
def start
|
11
|
-
Airport.ensure_airport_command
|
11
|
+
Airport.ensure_airport_command!
|
12
12
|
|
13
13
|
if Airport.connected?
|
14
14
|
connected DateTime.now
|
@@ -18,23 +18,27 @@ module AirportEvents
|
|
18
18
|
|
19
19
|
@kernel_log_parser = KernelLogParser.new
|
20
20
|
|
21
|
-
@kernel_log_parser.
|
21
|
+
@kernel_log_parser.subscribe :connected do |date|
|
22
22
|
connected date
|
23
23
|
end
|
24
24
|
|
25
|
-
@kernel_log_parser.
|
25
|
+
@kernel_log_parser.subscribe :disconnected do |date|
|
26
26
|
disconnected date
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
def on event, &blk
|
31
|
+
subscribe event, &blk
|
32
|
+
end
|
33
|
+
|
30
34
|
private
|
31
35
|
|
32
36
|
def connected date
|
33
|
-
|
37
|
+
publish :connected, Airport.ssid, date
|
34
38
|
end
|
35
39
|
|
36
40
|
def disconnected date
|
37
|
-
|
41
|
+
publish :disconnected, date
|
38
42
|
end
|
39
43
|
|
40
44
|
end
|
@@ -2,7 +2,7 @@ module AirportEvents
|
|
2
2
|
class Airport
|
3
3
|
INFO_COMMAND = "airport -I 2>&1"
|
4
4
|
|
5
|
-
def self.ensure_airport_command
|
5
|
+
def self.ensure_airport_command!
|
6
6
|
run_info_command
|
7
7
|
unless $?.exitstatus == 0
|
8
8
|
raise "Fatal: the 'airport' command is not in PATH. Run 'airport-log enable_airport' for instructions."
|
@@ -3,7 +3,7 @@ require 'date'
|
|
3
3
|
|
4
4
|
module AirportEvents
|
5
5
|
class KernelLogParser
|
6
|
-
include
|
6
|
+
include Publisher
|
7
7
|
|
8
8
|
def initialize
|
9
9
|
Thread.new do
|
@@ -14,7 +14,7 @@ module AirportEvents
|
|
14
14
|
log.tail do |line|
|
15
15
|
|
16
16
|
if event = match_event(line)
|
17
|
-
|
17
|
+
publish event, DateTime.strptime(line[0..15], '%b %d %H:%M:%S')
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -12,11 +12,11 @@ module AirportEvents
|
|
12
12
|
|
13
13
|
watcher = AirportEvents::Watcher.new
|
14
14
|
|
15
|
-
watcher.
|
15
|
+
watcher.on :connected do |ssid, date|
|
16
16
|
connected ssid, date
|
17
17
|
end
|
18
18
|
|
19
|
-
watcher.
|
19
|
+
watcher.on :disconnected do |date|
|
20
20
|
disconnected date
|
21
21
|
end
|
22
22
|
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module AirportEvents
|
2
|
+
module Publisher
|
3
|
+
|
4
|
+
module InstanceMethods
|
5
|
+
def subscribe(event, &blk)
|
6
|
+
if subscribers[event].nil?
|
7
|
+
subscribers[event] = Array.new
|
8
|
+
end
|
9
|
+
|
10
|
+
subscribers[event].push blk
|
11
|
+
end
|
12
|
+
|
13
|
+
def publish(event, *args)
|
14
|
+
unless subscribers[event].nil?
|
15
|
+
subscribers[event].each do |blk|
|
16
|
+
blk.call *args
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def subscribers
|
22
|
+
@subscribers ||= Hash.new
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.included(base)
|
27
|
+
base.send :include, InstanceMethods
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
describe AirportEvents::Publisher do
|
3
|
+
|
4
|
+
it 'should throw and exception when the airport command is not in path' do
|
5
|
+
|
6
|
+
expect {
|
7
|
+
$?.exitstatus = 1
|
8
|
+
::AirportEvents::Airport.ensure_airport_command!
|
9
|
+
}.to raise_error
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
File without changes
|
data/spec/logger_spec.rb
ADDED
File without changes
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
describe AirportEvents::Publisher do
|
3
|
+
|
4
|
+
class Dog
|
5
|
+
include AirportEvents::Publisher
|
6
|
+
end
|
7
|
+
|
8
|
+
before(:each) do
|
9
|
+
@dog = Dog.new
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should accept listeners" do
|
13
|
+
@dog.subscribe :bark do |dBm| end
|
14
|
+
@dog.subscribe :wag do |freq| end
|
15
|
+
|
16
|
+
expect(
|
17
|
+
[ @dog.subscribers[:bark],
|
18
|
+
@dog.subscribers[:wag] ].collect{|subscriber| subscriber != nil}.length
|
19
|
+
).to eq(2)
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
metadata
CHANGED
@@ -1,119 +1,123 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: airport_events
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.0
|
5
6
|
platform: ruby
|
6
|
-
authors:
|
7
|
+
authors:
|
7
8
|
- Jonathan Pettersson
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
|
13
|
+
date: 2013-02-24 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
14
16
|
name: rspec
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - '='
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 2.13.0
|
20
|
-
type: :development
|
21
17
|
prerelease: false
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
20
|
+
requirements:
|
21
|
+
- - "="
|
22
|
+
- !ruby/object:Gem::Version
|
26
23
|
version: 2.13.0
|
27
|
-
|
24
|
+
type: :development
|
25
|
+
version_requirements: *id001
|
26
|
+
- !ruby/object:Gem::Dependency
|
28
27
|
name: thor
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - '='
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 0.17.0
|
34
|
-
type: :runtime
|
35
28
|
prerelease: false
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
29
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
|
+
none: false
|
31
|
+
requirements:
|
32
|
+
- - "="
|
33
|
+
- !ruby/object:Gem::Version
|
40
34
|
version: 0.17.0
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: file-tail
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - '='
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 1.0.12
|
48
35
|
type: :runtime
|
36
|
+
version_requirements: *id002
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: file-tail
|
49
39
|
prerelease: false
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
40
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - "="
|
44
|
+
- !ruby/object:Gem::Version
|
54
45
|
version: 1.0.12
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: json
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ! '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
46
|
type: :runtime
|
47
|
+
version_requirements: *id003
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: json
|
63
50
|
prerelease: false
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
51
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: "0"
|
57
|
+
type: :runtime
|
58
|
+
version_requirements: *id004
|
59
|
+
description: Detect and log changes in WiFi network associations on MacOS. Utilizing the official, but hidden 'airport' command.
|
71
60
|
email: jonathan@spacetofu.com
|
72
|
-
executables:
|
61
|
+
executables:
|
73
62
|
- airport-log
|
74
63
|
extensions: []
|
64
|
+
|
75
65
|
extra_rdoc_files: []
|
76
|
-
|
66
|
+
|
67
|
+
files:
|
77
68
|
- .gitignore
|
78
69
|
- .rspec
|
79
70
|
- Gemfile
|
80
71
|
- README.md
|
81
72
|
- Rakefile
|
73
|
+
- Versionfile
|
82
74
|
- airport_events.gemspec
|
83
75
|
- bin/airport-log
|
84
76
|
- lib/airport_events.rb
|
85
77
|
- lib/airport_events/airport.rb
|
86
|
-
- lib/airport_events/event_dispatcher.rb
|
87
78
|
- lib/airport_events/kernel_log_parser.rb
|
88
79
|
- lib/airport_events/logger.rb
|
80
|
+
- lib/airport_events/publisher.rb
|
89
81
|
- lib/airport_events/version.rb
|
82
|
+
- spec/airport_spec.rb
|
90
83
|
- spec/fixtures/airport.sample.txt
|
91
84
|
- spec/fixtures/kernel.log.sample
|
85
|
+
- spec/kernel_log_parser_spec.rb
|
86
|
+
- spec/logger_spec.rb
|
87
|
+
- spec/publisher_spec.rb
|
92
88
|
- spec/spec_helper.rb
|
93
89
|
homepage: https://github.com/jpettersson/airport_events
|
94
90
|
licenses: []
|
95
|
-
|
91
|
+
|
96
92
|
post_install_message:
|
97
93
|
rdoc_options: []
|
98
|
-
|
94
|
+
|
95
|
+
require_paths:
|
99
96
|
- lib
|
100
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
97
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: "0"
|
103
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
|
+
none: false
|
105
|
+
requirements:
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: "0"
|
110
109
|
requirements: []
|
110
|
+
|
111
111
|
rubyforge_project:
|
112
|
-
rubygems_version:
|
112
|
+
rubygems_version: 1.8.25
|
113
113
|
signing_key:
|
114
|
-
specification_version:
|
114
|
+
specification_version: 3
|
115
115
|
summary: A MacOS specific library to receive WiFi related events
|
116
|
-
test_files:
|
116
|
+
test_files:
|
117
|
+
- spec/airport_spec.rb
|
117
118
|
- spec/fixtures/airport.sample.txt
|
118
119
|
- spec/fixtures/kernel.log.sample
|
120
|
+
- spec/kernel_log_parser_spec.rb
|
121
|
+
- spec/logger_spec.rb
|
122
|
+
- spec/publisher_spec.rb
|
119
123
|
- spec/spec_helper.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 47d41f6753ff18dd14d43e0fde4d204b792c5138
|
4
|
-
data.tar.gz: edd71ac189400ea7cd79bf1aa4318845d960bc74
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 0de2ac852c75c2b4240c27c45c5fe3510afc4f8ca8ea6298b410bf0bea3da5b2d3bd1fc1e2b74f669ba197a7fd0df27f95c7ffda497ca1ce9b34f44d25706179
|
7
|
-
data.tar.gz: e6e7f6e5831f3408b197fb43d7e20af41256ffb0aa76e764597d4f7a4ebd87b7094fe975640d57410fefd88343825272064c18bdab7d81f6f580b61587ace2fb
|
@@ -1,36 +0,0 @@
|
|
1
|
-
module AirportEvents
|
2
|
-
module EventDispatcher
|
3
|
-
|
4
|
-
module InstanceMethods
|
5
|
-
def bind(event, &blk)
|
6
|
-
if observers[event].nil?
|
7
|
-
observers[event] = Array.new
|
8
|
-
end
|
9
|
-
|
10
|
-
observers[event].push blk
|
11
|
-
end
|
12
|
-
|
13
|
-
# TODO: unbind
|
14
|
-
#def unbind
|
15
|
-
#
|
16
|
-
#end
|
17
|
-
|
18
|
-
def trigger(event, *args)
|
19
|
-
unless observers[event].nil?
|
20
|
-
observers[event].each do |blk|
|
21
|
-
blk.call *args
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def observers
|
27
|
-
@observers ||= Hash.new
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def self.included(base)
|
32
|
-
base.send :include, InstanceMethods
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
end
|