apn_sender 0.0.6 → 0.0.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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.6
1
+ 0.0.7
data/apn_sender.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{apn_sender}
8
- s.version = "0.0.6"
8
+ s.version = "0.0.7"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kali Donovan"]
@@ -25,7 +25,7 @@ Gem::Specification.new do |s|
25
25
  "VERSION",
26
26
  "apn_sender.gemspec",
27
27
  "contrib/apn_sender.monitrc",
28
- "generators/apple_push_notification_generator.rb",
28
+ "generators/apn_sender_generator.rb",
29
29
  "generators/templates/script",
30
30
  "init.rb",
31
31
  "lib/apn.rb",
@@ -1,4 +1,4 @@
1
- class ApplePushNotificationGenerator < Rails::Generator::Base
1
+ class ApnSenderGenerator < Rails::Generator::Base
2
2
 
3
3
  def manifest
4
4
  record do |m|
@@ -3,5 +3,8 @@
3
3
  # Daemons sets pwd to /, so we have to explicitly set RAILS_ROOT
4
4
  RAILS_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
5
5
 
6
- require File.join(File.dirname(__FILE__), *%w(.. vendor plugins apple_push_notification lib apple_push_notification sender_daemon))
6
+ require 'rubygems'
7
+ require 'apn'
8
+ require 'apn/sender_daemon'
9
+
7
10
  APN::SenderDaemon.new(ARGV).daemonize
@@ -11,7 +11,7 @@ module APN
11
11
  @opts = opts
12
12
 
13
13
  setup_logger
14
- apn_log(:info, "APN::Sender initializing. Establishing connections first...") if @opts[:verbose]
14
+ log(:info, "APN::Sender initializing. Establishing connections first...") if @opts[:verbose]
15
15
  setup_paths
16
16
 
17
17
  super( APN::QUEUE_NAME ) if self.class.ancestors.include?(Resque::Worker)
@@ -33,8 +33,19 @@ module APN
33
33
  end
34
34
  end
35
35
 
36
- def apn_log(level, message)
37
- return false unless self.logger
36
+ # Log message to any logger provided by the user (e.g. the Rails logger).
37
+ # Accepts +log_level+, +message+, since that seems to make the most sense,
38
+ # and just +message+, to be compatible with Resque's log method and to enable
39
+ # sending verbose and very_verbose worker messages to e.g. the rails logger.#
40
+ #
41
+ # Perhaps a method definition of +message, +level+ would make more sense, but
42
+ # that's also the complete opposite of what anyone comming from rails would expect.
43
+ alias_method(:resque_log, :log) if defined?(log)
44
+ def log(level, message = nil)
45
+ level, message = 'info', level if message.nil? # Handle only one argument if called from Resque, which expects only message
46
+
47
+ resque_log(message) if defined?(resque_log)
48
+ return false unless self.logger && self.logger.respond_to?(level)
38
49
  self.logger.send(level, "#{Time.now}: #{message}")
39
50
  end
40
51
 
@@ -71,24 +82,24 @@ module APN
71
82
  @socket.sync = true
72
83
  @socket.connect
73
84
  rescue SocketError => error
74
- apn_log(:error, "Error with connection to #{apn_host}: #{error}")
85
+ log(:error, "Error with connection to #{apn_host}: #{error}")
75
86
  raise "Error with connection to #{apn_host}: #{error}"
76
87
  end
77
88
 
78
89
  # Close open sockets
79
90
  def teardown_connection
80
- apn_log(:info, "Closing connections...") if @opts[:verbose]
91
+ log(:info, "Closing connections...") if @opts[:verbose]
81
92
 
82
93
  begin
83
94
  @socket.close if @socket
84
95
  rescue Exception => e
85
- apn_log(:error, "Error closing SSL Socket: #{e}")
96
+ log(:error, "Error closing SSL Socket: #{e}")
86
97
  end
87
98
 
88
99
  begin
89
100
  @socket_tcp.close if @socket_tcp
90
101
  rescue Exception => e
91
- apn_log(:error, "Error closing TCP Socket: #{e}")
102
+ log(:error, "Error closing TCP Socket: #{e}")
92
103
  end
93
104
  end
94
105
 
data/lib/apn/feedback.rb CHANGED
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/connection/base')
1
+ require 'apn/connection/base'
2
2
 
3
3
  module APN
4
4
  # Encapsulates data returned from the {APN Feedback Service}[http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingWIthAPS/CommunicatingWIthAPS.html#//apple_ref/doc/uid/TP40008194-CH101-SW3].
data/lib/apn/sender.rb CHANGED
@@ -24,7 +24,7 @@ module APN
24
24
 
25
25
  self.socket.write( notification.to_s )
26
26
  rescue SocketError => error
27
- apn_log(:error, "Error with connection to #{apn_host} (attempt #{attempt}): #{error}")
27
+ log(:error, "Error with connection to #{apn_host} (attempt #{attempt}): #{error}")
28
28
 
29
29
  # Try reestablishing the connection
30
30
  teardown_connection
@@ -5,11 +5,9 @@ require 'optparse'
5
5
 
6
6
  module APN
7
7
  class SenderDaemon
8
- attr_accessor :worker_count
9
8
 
10
9
  def initialize(args)
11
- @options = {:quiet => true}
12
- @worker_count = 1
10
+ @options = {:quiet => true, :worker_count => 1, :environment => :development}
13
11
 
14
12
  opts = OptionParser.new do |opts|
15
13
  opts.banner = "Usage: #{File.basename($0)} [options] start|stop|restart|run"
@@ -24,16 +22,29 @@ module APN
24
22
  opts.on('--cert-path=NAME', '--certificate-path=NAME', 'Path to directory containing apn .pem certificates.') do |path|
25
23
  @options[:cert_path] = path
26
24
  end
27
- opts.on('-n', '--number_of_workers=workers', "Number of unique workers to spawn") do |worker_count|
28
- @worker_count = worker_count.to_i rescue 1
25
+ opts.on('-n', '--number_of_workers=WORKERS', "Number of unique workers to spawn") do |worker_count|
26
+ @options[:worker_count] = worker_count.to_i rescue 1
27
+ end
28
+ opts.on('-v', '--verbose', "Turn on verbose mode") do
29
+ @options[:verbose] = true
30
+ end
31
+ opts.on('-V', '--very_verbose', "Turn on very verbose mode") do
32
+ @options[:very_verbose] = true
33
+ end
34
+ opts.on('-d', '--delay=D', "Delay between rounds of work (seconds)") do |d|
35
+ @options[:delay] = d
29
36
  end
30
37
  end
31
- @args = opts.parse!(args)
38
+
39
+ # If no arguments, give help screen
40
+ @args = optparse.parse!(args.empty? ? ['-h'] : args)
41
+
42
+ puts "OPTS: #{@options.inspect}"
32
43
  end
33
44
 
34
45
  def daemonize
35
- worker_count.times do |worker_index|
36
- process_name = worker_count == 1 ? "apn_sender" : "apn_sender.#{worker_index}"
46
+ @options[:worker_count].times do |worker_index|
47
+ process_name = @options[:worker_count] == 1 ? "apn_sender" : "apn_sender.#{worker_index}"
37
48
  Daemons.run_proc(process_name, :dir => "#{::RAILS_ROOT}/tmp/pids", :dir_mode => :normal, :ARGV => @args) do |*args|
38
49
  run process_name
39
50
  end
@@ -49,14 +60,14 @@ module APN
49
60
  logger.level = ActiveRecord::Base.logger.level
50
61
  ActiveRecord::Base.logger = logger
51
62
  ActiveRecord::Base.clear_active_connections!
52
- APN::Sender.logger = logger
53
63
 
54
64
  worker = APN::Sender.new(@options)
65
+ worker.logger = logger
55
66
  worker.verbose = @options[:verbose]
56
67
  worker.very_verbose = @options[:very_verbose]
57
- worker.work(@options[:delay] || 5)
68
+ worker.work(@options[:delay])
58
69
  rescue => e
59
- logger.fatal e
70
+ logger.fatal(e) if logger.respond_to?(:fatal)
60
71
  STDERR.puts e.message
61
72
  exit 1
62
73
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apn_sender
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kali Donovan
@@ -50,7 +50,7 @@ files:
50
50
  - VERSION
51
51
  - apn_sender.gemspec
52
52
  - contrib/apn_sender.monitrc
53
- - generators/apple_push_notification_generator.rb
53
+ - generators/apn_sender_generator.rb
54
54
  - generators/templates/script
55
55
  - init.rb
56
56
  - lib/apn.rb