acts_as_readable 2.1.0 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 16e3538346fdcbac00fb9006e4ce67e7e39eafb5
4
- data.tar.gz: 1516dc9da9ccc137e7224f1c36064a07b7e5f427
3
+ metadata.gz: 3d8d2b78dd717f7f730d3421f544bd3ee2364e27
4
+ data.tar.gz: 09ffc7e7cfd1ef5107a0dc42c36fc9c39ac99c6c
5
5
  SHA512:
6
- metadata.gz: c9df46bdaffac4f1b4c2d1e80e7beb989d2dea722f2f1a57747dfc190d455cd7932eb4426c1d7769bd1a6e2ce4b43295157f116b66fe2bb5ce90eb23460c380e
7
- data.tar.gz: 844f36b301c376382a10740871538c13b809c418ddd2f68fdadcfb4941765a099111af4a48058db85f6c367386b92cfa41d5ab02c8508a5da18d7fd837eff09f
6
+ metadata.gz: cc2801ab538a63cfc9840465eb850b1e894f9692d4a8606fb0f7001c1d557b79208469d90535d98439393dd6c6f3922917a19dedf5d3ce5c00ce387c96373f5b
7
+ data.tar.gz: 420399273b939da92a3f93375a4ccf7eb57b2a0829928f57903d0d92dd6961a3f0ae70fa873dc99bc5ca463c8e5b0a8704ee098041336d0c7317f73b7cfa9173
@@ -1,5 +1,5 @@
1
1
  module ActsAsReadable
2
- module ActMethod
2
+ module ActMethod
3
3
  # OPTIONS
4
4
  # :cache => the name under which to cache timestamps for a "mark all as read" action to avoid the need to actually create readings for each record marked as read
5
5
  def acts_as_readable(options = {})
@@ -21,12 +21,18 @@ module ActsAsReadable
21
21
 
22
22
  module HelperMethods
23
23
  def self.read_conditions(readable_class, user)
24
- ["(readable_type IS NULL AND COALESCE(#{readable_class.table_name}.updated_at < ?, TRUE)) OR (readable_type IS NOT NULL AND COALESCE(readings.updated_at < ?, TRUE)) OR (readings.state = 'read')", all_read_at(readable_class, user), all_read_at(readable_class, user)]
24
+ ["(readable_type IS NULL AND COALESCE(#{readable_class.table_name}.updated_at < :all_read_at, :true))
25
+ OR (readable_type IS NOT NULL AND COALESCE(readings.updated_at < :all_read_at, :true))
26
+ OR (readings.state = 'read')",
27
+ :all_read_at => all_read_at(readable_class, user), :true => true]
25
28
  end
26
29
 
27
30
  def self.unread_conditions(readable_class, user)
28
31
  # IF there is no reading and it has been updated since we last read all OR there is an unreading and we haven't read all since then
29
- ["(readable_type IS NULL AND COALESCE(#{readable_class.table_name}.updated_at > ?, TRUE)) OR (readings.state = 'unread' AND COALESCE(readings.updated_at > ?, TRUE))", all_read_at(readable_class, user), all_read_at(readable_class, user)]
32
+ ["(readings.state IS NULL AND COALESCE(#{readable_class.table_name}.updated_at > :all_read_at, :true))
33
+ OR (readings.state = 'unread' AND COALESCE(readings.updated_at > :all_read_at, :true))
34
+ OR (readings.state = 'read' AND COALESCE(#{readable_class.table_name}.updated_at > readings.updated_at, :true))",
35
+ :all_read_at => all_read_at(readable_class, user), :true => true]
30
36
  end
31
37
 
32
38
  def self.all_read_at(readable_class, user)
@@ -35,7 +41,7 @@ module ActsAsReadable
35
41
 
36
42
  def self.outer_join_readings(scope, user)
37
43
  scope.joins("LEFT OUTER JOIN readings ON readings.readable_type = '#{scope.model.name}' AND readings.readable_id = #{scope.model.table_name}.id AND readings.user_id = #{user.id}")
38
- end
44
+ end
39
45
  end
40
46
 
41
47
  module ClassMethods
@@ -8,117 +8,134 @@ describe 'acts_as_readable' do
8
8
  end
9
9
 
10
10
  describe "the unread scope" do
11
+ it "should not return records explicitly marked as read" do
12
+ @comment.read_by! @user
13
+ expect( Comment.unread_by(@user) ).not_to include(@comment)
14
+ end
15
+
11
16
  it "should return records without readings if the user hasn't 'read all'" do
12
- Comment.unread_by(@user).exists?(@comment).should be_true
17
+ expect( Comment.unread_by(@user) ).to include(@comment)
13
18
  end
14
19
 
15
20
  it "should return records explicitly marked as unread if the user hasn't 'read all'" do
16
21
  @comment.unread_by! @user
17
- Comment.unread_by(@user).exists?(@comment).should be_true
22
+ expect( Comment.unread_by(@user) ).to include(@comment)
18
23
  end
19
24
 
20
25
  it "should return records explicitly marked as unread if the user has 'read all' before the record was marked unread" do
21
26
  Comment.read_by! @user
22
27
  @comment.unread_by! @user
23
- Comment.unread_by(@user).exists?(@comment).should be_true
28
+ expect( Comment.unread_by(@user) ).to include(@comment)
24
29
  end
25
30
 
26
31
  it "should not return records explicitly marked as unread if the user has 'read all' after the record was marked unread" do
27
32
  @comment.unread_by! @user
28
33
  Comment.read_by! @user
29
- Comment.unread_by(@user).exists?(@comment).should be_false
34
+ expect( Comment.unread_by(@user) ).not_to include(@comment)
35
+ end
36
+
37
+ it "should return records that have been updated since they were last read" do
38
+ @comment.read_by! @user
39
+ @comment.touch
40
+ expect( Comment.unread_by(@user) ).to include(@comment)
41
+ end
42
+
43
+ it "should return records that have been updated since they were last unread" do
44
+ @comment.unread_by! @user
45
+ @comment.touch
46
+ expect( Comment.unread_by(@user) ).to include(@comment)
30
47
  end
31
48
  end
32
49
 
33
50
  describe "the read scope" do
34
51
  it "should return records without readings if the user has 'read all' since the last time the record was updated" do
35
52
  Comment.read_by! @user
36
- Comment.read_by(@user).exists?(@comment).should be_true
53
+ expect( Comment.read_by(@user) ).to include(@comment)
37
54
  end
38
55
 
39
56
  it "should return records explicitly marked as read if the user hasn't 'read all'" do
40
57
  @comment.read_by! @user
41
- Comment.read_by(@user).exists?(@comment).should be_true
58
+ expect( Comment.read_by(@user) ).to include(@comment)
42
59
  end
43
60
 
44
61
  it "should return records explicitly marked as read if the user has 'read all' before the record was marked unread" do
45
62
  Comment.read_by! @user
46
63
  @comment.read_by! @user
47
- Comment.read_by(@user).exists?(@comment).should be_true
64
+ expect( Comment.read_by(@user) ).to include(@comment)
48
65
  end
49
66
 
50
67
  it "should return records explicitly marked as unread if the user has 'read all' after the record was marked unread" do
51
68
  @comment.unread_by! @user
52
69
  Comment.read_by! @user
53
- Comment.read_by(@user).exists?(@comment).should be_true
70
+ expect( Comment.read_by(@user) ).to include(@comment)
54
71
  end
55
72
  end
56
73
 
57
74
  describe "when checking a specific record for read_by?" do
58
75
  it "should return true if the record hasn't explicitly been read, but the user has 'read all' since the record was created" do
59
76
  Comment.read_by! @user
60
- @comment.read_by?(@user).should be_true
77
+ expect( @comment.read_by?(@user) ).to be_truthy
61
78
  end
62
79
 
63
80
  it "should return true if the record hasn't explicitly been read and the user has 'read all' since the record was created but not since it was updated" do
64
81
  Comment.read_by! @user
65
82
  @comment.touch
66
- @comment.read_by?(@user).should be_true
83
+ expect( @comment.read_by?(@user) ).to be_truthy
67
84
  end
68
85
 
69
86
  it "should return true if the record has been explicitly marked as read and the user hasn't 'read all'" do
70
87
  @comment.read_by! @user
71
- @comment.read_by?(@user).should be_true
88
+ expect( @comment.read_by?(@user) ).to be_truthy
72
89
  end
73
90
 
74
91
  it "should return false if the user 'read all' before and then marked the record as unread" do
75
92
  Comment.read_by! @user
76
93
  @comment.unread_by! @user
77
- @comment.read_by?(@user).should be_false
94
+ expect( @comment.read_by?(@user) ).to be_falsey
78
95
  end
79
96
 
80
97
  it "should return true if the user has explicitly marked it as unread and then 'reads all'" do
81
98
  @comment.unread_by! @user
82
99
  Comment.read_by! @user
83
- @comment.read_by?(@user).should be_true
100
+ expect( @comment.read_by?(@user) ).to be_truthy
84
101
  end
85
102
  end
86
103
 
87
104
  describe "when checking a specific record for latest_update_read_by?" do
88
105
  it "should return true if the record hasn't explicitly been read, but the user has 'read all' since the record was updated" do
89
106
  Comment.read_by! @user
90
- @comment.latest_update_read_by?(@user).should be_true
107
+ expect( @comment.latest_update_read_by?(@user) ).to be_truthy
91
108
  end
92
109
 
93
110
  it "should return false if the record hasn't explicitly been read and the user has 'read all' since the record was created but not since it was updated" do
94
111
  Comment.read_by! @user
95
112
  @comment.touch
96
- @comment.latest_update_read_by?(@user).should be_false
113
+ expect( @comment.latest_update_read_by?(@user) ).to be_falsey
97
114
  end
98
115
 
99
116
  it "should return true if the record has been explicitly marked as read and the user hasn't 'read all'" do
100
117
  @comment.read_by! @user
101
- @comment.latest_update_read_by?(@user).should be_true
118
+ expect( @comment.latest_update_read_by?(@user) ).to be_truthy
102
119
  end
103
120
 
104
121
  it "should return false if the user 'read all' before and then marked the record as unread" do
105
122
  Comment.read_by! @user
106
123
  @comment.unread_by! @user
107
- @comment.latest_update_read_by?(@user).should be_false
124
+ expect( @comment.latest_update_read_by?(@user) ).to be_falsey
108
125
  end
109
126
 
110
127
  it "should return true if the user has explicitly marked it as unread and then 'reads all'" do
111
128
  @comment.unread_by! @user
112
129
  Comment.read_by! @user
113
- @comment.latest_update_read_by?(@user).should be_true
130
+ expect( @comment.latest_update_read_by?(@user) ).to be_truthy
114
131
  end
115
132
 
116
133
  it "should return false if the user 'read all' before and then marked the record as unread using cached readings" do
117
134
  Comment.read_by! @user
118
135
  @comment.unread_by! @user
119
136
  Comment.cache_readings_for([@comment], @user)
120
- @comment.latest_update_read_by?(@user).should be_false
137
+ expect( @comment.latest_update_read_by?(@user) ).to be_falsey
121
138
  end
122
139
  end
123
140
  end
124
- `dropdb acts_as_readable_test`
141
+ `dropdb acts_as_readable_test`
data/spec/spec_helper.rb CHANGED
@@ -2,7 +2,7 @@ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
2
2
  require 'active_record'
3
3
  require 'acts_as_readable'
4
4
 
5
- ActiveRecord::Base.establish_connection(:adapter => "postgresql", :database => "acts_as_readable_test")
5
+ ActiveRecord::Base.establish_connection(:adapter => "postgresql", :database => "acts_as_readable_test") # Not using sqlite3 for testing because of its ridiculous boolean handling
6
6
 
7
7
  ActiveRecord::Schema.define(:version => 0) do
8
8
  create_table :users, :force => true do |t|
@@ -27,3 +27,12 @@ end
27
27
  class Comment < ActiveRecord::Base
28
28
  acts_as_readable :cache => :comments_read_at
29
29
  end
30
+
31
+
32
+ def debug_queries
33
+ logger = ActiveRecord::Base.logger
34
+ ActiveRecord::Base.logger = Logger.new(STDOUT)
35
+ yield
36
+ ensure
37
+ ActiveRecord::Base.logger = logger
38
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_readable
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicholas Jakobsen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-28 00:00:00.000000000 Z
12
+ date: 2014-01-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails