rpush 2.3.2-java → 2.4.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/README.md +1 -1
- data/lib/generators/rpush_migration_generator.rb +21 -6
- data/lib/generators/templates/rpush.rb +5 -5
- data/lib/generators/templates/rpush_2_0_0_updates.rb +24 -0
- data/lib/rpush/client/active_model/apns/notification.rb +1 -1
- data/lib/rpush/client/mongoid/adm/app.rb +14 -0
- data/lib/rpush/client/mongoid/adm/notification.rb +11 -0
- data/lib/rpush/client/mongoid/apns/app.rb +11 -0
- data/lib/rpush/client/mongoid/apns/feedback.rb +21 -0
- data/lib/rpush/client/mongoid/apns/notification.rb +15 -0
- data/lib/rpush/client/mongoid/app.rb +23 -0
- data/lib/rpush/client/mongoid/gcm/app.rb +11 -0
- data/lib/rpush/client/mongoid/gcm/notification.rb +11 -0
- data/lib/rpush/client/mongoid/notification.rb +43 -0
- data/lib/rpush/client/mongoid/wpns/app.rb +11 -0
- data/lib/rpush/client/mongoid/wpns/notification.rb +11 -0
- data/lib/rpush/client/mongoid.rb +31 -0
- data/lib/rpush/client/redis.rb +2 -2
- data/lib/rpush/configuration.rb +48 -29
- data/lib/rpush/daemon/adm/delivery.rb +1 -1
- data/lib/rpush/daemon/apns/feedback_receiver.rb +2 -3
- data/lib/rpush/daemon/apns.rb +1 -1
- data/lib/rpush/daemon/dispatcher/apns_tcp.rb +2 -1
- data/lib/rpush/daemon/feeder.rb +4 -7
- data/lib/rpush/daemon/gcm/delivery.rb +1 -1
- data/lib/rpush/daemon/interruptible_sleep.rb +5 -50
- data/lib/rpush/daemon/proc_title.rb +2 -1
- data/lib/rpush/daemon/store/active_record.rb +4 -0
- data/lib/rpush/daemon/store/interface.rb +1 -1
- data/lib/rpush/daemon/store/mongoid.rb +157 -0
- data/lib/rpush/daemon/store/redis.rb +6 -2
- data/lib/rpush/deprecatable.rb +1 -2
- data/lib/rpush/deprecation.rb +6 -0
- data/lib/rpush/embed.rb +5 -0
- data/lib/rpush/logger.rb +5 -8
- data/lib/rpush/push.rb +5 -0
- data/lib/rpush/version.rb +1 -1
- data/lib/tasks/quality.rake +1 -1
- data/lib/tasks/test.rake +9 -4
- data/spec/functional/apns_spec.rb +2 -1
- data/spec/functional_spec_helper.rb +2 -2
- data/spec/spec_helper.rb +18 -7
- data/spec/support/config/mongoid.yml +69 -0
- data/spec/support/mongoid_setup.rb +10 -0
- data/spec/unit/client/active_record/adm/app_spec.rb +1 -1
- data/spec/unit/client/active_record/adm/notification_spec.rb +1 -1
- data/spec/unit/client/active_record/apns/app_spec.rb +1 -1
- data/spec/unit/client/active_record/apns/feedback_spec.rb +1 -1
- data/spec/unit/client/active_record/apns/notification_spec.rb +11 -11
- data/spec/unit/client/active_record/app_spec.rb +1 -1
- data/spec/unit/client/active_record/gcm/notification_spec.rb +1 -1
- data/spec/unit/client/active_record/notification_spec.rb +1 -1
- data/spec/unit/client/active_record/wpns/notification_spec.rb +1 -1
- data/spec/unit/configuration_spec.rb +7 -0
- data/spec/unit/daemon/apns/feedback_receiver_spec.rb +5 -5
- data/spec/unit/daemon/feeder_spec.rb +2 -2
- data/spec/unit/daemon/proc_title_spec.rb +11 -0
- data/spec/unit/daemon/store/active_record/reconnectable_spec.rb +1 -1
- data/spec/unit/daemon/store/active_record_spec.rb +21 -12
- data/spec/unit/daemon/store/mongoid_spec.rb +339 -0
- data/spec/unit/daemon/store/redis_spec.rb +365 -0
- data/spec/unit/embed_spec.rb +4 -2
- data/spec/unit/logger_spec.rb +14 -5
- data/spec/unit/notification_shared.rb +1 -1
- data/spec/unit/push_spec.rb +4 -2
- data/spec/unit_spec_helper.rb +3 -3
- metadata +27 -4
@@ -3,60 +3,15 @@ require 'monitor'
|
|
3
3
|
module Rpush
|
4
4
|
module Daemon
|
5
5
|
class InterruptibleSleep
|
6
|
-
def
|
7
|
-
@
|
8
|
-
|
9
|
-
|
10
|
-
@wakeup_obj = Object.new
|
11
|
-
@wakeup_obj.extend(MonitorMixin)
|
12
|
-
@wakeup_condition = @wakeup_obj.new_cond
|
13
|
-
|
14
|
-
@sleep_obj = Object.new
|
15
|
-
@sleep_obj.extend(MonitorMixin)
|
16
|
-
@sleep_condition = @sleep_obj.new_cond
|
17
|
-
end
|
18
|
-
|
19
|
-
def sleep
|
20
|
-
return if @stop
|
21
|
-
goto_sleep
|
22
|
-
wait_for_wakeup
|
23
|
-
end
|
24
|
-
|
25
|
-
def start
|
26
|
-
@stop = false
|
27
|
-
|
28
|
-
@thread = Thread.new do
|
29
|
-
loop do
|
30
|
-
wait_for_sleeper
|
31
|
-
break if @stop
|
32
|
-
Kernel.sleep(@duration)
|
33
|
-
wakeup
|
34
|
-
end
|
35
|
-
end
|
6
|
+
def sleep(duration)
|
7
|
+
@thread = Thread.new { Kernel.sleep duration }
|
8
|
+
Thread.pass
|
9
|
+
@thread.join
|
36
10
|
end
|
37
11
|
|
38
12
|
def stop
|
39
|
-
@stop = true
|
40
|
-
wakeup
|
41
13
|
@thread.kill if @thread
|
42
|
-
|
43
|
-
|
44
|
-
def wakeup
|
45
|
-
@wakeup_obj.synchronize { @wakeup_condition.signal }
|
46
|
-
end
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
def goto_sleep
|
51
|
-
@sleep_obj.synchronize { @sleep_condition.signal }
|
52
|
-
end
|
53
|
-
|
54
|
-
def wait_for_wakeup
|
55
|
-
@wakeup_obj.synchronize { @wakeup_condition.wait(@duration * 2) }
|
56
|
-
end
|
57
|
-
|
58
|
-
def wait_for_sleeper
|
59
|
-
@sleep_obj.synchronize { @sleep_condition.wait }
|
14
|
+
rescue StandardError # rubocop:disable Lint/HandleExceptions
|
60
15
|
end
|
61
16
|
end
|
62
17
|
end
|
@@ -169,6 +169,10 @@ module Rpush
|
|
169
169
|
ready_for_delivery.count
|
170
170
|
end
|
171
171
|
|
172
|
+
def translate_integer_notification_id(id)
|
173
|
+
id
|
174
|
+
end
|
175
|
+
|
172
176
|
private
|
173
177
|
|
174
178
|
def create_gcm_like_notification(notification, attrs, data, registration_ids, deliver_after, app) # rubocop:disable ParameterLists
|
@@ -8,7 +8,7 @@ module Rpush
|
|
8
8
|
:create_gcm_notification, :create_adm_notification, :update_app,
|
9
9
|
:update_notification, :release_connection,
|
10
10
|
:all_apps, :app, :mark_ids_failed, :mark_ids_retryable,
|
11
|
-
:reopen_log, :pending_delivery_count]
|
11
|
+
:reopen_log, :pending_delivery_count, :translate_integer_notification_id]
|
12
12
|
|
13
13
|
def self.check(klass)
|
14
14
|
missing = PUBLIC_METHODS - klass.instance_methods.map(&:to_sym)
|
@@ -0,0 +1,157 @@
|
|
1
|
+
module Rpush
|
2
|
+
module Daemon
|
3
|
+
module Store
|
4
|
+
class Mongoid
|
5
|
+
DEFAULT_MARK_OPTIONS = { persist: true }
|
6
|
+
|
7
|
+
def app(app_id)
|
8
|
+
Rpush::Client::Mongoid::App.find(app_id)
|
9
|
+
end
|
10
|
+
|
11
|
+
def all_apps
|
12
|
+
Rpush::Client::Mongoid::App.all
|
13
|
+
end
|
14
|
+
|
15
|
+
def deliverable_notifications(limit)
|
16
|
+
relation = ready_for_delivery.limit(limit)
|
17
|
+
claim_notifications(relation)
|
18
|
+
end
|
19
|
+
|
20
|
+
def mark_delivered(notification, time, opts = {})
|
21
|
+
opts = DEFAULT_MARK_OPTIONS.dup.merge(opts)
|
22
|
+
notification.delivered = true
|
23
|
+
notification.delivered_at = time
|
24
|
+
notification.save!(validate: false) if opts[:persist]
|
25
|
+
end
|
26
|
+
|
27
|
+
def mark_batch_delivered(notifications)
|
28
|
+
return if notifications.empty?
|
29
|
+
|
30
|
+
now = Time.now
|
31
|
+
ids = []
|
32
|
+
notifications.each do |n|
|
33
|
+
mark_delivered(n, now, persist: false)
|
34
|
+
ids << n.id
|
35
|
+
end
|
36
|
+
Rpush::Client::Mongoid::Notification.in(id: ids).update_all(processing: false, delivered: true, delivered_at: now)
|
37
|
+
end
|
38
|
+
|
39
|
+
def mark_failed(notification, code, description, time, opts = {})
|
40
|
+
opts = DEFAULT_MARK_OPTIONS.dup.merge(opts)
|
41
|
+
notification.delivered = false
|
42
|
+
notification.delivered_at = nil
|
43
|
+
notification.failed = true
|
44
|
+
notification.failed_at = time
|
45
|
+
notification.error_code = code
|
46
|
+
notification.error_description = description
|
47
|
+
notification.save!(validate: false) if opts[:persist]
|
48
|
+
end
|
49
|
+
|
50
|
+
def mark_batch_failed(notifications, code, description)
|
51
|
+
now = Time.now
|
52
|
+
ids = []
|
53
|
+
notifications.each do |n|
|
54
|
+
mark_failed(n, code, description, now, persist: false)
|
55
|
+
ids << n.id
|
56
|
+
end
|
57
|
+
mark_ids_failed(ids, code, description, now)
|
58
|
+
end
|
59
|
+
|
60
|
+
def mark_ids_failed(ids, code, description, time)
|
61
|
+
return if ids.empty?
|
62
|
+
|
63
|
+
Rpush::Client::Mongoid::Notification.in(id: ids).update_all(processing: false, delivered: false, delivered_at: nil, failed: true, failed_at: time, error_code: code, error_description: description)
|
64
|
+
end
|
65
|
+
|
66
|
+
def mark_retryable(notification, deliver_after, opts = {})
|
67
|
+
opts = DEFAULT_MARK_OPTIONS.dup.merge(opts)
|
68
|
+
notification.delivered = false
|
69
|
+
notification.delivered_at = nil
|
70
|
+
notification.failed = false
|
71
|
+
notification.failed_at = nil
|
72
|
+
notification.retries += 1
|
73
|
+
notification.deliver_after = deliver_after
|
74
|
+
|
75
|
+
return unless opts[:persist]
|
76
|
+
|
77
|
+
notification.save!(validate: false)
|
78
|
+
end
|
79
|
+
|
80
|
+
def mark_batch_retryable(notifications, deliver_after)
|
81
|
+
ids = []
|
82
|
+
notifications.each do |n|
|
83
|
+
mark_retryable(n, deliver_after, persist: false)
|
84
|
+
ids << n.id
|
85
|
+
end
|
86
|
+
mark_ids_retryable(ids, deliver_after)
|
87
|
+
end
|
88
|
+
|
89
|
+
def mark_ids_retryable(ids, deliver_after)
|
90
|
+
return if ids.empty?
|
91
|
+
|
92
|
+
Rpush::Client::Mongoid::Notification.in(id: ids).update_all(processing: false, delivered: false, delivered_at: nil, failed: false, failed_at: nil, deliver_after: deliver_after, '$inc' => { retries: 1 })
|
93
|
+
end
|
94
|
+
|
95
|
+
def create_apns_feedback(failed_at, device_token, app)
|
96
|
+
Rpush::Client::Mongoid::Apns::Feedback.create!(failed_at: failed_at, device_token: device_token, app: app)
|
97
|
+
end
|
98
|
+
|
99
|
+
def create_gcm_notification(attrs, data, registration_ids, deliver_after, app) # rubocop:disable ParameterLists
|
100
|
+
notification = Rpush::Client::Mongoid::Gcm::Notification.new
|
101
|
+
create_gcm_like_notification(notification, attrs, data, registration_ids, deliver_after, app)
|
102
|
+
end
|
103
|
+
|
104
|
+
def create_adm_notification(attrs, data, registration_ids, deliver_after, app) # rubocop:disable ParameterLists
|
105
|
+
notification = Rpush::Client::Mongoid::Adm::Notification.new
|
106
|
+
create_gcm_like_notification(notification, attrs, data, registration_ids, deliver_after, app)
|
107
|
+
end
|
108
|
+
|
109
|
+
def update_app(app)
|
110
|
+
app.save!
|
111
|
+
end
|
112
|
+
|
113
|
+
def update_notification(notification)
|
114
|
+
notification.save!
|
115
|
+
end
|
116
|
+
|
117
|
+
def release_connection
|
118
|
+
end
|
119
|
+
|
120
|
+
def reopen_log
|
121
|
+
end
|
122
|
+
|
123
|
+
def pending_delivery_count
|
124
|
+
ready_for_delivery.count
|
125
|
+
end
|
126
|
+
|
127
|
+
def translate_integer_notification_id(id)
|
128
|
+
Rpush::Client::Mongoid::Notification.find_by(integer_id: id).id
|
129
|
+
end
|
130
|
+
|
131
|
+
private
|
132
|
+
|
133
|
+
def ready_for_delivery
|
134
|
+
Rpush::Client::Mongoid::Notification.where(processing: false, delivered: false, failed: false).or({ deliver_after: nil }, :deliver_after.lt => Time.now)
|
135
|
+
end
|
136
|
+
|
137
|
+
def claim_notifications(relation)
|
138
|
+
ids = relation.map(:id)
|
139
|
+
relation.where('$isolated' => 1).in(id: ids).update_all(processing: true, processing_pid: Process.pid)
|
140
|
+
Rpush::Client::Mongoid::Notification.where(processing: true, processing_pid: Process.pid).in(id: ids).asc('created_at')
|
141
|
+
end
|
142
|
+
|
143
|
+
def create_gcm_like_notification(notification, attrs, data, registration_ids, deliver_after, app) # rubocop:disable ParameterLists
|
144
|
+
notification.assign_attributes(attrs)
|
145
|
+
notification.data = data
|
146
|
+
notification.registration_ids = registration_ids
|
147
|
+
notification.deliver_after = deliver_after
|
148
|
+
notification.app = app
|
149
|
+
notification.save!
|
150
|
+
notification
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
Rpush::Daemon::Store::Interface.check(Rpush::Daemon::Store::Mongoid)
|
@@ -49,7 +49,7 @@ module Rpush
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def mark_ids_failed(ids, code, description, time)
|
52
|
-
ids.each { |id| mark_failed(Rpush::Client::Redis::
|
52
|
+
ids.each { |id| mark_failed(Rpush::Client::Redis::Notification.find(id), code, description, time) }
|
53
53
|
end
|
54
54
|
|
55
55
|
def mark_retryable(notification, deliver_after, opts = {})
|
@@ -75,7 +75,7 @@ module Rpush
|
|
75
75
|
end
|
76
76
|
|
77
77
|
def mark_ids_retryable(ids, deliver_after)
|
78
|
-
ids.each { |id| mark_retryable(Rpush::Client::Redis::
|
78
|
+
ids.each { |id| mark_retryable(Rpush::Client::Redis::Notification.find(id), deliver_after) }
|
79
79
|
end
|
80
80
|
|
81
81
|
def create_apns_feedback(failed_at, device_token, app)
|
@@ -115,6 +115,10 @@ module Rpush
|
|
115
115
|
end
|
116
116
|
end
|
117
117
|
|
118
|
+
def translate_integer_notification_id(id)
|
119
|
+
id
|
120
|
+
end
|
121
|
+
|
118
122
|
private
|
119
123
|
|
120
124
|
def create_gcm_like_notification(notification, attrs, data, registration_ids, deliver_after, app) # rubocop:disable ParameterLists
|
data/lib/rpush/deprecatable.rb
CHANGED
@@ -14,8 +14,7 @@ module Rpush
|
|
14
14
|
warning << " #{msg}" if msg
|
15
15
|
class_eval(<<-RUBY, __FILE__, __LINE__)
|
16
16
|
def #{method_name}(*args, &blk)
|
17
|
-
|
18
|
-
Rpush::Deprecation.warn(#{warning.inspect} + trace)
|
17
|
+
Rpush::Deprecation.warn_with_backtrace(#{warning.inspect})
|
19
18
|
#{method_name_as_var}_without_warning(*args, &blk)
|
20
19
|
end
|
21
20
|
RUBY
|
data/lib/rpush/deprecation.rb
CHANGED
@@ -16,5 +16,11 @@ module Rpush
|
|
16
16
|
return if Rpush::Deprecation.muted?
|
17
17
|
STDERR.puts "DEPRECATION WARNING: #{msg}"
|
18
18
|
end
|
19
|
+
|
20
|
+
def self.warn_with_backtrace(msg)
|
21
|
+
return if Rpush::Deprecation.muted?
|
22
|
+
trace = "\n\nCALLED FROM:\n" + caller.join("\n")
|
23
|
+
warn(msg + trace)
|
24
|
+
end
|
19
25
|
end
|
20
26
|
end
|
data/lib/rpush/embed.rb
CHANGED
@@ -2,6 +2,11 @@ module Rpush
|
|
2
2
|
def self.embed(options = {})
|
3
3
|
require 'rpush/daemon'
|
4
4
|
|
5
|
+
unless options.empty?
|
6
|
+
warning = "Passing configuration options directly to Rpush.embed is deprecated and will be removed from Rpush 2.5.0. Please setup configuration using Rpush.configure { |config| ... } before calling embed."
|
7
|
+
Rpush::Deprecation.warn_with_backtrace(warning)
|
8
|
+
end
|
9
|
+
|
5
10
|
if @embed_thread
|
6
11
|
STDERR.puts 'Rpush.embed can only be run once inside this process.'
|
7
12
|
end
|
data/lib/rpush/logger.rb
CHANGED
@@ -3,12 +3,9 @@ module Rpush
|
|
3
3
|
attr_reader :internal_logger
|
4
4
|
|
5
5
|
def initialize
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
@internal_logger = setup_logger(open_logfile)
|
10
|
-
end
|
11
|
-
rescue Errno::ENOENT, Errno::EPERM => e
|
6
|
+
@internal_logger = Rpush.config.logger || setup_logger(open_logfile)
|
7
|
+
@internal_logger.level = Rpush.config.log_level
|
8
|
+
rescue SystemCallError => e
|
12
9
|
@internal_logger = nil
|
13
10
|
error(e)
|
14
11
|
error('Logging disabled.')
|
@@ -46,11 +43,11 @@ module Rpush
|
|
46
43
|
|
47
44
|
def setup_logger(log)
|
48
45
|
if ActiveSupport.const_defined?('BufferedLogger')
|
49
|
-
logger = ActiveSupport::BufferedLogger.new(log
|
46
|
+
logger = ActiveSupport::BufferedLogger.new(log)
|
50
47
|
logger.auto_flushing = auto_flushing
|
51
48
|
logger
|
52
49
|
else
|
53
|
-
ActiveSupport::Logger.new(log
|
50
|
+
ActiveSupport::Logger.new(log)
|
54
51
|
end
|
55
52
|
end
|
56
53
|
|
data/lib/rpush/push.rb
CHANGED
@@ -2,6 +2,11 @@ module Rpush
|
|
2
2
|
def self.push(options = {})
|
3
3
|
require 'rpush/daemon'
|
4
4
|
|
5
|
+
unless options.empty?
|
6
|
+
warning = "Passing configuration options directly to Rpush.push is deprecated and will be removed from Rpush 2.5.0. Please setup configuration using Rpush.configure { |config| ... } before calling push."
|
7
|
+
Rpush::Deprecation.warn_with_backtrace(warning)
|
8
|
+
end
|
9
|
+
|
5
10
|
config = Rpush::ConfigurationWithoutDefaults.new
|
6
11
|
options.each { |k, v| config.send("#{k}=", v) }
|
7
12
|
config.push = true
|
data/lib/rpush/version.rb
CHANGED
data/lib/tasks/quality.rake
CHANGED
@@ -3,7 +3,7 @@ begin
|
|
3
3
|
|
4
4
|
desc 'Run cane to check quality metrics'
|
5
5
|
Cane::RakeTask.new(:cane_quality) do |cane|
|
6
|
-
cane.add_threshold 'coverage/covered_percent', :>=,
|
6
|
+
cane.add_threshold 'coverage/covered_percent', :>=, 80
|
7
7
|
cane.no_style = false
|
8
8
|
cane.style_measure = 1000
|
9
9
|
cane.no_doc = true
|
data/lib/tasks/test.rake
CHANGED
@@ -7,6 +7,11 @@ def cmd(str, clean_env = true)
|
|
7
7
|
retval
|
8
8
|
end
|
9
9
|
|
10
|
+
def add_ruby_dot_files
|
11
|
+
cmd("echo '#{RUBY_ENGINE}-#{RUBY_VERSION}' > .ruby-version")
|
12
|
+
cmd("echo 'rpush_test' > .ruby-gemset")
|
13
|
+
end
|
14
|
+
|
10
15
|
desc 'Build Rails app bundled with Rpush'
|
11
16
|
task :build_rails do
|
12
17
|
rpush_root = Dir.pwd
|
@@ -20,10 +25,10 @@ task :build_rails do
|
|
20
25
|
|
21
26
|
begin
|
22
27
|
Dir.chdir(path)
|
28
|
+
add_ruby_dot_files
|
23
29
|
cmd('echo "gem \'rake\'" >> Gemfile')
|
24
30
|
cmd('echo "gem \'pg\'" >> Gemfile')
|
25
|
-
cmd("echo \"gem 'rpush', :
|
26
|
-
cmd('bundle install')
|
31
|
+
cmd("echo \"gem 'rpush', path: '#{rpush_root}'\" >> Gemfile")
|
27
32
|
|
28
33
|
File.open('config/database.yml', 'w') do |fd|
|
29
34
|
fd.write(<<-YML)
|
@@ -51,11 +56,11 @@ task :build_standalone do
|
|
51
56
|
|
52
57
|
begin
|
53
58
|
Dir.chdir(path)
|
59
|
+
add_ruby_dot_files
|
54
60
|
cmd('echo "source \'https://rubygems.org\'" >> Gemfile')
|
55
61
|
cmd('echo "gem \'rake\'" >> Gemfile')
|
56
62
|
cmd('echo "gem \'rpush-redis\'" >> Gemfile')
|
57
|
-
cmd("echo \"gem 'rpush', :
|
58
|
-
cmd('bundle install')
|
63
|
+
cmd("echo \"gem 'rpush', path: '#{rpush_root}'\" >> Gemfile")
|
59
64
|
ensure
|
60
65
|
Dir.chdir(pwd)
|
61
66
|
end
|
@@ -55,7 +55,8 @@ describe 'APNs' do
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def fail_notification(notification)
|
58
|
-
|
58
|
+
id = (defined?(Mongoid) && notification.is_a?(Mongoid::Document)) ? notification.integer_id : notification.id
|
59
|
+
allow(ssl_socket).to receive_messages(read: [8, 4, id].pack('ccN'))
|
59
60
|
enable_io_select
|
60
61
|
end
|
61
62
|
|
@@ -11,12 +11,12 @@ RSpec.configure do |config|
|
|
11
11
|
config.before(:each) do
|
12
12
|
Modis.with_connection do |redis|
|
13
13
|
redis.keys('rpush:*').each { |key| redis.del(key) }
|
14
|
-
end
|
14
|
+
end if redis?
|
15
15
|
|
16
16
|
Rpush.config.logger = ::Logger.new(STDOUT) if functional_example?(self.class.metadata)
|
17
17
|
end
|
18
18
|
|
19
19
|
config.after(:each) do
|
20
|
-
DatabaseCleaner.clean if functional_example?(self.class.metadata)
|
20
|
+
DatabaseCleaner.clean if active_record? && functional_example?(self.class.metadata)
|
21
21
|
end
|
22
22
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
ENV['RAILS_ENV'] = 'test'
|
2
|
-
client
|
2
|
+
def client
|
3
|
+
(ENV['CLIENT'] || :active_record).to_sym
|
4
|
+
end
|
3
5
|
|
4
6
|
require 'bundler/setup'
|
5
7
|
Bundler.require(:default)
|
@@ -21,7 +23,20 @@ require 'rpush/client/active_record'
|
|
21
23
|
require 'rpush/daemon/store/active_record'
|
22
24
|
require 'rpush/daemon/store/redis'
|
23
25
|
|
24
|
-
|
26
|
+
def active_record?
|
27
|
+
client == :active_record
|
28
|
+
end
|
29
|
+
|
30
|
+
def redis?
|
31
|
+
client == :redis
|
32
|
+
end
|
33
|
+
|
34
|
+
def mongoid?
|
35
|
+
client == :mongoid
|
36
|
+
end
|
37
|
+
|
38
|
+
require 'support/mongoid_setup' if mongoid?
|
39
|
+
require 'support/active_record_setup' if active_record?
|
25
40
|
|
26
41
|
RPUSH_ROOT = '/tmp/rails_root'
|
27
42
|
|
@@ -31,10 +46,6 @@ end
|
|
31
46
|
|
32
47
|
RPUSH_CLIENT = Rpush.config.client
|
33
48
|
|
34
|
-
def active_record?
|
35
|
-
Rpush.config.client == :active_record
|
36
|
-
end
|
37
|
-
|
38
49
|
path = File.join(File.dirname(__FILE__), 'support')
|
39
50
|
TEST_CERT = File.read(File.join(path, 'cert_without_password.pem'))
|
40
51
|
TEST_CERT_WITH_PASSWORD = File.read(File.join(path, 'cert_with_password.pem'))
|
@@ -43,7 +54,7 @@ def after_example_cleanup
|
|
43
54
|
Rpush.logger = nil
|
44
55
|
Rpush::Daemon.store = nil
|
45
56
|
Rpush::Deprecation.muted do
|
46
|
-
Rpush.config
|
57
|
+
Rpush.config = nil
|
47
58
|
Rpush.config.client = RPUSH_CLIENT
|
48
59
|
end
|
49
60
|
Rpush.plugins.values.each(&:unload)
|
@@ -0,0 +1,69 @@
|
|
1
|
+
development:
|
2
|
+
# Configure available database sessions. (required)
|
3
|
+
sessions:
|
4
|
+
# Defines the default session. (required)
|
5
|
+
default:
|
6
|
+
# Defines the name of the default database that Mongoid can connect to.
|
7
|
+
# (required).
|
8
|
+
database: rpush_development
|
9
|
+
# Provides the hosts the default session can connect to. Must be an array
|
10
|
+
# of host:port pairs. (required)
|
11
|
+
hosts:
|
12
|
+
- localhost:27017
|
13
|
+
options:
|
14
|
+
# Change the default write concern. (default = { w: 1 })
|
15
|
+
# write:
|
16
|
+
# w: 1
|
17
|
+
|
18
|
+
# Change the default consistency model to primary, secondary.
|
19
|
+
# 'secondary' will send reads to secondaries, 'primary' sends everything
|
20
|
+
# to master. (default: primary)
|
21
|
+
# read: secondary_preferred
|
22
|
+
|
23
|
+
# How many times Moped should attempt to retry an operation after
|
24
|
+
# failure. (default: The number of nodes in the cluster)
|
25
|
+
# max_retries: 20
|
26
|
+
|
27
|
+
# The time in seconds that Moped should wait before retrying an
|
28
|
+
# operation on failure. (default: 0.25)
|
29
|
+
# retry_interval: 0.25
|
30
|
+
# Configure Mongoid specific options. (optional)
|
31
|
+
options:
|
32
|
+
# Includes the root model name in json serialization. (default: false)
|
33
|
+
# include_root_in_json: false
|
34
|
+
|
35
|
+
# Include the _type field in serialization. (default: false)
|
36
|
+
# include_type_for_serialization: false
|
37
|
+
|
38
|
+
# Preload all models in development, needed when models use
|
39
|
+
# inheritance. (default: false)
|
40
|
+
# preload_models: false
|
41
|
+
|
42
|
+
# Protect id and type from mass assignment. (default: true)
|
43
|
+
# protect_sensitive_fields: true
|
44
|
+
|
45
|
+
# Raise an error when performing a #find and the document is not found.
|
46
|
+
# (default: true)
|
47
|
+
# raise_not_found_error: true
|
48
|
+
|
49
|
+
# Raise an error when defining a scope with the same name as an
|
50
|
+
# existing method. (default: false)
|
51
|
+
# scope_overwrite_exception: false
|
52
|
+
|
53
|
+
# Use Active Support's time zone in conversions. (default: true)
|
54
|
+
# use_activesupport_time_zone: true
|
55
|
+
|
56
|
+
# Ensure all times are UTC in the app side. (default: false)
|
57
|
+
# use_utc: false
|
58
|
+
test:
|
59
|
+
sessions:
|
60
|
+
default:
|
61
|
+
database: rpush_test
|
62
|
+
hosts:
|
63
|
+
- localhost:27017
|
64
|
+
options:
|
65
|
+
read: primary
|
66
|
+
# In the test environment we lower the retries and retry interval to
|
67
|
+
# low amounts for fast failures.
|
68
|
+
max_retries: 1
|
69
|
+
retry_interval: 0
|