apns_dispatch 0.1.0 → 1.0.0
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/.gitignore +3 -1
- data/Gemfile.lock +30 -0
- data/apns_dispatch.gemspec +3 -1
- data/lib/apns_dispatch/apns_connection.rb +8 -13
- data/lib/apns_dispatch/version.rb +1 -1
- data/spec/apns_dispatch/apns_connection_spec.rb +22 -10
- metadata +33 -25
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b6a9fb49ce25c8c98e83297fafa388e24998194f
|
4
|
+
data.tar.gz: 41fd68140a59f37cc37752535b425f37048d7d0d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: cf0fdf5ecc666a38a2db6d0357bd624cbb87557f1c6424c3e24c35e1cb13df1a95ec0b93a0f7dad5adcba3de54e9945fa594795df548ffbe8535a31531668c5e
|
7
|
+
data.tar.gz: 88fcc554e3b29ff26c17585b7f176c89dd00e8cc7cd0b3bec6073d7c5ea466498ecc259262f9f0d1b2d30a34c94f64b006563bdf45547946edb92feb843c96bb
|
data/.gitignore
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
apns_dispatch (1.0.0)
|
5
|
+
json (~> 1.7.5)
|
6
|
+
retryable (~> 1.3.5)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
diff-lcs (1.2.5)
|
12
|
+
json (1.7.7)
|
13
|
+
rake (10.1.1)
|
14
|
+
retryable (1.3.5)
|
15
|
+
rspec (2.13.0)
|
16
|
+
rspec-core (~> 2.13.0)
|
17
|
+
rspec-expectations (~> 2.13.0)
|
18
|
+
rspec-mocks (~> 2.13.0)
|
19
|
+
rspec-core (2.13.1)
|
20
|
+
rspec-expectations (2.13.0)
|
21
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
22
|
+
rspec-mocks (2.13.1)
|
23
|
+
|
24
|
+
PLATFORMS
|
25
|
+
ruby
|
26
|
+
|
27
|
+
DEPENDENCIES
|
28
|
+
apns_dispatch!
|
29
|
+
rake
|
30
|
+
rspec (~> 2.13.0)
|
data/apns_dispatch.gemspec
CHANGED
@@ -11,14 +11,16 @@ Gem::Specification.new do |gem|
|
|
11
11
|
gem.summary = 'A simple Ruby framework for communicating with the APNs'
|
12
12
|
gem.description = 'A simple Ruby framework for sending push notifications and receiving feedback using the Apple Push Notification service'
|
13
13
|
gem.homepage = 'http://github.com/TheLevelUp/apns_dispatch'
|
14
|
+
gem.license = 'MIT'
|
14
15
|
|
15
16
|
gem.files = `git ls-files`.split($/)
|
16
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
17
18
|
|
18
19
|
gem.add_dependency 'json', '~> 1.7.5'
|
20
|
+
gem.add_dependency 'retryable', '~> 1.3.5'
|
19
21
|
|
20
22
|
gem.add_development_dependency 'rake'
|
21
|
-
gem.add_development_dependency 'rspec', '~> 2.0'
|
23
|
+
gem.add_development_dependency 'rspec', '~> 2.13.0'
|
22
24
|
|
23
25
|
gem.required_ruby_version = Gem::Requirement.new('>= 1.9.2')
|
24
26
|
gem.require_paths = ["lib"]
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'openssl'
|
2
|
+
require 'retryable'
|
2
3
|
require 'socket'
|
3
4
|
|
4
5
|
module ApnsDispatch
|
@@ -77,23 +78,17 @@ module ApnsDispatch
|
|
77
78
|
connect!
|
78
79
|
end
|
79
80
|
|
80
|
-
def
|
81
|
+
def retryable_errors
|
82
|
+
[Errno::EPIPE, Errno::ETIMEDOUT, OpenSSL::SSL::SSLError]
|
83
|
+
end
|
84
|
+
|
85
|
+
def with_connection(&block)
|
81
86
|
unless connected?
|
82
87
|
connect!
|
83
88
|
end
|
84
89
|
|
85
|
-
|
86
|
-
|
87
|
-
begin
|
88
|
-
if block_given?
|
89
|
-
yield
|
90
|
-
end
|
91
|
-
rescue Errno::EPIPE, OpenSSL::SSL::SSLError
|
92
|
-
unless attempted
|
93
|
-
reconnect!
|
94
|
-
attempted = true
|
95
|
-
retry
|
96
|
-
end
|
90
|
+
retryable exception_cb: lambda { |e| reconnect! }, on: retryable_errors, sleep: 0, tries: 2 do
|
91
|
+
yield
|
97
92
|
end
|
98
93
|
end
|
99
94
|
end
|
@@ -21,21 +21,33 @@ describe ApnsDispatch::ApnsConnection do
|
|
21
21
|
@apns_connection.send command, argument
|
22
22
|
end
|
23
23
|
|
24
|
-
it '
|
25
|
-
|
26
|
-
unless @run
|
27
|
-
@run = true
|
28
|
-
raise OpenSSL::SSL::SSLError
|
29
|
-
end
|
30
|
-
end
|
24
|
+
it 'uses the correct host and port' do
|
25
|
+
TCPSocket.should_receive(:new).with(@apns_connection.host, @apns_connection.port)
|
31
26
|
|
32
27
|
@apns_connection.send command, argument
|
33
28
|
end
|
34
29
|
|
35
|
-
|
36
|
-
|
30
|
+
context 'when the connection throws an error' do
|
31
|
+
before do
|
32
|
+
@ssl.stub(command).with(argument).and_return do
|
33
|
+
unless @run
|
34
|
+
@run = true
|
35
|
+
raise OpenSSL::SSL::SSLError
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
37
39
|
|
38
|
-
|
40
|
+
it 'retries once' do
|
41
|
+
@ssl.should_receive(command).with(argument).twice
|
42
|
+
|
43
|
+
@apns_connection.send command, argument
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'reconnects before retrying' do
|
47
|
+
OpenSSL::SSL::SSLSocket.should_receive(:new).twice
|
48
|
+
|
49
|
+
@apns_connection.send command, argument
|
50
|
+
end
|
39
51
|
end
|
40
52
|
|
41
53
|
context 'when there is no connection' do
|
metadata
CHANGED
@@ -1,64 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apns_dispatch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Costa Walcott
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-02-04 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: json
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- - ~>
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 1.7.5
|
22
20
|
type: :runtime
|
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
|
29
26
|
version: 1.7.5
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: retryable
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.3.5
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.3.5
|
30
41
|
- !ruby/object:Gem::Dependency
|
31
42
|
name: rake
|
32
43
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
44
|
requirements:
|
35
|
-
- -
|
45
|
+
- - ">="
|
36
46
|
- !ruby/object:Gem::Version
|
37
47
|
version: '0'
|
38
48
|
type: :development
|
39
49
|
prerelease: false
|
40
50
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
51
|
requirements:
|
43
|
-
- -
|
52
|
+
- - ">="
|
44
53
|
- !ruby/object:Gem::Version
|
45
54
|
version: '0'
|
46
55
|
- !ruby/object:Gem::Dependency
|
47
56
|
name: rspec
|
48
57
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
58
|
requirements:
|
51
|
-
- - ~>
|
59
|
+
- - "~>"
|
52
60
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
61
|
+
version: 2.13.0
|
54
62
|
type: :development
|
55
63
|
prerelease: false
|
56
64
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
65
|
requirements:
|
59
|
-
- - ~>
|
66
|
+
- - "~>"
|
60
67
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
68
|
+
version: 2.13.0
|
62
69
|
description: A simple Ruby framework for sending push notifications and receiving
|
63
70
|
feedback using the Apple Push Notification service
|
64
71
|
email:
|
@@ -67,8 +74,9 @@ executables: []
|
|
67
74
|
extensions: []
|
68
75
|
extra_rdoc_files: []
|
69
76
|
files:
|
70
|
-
- .gitignore
|
77
|
+
- ".gitignore"
|
71
78
|
- Gemfile
|
79
|
+
- Gemfile.lock
|
72
80
|
- MIT-LICENSE
|
73
81
|
- README.md
|
74
82
|
- Rakefile
|
@@ -86,28 +94,28 @@ files:
|
|
86
94
|
- spec/apns_dispatch/apns_connection_spec.rb
|
87
95
|
- spec/spec_helper.rb
|
88
96
|
homepage: http://github.com/TheLevelUp/apns_dispatch
|
89
|
-
licenses:
|
97
|
+
licenses:
|
98
|
+
- MIT
|
99
|
+
metadata: {}
|
90
100
|
post_install_message:
|
91
101
|
rdoc_options: []
|
92
102
|
require_paths:
|
93
103
|
- lib
|
94
104
|
required_ruby_version: !ruby/object:Gem::Requirement
|
95
|
-
none: false
|
96
105
|
requirements:
|
97
|
-
- -
|
106
|
+
- - ">="
|
98
107
|
- !ruby/object:Gem::Version
|
99
108
|
version: 1.9.2
|
100
109
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
|
-
none: false
|
102
110
|
requirements:
|
103
|
-
- -
|
111
|
+
- - ">="
|
104
112
|
- !ruby/object:Gem::Version
|
105
113
|
version: '0'
|
106
114
|
requirements: []
|
107
115
|
rubyforge_project:
|
108
|
-
rubygems_version:
|
116
|
+
rubygems_version: 2.2.1
|
109
117
|
signing_key:
|
110
|
-
specification_version:
|
118
|
+
specification_version: 4
|
111
119
|
summary: A simple Ruby framework for communicating with the APNs
|
112
120
|
test_files:
|
113
121
|
- spec/apns_dispatch/apn_feedback_spec.rb
|