user_notification 0.0.1 → 0.0.2
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/lib/generators/user_notification/migration/templates/migration.rb +3 -3
- data/lib/user_notification.rb +4 -4
- data/lib/user_notification/actions/creation.rb +2 -2
- data/lib/user_notification/actions/destruction.rb +2 -2
- data/lib/user_notification/actions/update.rb +2 -2
- data/lib/user_notification/common.rb +11 -11
- data/lib/user_notification/models/{trackable.rb → notifiable.rb} +3 -3
- data/lib/user_notification/orm/active_record.rb +1 -1
- data/lib/user_notification/orm/active_record/activist.rb +10 -6
- data/lib/user_notification/orm/active_record/adapter.rb +3 -3
- data/lib/user_notification/orm/active_record/{trackable.rb → notifiable.rb} +5 -5
- data/lib/user_notification/orm/active_record/notification.rb +2 -2
- data/lib/user_notification/orm/mongo_mapper.rb +1 -1
- data/lib/user_notification/orm/mongo_mapper/activist.rb +8 -4
- data/lib/user_notification/orm/mongo_mapper/adapter.rb +3 -3
- data/lib/user_notification/orm/mongo_mapper/{trackable.rb → notifiable.rb} +2 -2
- data/lib/user_notification/orm/mongo_mapper/notification.rb +1 -1
- data/lib/user_notification/orm/mongoid.rb +1 -1
- data/lib/user_notification/orm/mongoid/activist.rb +8 -4
- data/lib/user_notification/orm/mongoid/adapter.rb +3 -3
- data/lib/user_notification/orm/mongoid/{trackable.rb → notifiable.rb} +2 -2
- data/lib/user_notification/orm/mongoid/notification.rb +1 -1
- data/lib/user_notification/roles/{tracked.rb → acts_as_notifiable.rb} +13 -13
- data/lib/user_notification/version.rb +1 -1
- data/test/migrations/001_create_notifications.rb +3 -3
- data/test/test_activist.rb +5 -5
- data/test/{test_tracking.rb → test_acts_as_notifiable.rb} +26 -26
- data/test/test_helper.rb +3 -3
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 09b3f9590fbbd4271b1d11dd03ad86ab3da3d12c
|
4
|
+
data.tar.gz: d4c0b7fef0be3148aa15ac838eb1302016073b37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4d6e59a0f871eb942c783499100804c5c05f5a322b2dd24668668a0235a536e87128cea6225125324f1305f819f49e97f07e3b3a780fecabed064017817b7f3
|
7
|
+
data.tar.gz: 6233c4819bc17b4947c28929c7b14ae1d7a9dfce05ade9cd7354b7cfda67af7030b33f30eb13c10ab767a38ea1d5991616dbade951beefc952b9fefd5ecda918
|
@@ -3,17 +3,17 @@ class CreateNotifications < ActiveRecord::Migration
|
|
3
3
|
# Create table
|
4
4
|
def self.up
|
5
5
|
create_table :notifications do |t|
|
6
|
-
t.belongs_to :
|
6
|
+
t.belongs_to :notifiable, :polymorphic => true
|
7
7
|
t.belongs_to :owner, :polymorphic => true
|
8
8
|
t.string :key
|
9
9
|
t.text :parameters
|
10
10
|
t.belongs_to :recipient, :polymorphic => true
|
11
|
-
t.
|
11
|
+
t.boolean :read, default: false
|
12
12
|
|
13
13
|
t.timestamps
|
14
14
|
end
|
15
15
|
|
16
|
-
add_index :notifications, [:
|
16
|
+
add_index :notifications, [:notifiable_id, :notifiable_type]
|
17
17
|
add_index :notifications, [:owner_id, :owner_type]
|
18
18
|
add_index :notifications, [:recipient_id, :recipient_type]
|
19
19
|
end
|
data/lib/user_notification.rb
CHANGED
@@ -3,7 +3,7 @@ require 'action_view'
|
|
3
3
|
# +user_notification+ keeps track of changes made to models
|
4
4
|
# and allows you to display them to the users.
|
5
5
|
#
|
6
|
-
# Check {UserNotification::
|
6
|
+
# Check {UserNotification::Notifiable::ClassMethods#notifiable} for more details about customizing and specifying
|
7
7
|
# ownership to users.
|
8
8
|
module UserNotification
|
9
9
|
extend ActiveSupport::Concern
|
@@ -12,14 +12,14 @@ module UserNotification
|
|
12
12
|
autoload :Notification, 'user_notification/models/notification'
|
13
13
|
autoload :Activist, 'user_notification/models/activist'
|
14
14
|
autoload :Adapter, 'user_notification/models/adapter'
|
15
|
-
autoload :
|
15
|
+
autoload :Notifiable, 'user_notification/models/notifiable'
|
16
16
|
autoload :Common
|
17
17
|
autoload :Config
|
18
18
|
autoload :Creation, 'user_notification/actions/creation.rb'
|
19
19
|
autoload :Deactivatable,'user_notification/roles/deactivatable.rb'
|
20
20
|
autoload :Destruction, 'user_notification/actions/destruction.rb'
|
21
21
|
autoload :Renderable
|
22
|
-
autoload :
|
22
|
+
autoload :ActsAsNotifiable, 'user_notification/roles/acts_as_notifiable.rb'
|
23
23
|
autoload :Update, 'user_notification/actions/update.rb'
|
24
24
|
autoload :VERSION
|
25
25
|
|
@@ -58,7 +58,7 @@ module UserNotification
|
|
58
58
|
included do
|
59
59
|
include Common
|
60
60
|
include Deactivatable
|
61
|
-
include
|
61
|
+
include ActsAsNotifiable
|
62
62
|
include Activist # optional associations by recipient|owner
|
63
63
|
end
|
64
64
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module UserNotification
|
2
|
-
# Handles creation of Activities upon destruction and update of
|
2
|
+
# Handles creation of Activities upon destruction and update of notifiable model.
|
3
3
|
module Creation
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
@@ -7,7 +7,7 @@ module UserNotification
|
|
7
7
|
after_create :notification_on_create
|
8
8
|
end
|
9
9
|
private
|
10
|
-
# Creates notification upon creation of the
|
10
|
+
# Creates notification upon creation of the notifiable model
|
11
11
|
def notification_on_create
|
12
12
|
create_notification(:create)
|
13
13
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module UserNotification
|
2
|
-
# Handles creation of Activities upon destruction of
|
2
|
+
# Handles creation of Activities upon destruction of notifiable model.
|
3
3
|
module Destruction
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
@@ -7,7 +7,7 @@ module UserNotification
|
|
7
7
|
before_destroy :notification_on_destroy
|
8
8
|
end
|
9
9
|
private
|
10
|
-
# Records an notification upon destruction of the
|
10
|
+
# Records an notification upon destruction of the notifiable model
|
11
11
|
def notification_on_destroy
|
12
12
|
create_notification(:destroy)
|
13
13
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module UserNotification
|
2
|
-
# Handles creation of Activities upon destruction and update of
|
2
|
+
# Handles creation of Activities upon destruction and update of notifiable model.
|
3
3
|
module Update
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
@@ -7,7 +7,7 @@ module UserNotification
|
|
7
7
|
after_update :notification_on_update
|
8
8
|
end
|
9
9
|
private
|
10
|
-
# Creates notification upon modification of the
|
10
|
+
# Creates notification upon modification of the notifiable model
|
11
11
|
def notification_on_update
|
12
12
|
create_notification(:update)
|
13
13
|
end
|
@@ -22,7 +22,7 @@ module UserNotification
|
|
22
22
|
extend ActiveSupport::Concern
|
23
23
|
|
24
24
|
included do
|
25
|
-
include
|
25
|
+
include Notifiable
|
26
26
|
class_attribute :notification_owner_global, :notification_recipient_global,
|
27
27
|
:notification_params_global, :notification_hooks, :notification_custom_fields_global
|
28
28
|
set_user_notification_class_defaults
|
@@ -134,11 +134,11 @@ module UserNotification
|
|
134
134
|
end
|
135
135
|
|
136
136
|
# Extracts a hook from the _:on_ option provided in
|
137
|
-
# {
|
137
|
+
# {Notifiable::ClassMethods#notifiable}. Returns nil when no hook exists for
|
138
138
|
# given action
|
139
139
|
# {Common#get_hook}
|
140
140
|
#
|
141
|
-
# @see
|
141
|
+
# @see Notifiable#get_hook
|
142
142
|
# @param key [String, Symbol] action to retrieve a hook for
|
143
143
|
# @return [Proc, nil] callable hook or nil
|
144
144
|
# @since 0.4.0
|
@@ -196,7 +196,7 @@ module UserNotification
|
|
196
196
|
# current_user.create_notification(:avatar_changed)
|
197
197
|
#
|
198
198
|
# It will still gather data from any procs or symbols you passed as params
|
199
|
-
# to {
|
199
|
+
# to {Notifiable::ClassMethods#notifiable}. It will ask the hooks you defined
|
200
200
|
# whether to really save this notification.
|
201
201
|
#
|
202
202
|
# But you can also overwrite instance and global settings with your options:
|
@@ -221,9 +221,9 @@ module UserNotification
|
|
221
221
|
# @article.create_notification :commented_on
|
222
222
|
# @article.notifications.last.key # => "article.commented_on"
|
223
223
|
#
|
224
|
-
# For other parameters, see {
|
225
|
-
# accessors at {
|
226
|
-
# {
|
224
|
+
# For other parameters, see {Notifiable#notification}, and "Instance options"
|
225
|
+
# accessors at {Notifiable}, information on hooks is available at
|
226
|
+
# {Notifiable::ClassMethods#notifiable}.
|
227
227
|
# @see #prepare_settings
|
228
228
|
# @return [Model, nil] If created successfully, new notification
|
229
229
|
# @since 0.4.0
|
@@ -231,14 +231,14 @@ module UserNotification
|
|
231
231
|
# @overload create_notification(action, options = {})
|
232
232
|
# @param [Symbol,String] action Name of the action
|
233
233
|
# @param [Hash] options Options with quality higher than instance options
|
234
|
-
# set in {
|
234
|
+
# set in {Notifiable#notification}
|
235
235
|
# @option options [Activist] :owner Owner
|
236
236
|
# @option options [Activist] :recipient Recipient
|
237
237
|
# @option options [Hash] :params Parameters, see
|
238
238
|
# {UserNotification.resolve_value}
|
239
239
|
# @overload create_notification(options = {})
|
240
240
|
# @param [Hash] options Options with quality higher than instance options
|
241
|
-
# set in {
|
241
|
+
# set in {Notifiable#notification}
|
242
242
|
# @option options [Symbol,String] :action Name of the action
|
243
243
|
# @option options [String] :key Full key
|
244
244
|
# @option options [Activist] :owner Owner
|
@@ -258,8 +258,8 @@ module UserNotification
|
|
258
258
|
end
|
259
259
|
|
260
260
|
# Prepares settings used during creation of Notification record.
|
261
|
-
# params passed directly to
|
262
|
-
# settings specified in
|
261
|
+
# params passed directly to notifiable model have priority over
|
262
|
+
# settings specified in notifiable() method
|
263
263
|
#
|
264
264
|
# @see #create_notification
|
265
265
|
# @return [Hash] Settings with preserved options that were passed
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module UserNotification
|
2
|
-
# Provides association for notifications bound to this object by *
|
3
|
-
module
|
2
|
+
# Provides association for notifications bound to this object by *notifiable*.
|
3
|
+
module Notifiable
|
4
4
|
# Delegates to ORM.
|
5
5
|
def self.included(base)
|
6
|
-
base.extend UserNotification::inherit_orm("
|
6
|
+
base.extend UserNotification::inherit_orm("Notifiable")
|
7
7
|
end
|
8
8
|
end
|
9
9
|
end
|
@@ -5,8 +5,8 @@ module UserNotification
|
|
5
5
|
module Activist
|
6
6
|
extend ActiveSupport::Concern
|
7
7
|
|
8
|
-
# Loads the {ClassMethods#
|
9
|
-
# as an
|
8
|
+
# Loads the {ClassMethods#acts_as_activist} method for declaring the class
|
9
|
+
# as an acts_as_activist.
|
10
10
|
def self.extended(base)
|
11
11
|
base.extend(ClassMethods)
|
12
12
|
end
|
@@ -17,20 +17,20 @@ module UserNotification
|
|
17
17
|
# Adds ActiveRecord associations to model to simplify fetching
|
18
18
|
# so you can list notifications performed by the owner.
|
19
19
|
# It is completely optional. Any model can be an owner to an notification
|
20
|
-
# even without being an explicit
|
20
|
+
# even without being an explicit acts_as_activist.
|
21
21
|
#
|
22
22
|
# == Usage:
|
23
23
|
# In model:
|
24
24
|
#
|
25
25
|
# class User < ActiveRecord::Base
|
26
26
|
# include UserNotification::Model
|
27
|
-
#
|
27
|
+
# acts_as_activist
|
28
28
|
# end
|
29
29
|
#
|
30
30
|
# In controller:
|
31
31
|
# User.first.notifications
|
32
32
|
#
|
33
|
-
def
|
33
|
+
def acts_as_activist
|
34
34
|
# Association of notifications as their owner.
|
35
35
|
# @!method notifications_as_owner
|
36
36
|
# @return [Array<Notification>] Activities which self is the owner of.
|
@@ -39,7 +39,11 @@ module UserNotification
|
|
39
39
|
# Association of notifications as their recipient.
|
40
40
|
# @!method notifications_as_recipient
|
41
41
|
# @return [Array<Notification>] Activities which self is the recipient of.
|
42
|
-
has_many :notifications_as_recipient, :class_name => "::UserNotification::Notification", :as => :recipient
|
42
|
+
has_many :notifications_as_recipient, :class_name => "::UserNotification::Notification", :as => :recipient do
|
43
|
+
def unread
|
44
|
+
where(read: false)
|
45
|
+
end
|
46
|
+
end
|
43
47
|
end
|
44
48
|
end
|
45
49
|
end
|
@@ -6,9 +6,9 @@ module UserNotification
|
|
6
6
|
# Provides ActiveRecord specific, database-related routines for use by
|
7
7
|
# UserNotification.
|
8
8
|
class Adapter
|
9
|
-
# Creates the notification on `
|
10
|
-
def self.create_notification(
|
11
|
-
|
9
|
+
# Creates the notification on `notifiable` with `options`
|
10
|
+
def self.create_notification(notifiable, options)
|
11
|
+
notifiable.notifications.create options
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
module UserNotification
|
2
2
|
module ORM
|
3
3
|
module ActiveRecord
|
4
|
-
# Implements {UserNotification::
|
5
|
-
# @see UserNotification::
|
6
|
-
module
|
7
|
-
# Creates an association for notifications where self is the *
|
4
|
+
# Implements {UserNotification::Notifiable} for ActiveRecord
|
5
|
+
# @see UserNotification::Notifiable
|
6
|
+
module Notifiable
|
7
|
+
# Creates an association for notifications where self is the *notifiable*
|
8
8
|
# object.
|
9
9
|
def self.extended(base)
|
10
|
-
base.has_many :notifications, :class_name => "::UserNotification::Notification", :as => :
|
10
|
+
base.has_many :notifications, :class_name => "::UserNotification::Notification", :as => :notifiable
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -7,7 +7,7 @@ module UserNotification
|
|
7
7
|
include Renderable
|
8
8
|
|
9
9
|
# Define polymorphic association to the parent
|
10
|
-
belongs_to :
|
10
|
+
belongs_to :notifiable, :polymorphic => true
|
11
11
|
# Define ownership to a resource responsible for this notification
|
12
12
|
belongs_to :owner, :polymorphic => true
|
13
13
|
# Define ownership to a resource targeted by this notification
|
@@ -16,7 +16,7 @@ module UserNotification
|
|
16
16
|
serialize :parameters, Hash
|
17
17
|
|
18
18
|
if ::ActiveRecord::VERSION::MAJOR < 4
|
19
|
-
attr_accessible :key, :owner, :parameters, :recipient, :
|
19
|
+
attr_accessible :key, :owner, :parameters, :recipient, :notifiable
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
@@ -21,7 +21,7 @@ module UserNotification
|
|
21
21
|
# Adds MongoMapper associations to model to simplify fetching
|
22
22
|
# so you can list notifications performed by the owner.
|
23
23
|
# It is completely optional. Any model can be an owner to an notification
|
24
|
-
# even without being an explicit
|
24
|
+
# even without being an explicit acts_as_activist.
|
25
25
|
#
|
26
26
|
# == Usage:
|
27
27
|
# In model:
|
@@ -29,15 +29,19 @@ module UserNotification
|
|
29
29
|
# class User
|
30
30
|
# include MongoMapper::Document
|
31
31
|
# include UserNotification::Model
|
32
|
-
#
|
32
|
+
# acts_as_activist
|
33
33
|
# end
|
34
34
|
#
|
35
35
|
# In controller:
|
36
36
|
# User.first.notifications
|
37
37
|
#
|
38
|
-
def
|
38
|
+
def acts_as_activist
|
39
39
|
many :notifications_as_owner, :class_name => "::UserNotification::Notification", :as => :owner
|
40
|
-
many :notifications_as_recipient, :class_name => "::UserNotification::Notification", :as => :recipient
|
40
|
+
many :notifications_as_recipient, :class_name => "::UserNotification::Notification", :as => :recipient do
|
41
|
+
def unread
|
42
|
+
where(read: false)
|
43
|
+
end
|
44
|
+
end
|
41
45
|
end
|
42
46
|
end
|
43
47
|
end
|
@@ -2,9 +2,9 @@ module UserNotification
|
|
2
2
|
module ORM
|
3
3
|
module MongoMapper
|
4
4
|
class Adapter
|
5
|
-
# Creates the notification on `
|
6
|
-
def self.create_notification(
|
7
|
-
|
5
|
+
# Creates the notification on `notifiable` with `options`
|
6
|
+
def self.create_notification(notifiable, options)
|
7
|
+
notifiable.notifications.create options
|
8
8
|
end
|
9
9
|
end
|
10
10
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module UserNotification
|
2
2
|
module ORM
|
3
3
|
module MongoMapper
|
4
|
-
module
|
4
|
+
module Notifiable
|
5
5
|
def self.extended(base)
|
6
|
-
base.many :notifications, :class_name => "::UserNotification::Notification", order: :created_at.asc, :as => :
|
6
|
+
base.many :notifications, :class_name => "::UserNotification::Notification", order: :created_at.asc, :as => :notifiable
|
7
7
|
end
|
8
8
|
end
|
9
9
|
end
|
@@ -17,7 +17,7 @@ module UserNotification
|
|
17
17
|
end
|
18
18
|
|
19
19
|
# Define polymorphic association to the parent
|
20
|
-
belongs_to :
|
20
|
+
belongs_to :notifiable, polymorphic: true
|
21
21
|
# Define ownership to a resource responsible for this notification
|
22
22
|
belongs_to :owner, polymorphic: true
|
23
23
|
# Define ownership to a resource targeted by this notification
|
@@ -21,22 +21,26 @@ module UserNotification
|
|
21
21
|
# Adds ActiveRecord associations to model to simplify fetching
|
22
22
|
# so you can list notifications performed by the owner.
|
23
23
|
# It is completely optional. Any model can be an owner to an notification
|
24
|
-
# even without being an explicit
|
24
|
+
# even without being an explicit acts_as_activist.
|
25
25
|
#
|
26
26
|
# == Usage:
|
27
27
|
# In model:
|
28
28
|
#
|
29
29
|
# class User < ActiveRecord::Base
|
30
30
|
# include UserNotification::Model
|
31
|
-
#
|
31
|
+
# acts_as_activist
|
32
32
|
# end
|
33
33
|
#
|
34
34
|
# In controller:
|
35
35
|
# User.first.notifications
|
36
36
|
#
|
37
|
-
def
|
37
|
+
def acts_as_activist
|
38
38
|
has_many :notifications_as_owner, :class_name => "::UserNotification::Notification", :inverse_of => :owner
|
39
|
-
has_many :notifications_as_recipient, :class_name => "::UserNotification::Notification", :inverse_of => :recipient
|
39
|
+
has_many :notifications_as_recipient, :class_name => "::UserNotification::Notification", :inverse_of => :recipient do
|
40
|
+
def unread
|
41
|
+
where(read: false)
|
42
|
+
end
|
43
|
+
end
|
40
44
|
end
|
41
45
|
end
|
42
46
|
end
|
@@ -2,9 +2,9 @@ module UserNotification
|
|
2
2
|
module ORM
|
3
3
|
module Mongoid
|
4
4
|
class Adapter
|
5
|
-
# Creates the notification on `
|
6
|
-
def self.create_notification(
|
7
|
-
|
5
|
+
# Creates the notification on `notifiable` with `options`
|
6
|
+
def self.create_notification(notifiable, options)
|
7
|
+
notifiable.notifications.create options
|
8
8
|
end
|
9
9
|
end
|
10
10
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module UserNotification
|
2
2
|
module ORM
|
3
3
|
module Mongoid
|
4
|
-
module
|
4
|
+
module Notifiable
|
5
5
|
def self.extended(base)
|
6
|
-
base.has_many :notifications, :class_name => "::UserNotification::Notification", :as => :
|
6
|
+
base.has_many :notifications, :class_name => "::UserNotification::Notification", :as => :notifiable
|
7
7
|
end
|
8
8
|
end
|
9
9
|
end
|
@@ -12,7 +12,7 @@ module UserNotification
|
|
12
12
|
include Renderable
|
13
13
|
|
14
14
|
# Define polymorphic association to the parent
|
15
|
-
belongs_to :
|
15
|
+
belongs_to :notifiable, polymorphic: true
|
16
16
|
# Define ownership to a resource responsible for this notification
|
17
17
|
belongs_to :owner, polymorphic: true
|
18
18
|
# Define ownership to a resource targeted by this notification
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module UserNotification
|
2
2
|
# Main module extending classes we want to keep track of.
|
3
|
-
module
|
3
|
+
module ActsAsNotifiable
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
# A shortcut method for setting custom key, owner and parameters of {Notification}
|
6
6
|
# in one line. Accepts a hash with 3 keys:
|
@@ -25,7 +25,7 @@ module UserNotification
|
|
25
25
|
# @article.notifications.last.key #=> "my.custom.article.key"
|
26
26
|
# @article.notifications.last.parameters #=> {:title => "New article"}
|
27
27
|
#
|
28
|
-
# @param options [Hash] instance options to set on the
|
28
|
+
# @param options [Hash] instance options to set on the notifiable model
|
29
29
|
# @return [nil]
|
30
30
|
def notification(options = {})
|
31
31
|
rest = options.clone
|
@@ -37,10 +37,10 @@ module UserNotification
|
|
37
37
|
nil
|
38
38
|
end
|
39
39
|
|
40
|
-
# Module with basic +
|
40
|
+
# Module with basic +acts_as_notifiable+ method that enables tracking models.
|
41
41
|
module ClassMethods
|
42
42
|
# Adds required callbacks for creating and updating
|
43
|
-
#
|
43
|
+
# acts_as_notifiable models and adds +notifications+ relation for listing
|
44
44
|
# associated notifications.
|
45
45
|
#
|
46
46
|
# == Parameters:
|
@@ -49,8 +49,8 @@ module UserNotification
|
|
49
49
|
# It can be a Proc, Symbol or an ActiveRecord object:
|
50
50
|
# == Examples:
|
51
51
|
#
|
52
|
-
#
|
53
|
-
#
|
52
|
+
# acts_as_notifiable :owner => :author
|
53
|
+
# acts_as_notifiable :owner => proc {|o| o.author}
|
54
54
|
#
|
55
55
|
# Keep in mind that owner relation is polymorphic, so you can't just
|
56
56
|
# provide id number of the owner object.
|
@@ -59,8 +59,8 @@ module UserNotification
|
|
59
59
|
# It can be a Proc, Symbol, or an ActiveRecord object
|
60
60
|
# == Examples:
|
61
61
|
#
|
62
|
-
#
|
63
|
-
#
|
62
|
+
# acts_as_notifiable :recipient => :author
|
63
|
+
# acts_as_notifiable :recipient => proc {|o| o.author}
|
64
64
|
#
|
65
65
|
# Keep in mind that recipient relation is polymorphic, so you can't just
|
66
66
|
# provide id number of the owner object.
|
@@ -70,7 +70,7 @@ module UserNotification
|
|
70
70
|
# == Example:
|
71
71
|
# class Article < ActiveRecord::Base
|
72
72
|
# include UserNotification::Model
|
73
|
-
#
|
73
|
+
# acts_as_notifiable :params => {
|
74
74
|
# :title => :title,
|
75
75
|
# :author_name => "Michael",
|
76
76
|
# :category_name => proc {|controller, model_instance| model_instance.category.name},
|
@@ -79,7 +79,7 @@ module UserNotification
|
|
79
79
|
# end
|
80
80
|
#
|
81
81
|
# Values in the :params hash can either be an *exact* *value*, a *Proc/Lambda* executed before saving the notification or a *Symbol*
|
82
|
-
# which is a an attribute or a method name executed on the
|
82
|
+
# which is a an attribute or a method name executed on the acts_as_notifiable model's instance.
|
83
83
|
#
|
84
84
|
# Everything specified here has a lower priority than parameters
|
85
85
|
# specified directly in {#notification} method.
|
@@ -95,7 +95,7 @@ module UserNotification
|
|
95
95
|
# * _:update_
|
96
96
|
# * _:destroy_
|
97
97
|
# Selecting one or more of these will make UserNotification create notifications
|
98
|
-
# automatically for the
|
98
|
+
# automatically for the acts_as_notifiable model on selected actions.
|
99
99
|
#
|
100
100
|
# Resulting notifications will have have keys assigned to, respectively:
|
101
101
|
# * _article.create_
|
@@ -123,14 +123,14 @@ module UserNotification
|
|
123
123
|
#
|
124
124
|
# == Example:
|
125
125
|
# # app/models/article.rb
|
126
|
-
#
|
126
|
+
# acts_as_notifiable :on => {:update => proc {|model, controller| model.published? }}
|
127
127
|
#
|
128
128
|
# In the example above, given a model Article with boolean column _published_.
|
129
129
|
# The notifications with key _article.update_ will only be created
|
130
130
|
# if the published status is set to true on that article.
|
131
131
|
# @param opts [Hash] options
|
132
132
|
# @return [nil] options
|
133
|
-
def
|
133
|
+
def acts_as_notifiable(opts = {})
|
134
134
|
options = opts.clone
|
135
135
|
|
136
136
|
all_options = [:create, :update, :destroy]
|
@@ -3,17 +3,17 @@ class CreateNotifications < ActiveRecord::Migration
|
|
3
3
|
# Create table
|
4
4
|
def self.up
|
5
5
|
create_table :notifications do |t|
|
6
|
-
t.belongs_to :
|
6
|
+
t.belongs_to :notifiable, :polymorphic => true
|
7
7
|
t.belongs_to :owner, :polymorphic => true
|
8
8
|
t.string :key
|
9
9
|
t.text :parameters
|
10
10
|
t.belongs_to :recipient, :polymorphic => true
|
11
|
-
t.
|
11
|
+
t.boolean :read, default: false
|
12
12
|
|
13
13
|
t.timestamps
|
14
14
|
end
|
15
15
|
|
16
|
-
add_index :notifications, [:
|
16
|
+
add_index :notifications, [:notifiable_id, :notifiable_type]
|
17
17
|
add_index :notifications, [:owner_id, :owner_type]
|
18
18
|
add_index :notifications, [:recipient_id, :recipient_type]
|
19
19
|
end
|
data/test/test_activist.rb
CHANGED
@@ -3,8 +3,8 @@ require 'test_helper'
|
|
3
3
|
describe UserNotification::Activist do
|
4
4
|
it 'adds owner association' do
|
5
5
|
klass = article
|
6
|
-
klass.must_respond_to :
|
7
|
-
klass.
|
6
|
+
klass.must_respond_to :acts_as_activist
|
7
|
+
klass.acts_as_activist
|
8
8
|
klass.new.must_respond_to :notifications
|
9
9
|
case ENV["PA_ORM"]
|
10
10
|
when "active_record"
|
@@ -28,13 +28,13 @@ describe UserNotification::Activist do
|
|
28
28
|
class ActivistUser < ActiveRecord::Base
|
29
29
|
include UserNotification::Model
|
30
30
|
self.table_name = 'users'
|
31
|
-
|
31
|
+
acts_as_activist
|
32
32
|
end
|
33
33
|
when :mongoid
|
34
34
|
class ActivistUser
|
35
35
|
include Mongoid::Document
|
36
36
|
include UserNotification::Model
|
37
|
-
|
37
|
+
acts_as_activist
|
38
38
|
|
39
39
|
field :name, type: String
|
40
40
|
end
|
@@ -42,7 +42,7 @@ describe UserNotification::Activist do
|
|
42
42
|
class ActivistUser
|
43
43
|
include MongoMapper::Document
|
44
44
|
include UserNotification::Model
|
45
|
-
|
45
|
+
acts_as_activist
|
46
46
|
|
47
47
|
key :name, String
|
48
48
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
describe UserNotification::
|
3
|
+
describe UserNotification::ActsAsNotifiable do
|
4
4
|
describe 'defining instance options' do
|
5
5
|
subject { article.new }
|
6
6
|
let :options do
|
@@ -25,10 +25,10 @@ describe UserNotification::Tracked do
|
|
25
25
|
specify { notification.recipient.must_equal options[:recipient] }
|
26
26
|
end
|
27
27
|
|
28
|
-
it 'can be
|
28
|
+
it 'can be acts_as_notifiable and be an activist at the same time' do
|
29
29
|
case UserNotification.config.orm
|
30
30
|
when :mongoid
|
31
|
-
class
|
31
|
+
class ActivistAndNotifiableArticle
|
32
32
|
include Mongoid::Document
|
33
33
|
include Mongoid::Timestamps
|
34
34
|
include UserNotification::Model
|
@@ -37,11 +37,11 @@ describe UserNotification::Tracked do
|
|
37
37
|
|
38
38
|
field :name, type: String
|
39
39
|
field :published, type: Boolean
|
40
|
-
|
41
|
-
|
40
|
+
acts_as_notifiable
|
41
|
+
acts_as_activist
|
42
42
|
end
|
43
43
|
when :mongo_mapper
|
44
|
-
class
|
44
|
+
class ActivistAndNotifiableArticle
|
45
45
|
include MongoMapper::Document
|
46
46
|
include UserNotification::Model
|
47
47
|
|
@@ -49,16 +49,16 @@ describe UserNotification::Tracked do
|
|
49
49
|
|
50
50
|
key :name, String
|
51
51
|
key :published, Boolean
|
52
|
-
|
53
|
-
|
52
|
+
acts_as_notifiable
|
53
|
+
acts_as_activist
|
54
54
|
timestamps!
|
55
55
|
end
|
56
56
|
when :active_record
|
57
|
-
class
|
57
|
+
class ActivistAndNotifiableArticle < ActiveRecord::Base
|
58
58
|
self.table_name = 'articles'
|
59
59
|
include UserNotification::Model
|
60
|
-
|
61
|
-
|
60
|
+
acts_as_notifiable
|
61
|
+
acts_as_activist
|
62
62
|
|
63
63
|
if ::ActiveRecord::VERSION::MAJOR < 4
|
64
64
|
attr_accessible :name, :published, :user
|
@@ -67,9 +67,9 @@ describe UserNotification::Tracked do
|
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
-
art =
|
70
|
+
art = ActivistAndNotifiableArticle.new
|
71
71
|
art.save
|
72
|
-
art.notifications.last.
|
72
|
+
art.notifications.last.notifiable_id.must_equal art.id
|
73
73
|
art.notifications.last.owner_id.must_equal nil
|
74
74
|
end
|
75
75
|
|
@@ -159,7 +159,7 @@ describe UserNotification::Tracked do
|
|
159
159
|
end
|
160
160
|
end
|
161
161
|
|
162
|
-
describe '#
|
162
|
+
describe '#acts_as_notifiable' do
|
163
163
|
subject { article(options) }
|
164
164
|
let(:options) { {} }
|
165
165
|
|
@@ -175,7 +175,7 @@ describe UserNotification::Tracked do
|
|
175
175
|
|
176
176
|
field :name, type: String
|
177
177
|
field :published, type: Boolean
|
178
|
-
|
178
|
+
acts_as_notifiable :skip_defaults => true
|
179
179
|
end
|
180
180
|
when :mongo_mapper
|
181
181
|
art = Class.new do
|
@@ -186,7 +186,7 @@ describe UserNotification::Tracked do
|
|
186
186
|
|
187
187
|
key :name, String
|
188
188
|
key :published, Boolean
|
189
|
-
|
189
|
+
acts_as_notifiable :skip_defaults => true
|
190
190
|
|
191
191
|
timestamps!
|
192
192
|
end
|
@@ -232,7 +232,7 @@ describe UserNotification::Tracked do
|
|
232
232
|
|
233
233
|
field :name, type: String
|
234
234
|
field :published, type: Boolean
|
235
|
-
|
235
|
+
acts_as_notifiable :except => [:create]
|
236
236
|
end
|
237
237
|
when :mongo_mapper
|
238
238
|
art = Class.new do
|
@@ -243,7 +243,7 @@ describe UserNotification::Tracked do
|
|
243
243
|
|
244
244
|
key :name, String
|
245
245
|
key :published, Boolean
|
246
|
-
|
246
|
+
acts_as_notifiable :except => [:create]
|
247
247
|
|
248
248
|
timestamps!
|
249
249
|
end
|
@@ -269,7 +269,7 @@ describe UserNotification::Tracked do
|
|
269
269
|
field :name, type: String
|
270
270
|
field :published, type: Boolean
|
271
271
|
|
272
|
-
|
272
|
+
acts_as_notifiable :only => [:create, :update]
|
273
273
|
end
|
274
274
|
when :mongo_mapper
|
275
275
|
art = Class.new do
|
@@ -281,7 +281,7 @@ describe UserNotification::Tracked do
|
|
281
281
|
key :name, String
|
282
282
|
key :published, Boolean
|
283
283
|
|
284
|
-
|
284
|
+
acts_as_notifiable :only => [:create, :update]
|
285
285
|
end
|
286
286
|
when :active_record
|
287
287
|
art = article({:only => [:create, :update]})
|
@@ -294,31 +294,31 @@ describe UserNotification::Tracked do
|
|
294
294
|
|
295
295
|
it 'accepts :owner option' do
|
296
296
|
owner = mock('owner')
|
297
|
-
subject.
|
297
|
+
subject.acts_as_notifiable(:owner => owner)
|
298
298
|
subject.notification_owner_global.must_equal owner
|
299
299
|
end
|
300
300
|
|
301
301
|
it 'accepts :params option' do
|
302
302
|
params = {:a => 1}
|
303
|
-
subject.
|
303
|
+
subject.acts_as_notifiable(:params => params)
|
304
304
|
subject.notification_params_global.must_equal params
|
305
305
|
end
|
306
306
|
|
307
307
|
it 'accepts :on option' do
|
308
308
|
on = {:a => lambda{}, :b => proc {}}
|
309
|
-
subject.
|
309
|
+
subject.acts_as_notifiable(:on => on)
|
310
310
|
subject.notification_hooks.must_equal on
|
311
311
|
end
|
312
312
|
|
313
313
|
it 'accepts :on option with string keys' do
|
314
314
|
on = {'a' => lambda {}}
|
315
|
-
subject.
|
315
|
+
subject.acts_as_notifiable(:on => on)
|
316
316
|
subject.notification_hooks.must_equal on.symbolize_keys
|
317
317
|
end
|
318
318
|
|
319
319
|
it 'accepts :on values that are procs' do
|
320
320
|
on = {:unpassable => 1, :proper => lambda {}, :proper_proc => proc {}}
|
321
|
-
subject.
|
321
|
+
subject.acts_as_notifiable(:on => on)
|
322
322
|
subject.notification_hooks.must_include :proper
|
323
323
|
subject.notification_hooks.must_include :proper_proc
|
324
324
|
subject.notification_hooks.wont_include :unpassable
|
@@ -350,7 +350,7 @@ describe UserNotification::Tracked do
|
|
350
350
|
end
|
351
351
|
|
352
352
|
it 'allows hooks to decide if notification should be created' do
|
353
|
-
subject.
|
353
|
+
subject.acts_as_notifiable
|
354
354
|
@article = subject.new(:name => 'Some Name')
|
355
355
|
UserNotification.set_controller(mock('controller'))
|
356
356
|
pf = proc { |model, controller|
|
data/test/test_helper.rb
CHANGED
@@ -30,7 +30,7 @@ when :active_record
|
|
30
30
|
klass = Class.new(ActiveRecord::Base) do
|
31
31
|
self.table_name = 'articles'
|
32
32
|
include UserNotification::Model
|
33
|
-
|
33
|
+
acts_as_notifiable options
|
34
34
|
belongs_to :user
|
35
35
|
|
36
36
|
def self.name
|
@@ -78,7 +78,7 @@ when :mongoid
|
|
78
78
|
def article(options = {})
|
79
79
|
Article.class_eval do
|
80
80
|
set_user_notification_class_defaults
|
81
|
-
|
81
|
+
acts_as_notifiable options
|
82
82
|
end
|
83
83
|
Article
|
84
84
|
end
|
@@ -111,7 +111,7 @@ when :mongo_mapper
|
|
111
111
|
def article(options = {})
|
112
112
|
Article.class_eval do
|
113
113
|
set_user_notification_class_defaults
|
114
|
-
|
114
|
+
acts_as_notifiable options
|
115
115
|
end
|
116
116
|
Article
|
117
117
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: user_notification
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wei Zhu
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-08-
|
13
|
+
date: 2013-08-26 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: actionpack
|
@@ -174,26 +174,26 @@ files:
|
|
174
174
|
- lib/user_notification/config.rb
|
175
175
|
- lib/user_notification/models/activist.rb
|
176
176
|
- lib/user_notification/models/adapter.rb
|
177
|
+
- lib/user_notification/models/notifiable.rb
|
177
178
|
- lib/user_notification/models/notification.rb
|
178
|
-
- lib/user_notification/models/trackable.rb
|
179
179
|
- lib/user_notification/orm/active_record.rb
|
180
180
|
- lib/user_notification/orm/active_record/activist.rb
|
181
181
|
- lib/user_notification/orm/active_record/adapter.rb
|
182
|
+
- lib/user_notification/orm/active_record/notifiable.rb
|
182
183
|
- lib/user_notification/orm/active_record/notification.rb
|
183
|
-
- lib/user_notification/orm/active_record/trackable.rb
|
184
184
|
- lib/user_notification/orm/mongo_mapper.rb
|
185
185
|
- lib/user_notification/orm/mongo_mapper/activist.rb
|
186
186
|
- lib/user_notification/orm/mongo_mapper/adapter.rb
|
187
|
+
- lib/user_notification/orm/mongo_mapper/notifiable.rb
|
187
188
|
- lib/user_notification/orm/mongo_mapper/notification.rb
|
188
|
-
- lib/user_notification/orm/mongo_mapper/trackable.rb
|
189
189
|
- lib/user_notification/orm/mongoid.rb
|
190
190
|
- lib/user_notification/orm/mongoid/activist.rb
|
191
191
|
- lib/user_notification/orm/mongoid/adapter.rb
|
192
|
+
- lib/user_notification/orm/mongoid/notifiable.rb
|
192
193
|
- lib/user_notification/orm/mongoid/notification.rb
|
193
|
-
- lib/user_notification/orm/mongoid/trackable.rb
|
194
194
|
- lib/user_notification/renderable.rb
|
195
|
+
- lib/user_notification/roles/acts_as_notifiable.rb
|
195
196
|
- lib/user_notification/roles/deactivatable.rb
|
196
|
-
- lib/user_notification/roles/tracked.rb
|
197
197
|
- lib/user_notification/utility/store_controller.rb
|
198
198
|
- lib/user_notification/utility/view_helpers.rb
|
199
199
|
- lib/user_notification/version.rb
|
@@ -208,12 +208,12 @@ files:
|
|
208
208
|
- test/mongo_mapper.yml
|
209
209
|
- test/mongoid.yml
|
210
210
|
- test/test_activist.rb
|
211
|
+
- test/test_acts_as_notifiable.rb
|
211
212
|
- test/test_common.rb
|
212
213
|
- test/test_controller_integration.rb
|
213
214
|
- test/test_generators.rb
|
214
215
|
- test/test_helper.rb
|
215
216
|
- test/test_notification.rb
|
216
|
-
- test/test_tracking.rb
|
217
217
|
- test/test_view_helpers.rb
|
218
218
|
- test/views/layouts/_notification.erb
|
219
219
|
- test/views/user_notification/_test.erb
|
@@ -248,12 +248,12 @@ test_files:
|
|
248
248
|
- test/mongo_mapper.yml
|
249
249
|
- test/mongoid.yml
|
250
250
|
- test/test_activist.rb
|
251
|
+
- test/test_acts_as_notifiable.rb
|
251
252
|
- test/test_common.rb
|
252
253
|
- test/test_controller_integration.rb
|
253
254
|
- test/test_generators.rb
|
254
255
|
- test/test_helper.rb
|
255
256
|
- test/test_notification.rb
|
256
|
-
- test/test_tracking.rb
|
257
257
|
- test/test_view_helpers.rb
|
258
258
|
- test/views/layouts/_notification.erb
|
259
259
|
- test/views/user_notification/_test.erb
|