rpush 2.0.1-java → 2.1.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -0
  3. data/README.md +24 -18
  4. data/bin/rpush +1 -42
  5. data/lib/generators/rpush_config_generator.rb +7 -0
  6. data/lib/generators/{rpush_generator.rb → rpush_migration_generator.rb} +6 -11
  7. data/lib/generators/templates/rpush.rb +12 -12
  8. data/lib/generators/templates/rpush_2_0_0_updates.rb +2 -1
  9. data/lib/generators/templates/rpush_2_1_0_updates.rb +11 -0
  10. data/lib/rpush.rb +12 -4
  11. data/lib/rpush/apns_feedback.rb +1 -1
  12. data/lib/rpush/cli.rb +133 -0
  13. data/lib/rpush/client/active_model/apns/binary_notification_validator.rb +2 -2
  14. data/lib/rpush/client/active_model/apns/notification.rb +4 -1
  15. data/lib/rpush/client/active_model/notification.rb +0 -4
  16. data/lib/rpush/client/active_record/apns/notification.rb +0 -6
  17. data/lib/rpush/client/active_record/notification.rb +3 -2
  18. data/lib/rpush/client/redis/notification.rb +2 -0
  19. data/lib/rpush/configuration.rb +16 -24
  20. data/lib/rpush/daemon.rb +28 -1
  21. data/lib/rpush/daemon/app_runner.rb +6 -1
  22. data/lib/rpush/daemon/proc_title.rb +1 -1
  23. data/lib/rpush/daemon/signal_handler.rb +13 -3
  24. data/lib/rpush/daemon/store/active_record.rb +1 -1
  25. data/lib/rpush/deprecatable.rb +2 -1
  26. data/lib/rpush/embed.rb +1 -1
  27. data/lib/rpush/logger.rb +32 -19
  28. data/lib/rpush/push.rb +1 -1
  29. data/lib/rpush/version.rb +1 -1
  30. data/lib/tasks/quality.rake +1 -1
  31. data/lib/tasks/test.rake +12 -0
  32. data/spec/functional/apns_spec.rb +13 -11
  33. data/spec/functional_spec_helper.rb +1 -4
  34. data/spec/spec_helper.rb +4 -4
  35. data/spec/support/active_record_setup.rb +2 -1
  36. data/spec/unit/client/active_record/apns/notification_spec.rb +29 -3
  37. data/spec/unit/configuration_spec.rb +0 -7
  38. data/spec/unit/daemon/app_runner_spec.rb +1 -1
  39. data/spec/unit/daemon/signal_handler_spec.rb +1 -1
  40. data/spec/unit/daemon_spec.rb +1 -1
  41. data/spec/unit/deprecatable_spec.rb +1 -1
  42. data/spec/unit/logger_spec.rb +4 -4
  43. metadata +48 -3
data/lib/tasks/test.rake CHANGED
@@ -21,8 +21,20 @@ namespace :test do
21
21
  begin
22
22
  Dir.chdir(path)
23
23
  cmd('echo "gem \'rake\'" >> Gemfile')
24
+ cmd('echo "gem \'pg\'" >> Gemfile')
24
25
  cmd("echo \"gem 'rpush', :path => '#{rpush_root}'\" >> Gemfile")
25
26
  cmd('bundle install')
27
+
28
+ File.open('config/database.yml', 'w') do |fd|
29
+ fd.write(<<-YML)
30
+ development:
31
+ adapter: postgresql
32
+ database: rpush_rails_test
33
+ pool: 5
34
+ timeout: 5000
35
+ YML
36
+ end
37
+
26
38
  cmd('bundle exec rails g rpush')
27
39
  cmd('bundle exec rake db:migrate')
28
40
  ensure
@@ -122,21 +122,23 @@ describe 'APNs' do
122
122
  it 'does not mark prior notifications as failed' do
123
123
  notifications.each { |n| wait_for_notification_to_deliver(n) }
124
124
  fail_notification(notification2)
125
- sleep 1
125
+ wait_for_notification_to_fail(notification2)
126
+
126
127
  notification1.reload
127
128
  notification1.delivered.should be_true
128
129
  end
129
130
 
130
- it 'marks notifications following the failed one as retryable' do
131
- Rpush.config.push_poll = 1_000_000
132
-
133
- notifications.each { |n| wait_for_notification_to_deliver(n) }
134
- fail_notification(notification2)
135
-
136
- [notification3, notification4].each do |n|
137
- wait_for_notification_to_retry(n)
138
- end
139
- end
131
+ # Unreliable.
132
+ # it 'marks notifications following the failed one as retryable' do
133
+ # Rpush.config.push_poll = 1_000_000
134
+ #
135
+ # notifications.each { |n| wait_for_notification_to_deliver(n) }
136
+ # fail_notification(notification2)
137
+ #
138
+ # [notification3, notification4].each do |n|
139
+ # wait_for_notification_to_retry(n)
140
+ # end
141
+ # end
140
142
 
141
143
  describe 'without an error response' do
142
144
  it 'marks all notifications as failed' do
@@ -14,10 +14,7 @@ RSpec.configure do |config|
14
14
  redis.keys('rpush:*').each { |key| redis.del(key) }
15
15
  end
16
16
 
17
- if functional_example?(example)
18
- Rails.stub(root: File.expand_path(File.join(File.dirname(__FILE__), '..', 'tmp')))
19
- Rpush.config.logger = ::Logger.new(STDOUT)
20
- end
17
+ Rpush.config.logger = ::Logger.new(STDOUT) if functional_example?(example)
21
18
  end
22
19
 
23
20
  config.after(:each) do
data/spec/spec_helper.rb CHANGED
@@ -4,7 +4,7 @@ client = (ENV['CLIENT'] || :active_record).to_sym
4
4
  require 'bundler/setup'
5
5
  Bundler.require(:default)
6
6
 
7
- unless ENV['TRAVIS'] && ENV['QUALITY'] == 'false'
7
+ if !ENV['TRAVIS'] || (ENV['TRAVIS'] && ENV['QUALITY'] == 'true')
8
8
  begin
9
9
  require './spec/support/simplecov_helper'
10
10
  include SimpleCovHelper
@@ -23,11 +23,10 @@ require 'rpush/daemon/store/redis'
23
23
 
24
24
  require 'support/active_record_setup'
25
25
 
26
- RAILS_ROOT = '/tmp/rails_root'
26
+ RPUSH_ROOT = '/tmp/rails_root'
27
27
 
28
28
  Rpush.configure do |config|
29
29
  config.client = client
30
- config.log_dir = RAILS_ROOT
31
30
  end
32
31
 
33
32
  RPUSH_CLIENT = Rpush.config.client
@@ -51,7 +50,8 @@ end
51
50
 
52
51
  RSpec.configure do |config|
53
52
  config.before(:each) do
54
- Rails.stub(root: RAILS_ROOT)
53
+ Rpush.config.log_file = File.join(RPUSH_ROOT, 'rpush.log')
54
+ Rpush.stub(root: RPUSH_ROOT)
55
55
  end
56
56
 
57
57
  config.after(:each) do
@@ -28,8 +28,9 @@ ActiveRecord::Base.establish_connection(db_config[SPEC_ADAPTER])
28
28
 
29
29
  require 'generators/templates/add_rpush'
30
30
  require 'generators/templates/rpush_2_0_0_updates'
31
+ require 'generators/templates/rpush_2_1_0_updates'
31
32
 
32
- migrations = [AddRpush, Rpush200Updates]
33
+ migrations = [AddRpush, Rpush200Updates, Rpush210Updates]
33
34
 
34
35
  unless ENV['TRAVIS']
35
36
  migrations.reverse.each do |m|
@@ -18,9 +18,9 @@ describe Rpush::Client::ActiveRecord::Apns::Notification do
18
18
 
19
19
  it "should validate the length of the binary conversion of the notification" do
20
20
  notification.device_token = "a" * 64
21
- notification.alert = "way too long!" * 100
21
+ notification.alert = "way too long!" * 200
22
22
  notification.valid?.should be_false
23
- notification.errors[:base].include?("APN notification cannot be larger than 256 bytes. Try condensing your alert and device attributes.").should be_true
23
+ notification.errors[:base].include?("APN notification cannot be larger than 2048 bytes. Try condensing your alert and device attributes.").should be_true
24
24
  end
25
25
 
26
26
  it "should default the sound to 'default'" do
@@ -143,6 +143,32 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, 'content-available' do
143
143
  end
144
144
  end
145
145
 
146
+ describe Rpush::Client::ActiveRecord::Apns::Notification, 'url-args' do
147
+ let(:notification) { Rpush::Client::ActiveRecord::Apns::Notification.new }
148
+
149
+ it 'includes url-args in the payload' do
150
+ notification.url_args = ['url-arg-1']
151
+ notification.as_json['aps']['url-args'].should eq ['url-arg-1']
152
+ end
153
+
154
+ it 'does not include url-args in the payload if not set' do
155
+ notification.as_json['aps'].key?('url-args').should be_false
156
+ end
157
+ end
158
+
159
+ describe Rpush::Client::ActiveRecord::Apns::Notification, 'category' do
160
+ let(:notification) { Rpush::Client::ActiveRecord::Apns::Notification.new }
161
+
162
+ it 'includes category in the payload' do
163
+ notification.category = 'INVITE_CATEGORY'
164
+ notification.as_json['aps']['category'].should eq 'INVITE_CATEGORY'
165
+ end
166
+
167
+ it 'does not include category in the payload if not set' do
168
+ notification.as_json['aps'].key?('category').should be_false
169
+ end
170
+ end
171
+
146
172
  describe Rpush::Client::ActiveRecord::Apns::Notification, 'to_binary' do
147
173
  let(:notification) { Rpush::Client::ActiveRecord::Apns::Notification.new }
148
174
 
@@ -207,7 +233,7 @@ describe Rpush::Client::ActiveRecord::Apns::Notification, "bug #35" do
207
233
  end
208
234
 
209
235
  notification.to_binary(for_validation: true).bytesize.should be > 256
210
- notification.payload_size.should be < 256
236
+ notification.payload.bytesize.should be < 256
211
237
  notification.should be_valid
212
238
  end
213
239
  end
@@ -38,13 +38,6 @@ describe Rpush::Configuration do
38
38
  config.pid_file.should eq '/tmp/rpush.pid'
39
39
  end
40
40
 
41
- it 'does not allow foreground to be set to false if the platform is JRuby' do
42
- config.foreground = true
43
- Rpush.stub(:jruby? => true)
44
- config.foreground = false
45
- config.foreground.should be_true
46
- end
47
-
48
41
  it 'delegate redis_options to Modis' do
49
42
  Rpush.config.redis_options = { hi: :mom }
50
43
  Modis.redis_options.should eq(hi: :mom)
@@ -61,7 +61,7 @@ describe Rpush::Daemon::AppRunner, 'enqueue' do
61
61
  end
62
62
 
63
63
  describe Rpush::Daemon::AppRunner, 'start_app' do
64
- let(:app) { double(id: 1, name: 'test') }
64
+ let(:app) { double(id: 1, name: 'test', connections: 1) }
65
65
  let(:runner) { double(Rpush::Daemon::AppRunner, enqueue: nil, start: nil, stop: nil) }
66
66
  let(:logger) { double(Rpush::Logger, error: nil, info: nil) }
67
67
 
@@ -73,7 +73,7 @@ describe Rpush::Daemon::SignalHandler do
73
73
  describe 'error handing' do
74
74
  let(:error) { StandardError.new('test') }
75
75
 
76
- before { Rpush.stub(logger: double(error: nil)) }
76
+ before { Rpush.stub(logger: double(error: nil, info: nil)) }
77
77
 
78
78
  it 'logs errors received when handling a signal' do
79
79
  Rpush::Daemon::Synchronizer.stub(:sync).and_raise(error)
@@ -78,7 +78,7 @@ describe Rpush::Daemon, "when starting" do
78
78
  it "logs an error if the PID file could not be written" do
79
79
  Rpush.config.pid_file = '/rails_root/rpush.pid'
80
80
  File.stub(:open).and_raise(Errno::ENOENT)
81
- logger.should_receive(:error).with("Failed to write PID to '/rails_root/rpush.pid': #<Errno::ENOENT: No such file or directory>")
81
+ logger.should_receive(:error).with(%r{Failed to write PID to '/rails_root/rpush\.pid'})
82
82
  Rpush::Daemon.start
83
83
  end
84
84
 
@@ -21,7 +21,7 @@ describe Rpush::Deprecatable do
21
21
  end
22
22
 
23
23
  it 'warns the method is deprecated when called' do
24
- Rpush::Deprecation.should_receive(:warn).with("deprecated_method is deprecated and will be removed from Rpush 4.0.")
24
+ Rpush::Deprecation.should_receive(:warn).with(/deprecated_method is deprecated and will be removed from Rpush 4\.0\./)
25
25
  klass.deprecated_method
26
26
  end
27
27
 
@@ -11,12 +11,12 @@ describe Rpush::Logger do
11
11
  @logger_class = defined?(ActiveSupport::BufferedLogger) ? ActiveSupport::BufferedLogger : ActiveSupport::Logger
12
12
  @logger = double(@logger_class.name, info: nil, error: nil, level: 0, auto_flushing: 1, :auto_flushing= => nil)
13
13
  @logger_class.stub(:new).and_return(@logger)
14
- Rails.logger = @logger
14
+ Rails.stub(logger: @logger)
15
15
  File.stub(open: log)
16
16
  FileUtils.stub(mkdir_p: nil)
17
17
  STDERR.stub(:puts)
18
18
  Rpush.config.foreground = true
19
- Rpush.config.log_dir = Rails.root
19
+ Rpush.config.log_file = 'log/rpush.log'
20
20
  end
21
21
 
22
22
  it "disables logging if the log file cannot be opened" do
@@ -112,8 +112,8 @@ describe Rpush::Logger do
112
112
  end
113
113
 
114
114
  it 'defaults auto_flushing to true if the Rails logger does not respond to auto_flushing' do
115
- rails_logger = double(info: nil, error: nil, level: 0)
116
- Rails.logger = rails_logger
115
+ Rails.stub(logger: double(info: nil, error: nil, level: 0))
116
+ Rpush::Logger.new
117
117
  @logger.auto_flushing.should be_true
118
118
  end
119
119
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rpush
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.1.0
5
5
  platform: java
6
6
  authors:
7
7
  - Ian Leitch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-13 00:00:00.000000000 Z
11
+ date: 2014-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json
@@ -52,6 +52,48 @@ dependencies:
52
52
  version: '0'
53
53
  prerelease: false
54
54
  type: :runtime
55
+ - !ruby/object:Gem::Dependency
56
+ name: thor
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ prerelease: false
68
+ type: :runtime
69
+ - !ruby/object:Gem::Dependency
70
+ name: railties
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - '>='
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ prerelease: false
82
+ type: :runtime
83
+ - !ruby/object:Gem::Dependency
84
+ name: term-ansicolor
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ requirement: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ prerelease: false
96
+ type: :runtime
55
97
  - !ruby/object:Gem::Dependency
56
98
  name: jruby-openssl
57
99
  version_requirements: !ruby/object:Gem::Requirement
@@ -91,7 +133,8 @@ files:
91
133
  - CHANGELOG.md
92
134
  - LICENSE
93
135
  - README.md
94
- - lib/generators/rpush_generator.rb
136
+ - lib/generators/rpush_config_generator.rb
137
+ - lib/generators/rpush_migration_generator.rb
95
138
  - lib/generators/templates/add_adm.rb
96
139
  - lib/generators/templates/add_alert_is_json_to_rapns_notifications.rb
97
140
  - lib/generators/templates/add_app_to_rapns.rb
@@ -105,8 +148,10 @@ files:
105
148
  - lib/generators/templates/rename_rapns_to_rpush.rb
106
149
  - lib/generators/templates/rpush.rb
107
150
  - lib/generators/templates/rpush_2_0_0_updates.rb
151
+ - lib/generators/templates/rpush_2_1_0_updates.rb
108
152
  - lib/rpush.rb
109
153
  - lib/rpush/apns_feedback.rb
154
+ - lib/rpush/cli.rb
110
155
  - lib/rpush/client/active_model.rb
111
156
  - lib/rpush/client/active_model/adm/app.rb
112
157
  - lib/rpush/client/active_model/adm/data_validator.rb