apn_on_rails 0.1.0 → 0.1.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.
data/README CHANGED
@@ -1,16 +1,17 @@
1
- APN on Rails
2
- (Apple Push Notifications on Rails)
3
- =====================
1
+ =APN on Rails (Apple Push Notifications on Rails)
2
+
3
+ APN on Rails is a Ruby on Rails gem that allows you to easily add Apple Push Notification (iPhone)
4
+ support to your Rails application.
5
+
6
+ ==Acknowledgements:
4
7
 
5
- Acknowledgements
6
- ----------------
7
8
  This gem is a re-write of a plugin that was written by Fabien Penso and Sam Soffes.
8
9
  Their plugin was a great start, but it just didn't quite reach the level I hoped it would.
9
10
  I've re-written, as a gem, added a ton of tests, and I would like to think that I made it
10
11
  a little nicer and easier to use.
11
12
 
12
- Converting Your Certificate
13
- ---------------------------
13
+ ==Converting Your Certificate:
14
+
14
15
  Once you have the certificate from Apple for your application, export your key
15
16
  and the apple certificate as p12 files. Here is a quick walkthrough on how to do this:
16
17
 
@@ -26,28 +27,38 @@ Put 'apple_push_notification_production.pem' in config/
26
27
 
27
28
  If you are using a development certificate, then change the name to apple_push_notification_development.pem instead.
28
29
 
29
- Installing
30
- ----------
30
+ ==Installing:
31
+
32
+ ===Stable (RubyForge):
31
33
 
32
- From RubyForge:
33
34
  $ sudo gem install apn_on_rails
34
35
 
35
- Or, if you like to live on the edge:
36
+ ===Edge (GitHub):
37
+
36
38
  $ sudo gem install markbates-apn_on_rails --source=http://gems.github.com
37
-
38
- Then you just add the following require, wherever it makes sense to you:
39
- require 'apn_on_rails'
39
+
40
+ ===Rails Gem Management:
40
41
 
41
42
  If you like to use the built in Rails gem management:
43
+
42
44
  config.gem 'apn_on_rails'
43
45
 
44
46
  Or, if you like to live on the edge:
47
+
45
48
  config.gem 'markbates-apn_on_rails', :lib => 'apn_on_rails', :source => 'http://gems.github.com'
46
-
47
- Setup and Configuration
48
- -----------------------
49
- Once you have the gem installed you need to add the following to your Rakefile so you can use the
49
+
50
+ ==Setup and Configuration:
51
+
52
+ Once you have the gem installed via your favorite gem installation, you need to require it so you can
53
+ start to use it:
54
+
55
+ Add the following require, wherever it makes sense to you:
56
+
57
+ require 'apn_on_rails'
58
+
59
+ You also need to add the following to your Rakefile so you can use the
50
60
  Rake tasks that ship with APN on Rails:
61
+
51
62
  begin
52
63
  require 'apn_on_rails_tasks'
53
64
  rescue MissingSourceFile => e
@@ -55,6 +66,7 @@ Rake tasks that ship with APN on Rails:
55
66
  end
56
67
 
57
68
  Now, to create the tables you need for APN on Rails, run the following task:
69
+
58
70
  $ rake apn:db:migrate
59
71
 
60
72
  APN on Rails uses the Configatron gem, http://github.com/markbates/configatron/tree/master,
@@ -72,17 +84,20 @@ see fit:
72
84
 
73
85
  That's it, now you're ready to start creating notifications.
74
86
 
75
- Example
76
- -------
77
-
78
- $ ./script/console
79
- >> device = APN::Device.create(:token => "XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX")
80
- >> notification = APN::Notification.new
81
- >> notification.device = device
82
- >> notification.badge = 5
83
- >> notification.sound = true
84
- >> notification.alert = "foobar"
85
- >> notification.save
86
- >> APN::Notification.send_notifications
87
+ ==Example:
88
+
89
+ $ ./script/console
90
+ >> device = APN::Device.create(:token => "XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX")
91
+ >> notification = APN::Notification.new
92
+ >> notification.device = device
93
+ >> notification.badge = 5
94
+ >> notification.sound = true
95
+ >> notification.alert = "foobar"
96
+ >> notification.save
97
+ >> APN::Notification.send_notifications
98
+
99
+ You can also run the following Rake task to send your notifications:
100
+
101
+ $ rake apn:notifications:deliver
87
102
 
88
103
  Released under the MIT license.
@@ -22,13 +22,14 @@ if rails_env == 'production'
22
22
  configatron.apn.set_default(:cert, File.join(rails_root, 'config', 'apple_push_notification_production.pem'))
23
23
  end
24
24
 
25
- module APN
25
+ module APN # :nodoc:
26
26
 
27
- module Errors
27
+ module Errors # :nodoc:
28
28
 
29
+ # Raised when a notification message to Apple is longer than 256 bytes.
29
30
  class ExceededMessageSizeError < StandardError
30
31
 
31
- def initialize(message)
32
+ def initialize(message) # :nodoc:
32
33
  super("The maximum size allowed for a notification payload is 256 bytes: '#{message}'")
33
34
  end
34
35
 
@@ -1,3 +1,8 @@
1
+ # Represents an iPhone (or other APN enabled device).
2
+ # An APN::Device can have many APN::Notification.
3
+ #
4
+ # Example:
5
+ # Device.create(:token => '5gxadhy6 6zmtxfl6 5zpbcxmw ez3w7ksf qscpr55t trknkzap 7yyt45sc g6jrw7qz')
1
6
  class APN::Device < ActiveRecord::Base
2
7
  set_table_name 'apn_devices'
3
8
 
@@ -6,6 +11,8 @@ class APN::Device < ActiveRecord::Base
6
11
  validates_uniqueness_of :token
7
12
  validates_format_of :token, :with => /^[a-z0-9]{8}\s[a-z0-9]{8}\s[a-z0-9]{8}\s[a-z0-9]{8}\s[a-z0-9]{8}\s[a-z0-9]{8}\s[a-z0-9]{8}\s[a-z0-9]{8}$/
8
13
 
14
+ # Stores the token (Apple's device ID) of the iPhone (device).
15
+ #
9
16
  # If the token comes in like this:
10
17
  # '<5gxadhy6 6zmtxfl6 5zpbcxmw ez3w7ksf qscpr55t trknkzap 7yyt45sc g6jrw7qz>'
11
18
  # Then the '<' and '>' will be stripped off.
@@ -1,3 +1,19 @@
1
+ # Represents the message you wish to send.
2
+ # An APN::Notification belongs to an APN::Device.
3
+ #
4
+ # Example:
5
+ # apn = APN::Notification.new
6
+ # apn.badge = 5
7
+ # apn.sound = 'my_sound.aiff'
8
+ # apn.alert = 'Hello!'
9
+ # apn.device = APN::Device.find(1)
10
+ # apn.save
11
+ #
12
+ # To deliver call the following method:
13
+ # APN::Notification.send_notifications
14
+ #
15
+ # As each APN::Notification is sent the <tt>sent_at</tt> column will be timestamped,
16
+ # so as to not be sent again.
1
17
  class APN::Notification < ActiveRecord::Base
2
18
  include ::ActionView::Helpers::TextHelper
3
19
  extend ::ActionView::Helpers::TextHelper
@@ -6,6 +22,10 @@ class APN::Notification < ActiveRecord::Base
6
22
 
7
23
  belongs_to :device, :class_name => 'APN::Device'
8
24
 
25
+ # Stores the text alert message you want to send to the device.
26
+ #
27
+ # If the message is over 150 characters long it will get truncated
28
+ # to 150 characters with a <tt>...</tt>
9
29
  def alert=(message)
10
30
  if !message.blank? && message.size > 150
11
31
  message = truncate(message, :length => 150)
@@ -55,6 +75,15 @@ class APN::Notification < ActiveRecord::Base
55
75
 
56
76
  class << self
57
77
 
78
+ # Opens a connection to the Apple APN server and attempts to batch deliver
79
+ # an Array of notifications.
80
+ #
81
+ # This method expects an Array of APN::Notifications. If no parameter is passed
82
+ # in then it will use the following:
83
+ # APN::Notification.all(:conditions => {:sent_at => nil})
84
+ #
85
+ # As each APN::Notification is sent the <tt>sent_at</tt> column will be timestamped,
86
+ # so as to not be sent again.
58
87
  def send_notifications(notifications = APN::Notification.all(:conditions => {:sent_at => nil}))
59
88
  unless notifications.nil? || notifications.empty?
60
89
  logger.info "APN: Attempting to deliver #{pluralize(notifications.size, 'notification')}."
@@ -1,4 +1,4 @@
1
- class CreateApnDevices < ActiveRecord::Migration
1
+ class CreateApnDevices < ActiveRecord::Migratio # :nodoc:
2
2
  def self.up
3
3
  create_table :apn_devices do |t|
4
4
  t.text :token, :size => 71, :null => false
@@ -1,4 +1,4 @@
1
- class CreateApnNotifications < ActiveRecord::Migration
1
+ class CreateApnNotifications < ActiveRecord::Migration # :nodoc:
2
2
 
3
3
  def self.up
4
4
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apn_on_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - markbates