Push0r 0.4.4 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/push0r/APNS/ApnsPushMessage.rb +38 -34
- data/lib/push0r/APNS/ApnsService.rb +231 -228
- data/lib/push0r/FlushResult.rb +46 -46
- data/lib/push0r/GCM/GcmPushMessage.rb +24 -24
- data/lib/push0r/GCM/GcmService.rb +126 -124
- data/lib/push0r/PushMessage.rb +27 -27
- data/lib/push0r/Queue.rb +74 -74
- data/lib/push0r/Service.rb +42 -42
- metadata +3 -2
data/lib/push0r/Queue.rb
CHANGED
@@ -1,76 +1,76 @@
|
|
1
1
|
module Push0r
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
2
|
+
|
3
|
+
# A Queue is used to register services to be used to transmit PushMessages. Single PushMessages are then put into the queue and a call to the {#flush} method transmits all enqueued messages using the registered services. In a sense, Queue is the class that ties all the other Push0r components together.
|
4
|
+
# @example
|
5
|
+
# queue = Push0r::Queue.new
|
6
|
+
#
|
7
|
+
# gcm_service = Push0r::GcmService.new("__gcm_api_token__")
|
8
|
+
# queue.register_service(gcm_service)
|
9
|
+
#
|
10
|
+
# apns_service = Push0r::ApnsService.new(File.read("aps.pem"), true)
|
11
|
+
# queue.register_service(apns_service)
|
12
|
+
#
|
13
|
+
# gcm_message = Push0r::GcmPushMessage.new("__registration_id__")
|
14
|
+
# gcm_message.attach({"data" => {"d" => "1"}})
|
15
|
+
#
|
16
|
+
# apns_message = Push0r::ApnsPushMessage.new("__device_token__")
|
17
|
+
# apns_message.attach({"data" => {"v" => "1"}}
|
18
|
+
#
|
19
|
+
# queue.add(gcm_message)
|
20
|
+
# queue.add(apns_message)
|
21
|
+
#
|
22
|
+
# queue.flush
|
23
|
+
class Queue
|
24
|
+
def initialize
|
25
|
+
@services = []
|
26
|
+
@queued_messages = {}
|
27
|
+
end
|
28
|
+
|
29
|
+
# Registers a Service with the Queue
|
30
|
+
# @note Every service can only be registered once with the same queue
|
31
|
+
# @param service [Service] the service to be registered with the queue
|
32
|
+
# @return [void]
|
33
|
+
# @see Service
|
34
|
+
def register_service(service)
|
35
|
+
unless @services.include?(service)
|
36
|
+
@services << service
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# Adds a PushMessage to the queue
|
41
|
+
# @param message [PushMessage] the message to be added to the queue
|
42
|
+
# @return [Boolean] true if message was added to the queue (that is: if any of the registered services can handle the message), otherwise false
|
43
|
+
# @see PushMessage
|
44
|
+
def add(message)
|
45
|
+
@services.each do |service|
|
46
|
+
if service.can_send?(message)
|
47
|
+
if @queued_messages[service].nil?
|
48
|
+
@queued_messages[service] = []
|
49
|
+
end
|
50
|
+
@queued_messages[service] << message
|
51
|
+
return true
|
52
|
+
end
|
53
|
+
end
|
54
|
+
return false
|
55
|
+
end
|
56
|
+
|
57
|
+
# Flushes the queue by transmitting the enqueued messages using the registered services
|
58
|
+
# @return [FlushResult] the result of the operation
|
59
|
+
def flush
|
60
|
+
failed_messages = []
|
61
|
+
new_token_messages = []
|
62
|
+
|
63
|
+
@queued_messages.each do |service, messages|
|
64
|
+
service.init_push
|
65
|
+
messages.each do |message|
|
66
|
+
service.send(message)
|
67
|
+
end
|
68
|
+
(failed, new_token) = service.end_push
|
69
|
+
failed_messages += failed
|
70
|
+
new_token_messages += new_token
|
71
|
+
end
|
72
|
+
@queued_messages = {}
|
73
|
+
return FlushResult.new(failed_messages, new_token_messages)
|
74
|
+
end
|
75
|
+
end
|
76
76
|
end
|
data/lib/push0r/Service.rb
CHANGED
@@ -1,51 +1,51 @@
|
|
1
1
|
module Push0r
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
module ErrorCodes
|
3
|
+
NO_ERROR = -1
|
4
|
+
end
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
# Service is the base class for all implemented push services. A Service encapsulates everything that is necessary to take a batch of push notifications and transmit it to the receivers.
|
7
|
+
# @abstract
|
8
|
+
class Service
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
10
|
+
# Called on the service every time a PushMessage is added to a Queue in order to determine whether it can send the given message.
|
11
|
+
# @param message [PushMessage] the message
|
12
|
+
# @return [Boolean] true if this service can send the given message, otherwise false
|
13
|
+
# @abstract
|
14
|
+
# @see PushMessage
|
15
|
+
# @see Queue
|
16
|
+
def can_send?(message)
|
17
|
+
return false
|
18
|
+
end
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
20
|
+
# Sends a single push message. This is called during the flushing of a Queue for every enqueued PushMessage. The service may create its own internal queue in order to efficiently batch the messages.
|
21
|
+
# @param message [PushMessage] the message to be sent
|
22
|
+
# @return [void]
|
23
|
+
# @abstract
|
24
|
+
# @see PushMessage
|
25
|
+
# @see Queue
|
26
|
+
def send(message)
|
27
|
+
## empty
|
28
|
+
end
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
30
|
+
# Called on the service during the flushing of a Queue before the first PushMessage is sent.
|
31
|
+
# @return [void]
|
32
|
+
# @abstract
|
33
|
+
# @see PushMessage
|
34
|
+
# @see Queue
|
35
|
+
def init_push
|
36
|
+
## empty
|
37
|
+
end
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
39
|
+
# Called on the service during the flushing of a Queue after the last PushMessage has been sent. If the service manages its own internal queue, this is the place to actually transmit all messages.
|
40
|
+
# @return [Array(Array<String>, Array<String>)] Failed new RegId Messages
|
41
|
+
# @abstract
|
42
|
+
# @see PushMessage
|
43
|
+
# @see Queue
|
44
|
+
def end_push
|
45
|
+
## empty
|
46
|
+
return [[], []]
|
47
|
+
end
|
48
|
+
end
|
49
49
|
end
|
50
50
|
|
51
51
|
require_relative 'APNS/ApnsService'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Push0r
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kai Straßmann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-06-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -64,3 +64,4 @@ signing_key:
|
|
64
64
|
specification_version: 4
|
65
65
|
summary: Push0r gem
|
66
66
|
test_files: []
|
67
|
+
has_rdoc:
|