notifiable-rails 0.16.0 → 0.17.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/notifiable.rb +0 -7
- data/lib/notifiable/app.rb +6 -0
- data/lib/notifiable/notifiable_concern.rb +2 -2
- data/lib/notifiable/notification.rb +51 -0
- data/lib/notifiable/notifier_base.rb +24 -31
- data/lib/notifiable/version.rb +1 -1
- data/spec/notifiable_app_spec.rb +12 -1
- data/spec/notifiable_spec.rb +6 -11
- data/spec/notification_spec.rb +80 -0
- data/spec/notifier_base_spec.rb +27 -0
- data/spec/spec_helper.rb +2 -2
- data/spec/test_app/log/test.log +25543 -0
- metadata +4 -7
- data/lib/notifiable/batch.rb +0 -54
- data/spec/batch_spec.rb +0 -65
- data/spec/notifiable_server_spec.rb +0 -55
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: notifiable-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kamil Kocemba
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-05-
|
12
|
+
date: 2014-05-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -184,7 +184,6 @@ files:
|
|
184
184
|
- lib/generators/notifiable/install/templates/initializer.rb
|
185
185
|
- lib/notifiable/active_record.rb
|
186
186
|
- lib/notifiable/app.rb
|
187
|
-
- lib/notifiable/batch.rb
|
188
187
|
- lib/notifiable/device_token.rb
|
189
188
|
- lib/notifiable/engine.rb
|
190
189
|
- lib/notifiable/notifiable_concern.rb
|
@@ -197,13 +196,12 @@ files:
|
|
197
196
|
- lib/tasks/brakeman.rake
|
198
197
|
- LICENSE
|
199
198
|
- Rakefile
|
200
|
-
- spec/batch_spec.rb
|
201
199
|
- spec/controllers/device_tokens_controller_spec.rb
|
202
200
|
- spec/controllers/notifications_controller_spec.rb
|
203
201
|
- spec/notifiable_app_spec.rb
|
204
|
-
- spec/notifiable_server_spec.rb
|
205
202
|
- spec/notifiable_spec.rb
|
206
203
|
- spec/notification_spec.rb
|
204
|
+
- spec/notifier_base_spec.rb
|
207
205
|
- spec/spec_helper.rb
|
208
206
|
- spec/support/engine_controller.rb
|
209
207
|
- spec/support/factories.rb
|
@@ -277,13 +275,12 @@ signing_key:
|
|
277
275
|
specification_version: 4
|
278
276
|
summary: Rails engine to make push notifications a bit easier.
|
279
277
|
test_files:
|
280
|
-
- spec/batch_spec.rb
|
281
278
|
- spec/controllers/device_tokens_controller_spec.rb
|
282
279
|
- spec/controllers/notifications_controller_spec.rb
|
283
280
|
- spec/notifiable_app_spec.rb
|
284
|
-
- spec/notifiable_server_spec.rb
|
285
281
|
- spec/notifiable_spec.rb
|
286
282
|
- spec/notification_spec.rb
|
283
|
+
- spec/notifier_base_spec.rb
|
287
284
|
- spec/spec_helper.rb
|
288
285
|
- spec/support/engine_controller.rb
|
289
286
|
- spec/support/factories.rb
|
data/lib/notifiable/batch.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
module Notifiable
|
2
|
-
class Batch
|
3
|
-
|
4
|
-
def initialize(app)
|
5
|
-
raise "Must specify Notifiable::App" unless app
|
6
|
-
@app = app
|
7
|
-
@notifiers = {}
|
8
|
-
@notification_ids = []
|
9
|
-
end
|
10
|
-
|
11
|
-
def add_notifiable(notification, notifiable)
|
12
|
-
notifiable.device_tokens.each do |d|
|
13
|
-
self.add_device_token(notification, d)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def add_device_token(notification, d)
|
18
|
-
provider = d.provider.to_sym
|
19
|
-
|
20
|
-
unless @notifiers[provider]
|
21
|
-
clazz = Notifiable.notifier_classes[provider]
|
22
|
-
raise "Notifier #{provider} not configured" unless clazz
|
23
|
-
@notifiers[provider] = clazz.new
|
24
|
-
@notifiers[provider].env = Rails.env
|
25
|
-
|
26
|
-
if @app.configuration && @app.configuration[provider]
|
27
|
-
@app.configuration[provider].each_pair {|key, value| @notifiers[provider].send("#{key}=", value) if @notifiers[provider].methods.include?("#{key}=".to_sym) }
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
notifier = @notifiers[provider]
|
32
|
-
if d.is_valid? && !notifier.nil?
|
33
|
-
notifier.send_notification(notification, d)
|
34
|
-
@notification_ids << notification.id
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def close
|
39
|
-
@notifiers.each_value {|n| n.close}
|
40
|
-
@notifiers = nil
|
41
|
-
summarise
|
42
|
-
end
|
43
|
-
|
44
|
-
private
|
45
|
-
def summarise
|
46
|
-
notifications = Notification.where(:id => @notification_ids)
|
47
|
-
notifications.each do |n|
|
48
|
-
n.sent_count = n.notification_statuses.count
|
49
|
-
n.gateway_accepted_count = n.notification_statuses.where(:status => 0).count
|
50
|
-
n.save
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
data/spec/batch_spec.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Notifiable::Batch do
|
4
|
-
let(:user1) { FactoryGirl.create(:user) }
|
5
|
-
let(:notification) { FactoryGirl.create(:notification, :app => app) }
|
6
|
-
let(:app) { FactoryGirl.create(:app, :configuration => {:configurable_mock => {:use_sandbox => true}}) }
|
7
|
-
|
8
|
-
it "adds a notifiable object" do
|
9
|
-
FactoryGirl.create(:mock_token, :provider => :configurable_mock, :user_id => user1.id, :app => app)
|
10
|
-
|
11
|
-
b = Notifiable::Batch.new(app)
|
12
|
-
b.add_notifiable(notification, user1)
|
13
|
-
b.close
|
14
|
-
|
15
|
-
Notifiable::NotificationStatus.count.should == 1
|
16
|
-
saved_notification = Notifiable::Notification.first
|
17
|
-
saved_notification.sent_count.should == 1
|
18
|
-
saved_notification.gateway_accepted_count.should == 1
|
19
|
-
saved_notification.opened_count.should == 0
|
20
|
-
|
21
|
-
saved_status = Notifiable::NotificationStatus.first
|
22
|
-
saved_status.status.should == 0
|
23
|
-
saved_status.created_at.should_not be_nil
|
24
|
-
end
|
25
|
-
|
26
|
-
it "adds a device token" do
|
27
|
-
token = FactoryGirl.create(:mock_token, :provider => :configurable_mock, :user_id => user1.id, :app => app)
|
28
|
-
|
29
|
-
b = Notifiable::Batch.new(app)
|
30
|
-
b.add_device_token(notification, token)
|
31
|
-
b.close
|
32
|
-
|
33
|
-
Notifiable::NotificationStatus.count.should == 1
|
34
|
-
saved_notification = Notifiable::Notification.first
|
35
|
-
saved_notification.sent_count.should == 1
|
36
|
-
saved_notification.gateway_accepted_count.should == 1
|
37
|
-
end
|
38
|
-
|
39
|
-
it "configures the provider via an App" do
|
40
|
-
FactoryGirl.create(:mock_token, :provider => :configurable_mock, :user_id => user1.id, :app => app)
|
41
|
-
|
42
|
-
b = Notifiable::Batch.new(app)
|
43
|
-
b.add_notifiable(notification, user1)
|
44
|
-
|
45
|
-
b.notifiers[:configurable_mock].env.should eql Rails.env
|
46
|
-
b.notifiers[:configurable_mock].use_sandbox.should == true
|
47
|
-
end
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
module Notifiable
|
52
|
-
class Batch
|
53
|
-
attr_accessor :notifiers
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
class ConfigurableMockNotifier < Notifiable::NotifierBase
|
58
|
-
attr_accessor :use_sandbox
|
59
|
-
|
60
|
-
def enqueue(notification, device_token, message, params)
|
61
|
-
processed(notification, device_token, 0)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
Notifiable.notifier_classes[:configurable_mock] = ConfigurableMockNotifier
|
@@ -1,55 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Notifiable do
|
4
|
-
let(:user1) { FactoryGirl.create(:user_with_mock_token) }
|
5
|
-
let(:user2) { FactoryGirl.create(:user_with_mock_token) }
|
6
|
-
let(:notification1) { FactoryGirl.create(:notification, :message => "First test message")}
|
7
|
-
let(:notification2) { FactoryGirl.create(:notification, :message => "Second test message")}
|
8
|
-
|
9
|
-
before(:each) { FactoryGirl.create(:app) }
|
10
|
-
|
11
|
-
it "sends two identical push notifications" do
|
12
|
-
Notifiable.batch do |b|
|
13
|
-
b.add_notifiable(notification1, user1)
|
14
|
-
b.add_notifiable(notification1, user2)
|
15
|
-
end
|
16
|
-
|
17
|
-
Notifiable::NotificationStatus.count.should == 2
|
18
|
-
|
19
|
-
all_notifications = Notifiable::NotificationStatus.all
|
20
|
-
first_notification_token = all_notifications[0]
|
21
|
-
first_notification_token.notification.message.should eql "First test message"
|
22
|
-
first_notification_token.device_token.should eql user1.device_tokens[0]
|
23
|
-
|
24
|
-
second_notification_token = all_notifications[1]
|
25
|
-
second_notification_token.notification.message.should eql "First test message"
|
26
|
-
second_notification_token.device_token.should eql user2.device_tokens[0]
|
27
|
-
end
|
28
|
-
|
29
|
-
it "sends two different push notifications" do
|
30
|
-
Notifiable.batch do |b|
|
31
|
-
b.add_notifiable(notification1, user1)
|
32
|
-
b.add_notifiable(notification2, user2)
|
33
|
-
end
|
34
|
-
|
35
|
-
Notifiable::NotificationStatus.count.should == 2
|
36
|
-
|
37
|
-
all_notifications = Notifiable::NotificationStatus.all
|
38
|
-
first_notification_token = all_notifications[0]
|
39
|
-
first_notification_token.status.should == 200
|
40
|
-
first_notification_token.notification.message.should eql "First test message"
|
41
|
-
first_notification_token.device_token.should eql user1.device_tokens[0]
|
42
|
-
|
43
|
-
second_notification_token = all_notifications[1]
|
44
|
-
second_notification_token.status.should == 200
|
45
|
-
second_notification_token.notification.message.should eql "Second test message"
|
46
|
-
second_notification_token.device_token.should eql user2.device_tokens[0]
|
47
|
-
end
|
48
|
-
|
49
|
-
it "raises an error if it can't find the notification provider" do
|
50
|
-
user = FactoryGirl.create(:user)
|
51
|
-
device_token = FactoryGirl.create(:mock_token, :provider => :sms, :user_id => user.id)
|
52
|
-
|
53
|
-
expect { user.send_notification(notification1) }.to raise_error
|
54
|
-
end
|
55
|
-
end
|