airport_events 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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