rapns 3.0.1-java → 3.1.0-java
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 +10 -2
- data/README.md +26 -3
- data/bin/rapns +2 -7
- data/lib/generators/templates/add_gcm.rb +3 -1
- data/lib/generators/templates/rapns.rb +42 -11
- data/lib/rapns.rb +11 -1
- data/lib/rapns/apns/notification.rb +8 -2
- data/lib/rapns/app.rb +3 -3
- data/lib/rapns/configuration.rb +46 -13
- data/lib/rapns/daemon.rb +33 -22
- data/lib/rapns/daemon/apns/connection.rb +12 -9
- data/lib/rapns/daemon/apns/delivery_handler.rb +1 -1
- data/lib/rapns/daemon/apns/feedback_receiver.rb +6 -2
- data/lib/rapns/daemon/app_runner.rb +23 -7
- data/lib/rapns/daemon/delivery.rb +5 -1
- data/lib/rapns/daemon/delivery_handler.rb +4 -0
- data/lib/rapns/daemon/feeder.rb +26 -5
- data/lib/rapns/daemon/reflectable.rb +13 -0
- data/lib/rapns/embed.rb +28 -0
- data/lib/rapns/gcm/notification.rb +7 -2
- data/lib/rapns/gcm/payload_data_size_validator.rb +13 -0
- data/lib/rapns/gcm/registration_ids_count_validator.rb +13 -0
- data/lib/rapns/push.rb +12 -0
- data/lib/rapns/reflection.rb +44 -0
- data/lib/rapns/version.rb +1 -1
- data/spec/support/cert_with_password.pem +90 -0
- data/spec/support/cert_without_password.pem +59 -0
- data/spec/unit/apns/app_spec.rb +15 -1
- data/spec/unit/apns/notification_spec.rb +16 -1
- data/spec/unit/configuration_spec.rb +10 -1
- data/spec/unit/daemon/apns/connection_spec.rb +11 -2
- data/spec/unit/daemon/apns/delivery_handler_spec.rb +1 -1
- data/spec/unit/daemon/apns/delivery_spec.rb +10 -0
- data/spec/unit/daemon/apns/feedback_receiver_spec.rb +16 -7
- data/spec/unit/daemon/delivery_handler_shared.rb +8 -0
- data/spec/unit/daemon/feeder_spec.rb +37 -6
- data/spec/unit/daemon/gcm/delivery_spec.rb +33 -1
- data/spec/unit/daemon/reflectable_spec.rb +27 -0
- data/spec/unit/daemon_spec.rb +55 -9
- data/spec/unit/embed_spec.rb +44 -0
- data/spec/unit/gcm/notification_spec.rb +9 -3
- data/spec/unit/push_spec.rb +28 -0
- data/spec/unit/reflection_spec.rb +34 -0
- data/spec/unit_spec_helper.rb +4 -62
- metadata +22 -5
- data/lib/rapns/gcm/payload_size_validator.rb +0 -13
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'unit_spec_helper'
|
2
|
+
|
3
|
+
describe Rapns::Daemon::Reflectable do
|
4
|
+
class TestReflectable
|
5
|
+
include Rapns::Daemon::Reflectable
|
6
|
+
end
|
7
|
+
|
8
|
+
let(:logger) { stub(:error => nil) }
|
9
|
+
let(:test_reflectable) { TestReflectable.new }
|
10
|
+
|
11
|
+
before do
|
12
|
+
Rapns.reflections.stub(:__dispatch)
|
13
|
+
Rapns::Daemon.stub(:logger => logger)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'dispatches the given reflection' do
|
17
|
+
Rapns.reflections.should_receive(:__dispatch).with(:error)
|
18
|
+
test_reflectable.reflect(:error)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'logs errors raise by the reflection' do
|
22
|
+
error = StandardError.new
|
23
|
+
Rapns.reflections.stub(:__dispatch).and_raise(error)
|
24
|
+
Rapns::Daemon.logger.should_receive(:error).with(error)
|
25
|
+
test_reflectable.reflect(:error)
|
26
|
+
end
|
27
|
+
end
|
data/spec/unit/daemon_spec.rb
CHANGED
@@ -5,7 +5,8 @@ describe Rapns::Daemon, "when starting" do
|
|
5
5
|
|
6
6
|
let(:certificate) { stub }
|
7
7
|
let(:password) { stub }
|
8
|
-
let(:config) { stub(:pid_file => nil, :
|
8
|
+
let(:config) { stub(:pid_file => nil, :airbrake_notify => false,
|
9
|
+
:foreground => true, :embedded => false, :push => false) }
|
9
10
|
let(:logger) { stub(:info => nil, :error => nil, :warn => nil) }
|
10
11
|
|
11
12
|
before do
|
@@ -31,6 +32,35 @@ describe Rapns::Daemon, "when starting" do
|
|
31
32
|
Rapns::Daemon.start
|
32
33
|
end
|
33
34
|
|
35
|
+
it "does not fork into a daemon if the push option is true" do
|
36
|
+
config.stub(:push => true)
|
37
|
+
Rapns::Daemon.should_not_receive(:daemonize)
|
38
|
+
Rapns::Daemon.start
|
39
|
+
end
|
40
|
+
|
41
|
+
it "does not fork into a daemon if the embedded option is true" do
|
42
|
+
config.stub(:embedded => true)
|
43
|
+
Rapns::Daemon.should_not_receive(:daemonize)
|
44
|
+
Rapns::Daemon.start
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'sets up setup signal traps' do
|
48
|
+
Rapns::Daemon.should_receive(:setup_signal_traps)
|
49
|
+
Rapns::Daemon.start
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'does not setup signal traps when embedded' do
|
53
|
+
config.stub(:embedded => true)
|
54
|
+
Rapns::Daemon.should_not_receive(:setup_signal_traps)
|
55
|
+
Rapns::Daemon.start
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'does not setup signal traps when in push mode' do
|
59
|
+
config.stub(:push => true)
|
60
|
+
Rapns::Daemon.should_not_receive(:setup_signal_traps)
|
61
|
+
Rapns::Daemon.start
|
62
|
+
end
|
63
|
+
|
34
64
|
it "writes the process ID to the PID file" do
|
35
65
|
Rapns::Daemon.should_receive(:write_pid_file)
|
36
66
|
Rapns::Daemon.start
|
@@ -44,7 +74,7 @@ describe Rapns::Daemon, "when starting" do
|
|
44
74
|
end
|
45
75
|
|
46
76
|
it "starts the feeder" do
|
47
|
-
Rapns::Daemon::Feeder.should_receive(:start)
|
77
|
+
Rapns::Daemon::Feeder.should_receive(:start)
|
48
78
|
Rapns::Daemon.start
|
49
79
|
end
|
50
80
|
|
@@ -77,6 +107,22 @@ describe Rapns::Daemon, "when starting" do
|
|
77
107
|
Rapns::Daemon.start
|
78
108
|
end
|
79
109
|
|
110
|
+
it 'does not exit if Rapns has not been upgraded and is embedded' do
|
111
|
+
config.stub(:embedded => true)
|
112
|
+
Rapns::App.stub(:count).and_raise(ActiveRecord::StatementInvalid)
|
113
|
+
Rapns::Daemon.should_receive(:puts).any_number_of_times
|
114
|
+
Rapns::Daemon.should_not_receive(:exit)
|
115
|
+
Rapns::Daemon.start
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'does not exit if Rapns has not been upgraded and is in push mode' do
|
119
|
+
config.stub(:push => true)
|
120
|
+
Rapns::App.stub(:count).and_raise(ActiveRecord::StatementInvalid)
|
121
|
+
Rapns::Daemon.should_receive(:puts).any_number_of_times
|
122
|
+
Rapns::Daemon.should_not_receive(:exit)
|
123
|
+
Rapns::Daemon.start
|
124
|
+
end
|
125
|
+
|
80
126
|
it 'warns if rapns.yml still exists' do
|
81
127
|
File.should_receive(:exists?).with('/rails_root/config/rapns/rapns.yml').and_return(true)
|
82
128
|
logger.should_receive(:warn).with("Since 2.0.0 rapns uses command-line options and a Ruby based configuration file.\nPlease run 'rails g rapns' to generate a new configuration file into config/initializers.\nRemove config/rapns/rapns.yml to avoid this warning.\n")
|
@@ -97,13 +143,13 @@ describe Rapns::Daemon, "when being shutdown" do
|
|
97
143
|
# These tests do not work on JRuby.
|
98
144
|
unless defined? JRUBY_VERSION
|
99
145
|
it "shuts down when signaled signaled SIGINT" do
|
100
|
-
Rapns::Daemon.
|
146
|
+
Rapns::Daemon.setup_signal_traps
|
101
147
|
Rapns::Daemon.should_receive(:shutdown)
|
102
148
|
Process.kill("SIGINT", Process.pid)
|
103
149
|
end
|
104
150
|
|
105
151
|
it "shuts down when signaled signaled SIGTERM" do
|
106
|
-
Rapns::Daemon.
|
152
|
+
Rapns::Daemon.setup_signal_traps
|
107
153
|
Rapns::Daemon.should_receive(:shutdown)
|
108
154
|
Process.kill("SIGTERM", Process.pid)
|
109
155
|
end
|
@@ -111,29 +157,29 @@ describe Rapns::Daemon, "when being shutdown" do
|
|
111
157
|
|
112
158
|
it "stops the feeder" do
|
113
159
|
Rapns::Daemon::Feeder.should_receive(:stop)
|
114
|
-
Rapns::Daemon.
|
160
|
+
Rapns::Daemon.shutdown
|
115
161
|
end
|
116
162
|
|
117
163
|
it "stops the app runners" do
|
118
164
|
Rapns::Daemon::AppRunner.should_receive(:stop)
|
119
|
-
Rapns::Daemon.
|
165
|
+
Rapns::Daemon.shutdown
|
120
166
|
end
|
121
167
|
|
122
168
|
it "removes the PID file if one was written" do
|
123
169
|
File.stub(:exists?).and_return(true)
|
124
170
|
File.should_receive(:delete).with("/rails_root/rapns.pid")
|
125
|
-
Rapns::Daemon.
|
171
|
+
Rapns::Daemon.shutdown
|
126
172
|
end
|
127
173
|
|
128
174
|
it "does not attempt to remove the PID file if it does not exist" do
|
129
175
|
File.stub(:exists?).and_return(false)
|
130
176
|
File.should_not_receive(:delete)
|
131
|
-
Rapns::Daemon.
|
177
|
+
Rapns::Daemon.shutdown
|
132
178
|
end
|
133
179
|
|
134
180
|
it "does not attempt to remove the PID file if one was not written" do
|
135
181
|
config.stub(:pid_file).and_return(nil)
|
136
182
|
File.should_not_receive(:delete)
|
137
|
-
Rapns::Daemon.
|
183
|
+
Rapns::Daemon.shutdown
|
138
184
|
end
|
139
185
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'unit_spec_helper'
|
2
|
+
|
3
|
+
describe Rapns, 'embed' do
|
4
|
+
before do
|
5
|
+
Rapns::Daemon.stub(:start)
|
6
|
+
Kernel.stub(:at_exit)
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'sets the embedded config option to true' do
|
10
|
+
Rapns.embed
|
11
|
+
Rapns.config.embedded.should be_true
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'starts the daemon' do
|
15
|
+
Rapns::Daemon.should_receive(:start)
|
16
|
+
Rapns.embed
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'overrides the default config options with those given as a hash' do
|
20
|
+
Rapns.config.push_poll = 4
|
21
|
+
expect { Rapns.embed(:push_poll => 2) }.to change(Rapns.config, :push_poll).to(2)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe Rapns, 'shutdown' do
|
26
|
+
it 'shuts down the daemon' do
|
27
|
+
Rapns::Daemon.should_receive(:shutdown)
|
28
|
+
Rapns.shutdown
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe Rapns, 'sync' do
|
33
|
+
it 'syncs the AppRunner' do
|
34
|
+
Rapns::Daemon::AppRunner.should_receive(:sync)
|
35
|
+
Rapns.sync
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe Rapns, 'debug' do
|
40
|
+
it 'debugs the AppRunner' do
|
41
|
+
Rapns::Daemon::AppRunner.should_receive(:debug)
|
42
|
+
Rapns.debug
|
43
|
+
end
|
44
|
+
end
|
@@ -12,10 +12,10 @@ describe Rapns::Gcm::Notification do
|
|
12
12
|
|
13
13
|
it { should validate_presence_of :registration_ids }
|
14
14
|
|
15
|
-
it
|
15
|
+
it "has a 'data' payload limit of 4096 bytes" do
|
16
16
|
notification.data = { :key => "a" * 4096 }
|
17
17
|
notification.valid?.should be_false
|
18
|
-
notification.errors[:base].should == ["GCM notification payload cannot be larger than 4096 bytes."]
|
18
|
+
notification.errors[:base].should == ["GCM notification payload data cannot be larger than 4096 bytes."]
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'allows assignment of many registration IDs' do
|
@@ -26,6 +26,12 @@ describe Rapns::Gcm::Notification do
|
|
26
26
|
reloaded_notification.registration_ids.should == ['a', 'b']
|
27
27
|
end
|
28
28
|
|
29
|
+
it 'num of registration Ids limit of 1000' do
|
30
|
+
notification.registration_ids = ['a']*(1000+1)
|
31
|
+
notification.valid?.should be_false
|
32
|
+
notification.errors[:base].should == ["GCM notification num of registration_ids cannot be larger than 1000."]
|
33
|
+
end
|
34
|
+
|
29
35
|
it 'allows assignment of a single registration ID' do
|
30
36
|
notification.app = app
|
31
37
|
notification.registration_ids = 'a'
|
@@ -52,4 +58,4 @@ describe Rapns::Gcm::Notification do
|
|
52
58
|
notification.collapse_key = 'sync'
|
53
59
|
notification.as_json['time_to_live'].should == 100
|
54
60
|
end
|
55
|
-
end
|
61
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'unit_spec_helper'
|
2
|
+
|
3
|
+
describe Rapns, 'push' do
|
4
|
+
before do
|
5
|
+
Rapns::Daemon.stub(:start)
|
6
|
+
Rapns::Daemon.stub(:shutdown)
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'sets the push config option to true' do
|
10
|
+
Rapns.push
|
11
|
+
Rapns.config.push.should be_true
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'starts the daemon' do
|
15
|
+
Rapns::Daemon.should_receive(:start)
|
16
|
+
Rapns.push
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'shuts down the daemon' do
|
20
|
+
Rapns::Daemon.should_receive(:shutdown).with(true)
|
21
|
+
Rapns.push
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'overrides the default config options with those given as a hash' do
|
25
|
+
Rapns.config.push_poll = 4
|
26
|
+
expect { Rapns.push(:push_poll => 2) }.to change(Rapns.config, :push_poll).to(2)
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'unit_spec_helper'
|
2
|
+
|
3
|
+
describe Rapns do
|
4
|
+
it 'yields reflections for configuration' do
|
5
|
+
did_yield = false
|
6
|
+
Rapns.reflect { |on| did_yield = true }
|
7
|
+
did_yield.should be_true
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'returns all reflections' do
|
11
|
+
Rapns.reflections.should be_kind_of(Rapns::Reflections)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# :apns_feedback, :notification_enqueued, :notification_delivered,
|
16
|
+
# :notification_failed, :notification_will_retry, :apns_connection_lost,
|
17
|
+
# :error
|
18
|
+
|
19
|
+
describe Rapns::Reflections do
|
20
|
+
it 'dispatches the given reflection' do
|
21
|
+
did_yield = false
|
22
|
+
Rapns.reflect do |on|
|
23
|
+
on.error { did_yield = true }
|
24
|
+
end
|
25
|
+
Rapns.reflections.__dispatch(:error)
|
26
|
+
did_yield.should be_true
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'raises an error when trying to dispatch and unknown reflection' do
|
30
|
+
expect do
|
31
|
+
Rapns.reflections.__dispatch(:unknown)
|
32
|
+
end.to raise_error(Rapns::Reflections::NoSuchReflectionError)
|
33
|
+
end
|
34
|
+
end
|
data/spec/unit_spec_helper.rb
CHANGED
@@ -81,65 +81,7 @@ end
|
|
81
81
|
# the certificate, and this is private to Apple. So if the app
|
82
82
|
# has a certificate and a private key in it, the only way to find
|
83
83
|
# out if it really is valid is to connect to Apple's servers.
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
localKeyID: 00 93 8F E4 A3 C3 75 64 3D 7E EA 14 0B 0A EA DD 15 85 8A D5
|
89
|
-
subject=/CN=test certificate/O=Example/OU=Example/ST=QLD/C=AU/L=Example/emailAddress=user@example.com
|
90
|
-
issuer=/CN=test certificate/O=Example/OU=Example/ST=QLD/C=AU/L=Example/emailAddress=user@example.com
|
91
|
-
-----BEGIN CERTIFICATE-----
|
92
|
-
MIID5jCCAs6gAwIBAgIBATALBgkqhkiG9w0BAQswgY0xGTAXBgNVBAMMEHRlc3Qg
|
93
|
-
Y2VydGlmaWNhdGUxEDAOBgNVBAoMB0V4YW1wbGUxEDAOBgNVBAsMB0V4YW1wbGUx
|
94
|
-
DDAKBgNVBAgMA1FMRDELMAkGA1UEBhMCQVUxEDAOBgNVBAcMB0V4YW1wbGUxHzAd
|
95
|
-
BgkqhkiG9w0BCQEWEHVzZXJAZXhhbXBsZS5jb20wHhcNMTIwOTA5MDMxODMyWhcN
|
96
|
-
MjIwOTA3MDMxODMyWjCBjTEZMBcGA1UEAwwQdGVzdCBjZXJ0aWZpY2F0ZTEQMA4G
|
97
|
-
A1UECgwHRXhhbXBsZTEQMA4GA1UECwwHRXhhbXBsZTEMMAoGA1UECAwDUUxEMQsw
|
98
|
-
CQYDVQQGEwJBVTEQMA4GA1UEBwwHRXhhbXBsZTEfMB0GCSqGSIb3DQEJARYQdXNl
|
99
|
-
ckBleGFtcGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKF+
|
100
|
-
UDsN1sLen8g+97PNTiWju9+wkSv+H5rQlvb6YFLPx11YvqpK8ms6kFU1OmWeLfmh
|
101
|
-
cpsT+bZtKupC7aGPoSG3RXzzf/YUMgs/ZSXA0idZHA6tkReAEzIX6jL5otfPWbaP
|
102
|
-
luCTUoVMeP4u9ywk628zlqh9IQHC1Agl0R1xGCpULDk8kn1gPyEisl38wI5aDbzy
|
103
|
-
6lYQGNUKOqt1xfVjtIFe/jyY/v0sxFjIJlRLcAFBuJx4sRV+PwRBkusOQtYwcwpI
|
104
|
-
loMxJj+GQe66ueATW81aC4iOU66DAFFEuGzwIwm3bOilimGGQbGb92F339RfmSOo
|
105
|
-
TPAvVhsakI3mzESb4lkCAwEAAaNRME8wDgYDVR0PAQH/BAQDAgeAMCAGA1UdJQEB
|
106
|
-
/wQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAbBgNVHREEFDASgRB1c2VyQGV4YW1w
|
107
|
-
bGUuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQA5UbNR+83ZdI2DiaB4dRmy0V5RDAqJ
|
108
|
-
k9+QskcTV4gBTjsOBS46Dw1tI6iTrfTyjYJdnyH0Y2Y2YVWBnvtON41UCZak+4ed
|
109
|
-
/IqyzU0dtfZ+frWa0RY4reyl80TwqnzyJfni0nDo4zGGvz70cxyaz2u1BWqwLjqb
|
110
|
-
dh8Dxvt+aHW2MQi0iGKh/HNbgwVanR4+ubNwziK9sR1Rnq9MkHWtwBw16SXQG6ao
|
111
|
-
SZKASWNaH8VL08Zz0E98cwd137UJkPsldCwJ8kHR5OzkcjPdXvnGD3d64yy2TC1Z
|
112
|
-
Gy1Aazt98wPcTYBytlhK8Rvzg9OoY9QmsdpmWxz1ZCXECJNqCa3IKsqO
|
113
|
-
-----END CERTIFICATE-----
|
114
|
-
Bag Attributes
|
115
|
-
friendlyName: test certificate
|
116
|
-
localKeyID: 00 93 8F E4 A3 C3 75 64 3D 7E EA 14 0B 0A EA DD 15 85 8A D5
|
117
|
-
Key Attributes: <No Attributes>
|
118
|
-
-----BEGIN RSA PRIVATE KEY-----
|
119
|
-
MIIEpQIBAAKCAQEAoX5QOw3Wwt6fyD73s81OJaO737CRK/4fmtCW9vpgUs/HXVi+
|
120
|
-
qkryazqQVTU6ZZ4t+aFymxP5tm0q6kLtoY+hIbdFfPN/9hQyCz9lJcDSJ1kcDq2R
|
121
|
-
F4ATMhfqMvmi189Zto+W4JNShUx4/i73LCTrbzOWqH0hAcLUCCXRHXEYKlQsOTyS
|
122
|
-
fWA/ISKyXfzAjloNvPLqVhAY1Qo6q3XF9WO0gV7+PJj+/SzEWMgmVEtwAUG4nHix
|
123
|
-
FX4/BEGS6w5C1jBzCkiWgzEmP4ZB7rq54BNbzVoLiI5TroMAUUS4bPAjCbds6KWK
|
124
|
-
YYZBsZv3YXff1F+ZI6hM8C9WGxqQjebMRJviWQIDAQABAoIBAQCTiLIDQUFSBdAz
|
125
|
-
QFNLD+S0vkCEuunlJuP4q1c/ir006l1YChsluBJ/o6D4NwiCjV+zDquEwVsALftm
|
126
|
-
yH4PewfZpXT2Ef508T5GyEO/mchj6iSXxDkpHvhqay6qIyWBwwxSnBtaTzy0Soi+
|
127
|
-
rmlhCtmLXbXld2sQEM1kJChGnWtWPtvSyrn+mapNPZviGRtgRNK+YsrAti1nUext
|
128
|
-
2syO5mTdHf1D8GR7I98OaX6odREuSocEV9PzfapWZx2GK5tvRiS1skiug5ciieTd
|
129
|
-
Am5/C+bb31h4drFslihLb5BRGO5SFQJvMJL2Sx1f19BCC4XikS01P4/zZbxQNq79
|
130
|
-
kxEQuDGBAoGBANP4pIYZ5xshCkx7cTYqmxzWLClGKE2S7Oa8N89mtOwfmqT9AFun
|
131
|
-
t9Us9Ukbi8BaKlKhGpQ1HlLf/KVcpyW0x2qLou6AyIWYH+/5VaR3graNgUnzpK9f
|
132
|
-
1F5HoaNHbhlAoebqhzhASFlJI2aqUdQjdOv73z+s9szJU4gpILNwGDFnAoGBAMMJ
|
133
|
-
j+vIxtG9J2jldyoXzpg5mbMXSj9u/wFLBVdjXWyOoiqVMMBto53RnoqAom7Ifr9D
|
134
|
-
49LxRAT1Q3l4vs/YnM3ziMsIg2vQK1EbrLsY9OnD/kvPaLXOlNIOdfLM8UeVWZMc
|
135
|
-
I4LPbbZrhv/7CC8RjbRhMoWWdGYPvxmvD6V4ZDY/AoGBALoI6OxA45Htx4okdNHj
|
136
|
-
RstiNNPsnQaoQn6nBhxiubraafEPkzbd1fukP4pwQJELEUX/2sHkdL6rkqLW1GPF
|
137
|
-
a5dZAiBsqpCFWNJWdBGqSfBJ9QSgbxLz+gDcwUH6OOi0zuNJRm/aCyVBiW5bYQHc
|
138
|
-
NIvAPMk31ksZDtTbs7WIVdNVAoGBALZ1+KWNxKqs+fSBT5UahpUUtfy8miJz9a7A
|
139
|
-
/3M8q0cGvSF3Rw+OwpW/aEGMi+l2OlU27ykFuyukRAac9m296RwnbF79TO2M5ylO
|
140
|
-
6a5zb5ROXlWP6RbE96b4DlIidssQJqegmHwlEC+rsrVBpOtb0aThlYEyOxzMOGyP
|
141
|
-
wOR9l8rDAoGADZ4TUHFM6VrvPlUZBkGbqiyXH9IM/y9JWk+22JQCEGnM6RFZemSs
|
142
|
-
jxWqQiPAdJtb3xKryJSCMtFPH9azedoCrSgaMflJ1QgoXgpiKZyoEXWraVUggh/0
|
143
|
-
CEavgZcTZ6SvMuayqJdGGB+zb1V8XwXMtCjApR/kTm47DjxO4DmpOPs=
|
144
|
-
-----END RSA PRIVATE KEY-----
|
145
|
-
EOF
|
84
|
+
|
85
|
+
path = File.join(File.dirname(__FILE__), 'support')
|
86
|
+
TEST_CERT = File.read(File.join(path, 'cert_without_password.pem'))
|
87
|
+
TEST_CERT_WITH_PASSWORD = File.read(File.join(path, 'cert_with_password.pem'))
|
metadata
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
name: rapns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 3.0
|
5
|
+
version: 3.1.0
|
6
6
|
platform: java
|
7
7
|
authors:
|
8
8
|
- Ian Leitch
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: multi_json
|
@@ -81,7 +81,7 @@ dependencies:
|
|
81
81
|
none: false
|
82
82
|
prerelease: false
|
83
83
|
type: :runtime
|
84
|
-
description: Professional grade APNs and GCM
|
84
|
+
description: Professional grade APNs and GCM for Ruby
|
85
85
|
email:
|
86
86
|
- port001@gmail.com
|
87
87
|
executables:
|
@@ -130,23 +130,30 @@ files:
|
|
130
130
|
- lib/rapns/daemon/gcm/delivery_handler.rb
|
131
131
|
- lib/rapns/daemon/interruptible_sleep.rb
|
132
132
|
- lib/rapns/daemon/logger.rb
|
133
|
+
- lib/rapns/daemon/reflectable.rb
|
133
134
|
- lib/rapns/deprecatable.rb
|
134
135
|
- lib/rapns/deprecation.rb
|
136
|
+
- lib/rapns/embed.rb
|
135
137
|
- lib/rapns/gcm/app.rb
|
136
138
|
- lib/rapns/gcm/expiry_collapse_key_mutual_inclusion_validator.rb
|
137
139
|
- lib/rapns/gcm/notification.rb
|
138
|
-
- lib/rapns/gcm/
|
140
|
+
- lib/rapns/gcm/payload_data_size_validator.rb
|
141
|
+
- lib/rapns/gcm/registration_ids_count_validator.rb
|
139
142
|
- lib/rapns/multi_json_helper.rb
|
140
143
|
- lib/rapns/notification.rb
|
141
144
|
- lib/rapns/patches.rb
|
142
145
|
- lib/rapns/patches/rails/3.1.0/postgresql_adapter.rb
|
143
146
|
- lib/rapns/patches/rails/3.1.1/postgresql_adapter.rb
|
147
|
+
- lib/rapns/push.rb
|
148
|
+
- lib/rapns/reflection.rb
|
144
149
|
- lib/rapns/version.rb
|
145
150
|
- lib/tasks/cane.rake
|
146
151
|
- lib/tasks/test.rake
|
147
152
|
- config/database.yml
|
148
153
|
- spec/acceptance/gcm_upgrade_spec.rb
|
149
154
|
- spec/acceptance_spec_helper.rb
|
155
|
+
- spec/support/cert_with_password.pem
|
156
|
+
- spec/support/cert_without_password.pem
|
150
157
|
- spec/support/simplecov_helper.rb
|
151
158
|
- spec/support/simplecov_quality_formatter.rb
|
152
159
|
- spec/unit/apns/app_spec.rb
|
@@ -172,13 +179,17 @@ files:
|
|
172
179
|
- spec/unit/daemon/gcm/delivery_spec.rb
|
173
180
|
- spec/unit/daemon/interruptible_sleep_spec.rb
|
174
181
|
- spec/unit/daemon/logger_spec.rb
|
182
|
+
- spec/unit/daemon/reflectable_spec.rb
|
175
183
|
- spec/unit/daemon_spec.rb
|
176
184
|
- spec/unit/deprecatable_spec.rb
|
177
185
|
- spec/unit/deprecation_spec.rb
|
186
|
+
- spec/unit/embed_spec.rb
|
178
187
|
- spec/unit/gcm/app_spec.rb
|
179
188
|
- spec/unit/gcm/notification_spec.rb
|
180
189
|
- spec/unit/notification_shared.rb
|
181
190
|
- spec/unit/notification_spec.rb
|
191
|
+
- spec/unit/push_spec.rb
|
192
|
+
- spec/unit/reflection_spec.rb
|
182
193
|
- spec/unit_spec_helper.rb
|
183
194
|
- bin/rapns
|
184
195
|
homepage: https://github.com/ileitch/rapns
|
@@ -206,11 +217,13 @@ rubyforge_project:
|
|
206
217
|
rubygems_version: 1.8.24
|
207
218
|
signing_key:
|
208
219
|
specification_version: 3
|
209
|
-
summary: Professional grade APNs and GCM
|
220
|
+
summary: Professional grade APNs and GCM for Ruby
|
210
221
|
test_files:
|
211
222
|
- config/database.yml
|
212
223
|
- spec/acceptance/gcm_upgrade_spec.rb
|
213
224
|
- spec/acceptance_spec_helper.rb
|
225
|
+
- spec/support/cert_with_password.pem
|
226
|
+
- spec/support/cert_without_password.pem
|
214
227
|
- spec/support/simplecov_helper.rb
|
215
228
|
- spec/support/simplecov_quality_formatter.rb
|
216
229
|
- spec/unit/apns/app_spec.rb
|
@@ -236,11 +249,15 @@ test_files:
|
|
236
249
|
- spec/unit/daemon/gcm/delivery_spec.rb
|
237
250
|
- spec/unit/daemon/interruptible_sleep_spec.rb
|
238
251
|
- spec/unit/daemon/logger_spec.rb
|
252
|
+
- spec/unit/daemon/reflectable_spec.rb
|
239
253
|
- spec/unit/daemon_spec.rb
|
240
254
|
- spec/unit/deprecatable_spec.rb
|
241
255
|
- spec/unit/deprecation_spec.rb
|
256
|
+
- spec/unit/embed_spec.rb
|
242
257
|
- spec/unit/gcm/app_spec.rb
|
243
258
|
- spec/unit/gcm/notification_spec.rb
|
244
259
|
- spec/unit/notification_shared.rb
|
245
260
|
- spec/unit/notification_spec.rb
|
261
|
+
- spec/unit/push_spec.rb
|
262
|
+
- spec/unit/reflection_spec.rb
|
246
263
|
- spec/unit_spec_helper.rb
|