acts_as_notifiable 0.0.6 → 0.0.7

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.
@@ -1,5 +1,12 @@
1
1
  module ActsAsNotifiable
2
2
  def acts_as_notifiable(options={})
3
+ if respond_to?(:class_attribute)
4
+ class_attribute :readable_options
5
+ else
6
+ class_inheritable_accessor :readable_options
7
+ end
8
+ self.readable_options = options
9
+
3
10
  has_many :notifications, as: :notifiable, dependent: :destroy
4
11
 
5
12
  after_create :create_notification
@@ -9,26 +16,27 @@ module ActsAsNotifiable
9
16
  # Find all notifications by type
10
17
  def self.find_all_unnoticed_by(user, type=nil, type_id=nil)
11
18
  @notifications = Notification.where(notifiable_type: self.to_s, user_id: user.id)
12
- self.polymorphic_queries(type, type_id)
19
+ @notifications = self.polymorphic_queries(@notifications, type, type_id)
13
20
  @notifications
14
21
  end
15
22
 
16
23
  # Mark all notifications noticed by type
17
24
  def self.mark_all_noticed_by(user, type=nil, type_id=nil)
18
25
  @notifications = Notification.where(user_id: user.id, notifiable_type: self.to_s)
19
- self.polymorphic_queries(type, type_id)
26
+ @notifications = self.polymorphic_queries(@notifications, type, type_id)
20
27
  @notifications.destroy_all
21
28
  end
22
29
 
23
30
  private
24
31
 
25
- def self.polymorphic_queries(type, type_id)
26
- if type
27
- @notifications = @notifications.where(polymorphic_type: type)
28
- @notifications = @notifications.where(polymorphic_id: type_id) if type_id
29
- else
30
- @notifications = @notifications.where(polymorphic_type: nil)
31
- end
32
+ def self.polymorphic_queries(notifications, type, type_id)
33
+ notifications = notifications.where(polymorphic_type: type)
34
+ notifications = notifications.where(polymorphic_id: type_id) if type_id
35
+ notifications
36
+ end
37
+
38
+ def self.polymorphic?
39
+ self.readable_options[:polymorphic] == true
32
40
  end
33
41
 
34
42
  include NotifiableInstanceMethods
@@ -38,32 +46,34 @@ module ActsAsNotifiable
38
46
  # Check if the notifiable object has been read by the user (no Notification will exist)
39
47
  def unnoticed_by?(user, type=nil, type_id=nil)
40
48
  @notifications = Notification.where(notifiable_id: self.id, notifiable_type: self.class.to_s, user_id: user.id)
41
- self.class.polymorphic_queries(type, type_id)
49
+ @notifications = self.class.polymorphic_queries(@notifications, type, type_id)
42
50
  !@notifications.empty?
43
51
  end
44
52
 
45
53
  # mark the notifiable object as read (remove the Notification)
46
54
  def mark_as_noticed_by(user, type=nil, type_id=nil)
47
55
  @notifications = Notification.where(notifiable_id: self.id, notifiable_type: self.class.to_s, user_id: user.id)
48
- self.class.polymorphic_queries(type, type_id)
56
+ @notifications = self.class.polymorphic_queries(@notifications, type, type_id)
49
57
  @notifications.first.destroy if self.unnoticed_by?(user, type, type_id)
50
58
  end
51
59
 
52
60
  # Callback method to create the notification
53
61
  def create_notification
54
- # if options[:polymorphic] == true
55
- # t = create_polymorphic_sender
56
- # Notification.send(t)
57
- # else
62
+ if self.class.polymorphic?
63
+ polymorphic_array = polymorphic_sender
64
+ Notification.find_or_create_by_user_id_and_notifiable_id_and_notifiable_type_and_polymorphic_type_and_polymorphic_id(self.user_id, self.id, self.class.to_s, polymorphic_array[0], polymorphic_array[1])
65
+ else
58
66
  Notification.find_or_create_by_user_id_and_notifiable_id_and_notifiable_type(self.user_id, self.id, self.class.to_s)
59
- # end
67
+ end
60
68
  end
61
69
 
62
- def create_polymorphic_sender
63
- type = ""
64
- self.notifiable.attributes.each{|a| type = a[0] if a[0] =~ /ble_type/ }
65
- type = self.notifiable.send(type)
66
- "find_or_create_by_user_id_and_notifiable_id_and_notifiable_type_and"
70
+ # Returns class of polymorphic association and id of the association in a array
71
+ def polymorphic_sender
72
+ attribute_type = ""
73
+ self.attributes.each{|a| attribute_type = a[0] if a[0] =~ /ble_type/ }
74
+ attribute_type = attribute_type.gsub('_type', '')
75
+ polymorphic_parent = self.send(attribute_type)
76
+ [polymorphic_parent.class.to_s, polymorphic_parent.id]
67
77
  end
68
78
  end
69
79
  end
@@ -7,7 +7,7 @@ class Notification < ActiveRecord::Base
7
7
 
8
8
  # Associations
9
9
  belongs_to :notifiable, polymorphic: true
10
- belongs_to :user, counter_cache: true
10
+ belongs_to :user#, counter_cache: true
11
11
 
12
12
  def as_json(options=nil)
13
13
  super(options || {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_notifiable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: