Module: ActivityNotification::Notifiable

Extended by:
ActiveSupport::Concern
Includes:
ActionDispatch::Routing::PolymorphicRoutes, Association, Common, PolymorphicHelpers
Defined in:
lib/activity_notification/models/concerns/notifiable.rb

Overview

Notifiable implementation included in notifiable model to be notified, like comments or any other user activities.

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Association

belongs_to_composite_xdb_record, belongs_to_polymorphic_xdb_record, filtered_by_association, has_many_composite_xdb_records, has_many_polymorphic_xdb_records, has_many_records, #update

Methods included from Common

#printable_name, #printable_type, #resolve_value, #to_class_name, #to_resource_name, #to_resources_name

Class Method Details

.available_as_notifiable?Boolean

Checks if the model includes notifiable and notifiable methods are available.



45
46
47
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 45

def available_as_notifiable?
  true
end

.set_notifiable_class_defaultsNilClass

Sets default values to notifiable class fields.



51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 51

def set_notifiable_class_defaults
  self._notification_targets                  = {}
  self._notification_group                    = {}
  self._notification_group_expiry_delay       = {}
  self._notifier                              = {}
  self._notification_parameters               = {}
  self._notification_email_allowed            = {}
  self._notifiable_action_cable_allowed       = {}
  self._notifiable_action_cable_api_allowed   = {}
  self._notifiable_path                       = {}
  self._printable_notifiable_name             = {}
  self._optional_targets                      = {}
  nil
end

Instance Method Details

#default_notification_keyString

Returns default key of the notification. This method is able to be overridden. "#Common#to_resource_name.default" is defined as default key.



392
393
394
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 392

def default_notification_key
  "#{to_resource_name}.default"
end

#default_url_optionsHash

Returns default_url_options for polymorphic_path.



38
39
40
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 38

def default_url_options
  Rails.application.routes.default_url_options
end

#generated_notifications_as_notifiableArray<Notificaion>, Mongoid::Criteria<Notificaion>

Has many notification instances for this notifiable. Dependency for these notifications can be overridden from acts_as_notifiable.



18
19
20
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 18

has_many_records :generated_notifications_as_notifiable,
class_name: "::ActivityNotification::Notification",
as: :notifiable

#notifiable_action_cable_allowed?(target, key = nil) ⇒ Boolean

Returns if publishing WebSocket using ActionCable is allowed for the notifiable from configured field or overridden method. This method is able to be overridden.



165
166
167
168
169
170
171
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 165

def notifiable_action_cable_allowed?(target, key = nil)
  resolve_parameter(
    "notifiable_action_cable_allowed_for_#{cast_to_resources_name(target.class)}?",
    _notifiable_action_cable_allowed[cast_to_resources_sym(target.class)],
    ActivityNotification.config.action_cable_enabled,
    target, key)
end

#notifiable_action_cable_api_allowed?(target, key = nil) ⇒ Boolean

Returns if publishing WebSocket API using ActionCable is allowed for the notifiable from configured field or overridden method. This method is able to be overridden.



179
180
181
182
183
184
185
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 179

def notifiable_action_cable_api_allowed?(target, key = nil)
  resolve_parameter(
    "notifiable_action_cable_api_allowed_for_#{cast_to_resources_name(target.class)}?",
    _notifiable_action_cable_api_allowed[cast_to_resources_sym(target.class)],
    ActivityNotification.config.action_cable_api_enabled,
    target, key)
end

#notifiable_path(target_type, key = nil) ⇒ String

Returns notifiable_path to move after opening notification from configured field or overridden method. This method is able to be overridden.



193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 193

def notifiable_path(target_type, key = nil)
  resolved_parameter = resolve_parameter(
    "notifiable_path_for_#{cast_to_resources_name(target_type)}",
    _notifiable_path[cast_to_resources_sym(target_type)],
    nil,
    key)
  unless resolved_parameter
    begin
      resolved_parameter = defined?(super) ? super : polymorphic_path(self)
    rescue NoMethodError, ActionController::UrlGenerationError
      raise NotImplementedError, "You have to implement #{self.class}##{__method__}, "\
                                 "set :notifiable_path in acts_as_notifiable or "\
                                 "set polymorphic_path routing for #{self.class}"
    end
  end
  resolved_parameter
end

#notification_email_allowed?(target, key = nil) ⇒ Boolean

Returns if sending notification email is allowed for the notifiable from configured field or overridden method. This method is able to be overridden.



151
152
153
154
155
156
157
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 151

def notification_email_allowed?(target, key = nil)
  resolve_parameter(
    "notification_email_allowed_for_#{cast_to_resources_name(target.class)}?",
    _notification_email_allowed[cast_to_resources_sym(target.class)],
    ActivityNotification.config.email_enabled,
    target, key)
end

#notification_group(target_type, key = nil) ⇒ Object

Returns group unit of the notifications from configured field or overridden method. This method is able to be overridden.



95
96
97
98
99
100
101
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 95

def notification_group(target_type, key = nil)
  resolve_parameter(
    "notification_group_for_#{cast_to_resources_name(target_type)}",
    _notification_group[cast_to_resources_sym(target_type)],
    nil,
    key)
end

#notification_group_expiry_delay(target_type, key = nil) ⇒ Object

Returns group expiry period of the notifications from configured field or overridden method. This method is able to be overridden.



109
110
111
112
113
114
115
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 109

def notification_group_expiry_delay(target_type, key = nil)
  resolve_parameter(
    "notification_group_expiry_delay_for_#{cast_to_resources_name(target_type)}",
    _notification_group_expiry_delay[cast_to_resources_sym(target_type)],
    nil,
    key)
end

#notification_key_for_tracked_creationString

Returns key of the notification for tracked notifiable creation. This method is able to be overridden. "#Common#to_resource_name.create" is defined as default creation key.



401
402
403
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 401

def notification_key_for_tracked_creation
  "#{to_resource_name}.create"
end

#notification_key_for_tracked_updateString

Returns key of the notification for tracked notifiable update. This method is able to be overridden. "#Common#to_resource_name.update" is defined as default update key.



410
411
412
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 410

def notification_key_for_tracked_update
  "#{to_resource_name}.update"
end

#notification_parameters(target_type, key = nil) ⇒ Hash

Returns additional notification parameters from configured field or overridden method. This method is able to be overridden.



123
124
125
126
127
128
129
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 123

def notification_parameters(target_type, key = nil)
  resolve_parameter(
    "notification_parameters_for_#{cast_to_resources_name(target_type)}",
    _notification_parameters[cast_to_resources_sym(target_type)],
    {},
    key)
end

#notification_targets(target_type, options = {}) ⇒ Array<Notificaion> | ActiveRecord_AssociationRelation<Notificaion>

Returns notification targets from configured field or overridden method. This method is able to be overridden.

Options Hash (options):

  • :key (String) — default: notifiable.default_notification_key

    Key of the notification

  • :parameters (Hash) — default: {}

    Additional parameters of the notifications



75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 75

def notification_targets(target_type, options = {})
  target_typed_method_name = "notification_#{cast_to_resources_name(target_type)}"
  resolved_parameter = resolve_parameter(
    target_typed_method_name,
    _notification_targets[cast_to_resources_sym(target_type)],
    nil,
    options)
  unless resolved_parameter
    raise NotImplementedError, "You have to implement #{self.class}##{target_typed_method_name} "\
                               "or set :targets in acts_as_notifiable"
  end
  resolved_parameter
end

#notifier(target_type, key = nil) ⇒ Object

Returns notifier of the notification from configured field or overridden method. This method is able to be overridden.



137
138
139
140
141
142
143
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 137

def notifier(target_type, key = nil)
  resolve_parameter(
    "notifier_for_#{cast_to_resources_name(target_type)}",
    _notifier[cast_to_resources_sym(target_type)],
    nil,
    key)
end

#notify(target_type, options = {}) ⇒ Array<Notificaion> Also known as: notify_now

Generates notifications to configured targets with notifiable model. This method calls NotificationApi#notify internally with self notifiable instance.

Options Hash (options):

  • :key (String) — default: notifiable.default_notification_key

    Key of the notification

  • :group (Object) — default: nil

    Group unit of the notifications

  • :group_expiry_delay (ActiveSupport::Duration) — default: nil

    Expiry period of a notification group

  • :notifier (Object) — default: nil

    Notifier of the notifications

  • :parameters (Hash) — default: {}

    Additional parameters of the notifications

  • :send_email (Boolean) — default: true

    Whether it sends notification email

  • :send_later (Boolean) — default: true

    Whether it sends notification email asynchronously

  • :publish_optional_targets (Boolean) — default: true

    Whether it publishes notification to optional targets

  • :optional_targets (Hash<String, Hash>) — default: {}

    Options for optional targets, keys are optional target name (:amazon_sns or :slack etc) and values are options

See Also:



280
281
282
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 280

def notify(target_type, options = {})
  Notification.notify(target_type, self, options)
end

#notify_all(targets, options = {}) ⇒ Array<Notificaion> Also known as: notify_all_now

Generates notifications to one target. This method calls NotificationApi#notify_all internally with self notifiable instance.

Options Hash (options):

  • :key (String) — default: notifiable.default_notification_key

    Key of the notification

  • :group (Object) — default: nil

    Group unit of the notifications

  • :group_expiry_delay (ActiveSupport::Duration) — default: nil

    Expiry period of a notification group

  • :notifier (Object) — default: nil

    Notifier of the notifications

  • :parameters (Hash) — default: {}

    Additional parameters of the notifications

  • :send_email (Boolean) — default: true

    Whether it sends notification email

  • :send_later (Boolean) — default: true

    Whether it sends notification email asynchronously

  • :publish_optional_targets (Boolean) — default: true

    Whether it publishes notification to optional targets

  • :optional_targets (Hash<String, Hash>) — default: {}

    Options for optional targets, keys are optional target name (:amazon_sns or :slack etc) and values are options

See Also:



321
322
323
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 321

def notify_all(targets, options = {})
  Notification.notify_all(targets, self, options)
end

#notify_all_later(targets, options = {}) ⇒ Array<Notificaion>

Generates notifications to one target later by ActiveJob queue. This method calls NotificationApi#notify_all_later internally with self notifiable instance.

Options Hash (options):

  • :key (String) — default: notifiable.default_notification_key

    Key of the notification

  • :group (Object) — default: nil

    Group unit of the notifications

  • :group_expiry_delay (ActiveSupport::Duration) — default: nil

    Expiry period of a notification group

  • :notifier (Object) — default: nil

    Notifier of the notifications

  • :parameters (Hash) — default: {}

    Additional parameters of the notifications

  • :send_email (Boolean) — default: true

    Whether it sends notification email

  • :send_later (Boolean) — default: true

    Whether it sends notification email asynchronously

  • :publish_optional_targets (Boolean) — default: true

    Whether it publishes notification to optional targets

  • :optional_targets (Hash<String, Hash>) — default: {}

    Options for optional targets, keys are optional target name (:amazon_sns or :slack etc) and values are options

See Also:



342
343
344
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 342

def notify_all_later(targets, options = {})
  Notification.notify_all_later(targets, self, options)
end

#notify_later(target_type, options = {}) ⇒ Array<Notificaion>

Generates notifications to configured targets with notifiable model later by ActiveJob queue. This method calls NotificationApi#notify_later internally with self notifiable instance.

Options Hash (options):

  • :key (String) — default: notifiable.default_notification_key

    Key of the notification

  • :group (Object) — default: nil

    Group unit of the notifications

  • :group_expiry_delay (ActiveSupport::Duration) — default: nil

    Expiry period of a notification group

  • :notifier (Object) — default: nil

    Notifier of the notifications

  • :parameters (Hash) — default: {}

    Additional parameters of the notifications

  • :send_email (Boolean) — default: true

    Whether it sends notification email

  • :send_later (Boolean) — default: true

    Whether it sends notification email asynchronously

  • :publish_optional_targets (Boolean) — default: true

    Whether it publishes notification to optional targets

  • :optional_targets (Hash<String, Hash>) — default: {}

    Options for optional targets, keys are optional target name (:amazon_sns or :slack etc) and values are options

See Also:



300
301
302
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 300

def notify_later(target_type, options = {})
  Notification.notify_later(target_type, self, options)
end

#notify_later_to(target, options = {}) ⇒ Notification

Generates notifications to one target later by ActiveJob queue. This method calls NotificationApi#notify_later_to internally with self notifiable instance.

Options Hash (options):

  • :key (String) — default: notifiable.default_notification_key

    Key of the notification

  • :group (Object) — default: nil

    Group unit of the notifications

  • :group_expiry_delay (ActiveSupport::Duration) — default: nil

    Expiry period of a notification group

  • :notifier (Object) — default: nil

    Notifier of the notifications

  • :parameters (Hash) — default: {}

    Additional parameters of the notifications

  • :send_email (Boolean) — default: true

    Whether it sends notification email

  • :send_later (Boolean) — default: true

    Whether it sends notification email asynchronously

  • :publish_optional_targets (Boolean) — default: true

    Whether it publishes notification to optional targets

  • :optional_targets (Hash<String, Hash>) — default: {}

    Options for optional targets, keys are optional target name (:amazon_sns or :slack etc) and values are options

See Also:



383
384
385
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 383

def notify_later_to(target, options = {})
  Notification.notify_later_to(target, self, options)
end

#notify_to(target, options = {}) ⇒ Notification Also known as: notify_now_to

Generates notifications to one target. This method calls NotificationApi#notify_to internally with self notifiable instance.

Options Hash (options):

  • :key (String) — default: notifiable.default_notification_key

    Key of the notification

  • :group (Object) — default: nil

    Group unit of the notifications

  • :group_expiry_delay (ActiveSupport::Duration) — default: nil

    Expiry period of a notification group

  • :notifier (Object) — default: nil

    Notifier of the notifications

  • :parameters (Hash) — default: {}

    Additional parameters of the notifications

  • :send_email (Boolean) — default: true

    Whether it sends notification email

  • :send_later (Boolean) — default: true

    Whether it sends notification email asynchronously

  • :publish_optional_targets (Boolean) — default: true

    Whether it publishes notification to optional targets

  • :optional_targets (Hash<String, Hash>) — default: {}

    Options for optional targets, keys are optional target name (:amazon_sns or :slack etc) and values are options

See Also:



362
363
364
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 362

def notify_to(target, options = {})
  Notification.notify_to(target, self, options)
end

#optional_target_names(target_type, key = nil) ⇒ Array<Symbol>

Returns optional_target names of the notification from configured field or overridden method. This method is able to be overridden.



241
242
243
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 241

def optional_target_names(target_type, key = nil)
  optional_targets(target_type, key).map { |optional_target| optional_target.to_optional_target_name }
end

#optional_targets(target_type, key = nil) ⇒ Array<ActivityNotification::OptionalTarget::Base>

Returns optional_targets of the notification from configured field or overridden method. This method is able to be overridden.



227
228
229
230
231
232
233
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 227

def optional_targets(target_type, key = nil)
  resolve_parameter(
    "optional_targets_for_#{cast_to_resources_name(target_type)}",
    _optional_targets[cast_to_resources_sym(target_type)],
    [],
    key)
end

#printable_notifiable_name(target, key = nil) ⇒ String

Returns printable notifiable model name to show in view or email.



213
214
215
216
217
218
219
# File 'lib/activity_notification/models/concerns/notifiable.rb', line 213

def printable_notifiable_name(target, key = nil)
  resolve_parameter(
    "printable_notifiable_name_for_#{cast_to_resources_name(target.class)}?",
    _printable_notifiable_name[cast_to_resources_sym(target.class)],
    printable_name,
    target, key)
end