rapns 1.0.6 → 1.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/History.md +5 -0
- data/lib/rapns/daemon/connection.rb +23 -0
- data/lib/rapns/version.rb +1 -1
- data/spec/rapns/daemon/connection_spec.rb +39 -0
- data/spec/spec_helper.rb +8 -3
- metadata +4 -3
data/History.md
ADDED
@@ -3,10 +3,17 @@ module Rapns
|
|
3
3
|
class ConnectionError < StandardError; end
|
4
4
|
|
5
5
|
class Connection
|
6
|
+
attr_accessor :last_write
|
7
|
+
|
8
|
+
def self.idle_period
|
9
|
+
30.minutes
|
10
|
+
end
|
11
|
+
|
6
12
|
def initialize(name, host, port)
|
7
13
|
@name = name
|
8
14
|
@host = host
|
9
15
|
@port = port
|
16
|
+
written
|
10
17
|
end
|
11
18
|
|
12
19
|
def connect
|
@@ -31,6 +38,8 @@ module Rapns
|
|
31
38
|
end
|
32
39
|
|
33
40
|
def write(data)
|
41
|
+
reconnect_idle if idle_period_exceeded?
|
42
|
+
|
34
43
|
retry_count = 0
|
35
44
|
|
36
45
|
begin
|
@@ -59,9 +68,23 @@ module Rapns
|
|
59
68
|
|
60
69
|
protected
|
61
70
|
|
71
|
+
def reconnect_idle
|
72
|
+
Rapns::Daemon.logger.info("[#{@name}] Idle period exceeded, reconnecting...")
|
73
|
+
reconnect
|
74
|
+
end
|
75
|
+
|
76
|
+
def idle_period_exceeded?
|
77
|
+
Time.now - last_write > self.class.idle_period
|
78
|
+
end
|
79
|
+
|
62
80
|
def write_data(data)
|
63
81
|
@ssl_socket.write(data)
|
64
82
|
@ssl_socket.flush
|
83
|
+
written
|
84
|
+
end
|
85
|
+
|
86
|
+
def written
|
87
|
+
self.last_write = Time.now
|
65
88
|
end
|
66
89
|
|
67
90
|
def setup_ssl_context
|
data/lib/rapns/version.rb
CHANGED
@@ -252,3 +252,42 @@ describe Rapns::Daemon::Connection, "when sending a notification" do
|
|
252
252
|
@connection.write("blah")
|
253
253
|
end
|
254
254
|
end
|
255
|
+
|
256
|
+
describe Rapns::Daemon::Connection, 'idle period' do
|
257
|
+
before do
|
258
|
+
@connection = Rapns::Daemon::Connection.new('Connection 0', 'gateway.push.apple.com', 2195)
|
259
|
+
@ssl_socket = mock("SSLSocket", :write => nil, :flush => nil, :close => nil)
|
260
|
+
@tcp_socket = mock("TCPSocket", :close => nil)
|
261
|
+
@connection.stub(:setup_ssl_context)
|
262
|
+
@connection.stub(:connect_socket => [@tcp_socket, @ssl_socket])
|
263
|
+
@logger = mock("Logger", :info => nil)
|
264
|
+
Rapns::Daemon.stub(:logger).and_return(@logger)
|
265
|
+
@connection.connect
|
266
|
+
end
|
267
|
+
|
268
|
+
it 'reconnects if the connection has been idle for more than the defined period' do
|
269
|
+
Rapns::Daemon::Connection.stub(:idle_period => 0.1)
|
270
|
+
sleep 0.2
|
271
|
+
@connection.should_receive(:reconnect)
|
272
|
+
@connection.write('blah')
|
273
|
+
end
|
274
|
+
|
275
|
+
it 'resets the last write time' do
|
276
|
+
now = Time.now
|
277
|
+
Time.stub(:now => now)
|
278
|
+
@connection.write('blah')
|
279
|
+
@connection.last_write.should == now
|
280
|
+
end
|
281
|
+
|
282
|
+
it 'does not reconnect if the connection has not been idle for more than the defined period' do
|
283
|
+
@connection.should_not_receive(:reconnect)
|
284
|
+
@connection.write('blah')
|
285
|
+
end
|
286
|
+
|
287
|
+
it 'logs the the connection is idle' do
|
288
|
+
Rapns::Daemon::Connection.stub(:idle_period => 0.1)
|
289
|
+
sleep 0.2
|
290
|
+
Rapns::Daemon.logger.should_receive(:info).with('[Connection 0] Idle period exceeded, reconnecting...')
|
291
|
+
@connection.write('blah')
|
292
|
+
end
|
293
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
ENV['RAILS_ENV'] = 'test'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
begin
|
4
|
+
require 'simplecov'
|
5
|
+
SimpleCov.start do
|
6
|
+
add_filter '/spec/'
|
7
|
+
end
|
8
|
+
rescue LoadError
|
9
|
+
puts "Coverage disabled."
|
6
10
|
end
|
7
11
|
|
8
12
|
require 'active_record'
|
@@ -15,6 +19,7 @@ if !adapters.include?($adapter)
|
|
15
19
|
end
|
16
20
|
|
17
21
|
puts "Using #{$adapter} adapter."
|
22
|
+
|
18
23
|
ActiveRecord::Base.establish_connection('adapter' => $adapter, 'database' => 'rapns_test')
|
19
24
|
require 'generators/templates/create_rapns_notifications'
|
20
25
|
require 'generators/templates/create_rapns_feedback'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rapns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-04-22 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
|
@@ -50,6 +50,7 @@ files:
|
|
50
50
|
- lib/rapns/patches/rails/3.1.1/postgresql_adapter.rb
|
51
51
|
- lib/rapns/version.rb
|
52
52
|
- README.md
|
53
|
+
- History.md
|
53
54
|
- spec/rapns/daemon/certificate_spec.rb
|
54
55
|
- spec/rapns/daemon/configuration_spec.rb
|
55
56
|
- spec/rapns/daemon/connection_spec.rb
|
@@ -87,7 +88,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
87
88
|
version: '0'
|
88
89
|
requirements: []
|
89
90
|
rubyforge_project:
|
90
|
-
rubygems_version: 1.8.
|
91
|
+
rubygems_version: 1.8.17
|
91
92
|
signing_key:
|
92
93
|
specification_version: 3
|
93
94
|
summary: Easy to use library for Apple's Push Notification Service with Rails 3
|