Push0r 0.4.4 → 0.5.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.
- 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:
|