activity_notification 0.0.8 → 0.0.9
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/Gemfile.lock +11 -1
- data/README.md +63 -28
- data/activity_notification.gemspec +4 -2
- data/app/controllers/activity_notification/notifications_controller.rb +1 -1
- data/app/controllers/activity_notification/notifications_with_devise_controller.rb +10 -10
- data/app/views/activity_notification/notifications/default/_index.html.erb +9 -4
- data/lib/activity_notification.rb +7 -6
- data/lib/activity_notification/apis/notification_api.rb +14 -15
- data/lib/activity_notification/common.rb +15 -7
- data/lib/activity_notification/config.rb +2 -0
- data/lib/activity_notification/helpers/view_helpers.rb +5 -4
- data/lib/activity_notification/mailers/helpers.rb +9 -9
- data/lib/activity_notification/models.rb +16 -0
- data/lib/activity_notification/models/{notifiable.rb → concerns/notifiable.rb} +15 -10
- data/lib/activity_notification/models/{notifier.rb → concerns/notifier.rb} +6 -0
- data/lib/activity_notification/models/{target.rb → concerns/target.rb} +34 -17
- data/lib/activity_notification/renderable.rb +2 -1
- data/lib/activity_notification/roles/acts_as_notifiable.rb +38 -23
- data/lib/activity_notification/roles/acts_as_notifier.rb +11 -0
- data/lib/activity_notification/roles/acts_as_target.rb +9 -18
- data/lib/activity_notification/version.rb +1 -1
- data/lib/generators/activity_notification/{migration → active_record}/migration_generator.rb +5 -4
- data/lib/generators/activity_notification/controllers_generator.rb +1 -1
- data/lib/generators/activity_notification/install_generator.rb +3 -6
- data/lib/generators/activity_notification/{notification → models}/notification_generator.rb +5 -4
- data/lib/generators/activity_notification/views_generator.rb +20 -22
- data/lib/generators/templates/active_record/migration.rb +1 -1
- data/lib/generators/templates/activity_notification.rb +13 -3
- data/{config → lib/generators/templates}/locales/en.yml +0 -0
- data/lib/generators/templates/notification/notification.rb +4 -1
- data/spec/concerns/{notification_api_spec.rb → apis/notification_api_spec.rb} +169 -45
- data/spec/concerns/common_spec.rb +150 -0
- data/spec/concerns/models/notifiable_spec.rb +435 -0
- data/spec/concerns/models/notifier_spec.rb +23 -0
- data/spec/concerns/models/target_spec.rb +579 -0
- data/spec/concerns/renderable_spec.rb +110 -0
- data/spec/controllers/notifications_controller_shared_examples.rb +457 -0
- data/spec/controllers/notifications_controller_spec.rb +12 -0
- data/spec/controllers/notifications_with_devise_controller_spec.rb +81 -0
- data/spec/factories/admins.rb +5 -0
- data/spec/factories/articles.rb +1 -1
- data/spec/factories/comments.rb +1 -1
- data/spec/factories/dummy/dummy_notifiable.rb +4 -0
- data/spec/factories/dummy/dummy_notifier.rb +4 -0
- data/spec/factories/dummy/dummy_target.rb +4 -0
- data/spec/factories/notifications.rb +1 -1
- data/spec/factories/users.rb +7 -1
- data/spec/generators/active_record/migration_generator_spec.rb +41 -0
- data/spec/generators/controllers_generator_spec.rb +62 -0
- data/spec/generators/install_generator_spec.rb +43 -0
- data/spec/generators/models/notification_generator_spec.rb +41 -0
- data/spec/generators/views_generator_spec.rb +111 -0
- data/spec/helpers/polymorphic_helpers_spec.rb +89 -0
- data/spec/helpers/view_helpers_spec.rb +258 -0
- data/spec/mailers/mailer_spec.rb +98 -0
- data/spec/models/dummy/dummy_notifiable_spec.rb +6 -0
- data/spec/models/dummy/dummy_notifier_spec.rb +6 -0
- data/spec/models/dummy/dummy_target_spec.rb +6 -0
- data/spec/models/notification_spec.rb +5 -4
- data/spec/rails_app/app/assets/javascripts/application.js +2 -0
- data/spec/rails_app/app/controllers/articles_controller.rb +62 -0
- data/spec/rails_app/app/controllers/comments_controller.rb +34 -0
- data/spec/rails_app/app/models/admin.rb +8 -0
- data/spec/rails_app/app/models/article.rb +6 -6
- data/spec/rails_app/app/models/comment.rb +2 -2
- data/spec/rails_app/app/models/dummy/dummy_base.rb +2 -0
- data/spec/rails_app/app/models/dummy/dummy_notifiable.rb +4 -0
- data/spec/rails_app/app/models/dummy/dummy_notifier.rb +4 -0
- data/spec/rails_app/app/models/dummy/dummy_target.rb +4 -0
- data/spec/rails_app/app/models/user.rb +5 -5
- data/spec/rails_app/app/views/activity_notification/notifications/default/custom/_path_test.html.erb +1 -0
- data/spec/rails_app/app/views/activity_notification/notifications/default/custom/_test.html.erb +1 -0
- data/spec/rails_app/app/views/activity_notification/notifications/users/_custom_index.html.erb +1 -0
- data/spec/rails_app/app/views/activity_notification/notifications/users/custom/_test.html.erb +1 -0
- data/spec/rails_app/app/views/articles/_form.html.erb +20 -0
- data/spec/rails_app/app/views/articles/edit.html.erb +6 -0
- data/spec/rails_app/app/views/articles/index.html.erb +67 -0
- data/spec/rails_app/app/views/articles/new.html.erb +5 -0
- data/spec/rails_app/app/views/articles/show.html.erb +38 -0
- data/spec/rails_app/app/views/layouts/_header.html.erb +8 -0
- data/spec/rails_app/app/views/layouts/application.html.erb +3 -4
- data/spec/rails_app/config/initializers/activity_notification.rb +13 -3
- data/spec/rails_app/config/initializers/devise.rb +274 -274
- data/spec/rails_app/config/locales/activity_notification.en.yml +20 -0
- data/spec/rails_app/config/locales/devise.en.yml +62 -0
- data/spec/rails_app/config/routes.rb +6 -2
- data/spec/rails_app/db/migrate/20160715050433_create_test_tables.rb +6 -2
- data/spec/rails_app/db/schema.rb +8 -0
- data/spec/rails_app/db/seeds.rb +43 -0
- data/spec/roles/acts_as_notifiable_spec.rb +32 -0
- data/spec/roles/acts_as_notifier_spec.rb +17 -0
- data/spec/roles/acts_as_target_spec.rb +40 -0
- data/spec/spec_helper.rb +18 -14
- metadata +136 -12
@@ -3,6 +3,7 @@ module ActivityNotification
|
|
3
3
|
class Config
|
4
4
|
attr_accessor :enabled,
|
5
5
|
:table_name,
|
6
|
+
:email_enabled,
|
6
7
|
:mailer_sender,
|
7
8
|
:mailer,
|
8
9
|
:parent_mailer,
|
@@ -12,6 +13,7 @@ module ActivityNotification
|
|
12
13
|
def initialize
|
13
14
|
@enabled = true
|
14
15
|
@table_name = "notifications"
|
16
|
+
@email_enabled = false
|
15
17
|
@mailer_sender = nil
|
16
18
|
@mailer = "ActivityNotification::Mailer"
|
17
19
|
@parent_mailer = 'ActionMailer::Base'
|
@@ -41,11 +41,12 @@ module ActivityNotification
|
|
41
41
|
|
42
42
|
if notification_index.present?
|
43
43
|
content_for :notification_index do
|
44
|
+
@target = target
|
44
45
|
begin
|
45
|
-
|
46
|
-
rescue ActionView::MissingTemplate
|
46
|
+
render_notification notification_index, notification_options
|
47
|
+
rescue ActionView::MissingTemplate
|
47
48
|
notification_options.delete(:target)
|
48
|
-
|
49
|
+
render_notification notification_index, notification_options
|
49
50
|
end
|
50
51
|
end
|
51
52
|
end
|
@@ -53,7 +54,7 @@ module ActivityNotification
|
|
53
54
|
# Render partial index
|
54
55
|
begin
|
55
56
|
render options.merge(partial: partial, layout: layout, locals: locals)
|
56
|
-
rescue ActionView::MissingTemplate
|
57
|
+
rescue ActionView::MissingTemplate
|
57
58
|
partial_root = "activity_notification/notifications/default"
|
58
59
|
partial = select_path(partial_path, partial_root)
|
59
60
|
render options.merge(partial: partial, layout: layout, locals: locals)
|
@@ -11,7 +11,7 @@ module ActivityNotification
|
|
11
11
|
headers = headers_for(notification.key, options)
|
12
12
|
begin
|
13
13
|
mail headers
|
14
|
-
rescue ActionView::MissingTemplate
|
14
|
+
rescue ActionView::MissingTemplate
|
15
15
|
mail headers.merge(template_name: 'default')
|
16
16
|
end
|
17
17
|
end
|
@@ -28,8 +28,8 @@ module ActivityNotification
|
|
28
28
|
headers = {
|
29
29
|
subject: subject_for(key),
|
30
30
|
to: mailer_to(@target),
|
31
|
-
from:
|
32
|
-
reply_to: mailer_reply_to(@
|
31
|
+
from: mailer_from(@notification),
|
32
|
+
reply_to: mailer_reply_to(@notification),
|
33
33
|
template_path: template_paths,
|
34
34
|
template_name: template_name(key)
|
35
35
|
}.merge(options)
|
@@ -42,20 +42,20 @@ module ActivityNotification
|
|
42
42
|
target.mailer_to
|
43
43
|
end
|
44
44
|
|
45
|
-
def mailer_reply_to(
|
46
|
-
mailer_sender(
|
45
|
+
def mailer_reply_to(notification)
|
46
|
+
mailer_sender(notification, :reply_to)
|
47
47
|
end
|
48
48
|
|
49
|
-
def mailer_from(
|
50
|
-
mailer_sender(
|
49
|
+
def mailer_from(notification)
|
50
|
+
mailer_sender(notification, :from)
|
51
51
|
end
|
52
52
|
|
53
|
-
def mailer_sender(
|
53
|
+
def mailer_sender(notification, sender = :from)
|
54
54
|
default_sender = default_params[sender]
|
55
55
|
if default_sender.present?
|
56
56
|
default_sender.respond_to?(:to_proc) ? instance_eval(&default_sender) : default_sender
|
57
57
|
elsif ActivityNotification.config.mailer_sender.is_a?(Proc)
|
58
|
-
ActivityNotification.config.mailer_sender.call(
|
58
|
+
ActivityNotification.config.mailer_sender.call(notification)
|
59
59
|
else
|
60
60
|
ActivityNotification.config.mailer_sender
|
61
61
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'activity_notification/roles/acts_as_target'
|
2
|
+
require 'activity_notification/roles/acts_as_notifiable'
|
3
|
+
require 'activity_notification/roles/acts_as_notifier'
|
4
|
+
|
5
|
+
module ActivityNotification
|
6
|
+
module Models
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
included do
|
9
|
+
include ActivityNotification::ActsAsTarget
|
10
|
+
include ActivityNotification::ActsAsNotifiable
|
11
|
+
include ActivityNotification::ActsAsNotifier
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
ActiveRecord::Base.class_eval { include ActivityNotification::Models }
|
@@ -4,7 +4,6 @@ module ActivityNotification
|
|
4
4
|
|
5
5
|
included do
|
6
6
|
include Common
|
7
|
-
include ActsAsNotifiable
|
8
7
|
include ActionDispatch::Routing::PolymorphicRoutes
|
9
8
|
include Rails.application.routes.url_helpers
|
10
9
|
class_attribute :_notification_targets,
|
@@ -21,6 +20,10 @@ module ActivityNotification
|
|
21
20
|
end
|
22
21
|
|
23
22
|
class_methods do
|
23
|
+
def available_as_notifiable?
|
24
|
+
true
|
25
|
+
end
|
26
|
+
|
24
27
|
def set_notifiable_class_defaults
|
25
28
|
self._notification_targets = {}
|
26
29
|
self._notification_group = {}
|
@@ -55,7 +58,7 @@ module ActivityNotification
|
|
55
58
|
if respond_to?(target_typed_method_name)
|
56
59
|
send(target_typed_method_name, key)
|
57
60
|
else
|
58
|
-
resolve_value(_notification_group[plural_target_type_sym])
|
61
|
+
resolve_value(_notification_group[plural_target_type_sym], key)
|
59
62
|
end
|
60
63
|
end
|
61
64
|
|
@@ -77,16 +80,20 @@ module ActivityNotification
|
|
77
80
|
if respond_to?(target_typed_method_name)
|
78
81
|
send(target_typed_method_name, key)
|
79
82
|
else
|
80
|
-
resolve_value(_notifier[plural_target_type_sym])
|
83
|
+
resolve_value(_notifier[plural_target_type_sym], key)
|
81
84
|
end
|
82
85
|
end
|
83
86
|
|
84
87
|
def notification_email_allowed?(target, key)
|
88
|
+
plural_target_type = target.class.to_s.underscore.pluralize
|
85
89
|
plural_target_type_sym = target.to_resources_name.to_sym
|
86
|
-
|
90
|
+
target_typed_method_name = "notification_email_allowed_for_#{plural_target_type}?"
|
91
|
+
if respond_to?(target_typed_method_name)
|
92
|
+
send(target_typed_method_name, target, key)
|
93
|
+
elsif _notification_email_allowed[plural_target_type_sym]
|
87
94
|
resolve_value(_notification_email_allowed[plural_target_type_sym], target, key)
|
88
95
|
else
|
89
|
-
|
96
|
+
ActivityNotification.config.email_enabled
|
90
97
|
end
|
91
98
|
end
|
92
99
|
|
@@ -97,13 +104,11 @@ module ActivityNotification
|
|
97
104
|
if respond_to?(target_typed_method_name)
|
98
105
|
send(target_typed_method_name, key)
|
99
106
|
elsif _notifiable_path[plural_target_type_sym]
|
100
|
-
resolve_value(_notifiable_path[plural_target_type_sym])
|
107
|
+
resolve_value(_notifiable_path[plural_target_type_sym], key)
|
101
108
|
else
|
102
109
|
begin
|
103
110
|
polymorphic_path(self)
|
104
|
-
rescue NoMethodError
|
105
|
-
raise NotImplementedError, "You have to implement #{self.class}##{__method__}, set :notifiable_path in acts_as_notifiable or set polymorphic_path routing for #{self.class}"
|
106
|
-
rescue ActionController::UrlGenerationError => e
|
111
|
+
rescue NoMethodError, ActionController::UrlGenerationError
|
107
112
|
raise NotImplementedError, "You have to implement #{self.class}##{__method__}, set :notifiable_path in acts_as_notifiable or set polymorphic_path routing for #{self.class}"
|
108
113
|
end
|
109
114
|
end
|
@@ -115,7 +120,7 @@ module ActivityNotification
|
|
115
120
|
# TODO docs
|
116
121
|
# overriding_notification_email_key(target, key)
|
117
122
|
|
118
|
-
# Wrapper methods of
|
123
|
+
# Wrapper methods of Notification class methods
|
119
124
|
|
120
125
|
def notify(target_type, options = {})
|
121
126
|
Notification.notify(target_type, self, options)
|
@@ -3,18 +3,22 @@ module ActivityNotification
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
included do
|
5
5
|
include Common
|
6
|
-
include ActsAsTarget
|
7
6
|
has_many :notifications,
|
8
7
|
class_name: "::ActivityNotification::Notification",
|
9
8
|
as: :target
|
10
|
-
class_attribute :_notification_email, :_notification_email_allowed
|
9
|
+
class_attribute :_notification_email, :_notification_email_allowed, :_notification_devise_resource
|
11
10
|
set_target_class_defaults
|
12
11
|
end
|
13
12
|
|
14
13
|
class_methods do
|
14
|
+
def available_as_target?
|
15
|
+
true
|
16
|
+
end
|
17
|
+
|
15
18
|
def set_target_class_defaults
|
16
|
-
self._notification_email
|
17
|
-
self._notification_email_allowed
|
19
|
+
self._notification_email = nil
|
20
|
+
self._notification_email_allowed = ActivityNotification.config.email_enabled
|
21
|
+
self._notification_devise_resource = ->(model) { model }
|
18
22
|
end
|
19
23
|
end
|
20
24
|
|
@@ -26,6 +30,17 @@ module ActivityNotification
|
|
26
30
|
resolve_value(_notification_email_allowed, notifiable, key)
|
27
31
|
end
|
28
32
|
|
33
|
+
def authenticated_with_devise?(current_resource)
|
34
|
+
devise_resource = resolve_value(_notification_devise_resource)
|
35
|
+
unless current_resource.instance_of? devise_resource.class
|
36
|
+
raise TypeError,
|
37
|
+
"Defferent type of current resource #{current_resource.class.to_s} "\
|
38
|
+
"with devise resource #{devise_resource.class.to_s} has been passed to #{self.class}##{__method__}. "\
|
39
|
+
"You have to override #{self.class}##{__method__} method or set devise_resource in acts_as_target."
|
40
|
+
end
|
41
|
+
current_resource == devise_resource
|
42
|
+
end
|
43
|
+
|
29
44
|
def unopened_notification_count
|
30
45
|
unopened_notification_index.count
|
31
46
|
end
|
@@ -57,7 +72,7 @@ module ActivityNotification
|
|
57
72
|
end
|
58
73
|
|
59
74
|
|
60
|
-
# Wrapper methods of
|
75
|
+
# Wrapper methods of Notification class methods
|
61
76
|
|
62
77
|
def notify_to(notifiable, options = {})
|
63
78
|
Notification.notify_to(self, notifiable, options)
|
@@ -67,6 +82,7 @@ module ActivityNotification
|
|
67
82
|
Notification.open_all_of(self, opened_at)
|
68
83
|
end
|
69
84
|
|
85
|
+
|
70
86
|
# Methods to be overriden
|
71
87
|
|
72
88
|
# Typical method to get notifications index
|
@@ -82,22 +98,23 @@ module ActivityNotification
|
|
82
98
|
end
|
83
99
|
|
84
100
|
def unopened_notification_index_with_attributes(limit = nil)
|
85
|
-
|
86
|
-
unopened_notification_index(limit)
|
87
|
-
|
101
|
+
if unopened_notification_index(limit).present?
|
102
|
+
Notification.group_member_exists?(unopened_notification_index(limit)) ?
|
103
|
+
unopened_notification_index(limit).with_target.with_notifiable.with_group.with_notifier :
|
104
|
+
unopened_notification_index(limit).with_target.with_notifiable.with_notifier
|
105
|
+
else
|
106
|
+
notifications.none
|
107
|
+
end
|
88
108
|
end
|
89
109
|
|
90
110
|
def opened_notification_index_with_attributes(limit = ActivityNotification.config.opened_limit)
|
91
|
-
|
92
|
-
opened_notification_index(limit)
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
unless current_resource.instance_of? self.class
|
98
|
-
raise TypeError, "Defferent type of devise resource #{current_resource.class.to_s} has been passed to #{self.class}##{__method__}. You have to override #{self.class}##{__method__} method."
|
111
|
+
if opened_notification_index(limit).present?
|
112
|
+
Notification.group_member_exists?(opened_notification_index(limit)) ?
|
113
|
+
opened_notification_index(limit).with_target.with_notifiable.with_group.with_notifier :
|
114
|
+
opened_notification_index(limit).with_target.with_notifiable.with_notifier
|
115
|
+
else
|
116
|
+
notifications.none
|
99
117
|
end
|
100
|
-
current_resource == self
|
101
118
|
end
|
102
119
|
|
103
120
|
end
|
@@ -13,9 +13,10 @@ module ActivityNotification
|
|
13
13
|
else
|
14
14
|
k.insert(1, target.to_resource_name)
|
15
15
|
end
|
16
|
+
k.push('text')
|
16
17
|
k = k.join('.')
|
17
18
|
|
18
|
-
I18n.t(k, parameters.merge(params) || {})
|
19
|
+
I18n.t(k, (parameters.merge(params) || {}).merge(group_member_count: group_member_count))
|
19
20
|
end
|
20
21
|
|
21
22
|
# Renders notification from views.
|
@@ -3,35 +3,50 @@ module ActivityNotification
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
class_methods do
|
6
|
-
# Adds required callbacks for creating and updating
|
7
|
-
# notifiable models.
|
6
|
+
# Adds required callbacks for creating and updating notifiable models.
|
8
7
|
#
|
9
8
|
# == Parameters:
|
10
|
-
# [:targets]
|
11
|
-
#
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
9
|
+
# [:targets, :group, :notifier, :parameters, :email_allowed, :notifiable_path]
|
10
|
+
# targets: Targets to send notification. It it set as ActiveRecord records or array of models.
|
11
|
+
# This is a only necessary option. If you do not specify this option, you have to override
|
12
|
+
# notification_targets or notification_[plural target type] (e.g. notification_users) method.
|
13
|
+
#
|
14
|
+
# group: Group unit of notifications. Notifications will be bundled by this group (and target, notifiable_type, key).
|
15
|
+
# This parameter is a optional.
|
16
|
+
#
|
17
|
+
# notifier: Notifier of the notification.This will be stored as notifier with notification record.
|
18
|
+
# This parameter is a optional.
|
19
|
+
#
|
20
|
+
# parameters: Parameter to add notification data. This will be stored as parameters with notification record.
|
21
|
+
# This parameter is a optional.
|
22
|
+
#
|
23
|
+
# email_allowed: If activity_notification sends notification email to these targets.
|
24
|
+
# Specified method or symbol is expected to return true (not nil) or false (nil).
|
25
|
+
# This parameter is a optional since default value is false.
|
26
|
+
# To use notification email, email_allowed option must return true (not nil) in both of notifiable and target model.
|
27
|
+
# This can be also configured default option in initializer.
|
28
|
+
#
|
29
|
+
# notifiable_path: Path to redirect from open or move action of notification controller.
|
30
|
+
# You can use this notifiable_path as notifiable link in notification view.
|
31
|
+
# This parameter is a optional since polymorphic_path is used as default value.
|
32
|
+
def acts_as_notifiable(target_type, options = {})
|
33
|
+
include Notifiable
|
34
|
+
(
|
35
|
+
[:targets, :group, :parameters, :email_allowed].map { |key|
|
36
|
+
options[key] ?
|
37
|
+
[key, self.send("_notification_#{key}".to_sym).store(target_type.to_sym, options.delete(key))] :
|
38
|
+
[nil, nil]
|
39
|
+
}.to_h.merge [:notifier, :notifiable_path].map { |key|
|
40
|
+
options[key] ?
|
41
|
+
[key, self.send("_#{key}".to_sym).store(target_type.to_sym, options.delete(key))] :
|
42
|
+
[nil, nil]
|
43
|
+
}.to_h
|
44
|
+
).delete_if { |k, v| k.nil? }
|
16
45
|
end
|
17
46
|
|
18
|
-
def
|
47
|
+
def available_notifiable_options
|
19
48
|
[:targets, :group, :notifier, :parameters, :email_allowed, :notifiable_path].freeze
|
20
49
|
end
|
21
|
-
|
22
|
-
def assign_globals(target_type, options)
|
23
|
-
[:targets, :group, :parameters, :email_allowed].each do |key|
|
24
|
-
if options[key]
|
25
|
-
self.send("_notification_#{key}".to_sym).store(target_type.to_sym, options.delete(key))
|
26
|
-
end
|
27
|
-
end
|
28
|
-
[:notifier, :notifiable_path].each do |key|
|
29
|
-
if options[key]
|
30
|
-
self.send("_#{key}".to_sym).store(target_type.to_sym, options.delete(key))
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
50
|
end
|
36
51
|
end
|
37
52
|
end
|
@@ -3,27 +3,18 @@ module ActivityNotification
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
class_methods do
|
6
|
-
def acts_as_target(
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
nil
|
6
|
+
def acts_as_target(options = {})
|
7
|
+
include Target
|
8
|
+
available_target_options.map { |key|
|
9
|
+
options[key] ?
|
10
|
+
[key, self.send("_notification_#{key}=".to_sym, options.delete(key))] :
|
11
|
+
[nil, nil]
|
12
|
+
}.to_h.delete_if { |k, v| k.nil? }
|
14
13
|
end
|
15
14
|
alias_method :acts_as_notification_target, :acts_as_target
|
16
15
|
|
17
|
-
def
|
18
|
-
[:
|
19
|
-
end
|
20
|
-
|
21
|
-
def assign_globals(options)
|
22
|
-
[:email, :email_allowed].each do |key|
|
23
|
-
if options[key]
|
24
|
-
self.send("_notification_#{key}=".to_sym, options.delete(key))
|
25
|
-
end
|
26
|
-
end
|
16
|
+
def available_target_options
|
17
|
+
[:email, :email_allowed, :devise_resource].freeze
|
27
18
|
end
|
28
19
|
end
|
29
20
|
end
|
data/lib/generators/activity_notification/{migration → active_record}/migration_generator.rb
RENAMED
@@ -6,11 +6,12 @@ module ActivityNotification
|
|
6
6
|
class MigrationGenerator < ActiveRecord::Generators::Base
|
7
7
|
source_root File.expand_path("../../../templates/active_record", __FILE__)
|
8
8
|
|
9
|
-
argument :name, type: :string, default: '
|
9
|
+
argument :name, type: :string, default: 'CreateNotifications'
|
10
10
|
|
11
|
-
# Create migration in
|
12
|
-
def
|
13
|
-
|
11
|
+
# Create migration files in application directory
|
12
|
+
def create_migrations
|
13
|
+
@migration_name = name
|
14
|
+
migration_template 'migration.rb', "db/migrate/#{name.underscore}.rb"
|
14
15
|
end
|
15
16
|
end
|
16
17
|
end
|