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 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.bind :connected do |ssid, date|
44
+ watcher.on :connected do |ssid, date|
45
45
  puts "Connected to #{ssid} on #{date}"
46
46
  end
47
47
 
48
- watcher.bind :disconnected do |date|
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
@@ -1,14 +1,14 @@
1
- require_relative 'airport_events/event_dispatcher'
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 EventDispatcher
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.bind :connected do |date|
21
+ @kernel_log_parser.subscribe :connected do |date|
22
22
  connected date
23
23
  end
24
24
 
25
- @kernel_log_parser.bind :disconnected do |date|
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
- trigger :connected, Airport.ssid, date
37
+ publish :connected, Airport.ssid, date
34
38
  end
35
39
 
36
40
  def disconnected date
37
- trigger :disconnected, date
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 EventDispatcher
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
- trigger event, DateTime.strptime(line[0..15], '%b %d %H:%M:%S')
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.bind :connected do |ssid, date|
15
+ watcher.on :connected do |ssid, date|
16
16
  connected ssid, date
17
17
  end
18
18
 
19
- watcher.bind :disconnected do |date|
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
@@ -1,3 +1,3 @@
1
1
  module AirportEvents
2
- VERSION = '0.0.2'
2
+ VERSION = '0.1.0'
3
3
  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
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
- version: 0.0.2
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
- date: 2013-02-24 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
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
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - '='
25
- - !ruby/object:Gem::Version
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
- - !ruby/object:Gem::Dependency
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
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - '='
39
- - !ruby/object:Gem::Version
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
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - '='
53
- - !ruby/object:Gem::Version
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
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ! '>='
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- description: Detect and log changes in WiFi network associations on MacOS. Utilizing
70
- the official, but hidden 'airport' command.
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
- files:
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
- metadata: {}
91
+
96
92
  post_install_message:
97
93
  rdoc_options: []
98
- require_paths:
94
+
95
+ require_paths:
99
96
  - lib
100
- required_ruby_version: !ruby/object:Gem::Requirement
101
- requirements:
102
- - - ! '>='
103
- - !ruby/object:Gem::Version
104
- version: '0'
105
- required_rubygems_version: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
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: 2.0.0
112
+ rubygems_version: 1.8.25
113
113
  signing_key:
114
- specification_version: 4
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