rapns 3.0.1-java → 3.1.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. data/CHANGELOG.md +10 -2
  2. data/README.md +26 -3
  3. data/bin/rapns +2 -7
  4. data/lib/generators/templates/add_gcm.rb +3 -1
  5. data/lib/generators/templates/rapns.rb +42 -11
  6. data/lib/rapns.rb +11 -1
  7. data/lib/rapns/apns/notification.rb +8 -2
  8. data/lib/rapns/app.rb +3 -3
  9. data/lib/rapns/configuration.rb +46 -13
  10. data/lib/rapns/daemon.rb +33 -22
  11. data/lib/rapns/daemon/apns/connection.rb +12 -9
  12. data/lib/rapns/daemon/apns/delivery_handler.rb +1 -1
  13. data/lib/rapns/daemon/apns/feedback_receiver.rb +6 -2
  14. data/lib/rapns/daemon/app_runner.rb +23 -7
  15. data/lib/rapns/daemon/delivery.rb +5 -1
  16. data/lib/rapns/daemon/delivery_handler.rb +4 -0
  17. data/lib/rapns/daemon/feeder.rb +26 -5
  18. data/lib/rapns/daemon/reflectable.rb +13 -0
  19. data/lib/rapns/embed.rb +28 -0
  20. data/lib/rapns/gcm/notification.rb +7 -2
  21. data/lib/rapns/gcm/payload_data_size_validator.rb +13 -0
  22. data/lib/rapns/gcm/registration_ids_count_validator.rb +13 -0
  23. data/lib/rapns/push.rb +12 -0
  24. data/lib/rapns/reflection.rb +44 -0
  25. data/lib/rapns/version.rb +1 -1
  26. data/spec/support/cert_with_password.pem +90 -0
  27. data/spec/support/cert_without_password.pem +59 -0
  28. data/spec/unit/apns/app_spec.rb +15 -1
  29. data/spec/unit/apns/notification_spec.rb +16 -1
  30. data/spec/unit/configuration_spec.rb +10 -1
  31. data/spec/unit/daemon/apns/connection_spec.rb +11 -2
  32. data/spec/unit/daemon/apns/delivery_handler_spec.rb +1 -1
  33. data/spec/unit/daemon/apns/delivery_spec.rb +10 -0
  34. data/spec/unit/daemon/apns/feedback_receiver_spec.rb +16 -7
  35. data/spec/unit/daemon/delivery_handler_shared.rb +8 -0
  36. data/spec/unit/daemon/feeder_spec.rb +37 -6
  37. data/spec/unit/daemon/gcm/delivery_spec.rb +33 -1
  38. data/spec/unit/daemon/reflectable_spec.rb +27 -0
  39. data/spec/unit/daemon_spec.rb +55 -9
  40. data/spec/unit/embed_spec.rb +44 -0
  41. data/spec/unit/gcm/notification_spec.rb +9 -3
  42. data/spec/unit/push_spec.rb +28 -0
  43. data/spec/unit/reflection_spec.rb +34 -0
  44. data/spec/unit_spec_helper.rb +4 -62
  45. metadata +22 -5
  46. 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
@@ -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, :push_poll => 2, :airbrake_notify => false, :foreground => true) }
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).with(2)
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.setup_signal_hooks
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.setup_signal_hooks
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.send(:shutdown)
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.send(:shutdown)
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.send(:shutdown)
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.send(:shutdown)
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.send(:shutdown)
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 'has a payload limit of 4096 bytes' do
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
@@ -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
- TEST_CERT = <<EOF
86
- Bag Attributes
87
- friendlyName: test certificate
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.1
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: 2012-12-16 00:00:00.000000000 Z
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 daemon
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/payload_size_validator.rb
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 daemon
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