push-apns 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,3 @@
1
1
  module PushApns
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
@@ -1,10 +1,11 @@
1
1
  module Push
2
2
  class ConfigurationApns < Push::Configuration
3
- store :properties, accessors: [:certificate, :certificate_password, :sandbox, :feedback_poll]
3
+ store :properties, accessors: [:certificate, :certificate_password, :sandbox, :feedback_poll, :skip_check_for_error]
4
4
  attr_accessible :app, :enabled, :connections, :certificate, :certificate_password, :sandbox, :feedback_poll
5
5
  validates :certificate, :presence => true
6
6
  validates :sandbox, :inclusion => { :in => [true, false] }
7
7
  validates :feedback_poll, :presence => true
8
+ validates :skip_check_for_error, :inclusion => { :in => [true, false] }, :allow_blank => true
8
9
 
9
10
  def name
10
11
  :apns
@@ -51,7 +51,7 @@ module Push
51
51
 
52
52
  begin
53
53
  write_data(data)
54
- rescue Errno::EPIPE, Errno::ETIMEDOUT, OpenSSL::SSL::SSLError => e
54
+ rescue Errno::EPIPE, Errno::ETIMEDOUT, Errno::ECONNRESET, OpenSSL::SSL::SSLError => e
55
55
  retry_count += 1;
56
56
 
57
57
  if retry_count == 1
@@ -3,6 +3,8 @@ module Push
3
3
  module ApnsSupport
4
4
  class FeedbackReceiver
5
5
  include Push::Daemon::InterruptibleSleep
6
+ include Push::Daemon::DatabaseReconnectable
7
+
6
8
  FEEDBACK_TUPLE_BYTES = 38
7
9
 
8
10
  def initialize(provider)
@@ -32,7 +34,7 @@ module Push
32
34
 
33
35
  while tuple = connection.read(FEEDBACK_TUPLE_BYTES)
34
36
  timestamp, device = parse_tuple(tuple)
35
- create_feedback(timestamp, device)
37
+ create_feedback(connection, timestamp, device)
36
38
  end
37
39
  rescue StandardError => e
38
40
  Push::Daemon.logger.error(e)
@@ -48,10 +50,12 @@ module Push
48
50
  [Time.at(failed_at).utc, device]
49
51
  end
50
52
 
51
- def create_feedback(failed_at, device)
53
+ def create_feedback(connection, failed_at, device)
52
54
  formatted_failed_at = failed_at.strftime("%Y-%m-%d %H:%M:%S UTC")
53
- Push::Daemon.logger.info("[FeedbackReceiver] Delivery failed at #{formatted_failed_at} for #{device}")
54
- Push::FeedbackApns.create!(:app => @provider.configuration[:name], :failed_at => failed_at, :device => device, :follow_up => 'delete')
55
+ Push::Daemon.logger.info("[#{connection.name}: Delivery failed at #{formatted_failed_at} for #{device}")
56
+ with_database_reconnect_and_retry(connection.name) do
57
+ Push::FeedbackApns.create!(:app => @provider.configuration[:name], :failed_at => failed_at, :device => device, :follow_up => 'delete')
58
+ end
55
59
  end
56
60
  end
57
61
  end
@@ -76,6 +76,9 @@ module Push
76
76
  end
77
77
 
78
78
  def check_for_error(connection)
79
+ # check for true, because check_for_error can be nil
80
+ return if connection.provider.configuration[:skip_check_for_error] == true
81
+
79
82
  if connection.select(SELECT_TIMEOUT)
80
83
  error = nil
81
84
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: push-apns
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-27 00:00:00.000000000 Z
12
+ date: 2012-11-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: multi_json
16
- requirement: &70129790660280 !ruby/object:Gem::Requirement
16
+ requirement: &70256296415060 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '1.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70129790660280
24
+ version_requirements: *70256296415060
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: push-core
27
- requirement: &70129790659040 !ruby/object:Gem::Requirement
27
+ requirement: &70256296414560 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.0.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70129790659040
35
+ version_requirements: *70256296414560
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: sqlite3
38
- requirement: &70129790658180 !ruby/object:Gem::Requirement
38
+ requirement: &70256296414180 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70129790658180
46
+ version_requirements: *70256296414180
47
47
  description: APNS support for the modular push daemon.
48
48
  email:
49
49
  - tom@tnux.net