rapns 1.0.7 → 2.0.0rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +7 -0
- data/LICENSE +7 -0
- data/README.md +58 -41
- data/bin/rapns +23 -5
- data/lib/generators/rapns_generator.rb +2 -4
- data/lib/generators/templates/add_app_to_rapns.rb +11 -0
- data/lib/generators/templates/create_rapns_apps.rb +15 -0
- data/lib/rapns/app.rb +9 -0
- data/lib/rapns/daemon/app_runner.rb +131 -0
- data/lib/rapns/daemon/connection.rb +5 -3
- data/lib/rapns/daemon/delivery_handler.rb +13 -15
- data/lib/rapns/daemon/delivery_handler_pool.rb +8 -10
- data/lib/rapns/daemon/delivery_queue.rb +36 -4
- data/lib/rapns/daemon/feedback_receiver.rb +19 -12
- data/lib/rapns/daemon/feeder.rb +8 -10
- data/lib/rapns/daemon/logger.rb +5 -3
- data/lib/rapns/daemon.rb +52 -38
- data/lib/rapns/notification.rb +16 -5
- data/lib/rapns/patches.rb +2 -2
- data/lib/rapns/version.rb +1 -1
- data/lib/rapns.rb +2 -1
- data/spec/rapns/daemon/app_runner_spec.rb +207 -0
- data/spec/rapns/daemon/connection_spec.rb +177 -236
- data/spec/rapns/daemon/delivery_handler_pool_spec.rb +10 -14
- data/spec/rapns/daemon/delivery_handler_spec.rb +92 -79
- data/spec/rapns/daemon/feedback_receiver_spec.rb +29 -23
- data/spec/rapns/daemon/feeder_spec.rb +40 -44
- data/spec/rapns/daemon/logger_spec.rb +21 -3
- data/spec/rapns/daemon_spec.rb +65 -125
- data/spec/rapns/notification_spec.rb +16 -0
- data/spec/spec_helper.rb +4 -1
- metadata +14 -15
- data/History.md +0 -5
- data/lib/generators/templates/rapns.yml +0 -31
- data/lib/rapns/daemon/certificate.rb +0 -27
- data/lib/rapns/daemon/configuration.rb +0 -98
- data/lib/rapns/daemon/pool.rb +0 -36
- data/spec/rapns/daemon/certificate_spec.rb +0 -22
- data/spec/rapns/daemon/configuration_spec.rb +0 -231
data/spec/rapns/daemon_spec.rb
CHANGED
@@ -1,182 +1,122 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe Rapns::Daemon, "when starting" do
|
4
|
-
module Rails
|
5
|
-
end
|
6
|
-
|
7
|
-
let(:config) do
|
8
|
-
{
|
9
|
-
"airbrake_notify" => true,
|
10
|
-
"certificate" => "development.pem",
|
11
|
-
"certificate_password" => "abc123",
|
12
|
-
"pid_file" => "rapns.pid",
|
13
|
-
"push" => {
|
14
|
-
"port" => 123,
|
15
|
-
"host" => "localhost",
|
16
|
-
"poll" => 4,
|
17
|
-
"connections" => 3
|
18
|
-
},
|
19
|
-
"feedback" => {
|
20
|
-
"port" => 123,
|
21
|
-
"host" => "localhost",
|
22
|
-
"poll" => 30,
|
23
|
-
}
|
24
|
-
}
|
25
|
-
end
|
26
|
-
|
27
|
-
before do
|
28
|
-
Rails.stub(:root).and_return("/rails_root")
|
29
|
-
|
30
|
-
@configuration = Rapns::Daemon::Configuration.new("development", "/rails_root/config/rapns/rapns.yml")
|
31
|
-
@configuration.stub(:read_config).and_return({"development" => config})
|
32
|
-
Rapns::Daemon::Configuration.stub(:new).and_return(@configuration)
|
4
|
+
module Rails; end
|
33
5
|
|
34
|
-
|
35
|
-
|
36
|
-
|
6
|
+
let(:certificate) { stub }
|
7
|
+
let(:password) { stub }
|
8
|
+
let(:config) { stub(:pid_file => nil, :push_poll => 2, :airbrake_notify => false, :foreground => true) }
|
9
|
+
let(:logger) { stub(:info => nil, :error => nil) }
|
37
10
|
|
38
|
-
|
39
|
-
@handler_pool.stub(:populate)
|
40
|
-
Rapns::Daemon::DeliveryHandlerPool.stub(:new).and_return(@handler_pool)
|
41
|
-
|
42
|
-
Rapns::Daemon::FeedbackReceiver.stub(:start)
|
11
|
+
before do
|
43
12
|
Rapns::Daemon::Feeder.stub(:start)
|
44
|
-
Rapns::Daemon.stub(:
|
13
|
+
Rapns::Daemon::Logger.stub(:new).and_return(logger)
|
14
|
+
Rapns::Daemon::AppRunner.stub(:sync => nil, :stop => nil)
|
15
|
+
Rapns::Daemon.stub(:daemonize => nil, :reconnect_database => nil, :exit => nil, :puts => nil)
|
45
16
|
File.stub(:open)
|
46
|
-
|
47
|
-
Rapns::Daemon::Logger.stub(:new).and_return(@logger)
|
48
|
-
end
|
49
|
-
|
50
|
-
it "should load the configuration" do
|
51
|
-
Rapns::Daemon::Configuration.should_receive(:new).with("development", "/rails_root/config/rapns/rapns.yml").and_return(@configuration)
|
52
|
-
@configuration.load
|
53
|
-
@configuration.should_receive(:load)
|
54
|
-
Rapns::Daemon.start("development", {})
|
55
|
-
end
|
56
|
-
|
57
|
-
it "should make the configuration accessible" do
|
58
|
-
Rapns::Daemon.start("development", {})
|
59
|
-
Rapns::Daemon.configuration.should == @configuration
|
60
|
-
end
|
61
|
-
|
62
|
-
it "should load the certificate" do
|
63
|
-
Rapns::Daemon::Certificate.should_receive(:new).with("/rails_root/config/rapns/development.pem").and_return(@certificate)
|
64
|
-
@certificate.should_receive(:load)
|
65
|
-
Rapns::Daemon.start("development", {})
|
66
|
-
end
|
67
|
-
|
68
|
-
it "should make the certificate accessible" do
|
69
|
-
Rapns::Daemon.start("development", {})
|
70
|
-
Rapns::Daemon.certificate.should == @certificate
|
17
|
+
Rails.stub(:root).and_return("/rails_root")
|
71
18
|
end
|
72
19
|
|
73
|
-
it "
|
74
|
-
|
75
|
-
|
20
|
+
it "forks into a daemon if the foreground option is false" do
|
21
|
+
config.stub(:foreground => false)
|
22
|
+
ActiveRecord::Base.stub(:establish_connection)
|
23
|
+
Rapns::Daemon.should_receive(:daemonize)
|
24
|
+
Rapns::Daemon.start("development", config)
|
76
25
|
end
|
77
26
|
|
78
|
-
it "
|
79
|
-
|
80
|
-
|
81
|
-
Rapns::Daemon.start("development",
|
27
|
+
it "does not fork into a daemon if the foreground option is true" do
|
28
|
+
config.stub(:foreground => true)
|
29
|
+
Rapns::Daemon.should_not_receive(:daemonize)
|
30
|
+
Rapns::Daemon.start("development", config)
|
82
31
|
end
|
83
32
|
|
84
|
-
it "
|
85
|
-
Rapns::Daemon.
|
86
|
-
Rapns::Daemon.
|
33
|
+
it "writes the process ID to the PID file" do
|
34
|
+
Rapns::Daemon.should_receive(:write_pid_file)
|
35
|
+
Rapns::Daemon.start("development", config)
|
87
36
|
end
|
88
37
|
|
89
|
-
it "
|
90
|
-
|
91
|
-
|
92
|
-
|
38
|
+
it "logs an error if the PID file could not be written" do
|
39
|
+
config.stub(:pid_file => '/rails_root/rapns.pid')
|
40
|
+
File.stub(:open).and_raise(Errno::ENOENT)
|
41
|
+
logger.should_receive(:error).with("Failed to write PID to '/rails_root/rapns.pid': #<Errno::ENOENT: No such file or directory>")
|
42
|
+
Rapns::Daemon.start("development", config)
|
93
43
|
end
|
94
44
|
|
95
|
-
it "
|
96
|
-
Rapns::Daemon.
|
97
|
-
Rapns::Daemon.start("development",
|
45
|
+
it "starts the feeder" do
|
46
|
+
Rapns::Daemon::Feeder.should_receive(:start).with(2)
|
47
|
+
Rapns::Daemon.start("development", config)
|
98
48
|
end
|
99
49
|
|
100
|
-
it "
|
101
|
-
Rapns::Daemon.should_receive(:
|
102
|
-
Rapns::Daemon.start("development",
|
50
|
+
it "syncs apps" do
|
51
|
+
Rapns::Daemon::AppRunner.should_receive(:sync)
|
52
|
+
Rapns::Daemon.start("development", config)
|
103
53
|
end
|
104
54
|
|
105
|
-
it "
|
106
|
-
|
107
|
-
|
108
|
-
Rapns::Daemon.start("development",
|
55
|
+
it "sets up the logger" do
|
56
|
+
config.stub(:airbrake_notify => true)
|
57
|
+
Rapns::Daemon::Logger.should_receive(:new).with(:foreground => true, :airbrake_notify => true)
|
58
|
+
Rapns::Daemon.start("development", config)
|
109
59
|
end
|
110
60
|
|
111
|
-
it "
|
112
|
-
Rapns::Daemon
|
113
|
-
Rapns::Daemon.
|
61
|
+
it "makes the logger accessible" do
|
62
|
+
Rapns::Daemon.start("development", config)
|
63
|
+
Rapns::Daemon.logger.should == logger
|
114
64
|
end
|
115
65
|
|
116
|
-
it
|
117
|
-
Rapns::
|
118
|
-
Rapns::Daemon.
|
66
|
+
it 'prints a warning if there are no apps' do
|
67
|
+
Rapns::App.stub(:count => 0)
|
68
|
+
Rapns::Daemon.should_receive(:puts).any_number_of_times
|
69
|
+
Rapns::Daemon.should_receive(:exit).with(1)
|
70
|
+
Rapns::Daemon.start("development", config)
|
119
71
|
end
|
120
72
|
|
121
|
-
it
|
122
|
-
Rapns::
|
123
|
-
Rapns::Daemon.
|
73
|
+
it 'prints a warning exists if rapns has not been upgraded' do
|
74
|
+
Rapns::App.stub(:count).and_raise(ActiveRecord::StatementInvalid)
|
75
|
+
Rapns::Daemon.should_receive(:puts).any_number_of_times
|
76
|
+
Rapns::Daemon.should_receive(:exit).with(1)
|
77
|
+
Rapns::Daemon.start("development", config)
|
124
78
|
end
|
125
79
|
|
126
|
-
it
|
127
|
-
|
128
|
-
|
129
|
-
Rapns::Daemon.
|
80
|
+
it 'warns if rapns.yml still exists' do
|
81
|
+
File.should_receive(:exists?).with('/rails_root/config/rapns/rapns.yml').and_return(true)
|
82
|
+
logger.should_receive(:warn).with("Since 2.0.0 rapns uses command-line options instead of a configuration file. Please remove config/rapns/rapns.yml.")
|
83
|
+
Rapns::Daemon.start("development", config)
|
130
84
|
end
|
131
85
|
end
|
132
86
|
|
133
87
|
describe Rapns::Daemon, "when being shutdown" do
|
88
|
+
let(:config) { stub(:pid_file => '/rails_root/rapns.pid') }
|
89
|
+
|
134
90
|
before do
|
135
|
-
|
91
|
+
Rapns::Daemon.stub(:config => config, :puts => nil)
|
136
92
|
Rapns::Daemon::Feeder.stub(:stop)
|
137
|
-
Rapns::Daemon::
|
138
|
-
@handler_pool = mock("DeliveryHandlerPool", :drain => nil)
|
139
|
-
Rapns::Daemon.stub(:delivery_handler_pool).and_return(@handler_pool)
|
140
|
-
@configuration = mock("Configuration", :pid_file => File.join(Rails.root, "rapns.pid"))
|
141
|
-
Rapns::Daemon.stub(:configuration).and_return(@configuration)
|
142
|
-
Rapns::Daemon.stub(:puts)
|
143
|
-
end
|
144
|
-
|
145
|
-
it "should stop the feedback receiver" do
|
146
|
-
Rapns::Daemon::FeedbackReceiver.should_receive(:stop)
|
147
|
-
Rapns::Daemon.send(:shutdown)
|
93
|
+
Rapns::Daemon::AppRunner.stub(:stop)
|
148
94
|
end
|
149
95
|
|
150
|
-
it "
|
96
|
+
it "stops the feeder" do
|
151
97
|
Rapns::Daemon::Feeder.should_receive(:stop)
|
152
98
|
Rapns::Daemon.send(:shutdown)
|
153
99
|
end
|
154
100
|
|
155
|
-
it "
|
156
|
-
|
157
|
-
Rapns::Daemon.send(:shutdown)
|
158
|
-
end
|
159
|
-
|
160
|
-
it "should not attempt to drain the delivery handler pool if it has not been initialized" do
|
161
|
-
Rapns::Daemon.stub(:delivery_handler_pool).and_return(nil)
|
162
|
-
@handler_pool.should_not_receive(:drain)
|
101
|
+
it "stops the app runners" do
|
102
|
+
Rapns::Daemon::AppRunner.should_receive(:stop)
|
163
103
|
Rapns::Daemon.send(:shutdown)
|
164
104
|
end
|
165
105
|
|
166
|
-
it "
|
106
|
+
it "removes the PID file if one was written" do
|
167
107
|
File.stub(:exists?).and_return(true)
|
168
108
|
File.should_receive(:delete).with("/rails_root/rapns.pid")
|
169
109
|
Rapns::Daemon.send(:shutdown)
|
170
110
|
end
|
171
111
|
|
172
|
-
it "
|
112
|
+
it "does not attempt to remove the PID file if it does not exist" do
|
173
113
|
File.stub(:exists?).and_return(false)
|
174
114
|
File.should_not_receive(:delete)
|
175
115
|
Rapns::Daemon.send(:shutdown)
|
176
116
|
end
|
177
117
|
|
178
|
-
it "
|
179
|
-
|
118
|
+
it "does not attempt to remove the PID file if one was not written" do
|
119
|
+
config.stub(:pid_file).and_return(nil)
|
180
120
|
File.should_not_receive(:delete)
|
181
121
|
Rapns::Daemon.send(:shutdown)
|
182
122
|
end
|
@@ -101,6 +101,22 @@ describe Rapns::Notification, "as_json" do
|
|
101
101
|
end
|
102
102
|
end
|
103
103
|
|
104
|
+
describe Rapns::Notification, 'MDM' do
|
105
|
+
let(:magic) { 'abc123' }
|
106
|
+
let(:notification) { Rapns::Notification.new }
|
107
|
+
|
108
|
+
it 'includes the mdm magic in the payload' do
|
109
|
+
notification.mdm = magic
|
110
|
+
notification.as_json.should == {'mdm' => magic}
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'does not include aps attribute' do
|
114
|
+
notification.alert = "i'm doomed"
|
115
|
+
notification.mdm = magic
|
116
|
+
notification.as_json.key?('aps').should be_false
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
104
120
|
describe Rapns::Notification, "to_binary" do
|
105
121
|
it "should correctly convert the notification to binary" do
|
106
122
|
notification = Rapns::Notification.new
|
data/spec/spec_helper.rb
CHANGED
@@ -24,8 +24,11 @@ ActiveRecord::Base.establish_connection('adapter' => $adapter, 'database' => 'ra
|
|
24
24
|
require 'generators/templates/create_rapns_notifications'
|
25
25
|
require 'generators/templates/create_rapns_feedback'
|
26
26
|
require 'generators/templates/add_alert_is_json_to_rapns_notifications'
|
27
|
+
require 'generators/templates/add_app_to_rapns'
|
28
|
+
require 'generators/templates/create_rapns_apps'
|
27
29
|
|
28
|
-
[CreateRapnsNotifications, CreateRapnsFeedback,
|
30
|
+
[CreateRapnsNotifications, CreateRapnsFeedback,
|
31
|
+
AddAlertIsJsonToRapnsNotifications, AddAppToRapns, CreateRapnsApps].each do |migration|
|
29
32
|
migration.down rescue ActiveRecord::StatementInvalid
|
30
33
|
migration.up
|
31
34
|
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rapns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 2.0.0rc1
|
5
|
+
prerelease: 5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Ian Leitch
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-06-18 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Easy to use library for Apple's Push Notification Service with Rails
|
15
15
|
3
|
@@ -22,14 +22,15 @@ extra_rdoc_files: []
|
|
22
22
|
files:
|
23
23
|
- lib/generators/rapns_generator.rb
|
24
24
|
- lib/generators/templates/add_alert_is_json_to_rapns_notifications.rb
|
25
|
+
- lib/generators/templates/add_app_to_rapns.rb
|
26
|
+
- lib/generators/templates/create_rapns_apps.rb
|
25
27
|
- lib/generators/templates/create_rapns_feedback.rb
|
26
28
|
- lib/generators/templates/create_rapns_notifications.rb
|
27
|
-
- lib/generators/templates/rapns.yml
|
28
29
|
- lib/rapns.rb
|
30
|
+
- lib/rapns/app.rb
|
29
31
|
- lib/rapns/binary_notification_validator.rb
|
30
32
|
- lib/rapns/daemon.rb
|
31
|
-
- lib/rapns/daemon/
|
32
|
-
- lib/rapns/daemon/configuration.rb
|
33
|
+
- lib/rapns/daemon/app_runner.rb
|
33
34
|
- lib/rapns/daemon/connection.rb
|
34
35
|
- lib/rapns/daemon/database_reconnectable.rb
|
35
36
|
- lib/rapns/daemon/delivery_error.rb
|
@@ -41,7 +42,6 @@ files:
|
|
41
42
|
- lib/rapns/daemon/feeder.rb
|
42
43
|
- lib/rapns/daemon/interruptible_sleep.rb
|
43
44
|
- lib/rapns/daemon/logger.rb
|
44
|
-
- lib/rapns/daemon/pool.rb
|
45
45
|
- lib/rapns/device_token_format_validator.rb
|
46
46
|
- lib/rapns/feedback.rb
|
47
47
|
- lib/rapns/notification.rb
|
@@ -50,9 +50,9 @@ files:
|
|
50
50
|
- lib/rapns/patches/rails/3.1.1/postgresql_adapter.rb
|
51
51
|
- lib/rapns/version.rb
|
52
52
|
- README.md
|
53
|
-
-
|
54
|
-
-
|
55
|
-
- spec/rapns/daemon/
|
53
|
+
- CHANGELOG.md
|
54
|
+
- LICENSE
|
55
|
+
- spec/rapns/daemon/app_runner_spec.rb
|
56
56
|
- spec/rapns/daemon/connection_spec.rb
|
57
57
|
- spec/rapns/daemon/database_reconnectable_spec.rb
|
58
58
|
- spec/rapns/daemon/delivery_error_spec.rb
|
@@ -83,18 +83,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
83
83
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
84
|
none: false
|
85
85
|
requirements:
|
86
|
-
- - ! '
|
86
|
+
- - ! '>'
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version:
|
88
|
+
version: 1.3.1
|
89
89
|
requirements: []
|
90
90
|
rubyforge_project:
|
91
|
-
rubygems_version: 1.8.
|
91
|
+
rubygems_version: 1.8.23
|
92
92
|
signing_key:
|
93
93
|
specification_version: 3
|
94
94
|
summary: Easy to use library for Apple's Push Notification Service with Rails 3
|
95
95
|
test_files:
|
96
|
-
- spec/rapns/daemon/
|
97
|
-
- spec/rapns/daemon/configuration_spec.rb
|
96
|
+
- spec/rapns/daemon/app_runner_spec.rb
|
98
97
|
- spec/rapns/daemon/connection_spec.rb
|
99
98
|
- spec/rapns/daemon/database_reconnectable_spec.rb
|
100
99
|
- spec/rapns/daemon/delivery_error_spec.rb
|
data/History.md
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
development:
|
2
|
-
certificate: development.pem
|
3
|
-
certificate_password:
|
4
|
-
|
5
|
-
push:
|
6
|
-
host: gateway.sandbox.push.apple.com
|
7
|
-
port: 2195
|
8
|
-
poll: 2
|
9
|
-
connections: 3
|
10
|
-
|
11
|
-
feedback:
|
12
|
-
host: feedback.sandbox.push.apple.com
|
13
|
-
port: 2196
|
14
|
-
poll: 60
|
15
|
-
|
16
|
-
production:
|
17
|
-
certificate: production.pem
|
18
|
-
certificate_password:
|
19
|
-
airbrake_notify: true
|
20
|
-
pid_file: tmp/pids/rapns.pid
|
21
|
-
|
22
|
-
push:
|
23
|
-
host: gateway.push.apple.com
|
24
|
-
port: 2195
|
25
|
-
poll: 2
|
26
|
-
connections: 3
|
27
|
-
|
28
|
-
feedback:
|
29
|
-
host: feedback.push.apple.com
|
30
|
-
port: 2196
|
31
|
-
poll: 60
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module Rapns
|
2
|
-
class CertificateError < StandardError; end
|
3
|
-
|
4
|
-
module Daemon
|
5
|
-
class Certificate
|
6
|
-
attr_accessor :certificate
|
7
|
-
|
8
|
-
def initialize(certificate_path)
|
9
|
-
@certificate_path = certificate_path
|
10
|
-
end
|
11
|
-
|
12
|
-
def load
|
13
|
-
@certificate = read_certificate
|
14
|
-
end
|
15
|
-
|
16
|
-
protected
|
17
|
-
|
18
|
-
def read_certificate
|
19
|
-
if !File.exists?(@certificate_path)
|
20
|
-
raise CertificateError, "#{@certificate_path} does not exist. The certificate location can be configured in config/rapns/rapns.yml."
|
21
|
-
else
|
22
|
-
File.read(@certificate_path)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,98 +0,0 @@
|
|
1
|
-
require "yaml"
|
2
|
-
|
3
|
-
module Rapns
|
4
|
-
class ConfigurationError < StandardError; end
|
5
|
-
|
6
|
-
module Daemon
|
7
|
-
class Configuration
|
8
|
-
attr_accessor :push, :feedback
|
9
|
-
attr_accessor :certificate, :certificate_password, :airbrake_notify, :pid_file
|
10
|
-
alias_method :airbrake_notify?, :airbrake_notify
|
11
|
-
|
12
|
-
def initialize(environment, config_path)
|
13
|
-
@environment = environment
|
14
|
-
@config_path = config_path
|
15
|
-
|
16
|
-
self.push = Struct.new(:host, :port, :connections, :poll).new
|
17
|
-
self.feedback = Struct.new(:host, :port, :poll).new
|
18
|
-
end
|
19
|
-
|
20
|
-
def load
|
21
|
-
config = read_config
|
22
|
-
ensure_environment_configured(config)
|
23
|
-
config = config[@environment]
|
24
|
-
set_variable(:push, :host, config)
|
25
|
-
set_variable(:push, :port, config)
|
26
|
-
set_variable(:push, :poll, config, :optional => true, :default => 2)
|
27
|
-
set_variable(:push, :connections, config, :optional => true, :default => 3)
|
28
|
-
|
29
|
-
set_variable(:feedback, :host, config)
|
30
|
-
set_variable(:feedback, :port, config)
|
31
|
-
set_variable(:feedback, :poll, config, :optional => true, :default => 60)
|
32
|
-
|
33
|
-
set_variable(nil, :certificate, config)
|
34
|
-
set_variable(nil, :airbrake_notify, config, :optional => true, :default => true)
|
35
|
-
set_variable(nil, :certificate_password, config, :optional => true, :default => "")
|
36
|
-
set_variable(nil, :pid_file, config, :optional => true, :default => "")
|
37
|
-
end
|
38
|
-
|
39
|
-
def certificate
|
40
|
-
if Pathname.new(@certificate).absolute?
|
41
|
-
@certificate
|
42
|
-
else
|
43
|
-
File.join(Rails.root, "config", "rapns", @certificate)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def pid_file
|
48
|
-
return if @pid_file.blank?
|
49
|
-
|
50
|
-
if Pathname.new(@pid_file).absolute?
|
51
|
-
@pid_file
|
52
|
-
else
|
53
|
-
File.join(Rails.root, @pid_file)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
protected
|
58
|
-
|
59
|
-
def read_config
|
60
|
-
ensure_config_exists
|
61
|
-
File.open(@config_path) { |fd| YAML.load(fd) }
|
62
|
-
end
|
63
|
-
|
64
|
-
def set_variable(base_key, key, config, options = {})
|
65
|
-
if base_key
|
66
|
-
base = send(base_key)
|
67
|
-
value = config.key?(base_key.to_s) ? config[base_key.to_s][key.to_s] : nil
|
68
|
-
else
|
69
|
-
base = self
|
70
|
-
value = config[key.to_s]
|
71
|
-
end
|
72
|
-
|
73
|
-
if value.to_s.strip == ""
|
74
|
-
if options[:optional]
|
75
|
-
base.send("#{key}=", options[:default])
|
76
|
-
else
|
77
|
-
key_path = base_key ? "#{base_key}.#{key}" : key
|
78
|
-
raise Rapns::ConfigurationError, "'#{key_path}' not defined for environment '#{@environment}' in #{@config_path}. You may need to run 'rails g rapns' after updating."
|
79
|
-
end
|
80
|
-
else
|
81
|
-
base.send("#{key}=", value)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def ensure_config_exists
|
86
|
-
if !File.exists?(@config_path)
|
87
|
-
raise Rapns::ConfigurationError, "#{@config_path} does not exist. Have you run 'rails g rapns'?"
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
def ensure_environment_configured(config)
|
92
|
-
if !config.key?(@environment)
|
93
|
-
raise Rapns::ConfigurationError, "Configuration for environment '#{@environment}' not defined in #{@config_path}"
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
data/lib/rapns/daemon/pool.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
module Rapns
|
2
|
-
module Daemon
|
3
|
-
class Pool
|
4
|
-
def initialize(num_objects)
|
5
|
-
@num_objects = num_objects
|
6
|
-
@queue = Queue.new
|
7
|
-
end
|
8
|
-
|
9
|
-
def populate
|
10
|
-
@num_objects.times do |i|
|
11
|
-
object = new_object_for_pool(i)
|
12
|
-
@queue.push(object)
|
13
|
-
object_added_to_pool(object)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def drain
|
18
|
-
while !@queue.empty?
|
19
|
-
object = @queue.pop
|
20
|
-
object_removed_from_pool(object)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
protected
|
25
|
-
|
26
|
-
def new_object_for_pool(i)
|
27
|
-
end
|
28
|
-
|
29
|
-
def object_added_to_pool(object)
|
30
|
-
end
|
31
|
-
|
32
|
-
def object_removed_from_pool(object)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Rapns::Daemon::Certificate do
|
4
|
-
it 'reads the certificate from the given path' do
|
5
|
-
File.stub(:exists? => true)
|
6
|
-
File.should_receive(:read).with("/dir/development.pem")
|
7
|
-
cert = Rapns::Daemon::Certificate.new("/dir/development.pem")
|
8
|
-
cert.load
|
9
|
-
end
|
10
|
-
|
11
|
-
it "should raise an error if the .pem file does not exist" do
|
12
|
-
cert = Rapns::Daemon::Certificate.new("/tmp/rapns-missing.pem")
|
13
|
-
expect { cert.load }.to raise_error(Rapns::CertificateError, "/tmp/rapns-missing.pem does not exist. The certificate location can be configured in config/rapns/rapns.yml.")
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should set the certificate accessor" do
|
17
|
-
cert = Rapns::Daemon::Certificate.new("/dir/development.pem")
|
18
|
-
cert.stub(:read_certificate).and_return("certificate contents")
|
19
|
-
cert.load
|
20
|
-
cert.certificate.should == "certificate contents"
|
21
|
-
end
|
22
|
-
end
|