unread 0.10.1 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +19 -8
- data/Appraisals +29 -10
- data/MIT-LICENSE +1 -1
- data/README.md +27 -3
- data/gemfiles/rails_4_0.gemfile +2 -0
- data/gemfiles/rails_4_1.gemfile +3 -1
- data/gemfiles/rails_4_2.gemfile +4 -2
- data/gemfiles/rails_5_0.gemfile +4 -2
- data/gemfiles/rails_5_1.gemfile +4 -2
- data/gemfiles/rails_5_2.gemfile +4 -2
- data/gemfiles/rails_6_0.gemfile +10 -0
- data/lib/unread/reader_scopes.rb +3 -3
- data/lib/unread/version.rb +1 -1
- data/unread.gemspec +2 -2
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da2c0da709d4464ceda393f45c8fa5aa6858c3bf458cbd75351491145a9b4905
|
4
|
+
data.tar.gz: b6a4938837521be8b1a86e38aa2b181572cf4ec2731b765389e71538a3822a0a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz: '
|
6
|
+
metadata.gz: 9b3980715732e4f3dc0fbf2e63b3367322b6f3c03ced30516b6cba94e31e4b54e6a707ae192e4aa5a00fd2ad83b3501c93ba7f89c3d9081903fc36966a183765
|
7
|
+
data.tar.gz: '0228314b73218e74d9583860892b77d9fd1f9ed3f41ff9c07b6985095e895be1b609fb4ac9befa34b64c3352b45ffb0c229295e74c1d16e7fdfaf7c7b6e34ee4'
|
data/.travis.yml
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 2.
|
4
|
-
- 2.
|
5
|
-
- 2.
|
6
|
-
- 2.5.0
|
3
|
+
- 2.4.6
|
4
|
+
- 2.5.5
|
5
|
+
- 2.6.3
|
7
6
|
gemfile:
|
7
|
+
- gemfiles/rails_6_0.gemfile
|
8
8
|
- gemfiles/rails_5_2.gemfile
|
9
9
|
- gemfiles/rails_5_1.gemfile
|
10
10
|
- gemfiles/rails_5_0.gemfile
|
@@ -13,13 +13,19 @@ gemfile:
|
|
13
13
|
- gemfiles/rails_4_0.gemfile
|
14
14
|
matrix:
|
15
15
|
exclude:
|
16
|
-
- rvm: 2.4.
|
16
|
+
- rvm: 2.4.6
|
17
17
|
gemfile: gemfiles/rails_4_0.gemfile
|
18
|
-
- rvm: 2.4.
|
18
|
+
- rvm: 2.4.6
|
19
19
|
gemfile: gemfiles/rails_4_1.gemfile
|
20
|
-
- rvm: 2.
|
20
|
+
- rvm: 2.4.6
|
21
|
+
gemfile: gemfiles/rails_6_0.gemfile
|
22
|
+
- rvm: 2.5.5
|
21
23
|
gemfile: gemfiles/rails_4_0.gemfile
|
22
|
-
- rvm: 2.5.
|
24
|
+
- rvm: 2.5.5
|
25
|
+
gemfile: gemfiles/rails_4_1.gemfile
|
26
|
+
- rvm: 2.6.3
|
27
|
+
gemfile: gemfiles/rails_4_0.gemfile
|
28
|
+
- rvm: 2.6.3
|
23
29
|
gemfile: gemfiles/rails_4_1.gemfile
|
24
30
|
before_install: gem update bundler
|
25
31
|
sudo: false
|
@@ -27,7 +33,12 @@ env:
|
|
27
33
|
- DB=sqlite
|
28
34
|
- DB=mysql
|
29
35
|
- DB=postgres
|
36
|
+
services:
|
37
|
+
- mysql
|
38
|
+
- postgres
|
30
39
|
before_script:
|
31
40
|
- gem update --system # https://github.com/travis-ci/travis-ci/issues/8978
|
32
41
|
- sh -c "if [ '$DB' = 'mysql' ]; then mysql -e 'create database IF NOT EXISTS unread_test;'; fi"
|
33
42
|
- sh -c "if [ '$DB' = 'postgres' ]; then psql -c 'create database unread_test;' -U postgres; fi"
|
43
|
+
addons:
|
44
|
+
postgresql: "9.4"
|
data/Appraisals
CHANGED
@@ -1,29 +1,48 @@
|
|
1
|
+
appraise "rails-6-0" do
|
2
|
+
gem "activerecord", "~> 6.0.0.beta3"
|
3
|
+
gem "mysql2", ">= 0.4.4"
|
4
|
+
gem "pg", ">= 0.18", "< 2.0"
|
5
|
+
gem "sqlite3", "~> 1.4"
|
6
|
+
end
|
7
|
+
|
1
8
|
appraise "rails-5-2" do
|
2
|
-
gem "activerecord", "~> 5.2.
|
3
|
-
gem "mysql2", ">= 0.
|
9
|
+
gem "activerecord", "~> 5.2.3"
|
10
|
+
gem "mysql2", ">= 0.4.4", "< 0.6.0"
|
11
|
+
gem "pg", ">= 0.18", "< 2.0"
|
12
|
+
gem "sqlite3", "~> 1.3", ">= 1.3.6"
|
4
13
|
end
|
5
14
|
|
6
15
|
appraise "rails-5-1" do
|
7
|
-
gem "activerecord", "~> 5.1.
|
8
|
-
gem
|
16
|
+
gem "activerecord", "~> 5.1.7"
|
17
|
+
gem "mysql2", ">= 0.3.18", "< 0.6.0"
|
18
|
+
gem "pg", ">= 0.18", "< 2.0"
|
19
|
+
gem "sqlite3", "~> 1.3", ">= 1.3.6"
|
9
20
|
end
|
10
21
|
|
11
22
|
appraise "rails-5-0" do
|
12
|
-
gem "activerecord", "~> 5.0.
|
13
|
-
gem 'mysql2', '>= 0.3.18', '< 0.
|
23
|
+
gem "activerecord", "~> 5.0.7"
|
24
|
+
gem 'mysql2', '>= 0.3.18', '< 0.6.0'
|
25
|
+
gem "pg", ">= 0.18", "< 2.0"
|
26
|
+
gem 'sqlite3', '~> 1.3.6'
|
14
27
|
end
|
15
28
|
|
16
29
|
appraise "rails-4-2" do
|
17
|
-
gem "activerecord", "~> 4.2.
|
18
|
-
gem 'mysql2', '>= 0.3.13', '< 0.
|
30
|
+
gem "activerecord", "~> 4.2.11"
|
31
|
+
gem 'mysql2', '>= 0.3.13', '< 0.6.0'
|
32
|
+
gem "pg", "~> 0.15"
|
33
|
+
gem 'sqlite3', '~> 1.3.6'
|
19
34
|
end
|
20
35
|
|
21
36
|
appraise "rails-4-1" do
|
22
|
-
gem "activerecord", "~> 4.1.
|
23
|
-
gem
|
37
|
+
gem "activerecord", "~> 4.1.16"
|
38
|
+
gem 'mysql2', '~> 0.3.13'
|
39
|
+
gem "pg", "~> 0.11"
|
40
|
+
gem 'sqlite3', '~> 1.3.6'
|
24
41
|
end
|
25
42
|
|
26
43
|
appraise "rails-4-0" do
|
27
44
|
gem "activerecord", "~> 4.0.13"
|
28
45
|
gem "mysql2", '~> 0.3.10'
|
46
|
+
gem "pg", "~> 0.11"
|
47
|
+
gem 'sqlite3', '~> 1.3.6'
|
29
48
|
end
|
data/MIT-LICENSE
CHANGED
data/README.md
CHANGED
@@ -19,8 +19,8 @@ Ruby gem to manage read/unread status of ActiveRecord objects - and it's fast.
|
|
19
19
|
|
20
20
|
## Requirements
|
21
21
|
|
22
|
-
* Ruby 2.
|
23
|
-
* Rails 4.0 or newer (including Rails
|
22
|
+
* Ruby 2.4 or newer
|
23
|
+
* Rails 4.0 or newer (including Rails 6)
|
24
24
|
* MySQL, PostgreSQL or SQLite
|
25
25
|
* Needs a timestamp field in your models (like created_at or updated_at) with a database index on it
|
26
26
|
|
@@ -160,6 +160,30 @@ users[1].have_read?(message2)
|
|
160
160
|
Message.cleanup_read_marks!
|
161
161
|
```
|
162
162
|
|
163
|
+
## Getting read/unread stats through a relationship
|
164
|
+
|
165
|
+
```ruby
|
166
|
+
class Document < ApplicationRecord
|
167
|
+
has_many :comments
|
168
|
+
end
|
169
|
+
|
170
|
+
class Comment < ApplicationRecord
|
171
|
+
acts_as_readable on: :created_at
|
172
|
+
belongs_to :document
|
173
|
+
end
|
174
|
+
|
175
|
+
# Get unread comments count for a document
|
176
|
+
document = Document.find(1)
|
177
|
+
default_hash = Hash.new { |h, k| h[k] = { unread: 0, total: 0 } }
|
178
|
+
document.comments.with_read_marks_for(current_user).reduce(default_hash) do |hash, comment|
|
179
|
+
hash[comment.id][:unread] += 1 if comment.unread?(current_user)
|
180
|
+
hash[comment.id][:total] += 1
|
181
|
+
hash
|
182
|
+
end
|
183
|
+
# => {20=>{:unread=>1, :total=>10}, 82=>{:unread=>0, :total=>4}
|
184
|
+
```
|
185
|
+
|
186
|
+
Using `with_read_marks_for` here is the key. It uses just one query and makes sure that the following `unread?` invocations use the result of the first query.
|
163
187
|
|
164
188
|
## How does it work?
|
165
189
|
|
@@ -199,4 +223,4 @@ AND messages.created_at > '2010-10-20 08:50:00'
|
|
199
223
|
Hint: You should add a database index on `messages.created_at`.
|
200
224
|
|
201
225
|
|
202
|
-
Copyright (c) 2010-
|
226
|
+
Copyright (c) 2010-2019 [Georg Ledermann](http://www.georg-ledermann.de) and [contributors](https://github.com/ledermann/unread/graphs/contributors), released under the MIT license
|
data/gemfiles/rails_4_0.gemfile
CHANGED
data/gemfiles/rails_4_1.gemfile
CHANGED
data/gemfiles/rails_4_2.gemfile
CHANGED
data/gemfiles/rails_5_0.gemfile
CHANGED
data/gemfiles/rails_5_1.gemfile
CHANGED
@@ -2,7 +2,9 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
-
gem "activerecord", "~> 5.1.
|
6
|
-
gem "mysql2", ">= 0.3.18", "< 0.
|
5
|
+
gem "activerecord", "~> 5.1.7"
|
6
|
+
gem "mysql2", ">= 0.3.18", "< 0.6.0"
|
7
|
+
gem "pg", ">= 0.18", "< 2.0"
|
8
|
+
gem "sqlite3", "~> 1.3", ">= 1.3.6"
|
7
9
|
|
8
10
|
gemspec path: "../"
|
data/gemfiles/rails_5_2.gemfile
CHANGED
@@ -2,7 +2,9 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
-
gem "activerecord", "~> 5.2.
|
6
|
-
gem "mysql2", ">= 0.
|
5
|
+
gem "activerecord", "~> 5.2.3"
|
6
|
+
gem "mysql2", ">= 0.4.4", "< 0.6.0"
|
7
|
+
gem "pg", ">= 0.18", "< 2.0"
|
8
|
+
gem "sqlite3", "~> 1.3", ">= 1.3.6"
|
7
9
|
|
8
10
|
gemspec path: "../"
|
data/lib/unread/reader_scopes.rb
CHANGED
@@ -12,7 +12,7 @@ module Unread
|
|
12
12
|
|
13
13
|
joins "LEFT JOIN #{ReadMark.quoted_table_name}
|
14
14
|
ON #{ReadMark.quoted_table_name}.readable_type = '#{readable.class.readable_parent.name}'
|
15
|
-
AND (#{ReadMark.quoted_table_name}.readable_id = #{readable.id} OR #{ReadMark.quoted_table_name}.readable_id IS NULL)
|
15
|
+
AND (#{ReadMark.quoted_table_name}.readable_id = #{quote_bound_value(readable.id)} OR #{ReadMark.quoted_table_name}.readable_id IS NULL)
|
16
16
|
AND #{ReadMark.quoted_table_name}.reader_id = #{quoted_table_name}.#{quoted_primary_key}
|
17
17
|
AND #{ReadMark.quoted_table_name}.reader_type = '#{connection.quote_string base_class.name}'
|
18
18
|
AND #{ReadMark.quoted_table_name}.timestamp >= '#{connection.quoted_date readable.send(readable.class.readable_options[:on])}'"
|
@@ -31,8 +31,8 @@ module Unread
|
|
31
31
|
|
32
32
|
join_read_marks(readable).select("#{quoted_table_name}.*,
|
33
33
|
#{ReadMark.quoted_table_name}.id AS read_mark_id,
|
34
|
-
#{quote_bound_value
|
35
|
-
#{readable.id} AS read_mark_readable_id")
|
34
|
+
#{quote_bound_value(readable.class.name)}#{postgresql_string_cast} AS read_mark_readable_type,
|
35
|
+
#{quote_bound_value(readable.id)} AS read_mark_readable_id")
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
data/lib/unread/version.rb
CHANGED
data/unread.gemspec
CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.homepage = "https://github.com/ledermann/unread"
|
13
13
|
s.summary = %q{Manages read/unread status of ActiveRecord objects}
|
14
14
|
s.description = %q{This gem creates a scope for unread objects and adds methods to mark objects as read }
|
15
|
-
s.required_ruby_version = '>= 2.
|
15
|
+
s.required_ruby_version = '>= 2.4'
|
16
16
|
|
17
17
|
s.files = `git ls-files -z`.split("\x0").reject do |f|
|
18
18
|
f.match(%r{^(test|spec|features)/})
|
@@ -28,7 +28,7 @@ Gem::Specification.new do |s|
|
|
28
28
|
s.add_development_dependency 'timecop'
|
29
29
|
s.add_development_dependency 'sqlite3'
|
30
30
|
s.add_development_dependency 'mysql2'
|
31
|
-
s.add_development_dependency 'pg'
|
31
|
+
s.add_development_dependency 'pg'
|
32
32
|
s.add_development_dependency 'rspec'
|
33
33
|
s.add_development_dependency 'simplecov'
|
34
34
|
s.add_development_dependency 'term-ansicolor'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unread
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Georg Ledermann
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -98,16 +98,16 @@ dependencies:
|
|
98
98
|
name: pg
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
103
|
+
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - "
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
110
|
+
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: rspec
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -201,6 +201,7 @@ files:
|
|
201
201
|
- gemfiles/rails_5_0.gemfile
|
202
202
|
- gemfiles/rails_5_1.gemfile
|
203
203
|
- gemfiles/rails_5_2.gemfile
|
204
|
+
- gemfiles/rails_6_0.gemfile
|
204
205
|
- lib/generators/unread/migration/migration_generator.rb
|
205
206
|
- lib/generators/unread/migration/templates/migration.rb
|
206
207
|
- lib/generators/unread/polymorphic_reader_migration/polymorphic_reader_migration_generator.rb
|
@@ -227,15 +228,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
227
228
|
requirements:
|
228
229
|
- - ">="
|
229
230
|
- !ruby/object:Gem::Version
|
230
|
-
version: '2.
|
231
|
+
version: '2.4'
|
231
232
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
232
233
|
requirements:
|
233
234
|
- - ">="
|
234
235
|
- !ruby/object:Gem::Version
|
235
236
|
version: '0'
|
236
237
|
requirements: []
|
237
|
-
|
238
|
-
rubygems_version: 2.7.6
|
238
|
+
rubygems_version: 3.0.6
|
239
239
|
signing_key:
|
240
240
|
specification_version: 4
|
241
241
|
summary: Manages read/unread status of ActiveRecord objects
|