notify_user 0.0.9 → 0.0.10
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/README.md +99 -0
- data/app/controllers/notify_user/base_notifications_controller.rb +2 -1
- data/app/models/notify_user/base_notification.rb +21 -19
- data/lib/notify_user/version.rb +1 -1
- data/spec/controllers/notify_user/notifications_controller_spec.rb +1 -7
- data/spec/models/notify_user/unsubscribe_spec.rb +5 -0
- data/spec/support/database.yml +3 -0
- data/spec/support/rails_template.rb +2 -2
- metadata +4 -4
- data/README.rdoc +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e2b5085ee8851c7794ce513ecd8a39306b99a617
|
4
|
+
data.tar.gz: 0899ee588ee35b8e57ca2775eee227e9b7bc7b90
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6eb6b9dacbf04d55add8f2410cbe666b28abe41c689a65b9f85862b62c6285577267fe3a21298ed41e376c66cc99fac0f58eb4e5e148be78200b4fcdc2eda1d5
|
7
|
+
data.tar.gz: 81644a729e2499c788d44b0d9497eac0c90bfad60a193980fa326277899e803d8212a75727cea5abbf624e413fdab247da1dfecb9d1dc4308b67434527174659
|
data/README.md
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
notify_user
|
2
|
+
===========
|
3
|
+
|
4
|
+
|
5
|
+
Install:
|
6
|
+
```
|
7
|
+
gem 'notify_user'
|
8
|
+
rails g notify_user:install
|
9
|
+
```
|
10
|
+
|
11
|
+
Getting started:
|
12
|
+
```
|
13
|
+
rails g notify_user:notification NewMyProperty
|
14
|
+
```
|
15
|
+
|
16
|
+
Edit views/notify_user/new_my_property/action_mailer/notification.html.erb, e.g.
|
17
|
+
```
|
18
|
+
<h3>We added <%= @notification.params[:listing_address] %> to your My Properties.</h3>
|
19
|
+
```
|
20
|
+
|
21
|
+
Then send:
|
22
|
+
```
|
23
|
+
NotifyUser.send_notification('new_my_property').to(user).with("listing_address" => "123 Main St").notify
|
24
|
+
```
|
25
|
+
|
26
|
+
To enable APNS add this line to your app/notification/notification_type.rb
|
27
|
+
```
|
28
|
+
channel :apns,
|
29
|
+
aggregate_per: false
|
30
|
+
```
|
31
|
+
|
32
|
+
To run the tests:
|
33
|
+
```
|
34
|
+
BUNDLE_GEMFILE=gemfiles/rails40.gemfile bundle install
|
35
|
+
BUNDLE_GEMFILE=gemfiles/rails40.gemfile bundle exec rspec spec
|
36
|
+
```
|
37
|
+
|
38
|
+
To run the tests like Travis:
|
39
|
+
```
|
40
|
+
gem install wwtd
|
41
|
+
wwtd
|
42
|
+
```
|
43
|
+
|
44
|
+
##Web interface
|
45
|
+
Display a list of notifications for a logged in user
|
46
|
+
```
|
47
|
+
visit /notify_user/notifications
|
48
|
+
```
|
49
|
+
Clicking on a notification gets marked as read and taken to the redirect_logic action (notifications_controller.rb)
|
50
|
+
```
|
51
|
+
def redirect_logic(notification)
|
52
|
+
class = notification.params[:type].capitalize.constantize
|
53
|
+
object = class.find(@notification.params[:id])
|
54
|
+
redirect_to property_url(object)
|
55
|
+
end
|
56
|
+
```
|
57
|
+
Add line to environment.rb file to configure host url for mail notifications
|
58
|
+
```
|
59
|
+
config.action_mailer.default_url_options = { :host => "http://example.com" }
|
60
|
+
```
|
61
|
+
|
62
|
+
##Subscriptions
|
63
|
+
Unsubscribing from a notification type, first add it to the notify_user.rb initilizer
|
64
|
+
```
|
65
|
+
# Override the default notification type
|
66
|
+
config.unsubscribable_notifications = ['NewPostNotification','NewSale']
|
67
|
+
```
|
68
|
+
Users can manage their subscription statuses through the web interface
|
69
|
+
```
|
70
|
+
visit notify_user/notifications/unsubscribe
|
71
|
+
```
|
72
|
+
Unsubscribe link helper - add this to your views/notify_user/layouts/action_mailer.html.erb
|
73
|
+
```
|
74
|
+
<% if is_unsubscribeable? @notification %>
|
75
|
+
<p style="text-align: center;">
|
76
|
+
<%= unsubscribe_link(@notification, "Unsubscribe") %>
|
77
|
+
</p>
|
78
|
+
<% end %>
|
79
|
+
```
|
80
|
+
|
81
|
+
##Upgrading to JSON params data type
|
82
|
+
Run json_update generator which generates the migrations to change the params datatype to json as well as convert the current data to json
|
83
|
+
```
|
84
|
+
rails generate notify_user:json_update
|
85
|
+
rake db:migrate
|
86
|
+
```
|
87
|
+
|
88
|
+
##Changes
|
89
|
+
Notification description and aggregates has changed syntax slighly from
|
90
|
+
```
|
91
|
+
@@description = "please override this type description"
|
92
|
+
@@aggregate_per = 10.minutes
|
93
|
+
```
|
94
|
+
to
|
95
|
+
```
|
96
|
+
self.description = "please override this type description"
|
97
|
+
self.aggregate_per = 10.minutes
|
98
|
+
```
|
99
|
+
|
@@ -45,7 +45,7 @@ class NotifyUser::BaseNotificationsController < ApplicationController
|
|
45
45
|
#get
|
46
46
|
def read
|
47
47
|
@notification = NotifyUser::BaseNotification.for_target(@user).where('id = ?', params[:id]).first
|
48
|
-
@notification.mark_as_read
|
48
|
+
@notification.mark_as_read!
|
49
49
|
redirect_logic(@notification)
|
50
50
|
end
|
51
51
|
|
@@ -58,6 +58,7 @@ class NotifyUser::BaseNotificationsController < ApplicationController
|
|
58
58
|
unsubscribe_from(params[:type])
|
59
59
|
redirect_to notify_user_notifications_unsubscribe_path
|
60
60
|
end
|
61
|
+
@types = build_notification_types
|
61
62
|
@unsubscribale_types = NotifyUser.unsubscribable_notifications
|
62
63
|
@unsubscribale_channels = NotifyUser::BaseNotification.channels
|
63
64
|
end
|
@@ -1,9 +1,10 @@
|
|
1
|
-
require '
|
1
|
+
require 'aasm'
|
2
2
|
require 'sidekiq'
|
3
3
|
|
4
4
|
module NotifyUser
|
5
5
|
class BaseNotification < ActiveRecord::Base
|
6
6
|
include ActionView::Helpers::TextHelper
|
7
|
+
include AASM
|
7
8
|
|
8
9
|
if ActiveRecord::VERSION::MAJOR < 4
|
9
10
|
attr_accessible :params, :target, :type, :state
|
@@ -16,37 +17,36 @@ module NotifyUser
|
|
16
17
|
validate :unsubscribed_validation
|
17
18
|
|
18
19
|
# Params for creating the notification message.
|
19
|
-
|
20
|
+
if ActiveRecord::VERSION::MAJOR < 4
|
21
|
+
serialize :params, JSON
|
22
|
+
end
|
20
23
|
|
21
24
|
# The user to send the notification to
|
22
25
|
belongs_to :target, polymorphic: true
|
23
26
|
|
24
27
|
validates_presence_of :target_id, :target_type, :target, :type, :state
|
25
28
|
|
26
|
-
|
29
|
+
aasm column: :state do
|
27
30
|
|
28
31
|
# Created, not sent yet. Possibly waiting for aggregation.
|
29
|
-
state :pending
|
30
|
-
end
|
32
|
+
state :pending, initial: true
|
31
33
|
|
32
34
|
# Email/SMS/APNS has been sent.
|
33
|
-
state :sent
|
34
|
-
end
|
35
|
+
state :sent
|
35
36
|
|
36
37
|
# The user has seen this notification.
|
37
|
-
state :read
|
38
|
-
end
|
38
|
+
state :read
|
39
39
|
|
40
40
|
# Record that we have sent message(s) to the user about this notification.
|
41
41
|
event :mark_as_sent do
|
42
|
-
|
42
|
+
transitions from: :pending, to: :sent
|
43
43
|
end
|
44
44
|
|
45
45
|
# Record that the user has seen this notification, usually on a page or in the app.
|
46
46
|
# A notification can go straight from pending to read if it's seen in a view before
|
47
47
|
# sent in an email.
|
48
48
|
event :mark_as_read do
|
49
|
-
|
49
|
+
transitions from: [:pending, :sent], to: :read
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -93,17 +93,19 @@ module NotifyUser
|
|
93
93
|
# Send any Emails/SMS/APNS
|
94
94
|
def notify
|
95
95
|
|
96
|
-
save
|
96
|
+
if save
|
97
97
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
98
|
+
#if aggregation is false bypass aggregation completely
|
99
|
+
self.channels.each do |channel_name, options|
|
100
|
+
if(options[:aggregate_per] == false)
|
101
|
+
self.class.delay.deliver_notification_channel(self.id, channel_name)
|
102
|
+
else
|
103
|
+
if not aggregation_pending?
|
104
|
+
self.class.delay_for(options[:aggregate_per] || self.aggregate_per).notify_aggregated_channel(self.id, channel_name)
|
105
|
+
end
|
105
106
|
end
|
106
107
|
end
|
108
|
+
|
107
109
|
end
|
108
110
|
|
109
111
|
end
|
data/lib/notify_user/version.rb
CHANGED
@@ -12,7 +12,7 @@ describe NotifyUser::NotificationsController do
|
|
12
12
|
|
13
13
|
it "delegates authentication to Devise" do
|
14
14
|
subject.should_receive(:authenticate_user!).and_return(true)
|
15
|
-
subject.
|
15
|
+
subject.stub(:current_user).and_return(user)
|
16
16
|
get :index
|
17
17
|
end
|
18
18
|
|
@@ -92,12 +92,6 @@ describe NotifyUser::NotificationsController do
|
|
92
92
|
notification.save
|
93
93
|
end
|
94
94
|
|
95
|
-
xit "endpoint for toggling subscriptions statuses" do
|
96
|
-
# NotifyUser::Unsubscribe.has_unsubscribed_from(user, 'NewPostNotification').should eq []
|
97
|
-
put :subscriptions, :types => ['NewPostNotification']
|
98
|
-
NotifyUser::Unsubscribe.has_unsubscribed_from(user, 'NewPostNotification').should_not eq []
|
99
|
-
end
|
100
|
-
|
101
95
|
it "endpoint for updating notification subscription statuses" do
|
102
96
|
NotifyUser::Unsubscribe.has_unsubscribed_from(user, 'NewPostNotification').should eq []
|
103
97
|
put :subscriptions, :types => [{
|
@@ -18,6 +18,11 @@ module NotifyUser
|
|
18
18
|
notification.errors[:target].first.should eq " has unsubscribed from this type"
|
19
19
|
end
|
20
20
|
|
21
|
+
it "doesn't queue an aggregation background worker if unsubscribed" do
|
22
|
+
notification.class.should_not_receive(:delay_for)
|
23
|
+
notification.notify
|
24
|
+
end
|
25
|
+
|
21
26
|
it "doesnt create object if notification type isn't unsubscribable" do
|
22
27
|
unsubscribe = NotifyUser::Unsubscribe.create({target: user, type: "UnsubscribableNotification"})
|
23
28
|
NotifyUser::Unsubscribe.last.type.should_not eq "UnsubscribableNotification"
|
data/spec/support/database.yml
CHANGED
@@ -2,6 +2,7 @@ development:
|
|
2
2
|
adapter: postgresql
|
3
3
|
encoding: unicode
|
4
4
|
database: notify_user_development
|
5
|
+
host: localhost
|
5
6
|
pool: 5
|
6
7
|
timeout: 5000
|
7
8
|
|
@@ -9,6 +10,7 @@ test:
|
|
9
10
|
adapter: postgresql
|
10
11
|
encoding: unicode
|
11
12
|
database: notify_user_test
|
13
|
+
host: localhost
|
12
14
|
pool: 5
|
13
15
|
timeout: 5000
|
14
16
|
|
@@ -17,5 +19,6 @@ production:
|
|
17
19
|
adapter: postgresql
|
18
20
|
encoding: unicode
|
19
21
|
database: notify_user_production
|
22
|
+
host: localhost
|
20
23
|
pool: 5
|
21
24
|
timeout: 5000
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#removes the username and password fields from database.yml
|
2
|
-
|
3
|
-
|
2
|
+
remove_file "#{ENV['RAILS_ROOT']}/config/database.yml"
|
3
|
+
copy_file File.expand_path('../../support/database.yml'), "#{ENV['RAILS_ROOT']}/config/database.yml"
|
4
4
|
|
5
5
|
rake "db:drop:all"
|
6
6
|
rake "db:create:all"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: notify_user
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Spacek
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '3.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: aasm
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -188,7 +188,7 @@ extensions: []
|
|
188
188
|
extra_rdoc_files: []
|
189
189
|
files:
|
190
190
|
- MIT-LICENSE
|
191
|
-
- README.
|
191
|
+
- README.md
|
192
192
|
- Rakefile
|
193
193
|
- app/assets/javascripts/notify_user/application.js
|
194
194
|
- app/assets/javascripts/notify_user/notification.js
|
data/README.rdoc
DELETED