push-core 0.0.1.pre → 0.0.1.pre2

Sign up to get free protection for your applications and to get access to all the features.
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