apple_shove 2.0.0 → 2.0.1
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 +7 -0
- data/lib/apple_shove/apns/connection.rb +6 -1
- data/lib/apple_shove/apns/notify_connection.rb +5 -12
- data/lib/apple_shove/apns/write_exception_handler.rb +54 -0
- data/lib/apple_shove/notification.rb +1 -1
- data/lib/apple_shove/version.rb +1 -1
- data/spec/apns/write_exception_handler_spec.rb +38 -0
- metadata +14 -31
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fddaff591f202cc2de8d07ce6e6bd5d1ad00d545
|
4
|
+
data.tar.gz: 49a5b28b2c56c774435afc25784f0209308e6b65
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: afaa11ebc095e9fdc384b63a4f8bdcffd5ca9def1a3be8b1899461eb4b60675b70d5e1777d1422d16dec32cc49290086bde30bf3a38a3192859470a4d98f5562
|
7
|
+
data.tar.gz: 692a7a94043eb7976a4ba2ec2aa1b3e942231fdc97d2c52f5594af94294ad755d48b17052668ce797e3bd48808bdbda33f8ee346f0caf6e3f09dedba68b20333
|
@@ -39,19 +39,12 @@ module AppleShove
|
|
39
39
|
end
|
40
40
|
|
41
41
|
socket.write message
|
42
|
-
rescue Errno::EPIPE
|
43
|
-
Logger.warn("broken pipe. reconnecting.", self, notification)
|
44
|
-
reconnect
|
45
|
-
# EPIPE raises on the second write to a closed pipe. We need to resend
|
46
|
-
# the previous notification that didn't make it through.
|
47
|
-
socket.write @last_message if @last_message
|
48
|
-
retry
|
49
|
-
rescue Errno::ETIMEDOUT
|
50
|
-
Logger.warn("timeout. reconnecting.", self, notification)
|
51
|
-
reconnect
|
52
|
-
retry
|
53
42
|
rescue Exception => e
|
54
|
-
|
43
|
+
handler = WriteExceptionHandler.new(e)
|
44
|
+
Logger.warn(handler.message, self, notification)
|
45
|
+
reconnect if handler.reconnect?
|
46
|
+
socket.write @last_message if handler.rewrite? && @last_message
|
47
|
+
retry if handler.retry?
|
55
48
|
else
|
56
49
|
Logger.info("delivered notification", self, notification)
|
57
50
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'openssl'
|
2
|
+
|
3
|
+
module AppleShove
|
4
|
+
module APNS
|
5
|
+
class WriteExceptionHandler
|
6
|
+
|
7
|
+
attr_reader :message
|
8
|
+
|
9
|
+
def initialize exception
|
10
|
+
|
11
|
+
# defaults
|
12
|
+
|
13
|
+
@message = "error sending notification: #{exception.class} - #{exception.message}"
|
14
|
+
@reconnect = false
|
15
|
+
@rewrite = false
|
16
|
+
@retry = false
|
17
|
+
|
18
|
+
# known cases
|
19
|
+
|
20
|
+
case exception
|
21
|
+
when Errno::EPIPE
|
22
|
+
@message = "broken pipe. reconnecting."
|
23
|
+
@reconnect = true
|
24
|
+
@rewrite = true
|
25
|
+
@retry = true
|
26
|
+
when Errno::ETIMEDOUT
|
27
|
+
@message = "timeout. reconnecting."
|
28
|
+
@reconnect = true
|
29
|
+
@retry = true
|
30
|
+
when OpenSSL::SSL::SSLError
|
31
|
+
if exception.message.match 'bad write retry'
|
32
|
+
@message = "SSL bad write. reconnecting."
|
33
|
+
@reconnect = true
|
34
|
+
@retry = true
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
def reconnect?
|
41
|
+
@reconnect
|
42
|
+
end
|
43
|
+
|
44
|
+
def rewrite?
|
45
|
+
@rewrite
|
46
|
+
end
|
47
|
+
|
48
|
+
def retry?
|
49
|
+
@retry
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/apple_shove/version.rb
CHANGED
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'apple_shove'
|
2
|
+
require 'openssl'
|
3
|
+
|
4
|
+
describe AppleShove::APNS::WriteExceptionHandler do
|
5
|
+
|
6
|
+
def build_handler(exception, message)
|
7
|
+
begin
|
8
|
+
raise exception, message
|
9
|
+
rescue Exception => e
|
10
|
+
handler = AppleShove::APNS::WriteExceptionHandler.new(e)
|
11
|
+
end
|
12
|
+
|
13
|
+
handler
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'when it encounters an unknown error' do
|
17
|
+
subject(:handler) { build_handler StandardError, "some unknown error" }
|
18
|
+
|
19
|
+
it 'has default values' do
|
20
|
+
expect(handler.message).to match(/error sending notification/)
|
21
|
+
expect(handler).not_to be_reconnect
|
22
|
+
expect(handler).not_to be_rewrite
|
23
|
+
expect(handler).not_to be_retry
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "when it's SSL connection has issues" do
|
28
|
+
subject(:handler) { build_handler OpenSSL::SSL::SSLError, "SSL_write:: bad write retry" }
|
29
|
+
|
30
|
+
it 'reconnects and retries' do
|
31
|
+
expect(handler).to be_reconnect
|
32
|
+
expect(handler).to be_retry
|
33
|
+
expect(handler).to_not be_rewrite
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
end
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apple_shove
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
5
|
-
prerelease:
|
4
|
+
version: 2.0.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Taylor Boyko
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-02-24 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: bundler
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,39 +27,34 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rspec
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rake
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: redis
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ~>
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :runtime
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ~>
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -78,7 +69,6 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: daemons
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
73
|
- - ~>
|
84
74
|
- !ruby/object:Gem::Version
|
@@ -86,7 +76,6 @@ dependencies:
|
|
86
76
|
type: :runtime
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
80
|
- - ~>
|
92
81
|
- !ruby/object:Gem::Version
|
@@ -94,7 +83,6 @@ dependencies:
|
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: celluloid
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
87
|
- - ~>
|
100
88
|
- !ruby/object:Gem::Version
|
@@ -102,7 +90,6 @@ dependencies:
|
|
102
90
|
type: :runtime
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
94
|
- - ~>
|
108
95
|
- !ruby/object:Gem::Version
|
@@ -126,6 +113,7 @@ files:
|
|
126
113
|
- lib/apple_shove/apns/error_response_packet.rb
|
127
114
|
- lib/apple_shove/apns/feedback_connection.rb
|
128
115
|
- lib/apple_shove/apns/notify_connection.rb
|
116
|
+
- lib/apple_shove/apns/write_exception_handler.rb
|
129
117
|
- lib/apple_shove/apple_shove.rb
|
130
118
|
- lib/apple_shove/config.rb
|
131
119
|
- lib/apple_shove/demultiplexer.rb
|
@@ -137,6 +125,7 @@ files:
|
|
137
125
|
- lib/apple_shove/version.rb
|
138
126
|
- lib/tasks/apple_shove.rake
|
139
127
|
- script/daemon
|
128
|
+
- spec/apns/write_exception_handler_spec.rb
|
140
129
|
- spec/apple_shove_spec.rb
|
141
130
|
- spec/demultiplexer_spec.rb
|
142
131
|
- spec/notification_helper.rb
|
@@ -145,35 +134,29 @@ files:
|
|
145
134
|
homepage: https://github.com/tboyko/apple_shove
|
146
135
|
licenses:
|
147
136
|
- MIT
|
137
|
+
metadata: {}
|
148
138
|
post_install_message:
|
149
139
|
rdoc_options: []
|
150
140
|
require_paths:
|
151
141
|
- lib
|
152
142
|
required_ruby_version: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
143
|
requirements:
|
155
|
-
- -
|
144
|
+
- - '>='
|
156
145
|
- !ruby/object:Gem::Version
|
157
146
|
version: '0'
|
158
|
-
segments:
|
159
|
-
- 0
|
160
|
-
hash: 144914022133974576
|
161
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
|
-
none: false
|
163
148
|
requirements:
|
164
|
-
- -
|
149
|
+
- - '>='
|
165
150
|
- !ruby/object:Gem::Version
|
166
151
|
version: '0'
|
167
|
-
segments:
|
168
|
-
- 0
|
169
|
-
hash: 144914022133974576
|
170
152
|
requirements: []
|
171
153
|
rubyforge_project:
|
172
|
-
rubygems_version:
|
154
|
+
rubygems_version: 2.0.14
|
173
155
|
signing_key:
|
174
|
-
specification_version:
|
156
|
+
specification_version: 4
|
175
157
|
summary: ''
|
176
158
|
test_files:
|
159
|
+
- spec/apns/write_exception_handler_spec.rb
|
177
160
|
- spec/apple_shove_spec.rb
|
178
161
|
- spec/demultiplexer_spec.rb
|
179
162
|
- spec/notification_helper.rb
|