rpush 2.2.0-java → 2.3.0-java
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/README.md +17 -9
- data/lib/generators/rpush_migration_generator.rb +1 -1
- data/lib/rpush.rb +4 -1
- data/lib/rpush/apns_feedback.rb +1 -1
- data/lib/rpush/cli.rb +24 -21
- data/lib/rpush/client/active_model/apns/app.rb +1 -1
- data/lib/rpush/client/active_model/apns/notification.rb +2 -2
- data/lib/rpush/client/active_model/wpns/notification.rb +7 -1
- data/lib/rpush/configuration.rb +32 -22
- data/lib/rpush/daemon.rb +18 -9
- data/lib/rpush/daemon/adm/delivery.rb +4 -1
- data/lib/rpush/daemon/apns/delivery.rb +3 -0
- data/lib/rpush/daemon/apns/feedback_receiver.rb +6 -2
- data/lib/rpush/daemon/app_runner.rb +11 -16
- data/lib/rpush/daemon/batch.rb +9 -0
- data/lib/rpush/daemon/delivery.rb +10 -2
- data/lib/rpush/daemon/delivery_error.rb +3 -3
- data/lib/rpush/daemon/dispatcher/apns_tcp.rb +11 -11
- data/lib/rpush/daemon/dispatcher/tcp.rb +2 -10
- data/lib/rpush/daemon/gcm/delivery.rb +13 -7
- data/lib/rpush/daemon/signal_handler.rb +5 -3
- data/lib/rpush/daemon/store/active_record.rb +14 -0
- data/lib/rpush/daemon/store/interface.rb +2 -1
- data/lib/rpush/daemon/store/redis.rb +3 -0
- data/lib/rpush/daemon/tcp_connection.rb +47 -17
- data/lib/rpush/daemon/wpns/delivery.rb +19 -10
- data/lib/rpush/logger.rb +30 -12
- data/lib/rpush/plugin.rb +44 -0
- data/lib/rpush/push.rb +1 -1
- data/lib/rpush/reflectable.rb +13 -0
- data/lib/rpush/{reflection.rb → reflection_collection.rb} +1 -9
- data/lib/rpush/reflection_public_methods.rb +9 -0
- data/lib/rpush/version.rb +1 -1
- data/lib/tasks/test.rake +6 -4
- data/spec/functional/adm_spec.rb +12 -0
- data/spec/functional/apns_spec.rb +61 -42
- data/spec/functional/gcm_spec.rb +9 -0
- data/spec/functional/retry_spec.rb +1 -1
- data/spec/functional/wpns_spec.rb +44 -11
- data/spec/spec_helper.rb +2 -0
- data/spec/unit/apns_feedback_spec.rb +2 -2
- data/spec/unit/client/active_record/apns/app_spec.rb +2 -2
- data/spec/unit/client/active_record/apns/notification_spec.rb +1 -2
- data/spec/unit/client/active_record/wpns/notification_spec.rb +9 -3
- data/spec/unit/configuration_spec.rb +1 -0
- data/spec/unit/daemon/adm/delivery_spec.rb +0 -1
- data/spec/unit/daemon/apns/feedback_receiver_spec.rb +0 -1
- data/spec/unit/daemon/app_runner_spec.rb +14 -9
- data/spec/unit/daemon/delivery_spec.rb +0 -1
- data/spec/unit/daemon/dispatcher/tcp_spec.rb +0 -7
- data/spec/unit/daemon/gcm/delivery_spec.rb +1 -1
- data/spec/unit/daemon/signal_handler_spec.rb +5 -1
- data/spec/unit/daemon/store/active_record_spec.rb +1 -1
- data/spec/unit/daemon/tcp_connection_spec.rb +18 -18
- data/spec/unit/daemon/wpns/delivery_spec.rb +1 -1
- data/spec/unit/daemon_spec.rb +10 -2
- data/spec/unit/logger_spec.rb +0 -1
- data/spec/unit/plugin_spec.rb +36 -0
- data/spec/unit/push_spec.rb +2 -2
- data/spec/unit/{daemon/reflectable_spec.rb → reflectable_spec.rb} +6 -6
- data/spec/unit/{reflection_spec.rb → reflection_collection_spec.rb} +4 -8
- metadata +34 -36
- data/lib/rpush/daemon/reflectable.rb +0 -11
- data/spec/integration/rpush_spec.rb +0 -13
- data/spec/integration/support/gcm_success_response.json +0 -1
- data/spec/support/install.sh +0 -68
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 1a29805b526b4e20790e6abfde8b1f4a2e13c820
         | 
| 4 | 
            +
              data.tar.gz: 3e4131f892b6bc9c8278670e3080e701a00b35df
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: d91934f23b29f4ff80bdd82efb28f86cadb534a2b464a721fae4ee2bc5b3a4929b21e6aca315880c02e5b779cc7a8acfe6bd1ac2c18de1872f94e80b62d5cd67
         | 
| 7 | 
            +
              data.tar.gz: e34e8a465a53826bbcb40cc7e83a00bb2b2d5f00fd477fb940d3fe4101636a8094bb9947087344af1204729dc5d86e018d941f158746a0213727da4292fefd33
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,3 +1,13 @@ | |
| 1 | 
            +
            ## 2.3.0 (Jan 19, 2015)
         | 
| 2 | 
            +
              * Add 'version' CLI command.
         | 
| 3 | 
            +
              * Rpush::Wpns::Notification now supports setting the 'data' attribute.
         | 
| 4 | 
            +
              * ActiveRecord is now directed to the configured Rpush logger (#104).
         | 
| 5 | 
            +
              * Logs are reopened when the HUP signal is received (#95).
         | 
| 6 | 
            +
              * Fix setting config.redis_options (#114).
         | 
| 7 | 
            +
              * Increase frequency of TCP keepalive probes on Linux.
         | 
| 8 | 
            +
              * APNs notifications are no longer marked as failed when a dropped connection is detected, as it's impossible to know exactly how many actually failed (if any).
         | 
| 9 | 
            +
              * Notifications are now retried instead of being marked as failed if a TCP/HTTP connection cannot be established.
         | 
| 10 | 
            +
             | 
| 1 11 | 
             
            ## 2.2.0 (Oct 7, 2014)
         | 
| 2 12 | 
             
              * Numerous command-line fixes, sorry folks!
         | 
| 3 13 | 
             
              * Add 'rpush push' command-line command for one-off use.
         | 
    
        data/README.md
    CHANGED
    
    | @@ -61,7 +61,7 @@ app.save! | |
| 61 61 | 
             
            ```ruby
         | 
| 62 62 | 
             
            n = Rpush::Apns::Notification.new
         | 
| 63 63 | 
             
            n.app = Rpush::Apns::App.find_by_name("ios_app")
         | 
| 64 | 
            -
            n.device_token = "..."
         | 
| 64 | 
            +
            n.device_token = "..." # 64-character hex string
         | 
| 65 65 | 
             
            n.alert = "hi mom!"
         | 
| 66 66 | 
             
            n.data = { foo: :bar }
         | 
| 67 67 | 
             
            n.save!
         | 
| @@ -126,7 +126,7 @@ app.save! | |
| 126 126 | 
             
            n = Rpush::Wpns::Notification.new
         | 
| 127 127 | 
             
            n.app = Rpush::Wpns::App.find_by_name("windows_phone_app")
         | 
| 128 128 | 
             
            n.uri = "http://..."
         | 
| 129 | 
            -
            n. | 
| 129 | 
            +
            n.data = {title:"MyApp", body:"Hello world", param:"user_param1"}
         | 
| 130 130 | 
             
            n.save!
         | 
| 131 131 | 
             
            ```
         | 
| 132 132 |  | 
| @@ -143,16 +143,15 @@ rpush start | |
| 143 143 |  | 
| 144 144 | 
             
            See `rpush help` for all available commands and options.
         | 
| 145 145 |  | 
| 146 | 
            -
            ####  | 
| 146 | 
            +
            #### One-off, manual
         | 
| 147 147 |  | 
| 148 | 
            -
             | 
| 149 | 
            -
            # Call this during startup of your application, for example, by adding it to the end of config/rpush.rb
         | 
| 150 | 
            -
            Rpush.embed
         | 
| 151 | 
            -
            ```
         | 
| 148 | 
            +
            On the command-line:
         | 
| 152 149 |  | 
| 153 | 
            -
             | 
| 150 | 
            +
            ```
         | 
| 151 | 
            +
            rpush push
         | 
| 152 | 
            +
            ```
         | 
| 154 153 |  | 
| 155 | 
            -
             | 
| 154 | 
            +
            In your code:
         | 
| 156 155 |  | 
| 157 156 | 
             
            ```ruby
         | 
| 158 157 | 
             
            Rpush.push
         | 
| @@ -161,6 +160,15 @@ Rpush.apns_feedback | |
| 161 160 |  | 
| 162 161 | 
             
            See [Push API](https://github.com/rpush/rpush/wiki/Push-API) for more details.
         | 
| 163 162 |  | 
| 163 | 
            +
            #### Embedded inside an existing process
         | 
| 164 | 
            +
             | 
| 165 | 
            +
            ```ruby
         | 
| 166 | 
            +
            # Call this during startup of your application, for example, by adding it to the end of config/rpush.rb
         | 
| 167 | 
            +
            Rpush.embed
         | 
| 168 | 
            +
            ```
         | 
| 169 | 
            +
             | 
| 170 | 
            +
            See [Embedding API](https://github.com/rpush/rpush/wiki/Embedding-API) for more details.
         | 
| 171 | 
            +
             | 
| 164 172 | 
             
            ### Configuration
         | 
| 165 173 |  | 
| 166 174 | 
             
            See [Configuration](https://github.com/rpush/rpush/wiki/Configuration) for a list of options.
         | 
    
        data/lib/rpush.rb
    CHANGED
    
    | @@ -19,7 +19,10 @@ require 'rpush/deprecatable' | |
| 19 19 | 
             
            require 'rpush/logger'
         | 
| 20 20 | 
             
            require 'rpush/multi_json_helper'
         | 
| 21 21 | 
             
            require 'rpush/configuration'
         | 
| 22 | 
            -
            require 'rpush/ | 
| 22 | 
            +
            require 'rpush/reflection_collection'
         | 
| 23 | 
            +
            require 'rpush/reflection_public_methods'
         | 
| 24 | 
            +
            require 'rpush/reflectable'
         | 
| 25 | 
            +
            require 'rpush/plugin'
         | 
| 23 26 | 
             
            require 'rpush/embed'
         | 
| 24 27 | 
             
            require 'rpush/push'
         | 
| 25 28 | 
             
            require 'rpush/apns_feedback'
         | 
    
        data/lib/rpush/apns_feedback.rb
    CHANGED
    
    
    
        data/lib/rpush/cli.rb
    CHANGED
    
    | @@ -1,12 +1,10 @@ | |
| 1 1 | 
             
            # encoding: UTF-8
         | 
| 2 2 |  | 
| 3 3 | 
             
            require 'thor'
         | 
| 4 | 
            -
            require ' | 
| 4 | 
            +
            require 'ansi/code'
         | 
| 5 5 |  | 
| 6 6 | 
             
            module Rpush
         | 
| 7 7 | 
             
              class CLI < Thor
         | 
| 8 | 
            -
                include Term::ANSIColor
         | 
| 9 | 
            -
             | 
| 10 8 | 
             
                def self.detect_rails?
         | 
| 11 9 | 
             
                  ['bin/rails', 'script/rails'].any? { |path| File.exist?(path) }
         | 
| 12 10 | 
             
                end
         | 
| @@ -22,9 +20,7 @@ module Rpush | |
| 22 20 | 
             
                option 'pid-file', type: :string, aliases: '-p'
         | 
| 23 21 | 
             
                desc 'start', 'Start Rpush'
         | 
| 24 22 | 
             
                def start
         | 
| 25 | 
            -
                   | 
| 26 | 
            -
                  check_ruby_version
         | 
| 27 | 
            -
                  configure_rpush
         | 
| 23 | 
            +
                  config_setup
         | 
| 28 24 |  | 
| 29 25 | 
             
                  require 'rpush/daemon'
         | 
| 30 26 | 
             
                  Rpush::Daemon.start
         | 
| @@ -33,9 +29,7 @@ module Rpush | |
| 33 29 | 
             
                desc 'stop', 'Stop Rpush'
         | 
| 34 30 | 
             
                option 'pid-file', type: :string, aliases: '-p'
         | 
| 35 31 | 
             
                def stop
         | 
| 36 | 
            -
                   | 
| 37 | 
            -
                  check_ruby_version
         | 
| 38 | 
            -
                  configure_rpush
         | 
| 32 | 
            +
                  config_setup
         | 
| 39 33 | 
             
                  ensure_pid_file_set
         | 
| 40 34 |  | 
| 41 35 | 
             
                  if File.exist?(Rpush.config.pid_file)
         | 
| @@ -53,21 +47,21 @@ module Rpush | |
| 53 47 | 
             
                      end
         | 
| 54 48 | 
             
                    end
         | 
| 55 49 |  | 
| 56 | 
            -
                    puts green | 
| 50 | 
            +
                    puts ANSI.green { '✔' }
         | 
| 57 51 | 
             
                  else
         | 
| 58 52 | 
             
                    STDERR.puts("* Rpush isn't running? #{Rpush.config.pid_file} does not exist.")
         | 
| 59 53 | 
             
                    return
         | 
| 60 54 | 
             
                  end
         | 
| 61 55 | 
             
                end
         | 
| 62 56 |  | 
| 63 | 
            -
                desc 'init', 'Initialize Rpush into the current directory | 
| 57 | 
            +
                desc 'init', 'Initialize Rpush into the current directory'
         | 
| 64 58 | 
             
                option 'active-record', type: :boolean, desc: 'Install ActiveRecord migrations'
         | 
| 65 59 | 
             
                def init
         | 
| 66 60 | 
             
                  underscore_option_names
         | 
| 67 61 | 
             
                  check_ruby_version
         | 
| 68 62 | 
             
                  require 'rails/generators'
         | 
| 69 63 |  | 
| 70 | 
            -
                  puts "*  | 
| 64 | 
            +
                  puts "* " + ANSI.green { 'Installing config...' }
         | 
| 71 65 | 
             
                  $RPUSH_CONFIG_PATH = default_config_path # rubocop:disable Style/GlobalVars
         | 
| 72 66 | 
             
                  Rails::Generators.invoke('rpush_config')
         | 
| 73 67 |  | 
| @@ -76,7 +70,7 @@ module Rpush | |
| 76 70 | 
             
                  unless options.key?('active_record')
         | 
| 77 71 | 
             
                    has_answer = false
         | 
| 78 72 | 
             
                    until has_answer
         | 
| 79 | 
            -
                      STDOUT.write "\n* #{green | 
| 73 | 
            +
                      STDOUT.write "\n* #{ANSI.green { 'Install ActiveRecord migrations?' }} [y/n]: "
         | 
| 80 74 | 
             
                      STDOUT.flush
         | 
| 81 75 | 
             
                      answer = STDIN.gets.chomp.downcase
         | 
| 82 76 | 
             
                      has_answer = %w(y n).include?(answer)
         | 
| @@ -87,7 +81,7 @@ module Rpush | |
| 87 81 |  | 
| 88 82 | 
             
                  Rails::Generators.invoke('rpush_migration', ['--force']) if install_migrations
         | 
| 89 83 |  | 
| 90 | 
            -
                  puts "\n* #{green | 
| 84 | 
            +
                  puts "\n* #{ANSI.green { 'Next steps:' }}"
         | 
| 91 85 | 
             
                  puts "  - Run 'db:migrate'." if install_migrations
         | 
| 92 86 | 
             
                  puts "  - Review and update your configuration in #{default_config_path}."
         | 
| 93 87 | 
             
                  puts "  - Create your first app, see https://github.com/rpush/rpush for examples."
         | 
| @@ -96,16 +90,25 @@ module Rpush | |
| 96 90 |  | 
| 97 91 | 
             
                desc 'push', 'Deliver all pending notifications and then exit'
         | 
| 98 92 | 
             
                def push
         | 
| 99 | 
            -
                   | 
| 100 | 
            -
                  check_ruby_version
         | 
| 101 | 
            -
                  configure_rpush
         | 
| 93 | 
            +
                  config_setup
         | 
| 102 94 | 
             
                  Rpush.config.foreground = true
         | 
| 103 95 |  | 
| 104 96 | 
             
                  Rpush.push
         | 
| 105 97 | 
             
                end
         | 
| 106 98 |  | 
| 99 | 
            +
                desc 'version', 'Print Rpush version'
         | 
| 100 | 
            +
                def version
         | 
| 101 | 
            +
                  puts Rpush::VERSION
         | 
| 102 | 
            +
                end
         | 
| 103 | 
            +
             | 
| 107 104 | 
             
                private
         | 
| 108 105 |  | 
| 106 | 
            +
                def config_setup
         | 
| 107 | 
            +
                  underscore_option_names
         | 
| 108 | 
            +
                  check_ruby_version
         | 
| 109 | 
            +
                  configure_rpush
         | 
| 110 | 
            +
                end
         | 
| 111 | 
            +
             | 
| 109 112 | 
             
                def configure_rpush
         | 
| 110 113 | 
             
                  load_rails_environment || load_standalone
         | 
| 111 114 | 
             
                end
         | 
| @@ -117,7 +120,7 @@ module Rpush | |
| 117 120 | 
             
                    ENV['RAILS_ENV'] = options['rails_env']
         | 
| 118 121 | 
             
                    load 'config/environment.rb'
         | 
| 119 122 | 
             
                    Rpush.config.update(options)
         | 
| 120 | 
            -
                    puts green | 
| 123 | 
            +
                    puts ANSI.green { '✔' }
         | 
| 121 124 |  | 
| 122 125 | 
             
                    return true
         | 
| 123 126 | 
             
                  end
         | 
| @@ -127,7 +130,7 @@ module Rpush | |
| 127 130 |  | 
| 128 131 | 
             
                def load_standalone
         | 
| 129 132 | 
             
                  if !File.exist?(options[:config])
         | 
| 130 | 
            -
                    STDERR.puts(red | 
| 133 | 
            +
                    STDERR.puts(ANSI.red { 'ERROR: ' } + "#{options[:config]} does not exist. Please run 'rpush init' to generate it or specify the --config option.")
         | 
| 131 134 | 
             
                    exit 1
         | 
| 132 135 | 
             
                  else
         | 
| 133 136 | 
             
                    load options[:config]
         | 
| @@ -146,12 +149,12 @@ module Rpush | |
| 146 149 | 
             
                def ensure_pid_file_set
         | 
| 147 150 | 
             
                  return unless Rpush.config.pid_file.blank?
         | 
| 148 151 |  | 
| 149 | 
            -
                  STDERR.puts(red | 
| 152 | 
            +
                  STDERR.puts(ANSI.red { 'ERROR: ' } + 'config.pid_file is not set.')
         | 
| 150 153 | 
             
                  exit 1
         | 
| 151 154 | 
             
                end
         | 
| 152 155 |  | 
| 153 156 | 
             
                def check_ruby_version
         | 
| 154 | 
            -
                  STDERR.puts(yellow | 
| 157 | 
            +
                  STDERR.puts(ANSI.yellow { 'WARNING: ' } + "You are using an old and unsupported version of Ruby.") if RUBY_VERSION <= '1.9.3' && RUBY_ENGINE == 'ruby'
         | 
| 155 158 | 
             
                end
         | 
| 156 159 |  | 
| 157 160 | 
             
                def underscore_option_names
         | 
| @@ -25,7 +25,7 @@ module Rpush | |
| 25 25 | 
             
                            pkey = OpenSSL::PKey::RSA.new(certificate, password)
         | 
| 26 26 | 
             
                            result = x509 && pkey
         | 
| 27 27 | 
             
                          rescue OpenSSL::OpenSSLError
         | 
| 28 | 
            -
                            errors.add :certificate, ' | 
| 28 | 
            +
                            errors.add :certificate, 'value must contain a certificate and a private key.'
         | 
| 29 29 | 
             
                          end
         | 
| 30 30 | 
             
                        end
         | 
| 31 31 | 
             
                        result
         | 
| @@ -38,7 +38,7 @@ module Rpush | |
| 38 38 | 
             
                        self.data = (data || {}).merge(CONTENT_AVAILABLE_KEY => true)
         | 
| 39 39 | 
             
                      end
         | 
| 40 40 |  | 
| 41 | 
            -
                      def as_json # rubocop:disable Metrics/PerceivedComplexity
         | 
| 41 | 
            +
                      def as_json # rubocop:disable Metrics/AbcSize, Metrics/PerceivedComplexity
         | 
| 42 42 | 
             
                        json = ActiveSupport::OrderedHash.new
         | 
| 43 43 |  | 
| 44 44 | 
             
                        if data && data.key?(MDM_KEY)
         | 
| @@ -64,7 +64,7 @@ module Rpush | |
| 64 64 | 
             
                        json
         | 
| 65 65 | 
             
                      end
         | 
| 66 66 |  | 
| 67 | 
            -
                      def to_binary(options = {})
         | 
| 67 | 
            +
                      def to_binary(options = {}) # rubocop:disable Metrics/AbcSize, Metrics/PerceivedComplexity
         | 
| 68 68 | 
             
                        frame_payload = payload
         | 
| 69 69 | 
             
                        frame_id = options[:for_validation] ? 0 : id
         | 
| 70 70 | 
             
                        frame = ""
         | 
| @@ -7,7 +7,13 @@ module Rpush | |
| 7 7 | 
             
                        base.instance_eval do
         | 
| 8 8 | 
             
                          validates :uri, presence: true
         | 
| 9 9 | 
             
                          validates :uri, format: { with: %r{https?://[\S]+} }
         | 
| 10 | 
            -
                          validates : | 
| 10 | 
            +
                          validates :data, presence: true
         | 
| 11 | 
            +
                        end
         | 
| 12 | 
            +
                        def alert=(value)
         | 
| 13 | 
            +
                          return unless value
         | 
| 14 | 
            +
                          data = self.data || {}
         | 
| 15 | 
            +
                          data['title'] = value
         | 
| 16 | 
            +
                          self.data = data
         | 
| 11 17 | 
             
                        end
         | 
| 12 18 | 
             
                      end
         | 
| 13 19 | 
             
                    end
         | 
    
        data/lib/rpush/configuration.rb
    CHANGED
    
    | @@ -8,37 +8,24 @@ module Rpush | |
| 8 8 | 
             
              def self.configure
         | 
| 9 9 | 
             
                if block_given?
         | 
| 10 10 | 
             
                  yield config
         | 
| 11 | 
            -
                  initialize_client
         | 
| 11 | 
            +
                  config.initialize_client
         | 
| 12 12 | 
             
                end
         | 
| 13 13 | 
             
              end
         | 
| 14 14 |  | 
| 15 | 
            -
               | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
                Rpush.send(:include, client_module)
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                [:Apns, :Gcm, :Wpns, :Adm].each do |service|
         | 
| 22 | 
            -
                  Rpush.const_set(service, client_module.const_get(service))
         | 
| 23 | 
            -
                end
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                @client_initialized = true
         | 
| 26 | 
            -
              end
         | 
| 15 | 
            +
              CURRENT_ATTRS = [:push_poll, :feedback_poll, :embedded, :pid_file, :batch_size,
         | 
| 16 | 
            +
                               :push, :client, :logger, :log_file, :foreground, :log_level, :plugin]
         | 
| 17 | 
            +
              DEPRECATED_ATTRS = [:log_dir]
         | 
| 18 | 
            +
              CONFIG_ATTRS = CURRENT_ATTRS + DEPRECATED_ATTRS
         | 
| 27 19 |  | 
| 28 | 
            -
               | 
| 29 | 
            -
             | 
| 30 | 
            -
                              # Deprecated
         | 
| 31 | 
            -
                              :log_dir]
         | 
| 32 | 
            -
             | 
| 33 | 
            -
              class ConfigurationWithoutDefaults < Struct.new(*CONFIG_ATTRS)
         | 
| 34 | 
            -
              end
         | 
| 20 | 
            +
              class ConfigurationError < StandardError; end
         | 
| 21 | 
            +
              class ConfigurationWithoutDefaults < Struct.new(*CONFIG_ATTRS); end
         | 
| 35 22 |  | 
| 36 23 | 
             
              class Configuration < Struct.new(*CONFIG_ATTRS)
         | 
| 37 24 | 
             
                include Deprecatable
         | 
| 38 25 |  | 
| 39 26 | 
             
                deprecated(:log_dir=, '2.3.0', 'Please use log_file instead.')
         | 
| 40 27 |  | 
| 41 | 
            -
                delegate :redis_options,  | 
| 28 | 
            +
                delegate :redis_options, to: '::Modis'
         | 
| 42 29 |  | 
| 43 30 | 
             
                def initialize
         | 
| 44 31 | 
             
                  super
         | 
| @@ -72,19 +59,42 @@ module Rpush | |
| 72 59 | 
             
                  super(logger)
         | 
| 73 60 | 
             
                end
         | 
| 74 61 |  | 
| 62 | 
            +
                def client=(client)
         | 
| 63 | 
            +
                  super
         | 
| 64 | 
            +
                  initialize_client
         | 
| 65 | 
            +
                end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                def redis_options=(options)
         | 
| 68 | 
            +
                  Modis.redis_options = options if client == :redis
         | 
| 69 | 
            +
                end
         | 
| 70 | 
            +
             | 
| 75 71 | 
             
                def set_defaults
         | 
| 76 72 | 
             
                  self.push_poll = 2
         | 
| 77 73 | 
             
                  self.feedback_poll = 60
         | 
| 78 74 | 
             
                  self.batch_size = 100
         | 
| 79 | 
            -
                  self.client = :active_record
         | 
| 80 75 | 
             
                  self.logger = nil
         | 
| 81 76 | 
             
                  self.log_file = 'log/rpush.log'
         | 
| 82 77 | 
             
                  self.pid_file = 'tmp/rpush.pid'
         | 
| 83 78 | 
             
                  self.log_level = (defined?(Rails) && Rails.logger) ? Rails.logger.level : ::Logger::Severity::INFO
         | 
| 79 | 
            +
                  self.plugin = OpenStruct.new
         | 
| 84 80 |  | 
| 85 81 | 
             
                  # Internal options.
         | 
| 86 82 | 
             
                  self.embedded = false
         | 
| 87 83 | 
             
                  self.push = false
         | 
| 88 84 | 
             
                end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                def initialize_client
         | 
| 87 | 
            +
                  return if @client_initialized
         | 
| 88 | 
            +
                  raise ConfigurationError, 'Rpush.config.client is not set.' unless client
         | 
| 89 | 
            +
                  require "rpush/client/#{client}"
         | 
| 90 | 
            +
                  client_module = Rpush::Client.const_get(client.to_s.camelize)
         | 
| 91 | 
            +
                  Rpush.send(:include, client_module)
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                  [:Apns, :Gcm, :Wpns, :Adm].each do |service|
         | 
| 94 | 
            +
                    Rpush.const_set(service, client_module.const_get(service))
         | 
| 95 | 
            +
                  end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                  @client_initialized = true
         | 
| 98 | 
            +
                end
         | 
| 89 99 | 
             
              end
         | 
| 90 100 | 
             
            end
         | 
    
        data/lib/rpush/daemon.rb
    CHANGED
    
    | @@ -8,7 +8,6 @@ require 'net/http/persistent' | |
| 8 8 |  | 
| 9 9 | 
             
            require 'rpush/daemon/errors'
         | 
| 10 10 | 
             
            require 'rpush/daemon/constants'
         | 
| 11 | 
            -
            require 'rpush/daemon/reflectable'
         | 
| 12 11 | 
             
            require 'rpush/daemon/loggable'
         | 
| 13 12 | 
             
            require 'rpush/daemon/string_helpers'
         | 
| 14 13 | 
             
            require 'rpush/daemon/interruptible_sleep'
         | 
| @@ -48,17 +47,15 @@ require 'rpush/daemon/adm' | |
| 48 47 |  | 
| 49 48 | 
             
            module Rpush
         | 
| 50 49 | 
             
              module Daemon
         | 
| 51 | 
            -
                extend Term::ANSIColor
         | 
| 52 | 
            -
             | 
| 53 50 | 
             
                class << self
         | 
| 54 51 | 
             
                  attr_accessor :store
         | 
| 55 52 | 
             
                end
         | 
| 56 53 |  | 
| 57 54 | 
             
                def self.start
         | 
| 58 55 | 
             
                  Process.daemon if daemonize?
         | 
| 59 | 
            -
                  SignalHandler.start
         | 
| 60 | 
            -
                  initialize_store
         | 
| 61 56 | 
             
                  write_pid_file
         | 
| 57 | 
            +
                  SignalHandler.start
         | 
| 58 | 
            +
                  common_init
         | 
| 62 59 | 
             
                  Synchronizer.sync
         | 
| 63 60 |  | 
| 64 61 | 
             
                  # No further store connections will be made from this thread.
         | 
| @@ -87,7 +84,7 @@ module Rpush | |
| 87 84 | 
             
                    Feeder.stop
         | 
| 88 85 | 
             
                    AppRunner.stop
         | 
| 89 86 | 
             
                    delete_pid_file
         | 
| 90 | 
            -
                    puts green | 
| 87 | 
            +
                    puts ANSI.green { '✔' } if Rpush.config.foreground
         | 
| 91 88 | 
             
                  end
         | 
| 92 89 | 
             
                end
         | 
| 93 90 |  | 
| @@ -97,7 +94,14 @@ module Rpush | |
| 97 94 | 
             
                  @shutdown_lock
         | 
| 98 95 | 
             
                end
         | 
| 99 96 |  | 
| 100 | 
            -
                def self. | 
| 97 | 
            +
                def self.common_init
         | 
| 98 | 
            +
                  init_store
         | 
| 99 | 
            +
                  init_plugins
         | 
| 100 | 
            +
                end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                protected
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                def self.init_store
         | 
| 101 105 | 
             
                  return if store
         | 
| 102 106 | 
             
                  begin
         | 
| 103 107 | 
             
                    name = Rpush.config.client.to_s
         | 
| @@ -110,7 +114,12 @@ module Rpush | |
| 110 114 | 
             
                  end
         | 
| 111 115 | 
             
                end
         | 
| 112 116 |  | 
| 113 | 
            -
                 | 
| 117 | 
            +
                def self.init_plugins
         | 
| 118 | 
            +
                  Rpush.plugins.each do |name, plugin|
         | 
| 119 | 
            +
                    plugin.init_block.call
         | 
| 120 | 
            +
                    Rpush.logger.info("[plugin:#{name}] Loaded.")
         | 
| 121 | 
            +
                  end
         | 
| 122 | 
            +
                end
         | 
| 114 123 |  | 
| 115 124 | 
             
                def self.daemonize?
         | 
| 116 125 | 
             
                  !(Rpush.config.push || Rpush.config.foreground || Rpush.config.embedded || Rpush.jruby?)
         | 
| @@ -136,7 +145,7 @@ module Rpush | |
| 136 145 | 
             
                  if Rpush::Daemon::AppRunner.app_ids.count == 0
         | 
| 137 146 | 
             
                    puts <<-EOS
         | 
| 138 147 |  | 
| 139 | 
            -
            * #{green | 
| 148 | 
            +
            * #{ANSI.green { 'Is this your first time using Rpush?' }}
         | 
| 140 149 | 
             
              You need to create an App before you can start using Rpush.
         | 
| 141 150 | 
             
              Please refer to the documentation at https://github.com/rpush/rpush
         | 
| 142 151 |  |