activity_notification 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- 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
|