eventmachine-distributed-notification 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.rdoc CHANGED
@@ -9,8 +9,6 @@ An {EventMachine}[http://wiki.github.com/eventmachine/eventmachine/] extension t
9
9
  === Watch Notification
10
10
 
11
11
  class Watcher < EM::DistributedNotificationWatch
12
- attr_accessor :value
13
-
14
12
  def notify(name, user_info)
15
13
  puts 'now playing %s' % [user_info['Artist'], user_info['Name']].join(' - ')
16
14
  end
@@ -20,6 +18,12 @@ An {EventMachine}[http://wiki.github.com/eventmachine/eventmachine/] extension t
20
18
  EM.watch_distributed_notification('com.apple.iTunes.playerInfo', Watcher)
21
19
  }
22
20
 
21
+ === Post Notification
22
+
23
+ EM.run {
24
+ EM.post_distributed_notification('com.buycheapviagraonlinenow.xxx', 'data')
25
+ }
26
+
23
27
  == Contributing to eventmachine-distributed-notification
24
28
 
25
29
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
data/Rakefile CHANGED
@@ -27,19 +27,21 @@ end
27
27
  # rule to build the extension: this says
28
28
  # that the extension should be rebuilt
29
29
  # after any change to the files in ext
30
- ext_name = 'observer_native'
31
- file "lib/#{ext_name}.bundle" =>
32
- Dir.glob("ext/#{ext_name}/*{.rb,.m}") do
33
- Dir.chdir("ext/#{ext_name}") do
34
- # this does essentially the same thing
35
- # as what RubyGems does
36
- ruby "extconf.rb"
37
- sh "make"
30
+ ext_names = %w/observer_native poster_native/
31
+ ext_names.each do |ext_name|
32
+ file "lib/#{ext_name}.bundle" =>
33
+ Dir.glob("ext/#{ext_name}/*{.rb,.m}") do
34
+ Dir.chdir("ext/#{ext_name}") do
35
+ # this does essentially the same thing
36
+ # as what RubyGems does
37
+ ruby "extconf.rb"
38
+ sh "make"
39
+ end
40
+ cp "ext/#{ext_name}/#{ext_name}.bundle", "lib/"
38
41
  end
39
- cp "ext/#{ext_name}/#{ext_name}.bundle", "lib/"
40
- end
41
42
 
42
- task :spec => "lib/#{ext_name}.bundle"
43
+ task :spec => "lib/#{ext_name}.bundle"
44
+ end
43
45
 
44
46
  Jeweler::RubygemsDotOrgTasks.new
45
47
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.1.0
@@ -0,0 +1,11 @@
1
+ require 'eventmachine-distributed-notification'
2
+
3
+ module Watcher
4
+ def notify(name, user_info)
5
+ puts user_info['data']
6
+ end
7
+ end
8
+
9
+ EM.run {
10
+ EM.watch_distributed_notification('client_server_example', Watcher)
11
+ }
@@ -0,0 +1,7 @@
1
+ require 'eventmachine-distributed-notification'
2
+
3
+ EM.run {
4
+ EM::add_periodic_timer(1) do
5
+ EM.post_distributed_notification('client_server_example', Time.now.to_s)
6
+ end
7
+ }
@@ -0,0 +1,14 @@
1
+ require "mkmf"
2
+
3
+ # Name your extension
4
+ extension_name = 'poster_native'
5
+
6
+ # Set your target name
7
+ dir_config(extension_name)
8
+
9
+ $LDFLAGS += ' -framework CoreFoundation -framework CoreServices'
10
+
11
+ have_header(extension_name)
12
+
13
+ # Do the work
14
+ create_makefile(extension_name)
@@ -0,0 +1,2 @@
1
+ #include <ruby.h>
2
+ #import <Foundation/Foundation.h>
@@ -0,0 +1,55 @@
1
+ #import "poster_native.h"
2
+
3
+ static VALUE rb_cPosterNative;
4
+
5
+ struct PosterObject {
6
+ };
7
+
8
+ void cPosterNative_free(void *ptr) {
9
+ free(ptr);
10
+ }
11
+
12
+ VALUE createInstance() {
13
+ struct PosterObject *obj;
14
+
15
+ obj = malloc(sizeof(struct PosterObject));
16
+
17
+ return Data_Wrap_Struct(rb_cPosterNative, 0, cPosterNative_free, obj);
18
+ }
19
+
20
+ static VALUE cPosterNative_new(int argc, VALUE *argv, VALUE klass)
21
+ {
22
+ NSAutoreleasePool *pool = [NSAutoreleasePool new];
23
+
24
+ return createInstance();
25
+ }
26
+
27
+ static VALUE cPosterNative_post(int argc, VALUE *argv, VALUE self)
28
+ {
29
+ VALUE name, data;
30
+ NSDictionary *userInfo;
31
+
32
+ rb_scan_args(argc, argv, "2", &name, &data);
33
+
34
+ userInfo = [NSDictionary dictionaryWithObject:[NSString stringWithUTF8String:StringValuePtr(data)] forKey:@"data"];
35
+
36
+ [[NSDistributedNotificationCenter defaultCenter]
37
+ postNotificationName:[NSString stringWithUTF8String:StringValuePtr(name)]
38
+ object:nil
39
+ userInfo:userInfo
40
+ deliverImmediately:YES];
41
+
42
+ [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
43
+
44
+ return Qnil;
45
+ }
46
+
47
+ void Init_poster_native(void){
48
+ VALUE rb_mEventMachine, rb_mDistributedNotification;
49
+
50
+ rb_mEventMachine = rb_define_module("EventMachine");
51
+ rb_mDistributedNotification = rb_define_module_under(rb_mEventMachine, "DistributedNotification");
52
+ rb_cPosterNative = rb_define_class_under(rb_mDistributedNotification, "PosterNative", rb_cObject);
53
+ rb_define_singleton_method(rb_cPosterNative, "new", cPosterNative_new, -1);
54
+ rb_define_method(rb_cPosterNative, "post", cPosterNative_post, -1);
55
+ }
@@ -1,7 +1,20 @@
1
1
  require 'eventmachine'
2
2
  require 'observer_native'
3
+ require 'poster_native'
3
4
 
4
5
  module EventMachine
6
+ module DistributedNotification
7
+ class Poster
8
+ def initialize
9
+ @poster = PosterNative.new
10
+ end
11
+
12
+ def post(name, data)
13
+ @poster.post(name, data)
14
+ end
15
+ end
16
+ end
17
+
5
18
  class DistributedNotificationWatch
6
19
  def initialize(name)
7
20
  @observer = DistributedNotification::ObserverNative.new(name, self)
@@ -28,4 +41,8 @@ module EventMachine
28
41
  c.start
29
42
  c
30
43
  end
44
+
45
+ def self.post_distributed_notification(name, data)
46
+ DistributedNotification::Poster.new.post(name, data)
47
+ end
31
48
  end
@@ -10,7 +10,23 @@ class Watcher < EM::DistributedNotificationWatch
10
10
 
11
11
  def notify(name, user_info)
12
12
  @value = name
13
- p user_info
13
+ end
14
+ end
15
+
16
+ describe EventMachine::DistributedNotification::Poster do
17
+ it 'should post distributed notifications' do
18
+ watcher = Watcher.new('xxx')
19
+
20
+ EM.run {
21
+ watcher.start
22
+
23
+ EM::add_timer(1) {
24
+ EM::post_distributed_notification('xxx', 'yyy')
25
+ EM.stop
26
+ }
27
+ }
28
+
29
+ watcher.value.should_not be_nil
14
30
  end
15
31
  end
16
32
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eventmachine-distributed-notification
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-03-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: eventmachine
16
- requirement: &70326960645620 !ruby/object:Gem::Requirement
16
+ requirement: &70185138676260 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70326960645620
24
+ version_requirements: *70185138676260
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70326960656940 !ruby/object:Gem::Requirement
27
+ requirement: &70185138674940 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 2.8.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70326960656940
35
+ version_requirements: *70185138674940
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rdoc
38
- requirement: &70326960666960 !ruby/object:Gem::Requirement
38
+ requirement: &70185138673060 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '3.12'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70326960666960
46
+ version_requirements: *70185138673060
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
- requirement: &70326960665560 !ruby/object:Gem::Requirement
49
+ requirement: &70185138684820 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.1.0
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70326960665560
57
+ version_requirements: *70185138684820
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: jeweler
60
- requirement: &70326960664060 !ruby/object:Gem::Requirement
60
+ requirement: &70185138682440 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 1.8.3
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70326960664060
68
+ version_requirements: *70185138682440
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rb-appscript
71
- requirement: &70326960662920 !ruby/object:Gem::Requirement
71
+ requirement: &70185138681200 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,13 +76,14 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70326960662920
79
+ version_requirements: *70185138681200
80
80
  description: An EventMachine extension to watch OSX's Distributed Notification, posted
81
81
  by iTunes etc.
82
82
  email: youpy@buycheapviagraonlinenow.com
83
83
  executables: []
84
84
  extensions:
85
85
  - ext/observer_native/extconf.rb
86
+ - ext/poster_native/extconf.rb
86
87
  extra_rdoc_files:
87
88
  - LICENSE.txt
88
89
  - README.rdoc
@@ -95,10 +96,15 @@ files:
95
96
  - README.rdoc
96
97
  - Rakefile
97
98
  - VERSION
99
+ - examples/client.rb
100
+ - examples/server.rb
98
101
  - ext/observer_native/compat.h
99
102
  - ext/observer_native/extconf.rb
100
103
  - ext/observer_native/observer_native.h
101
104
  - ext/observer_native/observer_native.m
105
+ - ext/poster_native/extconf.rb
106
+ - ext/poster_native/poster_native.h
107
+ - ext/poster_native/poster_native.m
102
108
  - lib/eventmachine-distributed-notification.rb
103
109
  - spec/eventmachine-distributed-notification_spec.rb
104
110
  - spec/spec_helper.rb
@@ -117,7 +123,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
117
123
  version: '0'
118
124
  segments:
119
125
  - 0
120
- hash: 2730155235392312301
126
+ hash: -3278988449120356185
121
127
  required_rubygems_version: !ruby/object:Gem::Requirement
122
128
  none: false
123
129
  requirements: