rapns 2.0.0 → 2.0.1
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/CHANGELOG.md +4 -0
- data/lib/rapns/daemon/delivery_queue.rb +14 -32
- data/lib/rapns/daemon/delivery_queue_18.rb +44 -0
- data/lib/rapns/daemon/delivery_queue_19.rb +42 -0
- data/lib/rapns/notification.rb +7 -7
- data/lib/rapns/version.rb +1 -1
- data/lib/rapns.rb +2 -1
- metadata +21 -3
data/CHANGELOG.md
CHANGED
@@ -1,59 +1,41 @@
|
|
1
1
|
module Rapns
|
2
2
|
module Daemon
|
3
|
-
|
3
|
+
if RUBY_VERSION < '1.9'
|
4
|
+
require 'rapns/daemon/delivery_queue_18'
|
5
|
+
ancestor_class = DeliveryQueue18
|
6
|
+
else
|
7
|
+
require 'rapns/daemon/delivery_queue_19'
|
8
|
+
ancestor_class = DeliveryQueue19
|
9
|
+
end
|
10
|
+
|
11
|
+
class DeliveryQueue < ancestor_class
|
4
12
|
class WakeupError < StandardError; end
|
5
13
|
|
6
14
|
def initialize
|
7
|
-
@mutex = Mutex.new
|
8
15
|
@num_notifications = 0
|
9
16
|
@queue = []
|
10
17
|
@waiting = []
|
11
|
-
end
|
12
|
-
|
13
|
-
def push(notification)
|
14
|
-
@mutex.synchronize do
|
15
|
-
@num_notifications += 1
|
16
|
-
@queue.push(notification)
|
17
18
|
|
18
|
-
|
19
|
-
t = @waiting.shift
|
20
|
-
t.wakeup if t
|
21
|
-
rescue ThreadError
|
22
|
-
retry
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def pop
|
28
|
-
@mutex.synchronize do
|
29
|
-
while true
|
30
|
-
if @queue.empty?
|
31
|
-
@waiting.push Thread.current
|
32
|
-
@mutex.sleep
|
33
|
-
else
|
34
|
-
return @queue.shift
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
19
|
+
super
|
38
20
|
end
|
39
21
|
|
40
22
|
def wakeup(thread)
|
41
|
-
|
23
|
+
synchronize do
|
42
24
|
t = @waiting.delete(thread)
|
43
25
|
t.raise WakeupError if t
|
44
26
|
end
|
45
27
|
end
|
46
28
|
|
47
29
|
def size
|
48
|
-
|
30
|
+
synchronize { @queue.size }
|
49
31
|
end
|
50
32
|
|
51
33
|
def notification_processed
|
52
|
-
|
34
|
+
synchronize { @num_notifications -= 1 }
|
53
35
|
end
|
54
36
|
|
55
37
|
def notifications_processed?
|
56
|
-
|
38
|
+
synchronize { @num_notifications == 0 }
|
57
39
|
end
|
58
40
|
end
|
59
41
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Rapns
|
2
|
+
module Daemon
|
3
|
+
class DeliveryQueue18
|
4
|
+
def push(obj)
|
5
|
+
Thread.critical = true
|
6
|
+
@queue.push obj
|
7
|
+
@num_notifications += 1
|
8
|
+
begin
|
9
|
+
t = @waiting.shift
|
10
|
+
t.wakeup if t
|
11
|
+
rescue ThreadError
|
12
|
+
retry
|
13
|
+
ensure
|
14
|
+
Thread.critical = false
|
15
|
+
end
|
16
|
+
begin
|
17
|
+
t.run if t
|
18
|
+
rescue ThreadError
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def pop
|
23
|
+
while (Thread.critical = true; @queue.empty?)
|
24
|
+
@waiting.push Thread.current
|
25
|
+
Thread.stop
|
26
|
+
end
|
27
|
+
@queue.shift
|
28
|
+
ensure
|
29
|
+
Thread.critical = false
|
30
|
+
end
|
31
|
+
|
32
|
+
protected
|
33
|
+
|
34
|
+
def synchronize
|
35
|
+
Thread.critical = true
|
36
|
+
begin
|
37
|
+
yield
|
38
|
+
ensure
|
39
|
+
Thread.critical = false
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Rapns
|
2
|
+
module Daemon
|
3
|
+
class DeliveryQueue19
|
4
|
+
def initialize
|
5
|
+
@mutex = Mutex.new
|
6
|
+
end
|
7
|
+
|
8
|
+
def push(notification)
|
9
|
+
@mutex.synchronize do
|
10
|
+
@num_notifications += 1
|
11
|
+
@queue.push(notification)
|
12
|
+
|
13
|
+
begin
|
14
|
+
t = @waiting.shift
|
15
|
+
t.wakeup if t
|
16
|
+
rescue ThreadError
|
17
|
+
retry
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def pop
|
23
|
+
@mutex.synchronize do
|
24
|
+
while true
|
25
|
+
if @queue.empty?
|
26
|
+
@waiting.push Thread.current
|
27
|
+
@mutex.sleep
|
28
|
+
else
|
29
|
+
return @queue.shift
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
protected
|
36
|
+
|
37
|
+
def synchronize(&blk)
|
38
|
+
@mutex.synchronize(&blk)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/rapns/notification.rb
CHANGED
@@ -18,7 +18,7 @@ module Rapns
|
|
18
18
|
|
19
19
|
def alert=(alert)
|
20
20
|
if alert.is_a?(Hash)
|
21
|
-
write_attribute(:alert,
|
21
|
+
write_attribute(:alert, MultiJson.dump(alert))
|
22
22
|
self.alert_is_json = true if has_attribute?(:alert_is_json)
|
23
23
|
else
|
24
24
|
write_attribute(:alert, alert)
|
@@ -31,22 +31,22 @@ module Rapns
|
|
31
31
|
|
32
32
|
if has_attribute?(:alert_is_json)
|
33
33
|
if alert_is_json?
|
34
|
-
|
34
|
+
MultiJson.load(string_or_json)
|
35
35
|
else
|
36
36
|
string_or_json
|
37
37
|
end
|
38
38
|
else
|
39
|
-
|
39
|
+
MultiJson.load(string_or_json) rescue string_or_json
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
43
|
def attributes_for_device=(attrs)
|
44
44
|
raise ArgumentError, "attributes_for_device must be a Hash" if !attrs.is_a?(Hash)
|
45
|
-
write_attribute(:attributes_for_device,
|
45
|
+
write_attribute(:attributes_for_device, MultiJson.dump(attrs))
|
46
46
|
end
|
47
47
|
|
48
48
|
def attributes_for_device
|
49
|
-
|
49
|
+
MultiJson.load(read_attribute(:attributes_for_device)) if read_attribute(:attributes_for_device)
|
50
50
|
end
|
51
51
|
|
52
52
|
MDM_OVERIDE_KEY = '__rapns_mdm__'
|
@@ -71,7 +71,7 @@ module Rapns
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def payload
|
74
|
-
as_json
|
74
|
+
MultiJson.dump(as_json)
|
75
75
|
end
|
76
76
|
|
77
77
|
def payload_size
|
@@ -85,4 +85,4 @@ module Rapns
|
|
85
85
|
[1, id_for_pack, expiry, 0, 32, device_token, payload_size, payload].pack("cNNccH*na*")
|
86
86
|
end
|
87
87
|
end
|
88
|
-
end
|
88
|
+
end
|
data/lib/rapns/version.rb
CHANGED
data/lib/rapns.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
require 'active_record'
|
2
|
+
require 'multi_json'
|
2
3
|
|
3
4
|
require 'rapns/version'
|
4
5
|
require 'rapns/binary_notification_validator'
|
5
6
|
require 'rapns/device_token_format_validator'
|
6
7
|
require 'rapns/notification'
|
7
8
|
require 'rapns/feedback'
|
8
|
-
require 'rapns/app'
|
9
|
+
require 'rapns/app'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rapns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,24 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
13
|
-
dependencies:
|
12
|
+
date: 2012-07-08 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: multi_json
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.0'
|
14
30
|
description: Easy to use library for Apple's Push Notification Service with Rails
|
15
31
|
3
|
16
32
|
email:
|
@@ -37,6 +53,8 @@ files:
|
|
37
53
|
- lib/rapns/daemon/delivery_handler.rb
|
38
54
|
- lib/rapns/daemon/delivery_handler_pool.rb
|
39
55
|
- lib/rapns/daemon/delivery_queue.rb
|
56
|
+
- lib/rapns/daemon/delivery_queue_18.rb
|
57
|
+
- lib/rapns/daemon/delivery_queue_19.rb
|
40
58
|
- lib/rapns/daemon/disconnection_error.rb
|
41
59
|
- lib/rapns/daemon/feedback_receiver.rb
|
42
60
|
- lib/rapns/daemon/feeder.rb
|