acts_as_notifiable 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: