push-core 0.0.1.pre → 0.0.1.pre2

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.md CHANGED
@@ -1,3 +1,88 @@
1
1
  # Push
2
2
 
3
- This project rocks and uses MIT-LICENSE.
3
+ ## Installation
4
+
5
+ Add to your `GemFile`
6
+
7
+ gem push-core
8
+
9
+ and add the push provider to you Gemfile:
10
+
11
+ For __APNS__ (iOS: Apple Push Notification Services):
12
+
13
+ gem push-apns
14
+
15
+ For __C2DM__ (Android: Cloud to Device Messaging):
16
+
17
+ gem push-c2dm
18
+
19
+ And run `bundle install` to install the gems.
20
+
21
+ To generate the migration and the configuration files run:
22
+
23
+ rails g push
24
+ bundle exec rake db:migrate
25
+
26
+ ## Configuration
27
+ A default configuration file looks like this:
28
+ ```ruby
29
+ Push::Daemon::Builder.new do
30
+ daemon({ :poll => 2, :pid_file => "tmp/pids/push.pid", :airbrake_notify => false })
31
+
32
+ provider :apns,
33
+ {
34
+ :certificate => "production.pem",
35
+ :certificate_password => "",
36
+ :sandbox => false,
37
+ :connections => 3,
38
+ :feedback_poll => 60
39
+ }
40
+
41
+ provider :c2dm,
42
+ {
43
+ :connections => 2,
44
+ :email => "",
45
+ :password => ""
46
+ }
47
+ end
48
+ ```
49
+ Remove the provider you're not using. Add your email and password to enable C2DM. For APNS follow the 'Generating Certificates' below.
50
+
51
+
52
+ ### Generating Certificates
53
+
54
+ 1. Open up Keychain Access and select the `Certificates` category in the sidebar.
55
+ 2. Expand the disclosure arrow next to the iOS Push Services certificate you want to export.
56
+ 3. Select both the certificate and private key.
57
+ 4. Right click and select `Export 2 items...`.
58
+ 5. Save the file as `cert.p12`, make sure the File Format is `Personal Information Exchange (p12)`.
59
+ 6. If you decide to set a password for your exported certificate, please read the Configuration section below.
60
+ 7. Convert the certificate to a .pem, where `<environment>` should be `development` or `production`, depending on the certificate you exported.
61
+
62
+ `openssl pkcs12 -nodes -clcerts -in cert.p12 -out <environment>.pem`
63
+
64
+ 8. Move the .pem file into your Rails application under `config/push`.
65
+
66
+
67
+ ## Daemon
68
+
69
+ To start the daemon:
70
+
71
+ bundle exec push <environment> <options>
72
+
73
+ Where `<environment>` is your Rails environment and `<options>` can be `--foreground`, `--version` or `--help`.
74
+
75
+ ## Sending notifications
76
+ APNS:
77
+ ```ruby
78
+ Push::MessageApns.new(device: "<APNS device_token here>", alert: 'Hello World', expiry: 1.day.to_i, attributes_for_device: {key: 'MSG'}).save
79
+ ```
80
+ C2DM:
81
+ ```ruby
82
+ Push::MessageC2dm.new(device: "<C2DM registration_id here>", payload: { message: "Hello World" }, collapse_key: "MSG").save
83
+ ```
84
+
85
+ ## Thanks
86
+
87
+ This project started as a fork of Ian Leitch [RAPNS](https://github.com/ileitch/rapns) project. The differences between this project and RAPNS is the support for C2DM and the modularity of the push providers.
88
+
data/lib/push-core.rb ADDED
@@ -0,0 +1 @@
1
+ require 'push/railtie' if defined?(Rails)
@@ -29,7 +29,7 @@ module Push
29
29
  begin
30
30
  with_database_reconnect_and_retry(name) do
31
31
  if Push::Daemon.delivery_queue.notifications_processed?
32
- Push::Message.ready_for_delivery.each do |notification|
32
+ Push::Message.ready_for_delivery.find_each do |notification|
33
33
  Push::Daemon.delivery_queue.push(notification)
34
34
  end
35
35
  end
@@ -3,8 +3,9 @@ module Push
3
3
  class Logger
4
4
  def initialize(options)
5
5
  @options = options
6
- log_path = File.join(Rails.root, 'log', 'push.log')
7
- @logger = ActiveSupport::BufferedLogger.new(log_path, Rails.logger.level)
6
+ log_file = File.open(File.join(Rails.root, 'log', 'push.log'), 'w')
7
+ log_file.sync = true
8
+ @logger = ActiveSupport::BufferedLogger.new(log_file, Rails.logger.level)
8
9
  @logger.auto_flushing = Rails.logger.respond_to?(:auto_flushing) ? Rails.logger.auto_flushing : true
9
10
  end
10
11
 
@@ -0,0 +1,11 @@
1
+ require 'push'
2
+ require 'rails'
3
+ module Push
4
+ class Railtie < Rails::Railtie
5
+ railtie_name :push
6
+
7
+ rake_tasks do
8
+ load 'tasks/push_tasks.rake'
9
+ end
10
+ end
11
+ end
data/lib/push/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Push
2
- VERSION = "0.0.1.pre"
2
+ VERSION = "0.0.1.pre2"
3
3
  end
@@ -0,0 +1,11 @@
1
+ # Push Rake Tasks
2
+ namespace :push do
3
+ desc "Delete all push messages and feedback older than 7 days or DAYS=x if defined (where x is an integer)"
4
+ task :clean => :environment do
5
+ days = ENV["DAYS"].to_i || 7
6
+ puts "Removing #{days} days of push messages and feedback"
7
+ feedback = Push::Feedback.where("created_at < ?", days.days.ago).delete_all
8
+ messages = Push::Message.where("created_at < ?", days.days.ago).delete_all
9
+ puts "Done, messages=#{messages} feedback=#{feedback}"
10
+ end
11
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: push-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.pre
4
+ version: 0.0.1.pre2
5
5
  prerelease: 6
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-06-15 00:00:00.000000000 Z
12
+ date: 2012-07-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &70154092596240 !ruby/object:Gem::Requirement
16
+ requirement: &70357910508440 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.2.1
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70154092596240
24
+ version_requirements: *70357910508440
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: sqlite3
27
- requirement: &70154092595780 !ruby/object:Gem::Requirement
27
+ requirement: &70357910506440 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70154092595780
35
+ version_requirements: *70357910506440
36
36
  description: Push daemon for push notification services like APNS and C2DM.
37
37
  email:
38
38
  - tom@tnux.net
@@ -46,6 +46,7 @@ files:
46
46
  - lib/generators/templates/development.rb
47
47
  - lib/generators/templates/production.rb
48
48
  - lib/generators/templates/staging.rb
49
+ - lib/push-core.rb
49
50
  - lib/push.rb
50
51
  - lib/push/daemon.rb
51
52
  - lib/push/daemon/builder.rb
@@ -62,7 +63,9 @@ files:
62
63
  - lib/push/daemon/pool.rb
63
64
  - lib/push/feedback.rb
64
65
  - lib/push/message.rb
66
+ - lib/push/railtie.rb
65
67
  - lib/push/version.rb
68
+ - lib/tasks/push_tasks.rake
66
69
  - README.md
67
70
  - MIT-LICENSE
68
71
  - bin/push