fireinc-apn_on_rails 0.4.2.6 → 0.4.2.7

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.
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{fireinc-apn_on_rails}
8
- s.version = "0.4.2.6"
8
+ s.version = "0.4.2.7"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["markbates", "Rebecca Nesson", "Caleb Adam Haye"]
@@ -1,16 +1,16 @@
1
1
  class APN::App < APN::Base
2
-
2
+
3
3
  has_many :groups, :class_name => 'APN::Group', :dependent => :destroy
4
4
  has_many :devices, :class_name => 'APN::Device', :dependent => :destroy
5
5
  has_many :notifications, :through => :devices, :dependent => :destroy
6
6
  has_many :unsent_notifications, :through => :devices
7
7
  has_many :group_notifications, :through => :groups
8
8
  has_many :unsent_group_notifications, :through => :groups
9
-
9
+
10
10
  def cert
11
11
  (RAILS_ENV == 'production' ? apn_prod_cert : apn_dev_cert)
12
12
  end
13
-
13
+
14
14
  # Opens a connection to the Apple APN server and attempts to batch deliver
15
15
  # an Array of group notifications.
16
16
  #
@@ -25,9 +25,9 @@ class APN::App < APN::Base
25
25
  end
26
26
  APN::App.send_notifications_for_cert(self.cert, self.id)
27
27
  end
28
-
28
+
29
29
  def self.send_notifications
30
- apps = APN::App.all
30
+ apps = APN::App.all
31
31
  apps.each do |app|
32
32
  app.send_notifications
33
33
  end
@@ -36,55 +36,60 @@ class APN::App < APN::Base
36
36
  send_notifications_for_cert(global_cert, nil)
37
37
  end
38
38
  end
39
-
39
+
40
40
  def self.send_notifications_for_cert(the_cert, app_id)
41
41
  # unless self.unsent_notifications.nil? || self.unsent_notifications.empty?
42
- if (app_id == nil)
43
- conditions = "app_id is null"
44
- else
45
- conditions = ["app_id = ?", app_id]
46
- end
47
- begin
48
- APN::Connection.open_for_delivery({:cert => the_cert}) do |conn, sock|
49
- APN::Device.find_each(:conditions => conditions) do |dev|
50
- dev.unsent_notifications.each do |noty|
51
- begin
52
- conn.write(noty.message_for_sending)
53
- rescue => e
54
- Rails.logger.error "Cannot send notification ##{noty.id}: " + e.message
55
- return if e.message == "Broken pipe"
56
- end
57
- noty.sent_at = Time.now
58
- noty.save
59
- end
42
+ if (app_id == nil)
43
+ conditions = "app_id is null"
44
+ else
45
+ conditions = ["app_id = ?", app_id]
46
+ end
47
+ begin
48
+ APN::Connection.open_for_delivery({:cert => the_cert}) do |conn, sock|
49
+ APN::Device.find_each(:conditions => conditions) do |dev|
50
+ dev.unsent_notifications.each do |noty|
51
+ conn.write(noty.message_for_sending)
52
+ noty.sent_at = Time.now
53
+ noty.save
60
54
  end
61
55
  end
62
- rescue Exception => e
63
- log_connection_exception(e)
64
56
  end
57
+ rescue Exception => e
58
+ log_connection_exception(e)
59
+ end
65
60
  # end
66
61
  end
67
-
62
+
68
63
  def send_group_notifications
69
- if self.cert.nil?
64
+ if self.cert.nil?
70
65
  raise APN::Errors::MissingCertificateError.new
71
66
  return
72
67
  end
73
- unless self.unsent_group_notifications.nil? || self.unsent_group_notifications.empty?
74
- APN::Connection.open_for_delivery({:cert => self.cert}) do |conn, sock|
75
- unsent_group_notifications.each do |gnoty|
76
- gnoty.devices.find_each do |device|
77
- conn.write(gnoty.message_for_sending(device))
68
+ unless self.unsent_group_notifications.nil? || self.unsent_group_notifications.empty?
69
+ unsent_group_notifications.each do |gnoty|
70
+ failed = 0
71
+ devices_to_send = gnoty.devices.count
72
+ gnoty.devices.find_in_batches(:batch_size => 100) do |devices|
73
+ APN::Connection.open_for_delivery({:cert => self.cert}) do |conn, sock|
74
+ devices.each do |device|
75
+ begin
76
+ conn.write(gnoty.message_for_sending(device))
77
+ rescue Exception => e
78
+ puts e.message
79
+ failed += 1
80
+ end
81
+ end
78
82
  end
79
- gnoty.sent_at = Time.now
80
- gnoty.save
81
83
  end
84
+ puts "Sent to: #{devices_to_send - failed}/#{devices_to_send} "
85
+ gnoty.sent_at = Time.now
86
+ gnoty.save
82
87
  end
83
88
  end
84
89
  end
85
-
90
+
86
91
  def send_group_notification(gnoty)
87
- if self.cert.nil?
92
+ if self.cert.nil?
88
93
  raise APN::Errors::MissingCertificateError.new
89
94
  return
90
95
  end
@@ -98,14 +103,14 @@ class APN::App < APN::Base
98
103
  end
99
104
  end
100
105
  end
101
-
106
+
102
107
  def self.send_group_notifications
103
108
  apps = APN::App.all
104
109
  apps.each do |app|
105
110
  app.send_group_notifications
106
111
  end
107
- end
108
-
112
+ end
113
+
109
114
  # Retrieves a list of APN::Device instnces from Apple using
110
115
  # the <tt>devices</tt> method. It then checks to see if the
111
116
  # <tt>last_registered_at</tt> date of each APN::Device is
@@ -122,8 +127,10 @@ class APN::App < APN::Base
122
127
  return
123
128
  end
124
129
  APN::App.process_devices_for_cert(self.cert)
125
- end # process_devices
126
-
130
+ end
131
+
132
+ # process_devices
133
+
127
134
  def self.process_devices
128
135
  apps = APN::App.all
129
136
  apps.each do |app|
@@ -134,23 +141,23 @@ class APN::App < APN::Base
134
141
  APN::App.process_devices_for_cert(global_cert)
135
142
  end
136
143
  end
137
-
144
+
138
145
  def self.process_devices_for_cert(the_cert)
139
146
  puts "in APN::App.process_devices_for_cert"
140
147
  APN::Feedback.devices(the_cert).each do |device|
141
148
  if device.last_registered_at < device.feedback_at
142
149
  puts "device #{device.id} -> #{device.last_registered_at} < #{device.feedback_at}"
143
150
  device.destroy
144
- else
151
+ else
145
152
  puts "device #{device.id} -> #{device.last_registered_at} not < #{device.feedback_at}"
146
153
  end
147
- end
154
+ end
148
155
  end
149
-
150
-
156
+
157
+
151
158
  protected
152
- def self.log_connection_exception(ex)
159
+ def log_connection_exception(ex)
153
160
  puts ex.message
154
161
  end
155
-
162
+
156
163
  end
@@ -59,7 +59,7 @@ module APN
59
59
  ssl.connect
60
60
 
61
61
  yield ssl, sock if block_given?
62
-
62
+ ensure
63
63
  ssl.close
64
64
  sock.close
65
65
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fireinc-apn_on_rails
3
3
  version: !ruby/object:Gem::Version
4
- hash: 107
4
+ hash: 105
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
9
  - 2
10
- - 6
11
- version: 0.4.2.6
10
+ - 7
11
+ version: 0.4.2.7
12
12
  platform: ruby
13
13
  authors:
14
14
  - markbates