From 00229e6cac9af2600e23d0de2f9d14cd5ca09a85 Mon Sep 17 00:00:00 2001 From: Kristian Gerardsson Date: Mon, 19 Mar 2018 17:54:41 +0800 Subject: [PATCH 01/59] Readme: How to get unread stats through a relationship (#98) --- README.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/README.md b/README.md index 5a1e86e..bb71a77 100644 --- a/README.md +++ b/README.md @@ -160,6 +160,30 @@ users[1].have_read?(message2) Message.cleanup_read_marks! ``` +## Getting read/unread stats through a relationship + +```ruby +class Document < ApplicationRecord + has_many :comments +end + +class Comment < ApplicationRecord + acts_as_readable on: :created_at + belongs_to :document +end + +# Get unread comments count for a document +document = Document.find(1) +default_hash = Hash.new { |h, k| h[k] = { unread: 0, total: 0 } } +document.comments.with_read_marks_for(current_user).reduce(default_hash) do |hash, comment| + hash[comment.id][:unread] += 1 if comment.unread?(current_user) + hash[comment.id][:total] += 1 + hash +end +# => {20=>{:unread=>1, :total=>10}, 82=>{:unread=>0, :total=>4} +``` + +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. ## How does it work? From 52616dbc79249146c057efff6e84c8e488cbc953 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Wed, 29 Aug 2018 06:08:26 +0200 Subject: [PATCH 02/59] Travis: Test against latest Rubies --- .travis.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index b1bd327..d8e5bed 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,9 @@ language: ruby rvm: - - 2.2.9 - - 2.3.6 - - 2.4.3 - - 2.5.0 + - 2.2.10 + - 2.3.7 + - 2.4.4 + - 2.5.1 gemfile: - gemfiles/rails_5_2.gemfile - gemfiles/rails_5_1.gemfile @@ -13,13 +13,13 @@ gemfile: - gemfiles/rails_4_0.gemfile matrix: exclude: - - rvm: 2.4.3 + - rvm: 2.4.4 gemfile: gemfiles/rails_4_0.gemfile - - rvm: 2.4.3 + - rvm: 2.4.4 gemfile: gemfiles/rails_4_1.gemfile - - rvm: 2.5.0 + - rvm: 2.5.1 gemfile: gemfiles/rails_4_0.gemfile - - rvm: 2.5.0 + - rvm: 2.5.1 gemfile: gemfiles/rails_4_1.gemfile before_install: gem update bundler sudo: false From b5fe2c188560e705607d2fd3b2290e2f049d582a Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Wed, 29 Aug 2018 06:09:44 +0200 Subject: [PATCH 03/59] Appraisal: Use gem "pg" depending on Rails version --- Appraisals | 6 ++++++ gemfiles/rails_4_0.gemfile | 1 + gemfiles/rails_4_1.gemfile | 1 + gemfiles/rails_4_2.gemfile | 1 + gemfiles/rails_5_0.gemfile | 1 + gemfiles/rails_5_1.gemfile | 1 + gemfiles/rails_5_2.gemfile | 1 + 7 files changed, 12 insertions(+) diff --git a/Appraisals b/Appraisals index 547e4f9..17f4d05 100644 --- a/Appraisals +++ b/Appraisals @@ -1,29 +1,35 @@ appraise "rails-5-2" do gem "activerecord", "~> 5.2.0.beta2" gem "mysql2", ">= 0.3.18", "< 0.5", "!= 0.4.3" + gem "pg", ">= 0.18", "< 2.0" end appraise "rails-5-1" do gem "activerecord", "~> 5.1.0" gem 'mysql2', '>= 0.3.18', '< 0.5' + gem "pg", ">= 0.18", "< 2.0" end appraise "rails-5-0" do gem "activerecord", "~> 5.0.0" gem 'mysql2', '>= 0.3.18', '< 0.5' + gem "pg", ">= 0.18", "< 2.0" end appraise "rails-4-2" do gem "activerecord", "~> 4.2.5" gem 'mysql2', '>= 0.3.13', '< 0.5' + gem "pg", "~> 0.15" end appraise "rails-4-1" do gem "activerecord", "~> 4.1.14" gem "mysql2", '~> 0.3.13' + gem "pg", "~> 0.11" end appraise "rails-4-0" do gem "activerecord", "~> 4.0.13" gem "mysql2", '~> 0.3.10' + gem "pg", "~> 0.11" end diff --git a/gemfiles/rails_4_0.gemfile b/gemfiles/rails_4_0.gemfile index c319a35..b41a415 100644 --- a/gemfiles/rails_4_0.gemfile +++ b/gemfiles/rails_4_0.gemfile @@ -4,5 +4,6 @@ source "https://rubygems.org" gem "activerecord", "~> 4.0.13" gem "mysql2", "~> 0.3.10" +gem "pg", "~> 0.11" gemspec path: "../" diff --git a/gemfiles/rails_4_1.gemfile b/gemfiles/rails_4_1.gemfile index 79165aa..93a1ff1 100644 --- a/gemfiles/rails_4_1.gemfile +++ b/gemfiles/rails_4_1.gemfile @@ -4,5 +4,6 @@ source "https://rubygems.org" gem "activerecord", "~> 4.1.14" gem "mysql2", "~> 0.3.13" +gem "pg", "~> 0.11" gemspec path: "../" diff --git a/gemfiles/rails_4_2.gemfile b/gemfiles/rails_4_2.gemfile index 7a7908b..f1ed9be 100644 --- a/gemfiles/rails_4_2.gemfile +++ b/gemfiles/rails_4_2.gemfile @@ -4,5 +4,6 @@ source "https://rubygems.org" gem "activerecord", "~> 4.2.5" gem "mysql2", ">= 0.3.13", "< 0.5" +gem "pg", "~> 0.15" gemspec path: "../" diff --git a/gemfiles/rails_5_0.gemfile b/gemfiles/rails_5_0.gemfile index f7dfd7f..c4c2104 100644 --- a/gemfiles/rails_5_0.gemfile +++ b/gemfiles/rails_5_0.gemfile @@ -4,5 +4,6 @@ source "https://rubygems.org" gem "activerecord", "~> 5.0.0" gem "mysql2", ">= 0.3.18", "< 0.5" +gem "pg", ">= 0.18", "< 2.0" gemspec path: "../" diff --git a/gemfiles/rails_5_1.gemfile b/gemfiles/rails_5_1.gemfile index 979beae..4cdd623 100644 --- a/gemfiles/rails_5_1.gemfile +++ b/gemfiles/rails_5_1.gemfile @@ -4,5 +4,6 @@ source "https://rubygems.org" gem "activerecord", "~> 5.1.0" gem "mysql2", ">= 0.3.18", "< 0.5" +gem "pg", ">= 0.18", "< 2.0" gemspec path: "../" diff --git a/gemfiles/rails_5_2.gemfile b/gemfiles/rails_5_2.gemfile index ae456ee..96db797 100644 --- a/gemfiles/rails_5_2.gemfile +++ b/gemfiles/rails_5_2.gemfile @@ -4,5 +4,6 @@ source "https://rubygems.org" gem "activerecord", "~> 5.2.0.beta2" gem "mysql2", ">= 0.3.18", "< 0.5", "!= 0.4.3" +gem "pg", ">= 0.18", "< 2.0" gemspec path: "../" From b458e540f9fe1a299a12256a4a24240c155c455e Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Tue, 25 Dec 2018 18:30:40 +0100 Subject: [PATCH 04/59] Relax dependency for gem "pg" --- unread.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unread.gemspec b/unread.gemspec index 7f7b982..7e06cd4 100644 --- a/unread.gemspec +++ b/unread.gemspec @@ -28,7 +28,7 @@ Gem::Specification.new do |s| s.add_development_dependency 'timecop' s.add_development_dependency 'sqlite3' s.add_development_dependency 'mysql2' - s.add_development_dependency 'pg', '< 1' + s.add_development_dependency 'pg' s.add_development_dependency 'rspec' s.add_development_dependency 'simplecov' s.add_development_dependency 'term-ansicolor' From a4427b5f553f4ab2edd5f52db437ada117be0212 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Tue, 25 Dec 2018 18:31:27 +0100 Subject: [PATCH 05/59] Test against Ruby 2.6.0, drop support for Ruby 2.2 (because EOL) --- .travis.yml | 20 ++++++++++++-------- README.md | 2 +- unread.gemspec | 2 +- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index d8e5bed..68ba42b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,9 @@ language: ruby rvm: - - 2.2.10 - - 2.3.7 - - 2.4.4 - - 2.5.1 + - 2.3.8 + - 2.4.5 + - 2.5.3 + - 2.6.0 gemfile: - gemfiles/rails_5_2.gemfile - gemfiles/rails_5_1.gemfile @@ -13,13 +13,17 @@ gemfile: - gemfiles/rails_4_0.gemfile matrix: exclude: - - rvm: 2.4.4 + - rvm: 2.4.5 gemfile: gemfiles/rails_4_0.gemfile - - rvm: 2.4.4 + - rvm: 2.4.5 gemfile: gemfiles/rails_4_1.gemfile - - rvm: 2.5.1 + - rvm: 2.5.3 gemfile: gemfiles/rails_4_0.gemfile - - rvm: 2.5.1 + - rvm: 2.5.3 + gemfile: gemfiles/rails_4_1.gemfile + - rvm: 2.6.0 + gemfile: gemfiles/rails_4_0.gemfile + - rvm: 2.6.0 gemfile: gemfiles/rails_4_1.gemfile before_install: gem update bundler sudo: false diff --git a/README.md b/README.md index bb71a77..566b3eb 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Ruby gem to manage read/unread status of ActiveRecord objects - and it's fast. ## Requirements -* Ruby 2.2 or newer +* Ruby 2.3 or newer * Rails 4.0 or newer (including Rails 5.1 and 5.2) * MySQL, PostgreSQL or SQLite * Needs a timestamp field in your models (like created_at or updated_at) with a database index on it diff --git a/unread.gemspec b/unread.gemspec index 7e06cd4..ab1f9b5 100644 --- a/unread.gemspec +++ b/unread.gemspec @@ -12,7 +12,7 @@ Gem::Specification.new do |s| s.homepage = "https://github.com/ledermann/unread" s.summary = %q{Manages read/unread status of ActiveRecord objects} s.description = %q{This gem creates a scope for unread objects and adds methods to mark objects as read } - s.required_ruby_version = '>= 2.2' + s.required_ruby_version = '>= 2.3' s.files = `git ls-files -z`.split("\x0").reject do |f| f.match(%r{^(test|spec|features)/}) From 956d3278983472e0e0407d37b1ab4b790c67988e Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Fri, 1 Mar 2019 05:43:54 +0100 Subject: [PATCH 06/59] Don't use deprecated #update_attributes! --- spec/unread/readable_spec.rb | 2 +- spec/unread/reader_spec.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/unread/readable_spec.rb b/spec/unread/readable_spec.rb index b742b74..c8add8c 100644 --- a/spec/unread/readable_spec.rb +++ b/spec/unread/readable_spec.rb @@ -195,7 +195,7 @@ wait expect(@email1.unread?(@reader)).to be_falsey - @email1.update_attributes! subject: 'changed' + @email1.update! subject: 'changed' expect(@email1.unread?(@reader)).to be_truthy end diff --git a/spec/unread/reader_spec.rb b/spec/unread/reader_spec.rb index 5f0fea0..05cb0a4 100644 --- a/spec/unread/reader_spec.rb +++ b/spec/unread/reader_spec.rb @@ -149,7 +149,7 @@ wait expect(@reader.have_read?(@email1)).to be_truthy - @email1.update_attributes! subject: 'changed' + @email1.update! subject: 'changed' expect(@reader.have_read?(@email1)).to be_falsey end From 7f812adab2492655c06fce2e4370a47f2d58f309 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Fri, 1 Mar 2019 05:45:14 +0100 Subject: [PATCH 07/59] Test against Rails 6, use latest Rubies --- .travis.yml | 7 ++++--- Appraisals | 14 ++++++++++---- gemfiles/rails_4_2.gemfile | 2 +- gemfiles/rails_5_0.gemfile | 2 +- gemfiles/rails_5_1.gemfile | 2 +- gemfiles/rails_5_2.gemfile | 2 +- gemfiles/rails_6_0.gemfile | 9 +++++++++ 7 files changed, 27 insertions(+), 11 deletions(-) create mode 100644 gemfiles/rails_6_0.gemfile diff --git a/.travis.yml b/.travis.yml index 68ba42b..2bbfc77 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,8 +3,9 @@ rvm: - 2.3.8 - 2.4.5 - 2.5.3 - - 2.6.0 + - 2.6.1 gemfile: + - gemfiles/rails_6_0.gemfile - gemfiles/rails_5_2.gemfile - gemfiles/rails_5_1.gemfile - gemfiles/rails_5_0.gemfile @@ -21,9 +22,9 @@ matrix: gemfile: gemfiles/rails_4_0.gemfile - rvm: 2.5.3 gemfile: gemfiles/rails_4_1.gemfile - - rvm: 2.6.0 + - rvm: 2.6.1 gemfile: gemfiles/rails_4_0.gemfile - - rvm: 2.6.0 + - rvm: 2.6.1 gemfile: gemfiles/rails_4_1.gemfile before_install: gem update bundler sudo: false diff --git a/Appraisals b/Appraisals index 17f4d05..a658eb9 100644 --- a/Appraisals +++ b/Appraisals @@ -1,24 +1,30 @@ +appraise "rails-6-0" do + gem "activerecord", "~> 6.0.0.beta2" + gem "mysql2", ">= 0.4.4" + gem "pg", ">= 0.18", "< 2.0" +end + appraise "rails-5-2" do gem "activerecord", "~> 5.2.0.beta2" - gem "mysql2", ">= 0.3.18", "< 0.5", "!= 0.4.3" + gem "mysql2", ">= 0.4.4", "< 0.6.0" gem "pg", ">= 0.18", "< 2.0" end appraise "rails-5-1" do gem "activerecord", "~> 5.1.0" - gem 'mysql2', '>= 0.3.18', '< 0.5' + gem "mysql2", ">= 0.3.18", "< 0.6.0" gem "pg", ">= 0.18", "< 2.0" end appraise "rails-5-0" do gem "activerecord", "~> 5.0.0" - gem 'mysql2', '>= 0.3.18', '< 0.5' + gem 'mysql2', '>= 0.3.18', '< 0.6.0' gem "pg", ">= 0.18", "< 2.0" end appraise "rails-4-2" do gem "activerecord", "~> 4.2.5" - gem 'mysql2', '>= 0.3.13', '< 0.5' + gem 'mysql2', '>= 0.3.13', '< 0.6.0' gem "pg", "~> 0.15" end diff --git a/gemfiles/rails_4_2.gemfile b/gemfiles/rails_4_2.gemfile index f1ed9be..2537258 100644 --- a/gemfiles/rails_4_2.gemfile +++ b/gemfiles/rails_4_2.gemfile @@ -3,7 +3,7 @@ source "https://rubygems.org" gem "activerecord", "~> 4.2.5" -gem "mysql2", ">= 0.3.13", "< 0.5" +gem "mysql2", ">= 0.3.13", "< 0.6.0" gem "pg", "~> 0.15" gemspec path: "../" diff --git a/gemfiles/rails_5_0.gemfile b/gemfiles/rails_5_0.gemfile index c4c2104..48d6bf9 100644 --- a/gemfiles/rails_5_0.gemfile +++ b/gemfiles/rails_5_0.gemfile @@ -3,7 +3,7 @@ source "https://rubygems.org" gem "activerecord", "~> 5.0.0" -gem "mysql2", ">= 0.3.18", "< 0.5" +gem "mysql2", ">= 0.3.18", "< 0.6.0" gem "pg", ">= 0.18", "< 2.0" gemspec path: "../" diff --git a/gemfiles/rails_5_1.gemfile b/gemfiles/rails_5_1.gemfile index 4cdd623..0089eb1 100644 --- a/gemfiles/rails_5_1.gemfile +++ b/gemfiles/rails_5_1.gemfile @@ -3,7 +3,7 @@ source "https://rubygems.org" gem "activerecord", "~> 5.1.0" -gem "mysql2", ">= 0.3.18", "< 0.5" +gem "mysql2", ">= 0.3.18", "< 0.6.0" gem "pg", ">= 0.18", "< 2.0" gemspec path: "../" diff --git a/gemfiles/rails_5_2.gemfile b/gemfiles/rails_5_2.gemfile index 96db797..0c42900 100644 --- a/gemfiles/rails_5_2.gemfile +++ b/gemfiles/rails_5_2.gemfile @@ -3,7 +3,7 @@ source "https://rubygems.org" gem "activerecord", "~> 5.2.0.beta2" -gem "mysql2", ">= 0.3.18", "< 0.5", "!= 0.4.3" +gem "mysql2", ">= 0.4.4", "< 0.6.0" gem "pg", ">= 0.18", "< 2.0" gemspec path: "../" diff --git a/gemfiles/rails_6_0.gemfile b/gemfiles/rails_6_0.gemfile new file mode 100644 index 0000000..ed3c1d2 --- /dev/null +++ b/gemfiles/rails_6_0.gemfile @@ -0,0 +1,9 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "activerecord", "~> 6.0.0.beta2" +gem "mysql2", ">= 0.4.4" +gem "pg", ">= 0.18", "< 2.0" + +gemspec path: "../" From a4ceaa6bf1f17774fdbee4ee1c21ce93f5f4ee89 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Fri, 1 Mar 2019 06:03:41 +0100 Subject: [PATCH 08/59] Tests: Fix sqlite dependencies --- Appraisals | 7 +++++++ gemfiles/rails_4_0.gemfile | 1 + gemfiles/rails_4_1.gemfile | 1 + gemfiles/rails_4_2.gemfile | 1 + gemfiles/rails_5_0.gemfile | 1 + gemfiles/rails_5_1.gemfile | 1 + gemfiles/rails_5_2.gemfile | 1 + gemfiles/rails_6_0.gemfile | 1 + 8 files changed, 14 insertions(+) diff --git a/Appraisals b/Appraisals index a658eb9..aeb9fe9 100644 --- a/Appraisals +++ b/Appraisals @@ -2,40 +2,47 @@ appraise "rails-6-0" do gem "activerecord", "~> 6.0.0.beta2" gem "mysql2", ">= 0.4.4" gem "pg", ">= 0.18", "< 2.0" + gem "sqlite3", "~> 1.3", ">= 1.3.6" end appraise "rails-5-2" do gem "activerecord", "~> 5.2.0.beta2" gem "mysql2", ">= 0.4.4", "< 0.6.0" gem "pg", ">= 0.18", "< 2.0" + gem "sqlite3", "~> 1.3.6" end appraise "rails-5-1" do gem "activerecord", "~> 5.1.0" gem "mysql2", ">= 0.3.18", "< 0.6.0" gem "pg", ">= 0.18", "< 2.0" + gem "sqlite3", "~> 1.3.6" end appraise "rails-5-0" do gem "activerecord", "~> 5.0.0" gem 'mysql2', '>= 0.3.18', '< 0.6.0' gem "pg", ">= 0.18", "< 2.0" + gem 'sqlite3', '~> 1.3.6' end appraise "rails-4-2" do gem "activerecord", "~> 4.2.5" gem 'mysql2', '>= 0.3.13', '< 0.6.0' gem "pg", "~> 0.15" + gem 'sqlite3', '~> 1.3.6' end appraise "rails-4-1" do gem "activerecord", "~> 4.1.14" gem "mysql2", '~> 0.3.13' gem "pg", "~> 0.11" + gem 'sqlite3', '~> 1.3.6' end appraise "rails-4-0" do gem "activerecord", "~> 4.0.13" gem "mysql2", '~> 0.3.10' gem "pg", "~> 0.11" + gem 'sqlite3', '~> 1.3.6' end diff --git a/gemfiles/rails_4_0.gemfile b/gemfiles/rails_4_0.gemfile index b41a415..3d1ccaf 100644 --- a/gemfiles/rails_4_0.gemfile +++ b/gemfiles/rails_4_0.gemfile @@ -5,5 +5,6 @@ source "https://rubygems.org" gem "activerecord", "~> 4.0.13" gem "mysql2", "~> 0.3.10" gem "pg", "~> 0.11" +gem "sqlite3", "~> 1.3.6" gemspec path: "../" diff --git a/gemfiles/rails_4_1.gemfile b/gemfiles/rails_4_1.gemfile index 93a1ff1..00664fc 100644 --- a/gemfiles/rails_4_1.gemfile +++ b/gemfiles/rails_4_1.gemfile @@ -5,5 +5,6 @@ source "https://rubygems.org" gem "activerecord", "~> 4.1.14" gem "mysql2", "~> 0.3.13" gem "pg", "~> 0.11" +gem "sqlite3", "~> 1.3.6" gemspec path: "../" diff --git a/gemfiles/rails_4_2.gemfile b/gemfiles/rails_4_2.gemfile index 2537258..440f4ea 100644 --- a/gemfiles/rails_4_2.gemfile +++ b/gemfiles/rails_4_2.gemfile @@ -5,5 +5,6 @@ source "https://rubygems.org" gem "activerecord", "~> 4.2.5" gem "mysql2", ">= 0.3.13", "< 0.6.0" gem "pg", "~> 0.15" +gem "sqlite3", "~> 1.3.6" gemspec path: "../" diff --git a/gemfiles/rails_5_0.gemfile b/gemfiles/rails_5_0.gemfile index 48d6bf9..a2fe3f8 100644 --- a/gemfiles/rails_5_0.gemfile +++ b/gemfiles/rails_5_0.gemfile @@ -5,5 +5,6 @@ source "https://rubygems.org" gem "activerecord", "~> 5.0.0" gem "mysql2", ">= 0.3.18", "< 0.6.0" gem "pg", ">= 0.18", "< 2.0" +gem "sqlite3", "~> 1.3.6" gemspec path: "../" diff --git a/gemfiles/rails_5_1.gemfile b/gemfiles/rails_5_1.gemfile index 0089eb1..ae647f6 100644 --- a/gemfiles/rails_5_1.gemfile +++ b/gemfiles/rails_5_1.gemfile @@ -5,5 +5,6 @@ source "https://rubygems.org" gem "activerecord", "~> 5.1.0" gem "mysql2", ">= 0.3.18", "< 0.6.0" gem "pg", ">= 0.18", "< 2.0" +gem "sqlite3", "~> 1.3.6" gemspec path: "../" diff --git a/gemfiles/rails_5_2.gemfile b/gemfiles/rails_5_2.gemfile index 0c42900..8ca9d37 100644 --- a/gemfiles/rails_5_2.gemfile +++ b/gemfiles/rails_5_2.gemfile @@ -5,5 +5,6 @@ source "https://rubygems.org" gem "activerecord", "~> 5.2.0.beta2" gem "mysql2", ">= 0.4.4", "< 0.6.0" gem "pg", ">= 0.18", "< 2.0" +gem "sqlite3", "~> 1.3.6" gemspec path: "../" diff --git a/gemfiles/rails_6_0.gemfile b/gemfiles/rails_6_0.gemfile index ed3c1d2..3c1c340 100644 --- a/gemfiles/rails_6_0.gemfile +++ b/gemfiles/rails_6_0.gemfile @@ -5,5 +5,6 @@ source "https://rubygems.org" gem "activerecord", "~> 6.0.0.beta2" gem "mysql2", ">= 0.4.4" gem "pg", ">= 0.18", "< 2.0" +gem "sqlite3", "~> 1.3", ">= 1.3.6" gemspec path: "../" From a92fd362c9ba6d2a3245db738a2177602362ba21 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Fri, 1 Mar 2019 06:04:03 +0100 Subject: [PATCH 09/59] Travis: Fix requirements for Rails 6 --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index 2bbfc77..9ab1235 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,10 +14,14 @@ gemfile: - gemfiles/rails_4_0.gemfile matrix: exclude: + - rvm: 2.3.8 + gemfile: gemfiles/rails_6_0.gemfile - rvm: 2.4.5 gemfile: gemfiles/rails_4_0.gemfile - rvm: 2.4.5 gemfile: gemfiles/rails_4_1.gemfile + - rvm: 2.4.5 + gemfile: gemfiles/rails_6_0.gemfile - rvm: 2.5.3 gemfile: gemfiles/rails_4_0.gemfile - rvm: 2.5.3 From 209d817140d78810453e5f1628081970f1cda91c Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Fri, 1 Mar 2019 06:30:07 +0100 Subject: [PATCH 10/59] Travis: Use PostgreSQL 9.4 Travis uses 9.2 as default, which has reached EOL. Rails 6 requires 9.3 or later. 9.4 is the oldest one which is currently supported --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 9ab1235..81cd780 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,3 +40,5 @@ before_script: - gem update --system # https://github.com/travis-ci/travis-ci/issues/8978 - sh -c "if [ '$DB' = 'mysql' ]; then mysql -e 'create database IF NOT EXISTS unread_test;'; fi" - sh -c "if [ '$DB' = 'postgres' ]; then psql -c 'create database unread_test;' -U postgres; fi" +addons: + postgresql: "9.4" From e765c8878f6c780dc1189ec11070b308428a78d9 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Fri, 29 Mar 2019 07:56:06 +0100 Subject: [PATCH 11/59] Travis: Test against latest Rubies and Rails --- .travis.yml | 12 ++++++------ Appraisals | 18 +++++++++--------- gemfiles/rails_4_1.gemfile | 2 +- gemfiles/rails_4_2.gemfile | 2 +- gemfiles/rails_5_0.gemfile | 2 +- gemfiles/rails_5_1.gemfile | 4 ++-- gemfiles/rails_5_2.gemfile | 4 ++-- gemfiles/rails_6_0.gemfile | 2 +- 8 files changed, 23 insertions(+), 23 deletions(-) diff --git a/.travis.yml b/.travis.yml index 81cd780..881dafd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,8 +2,8 @@ language: ruby rvm: - 2.3.8 - 2.4.5 - - 2.5.3 - - 2.6.1 + - 2.5.5 + - 2.6.2 gemfile: - gemfiles/rails_6_0.gemfile - gemfiles/rails_5_2.gemfile @@ -22,13 +22,13 @@ matrix: gemfile: gemfiles/rails_4_1.gemfile - rvm: 2.4.5 gemfile: gemfiles/rails_6_0.gemfile - - rvm: 2.5.3 + - rvm: 2.5.5 gemfile: gemfiles/rails_4_0.gemfile - - rvm: 2.5.3 + - rvm: 2.5.5 gemfile: gemfiles/rails_4_1.gemfile - - rvm: 2.6.1 + - rvm: 2.6.2 gemfile: gemfiles/rails_4_0.gemfile - - rvm: 2.6.1 + - rvm: 2.6.2 gemfile: gemfiles/rails_4_1.gemfile before_install: gem update bundler sudo: false diff --git a/Appraisals b/Appraisals index aeb9fe9..8624fcf 100644 --- a/Appraisals +++ b/Appraisals @@ -1,41 +1,41 @@ appraise "rails-6-0" do - gem "activerecord", "~> 6.0.0.beta2" + gem "activerecord", "~> 6.0.0.beta3" gem "mysql2", ">= 0.4.4" gem "pg", ">= 0.18", "< 2.0" gem "sqlite3", "~> 1.3", ">= 1.3.6" end appraise "rails-5-2" do - gem "activerecord", "~> 5.2.0.beta2" + gem "activerecord", "~> 5.2.3" gem "mysql2", ">= 0.4.4", "< 0.6.0" gem "pg", ">= 0.18", "< 2.0" - gem "sqlite3", "~> 1.3.6" + gem "sqlite3", "~> 1.3", ">= 1.3.6" end appraise "rails-5-1" do - gem "activerecord", "~> 5.1.0" + gem "activerecord", "~> 5.1.7" gem "mysql2", ">= 0.3.18", "< 0.6.0" gem "pg", ">= 0.18", "< 2.0" - gem "sqlite3", "~> 1.3.6" + gem "sqlite3", "~> 1.3", ">= 1.3.6" end appraise "rails-5-0" do - gem "activerecord", "~> 5.0.0" + gem "activerecord", "~> 5.0.7" gem 'mysql2', '>= 0.3.18', '< 0.6.0' gem "pg", ">= 0.18", "< 2.0" gem 'sqlite3', '~> 1.3.6' end appraise "rails-4-2" do - gem "activerecord", "~> 4.2.5" + gem "activerecord", "~> 4.2.11" gem 'mysql2', '>= 0.3.13', '< 0.6.0' gem "pg", "~> 0.15" gem 'sqlite3', '~> 1.3.6' end appraise "rails-4-1" do - gem "activerecord", "~> 4.1.14" - gem "mysql2", '~> 0.3.13' + gem "activerecord", "~> 4.1.16" + gem 'mysql2', '~> 0.3.13' gem "pg", "~> 0.11" gem 'sqlite3', '~> 1.3.6' end diff --git a/gemfiles/rails_4_1.gemfile b/gemfiles/rails_4_1.gemfile index 00664fc..6ede9af 100644 --- a/gemfiles/rails_4_1.gemfile +++ b/gemfiles/rails_4_1.gemfile @@ -2,7 +2,7 @@ source "https://rubygems.org" -gem "activerecord", "~> 4.1.14" +gem "activerecord", "~> 4.1.16" gem "mysql2", "~> 0.3.13" gem "pg", "~> 0.11" gem "sqlite3", "~> 1.3.6" diff --git a/gemfiles/rails_4_2.gemfile b/gemfiles/rails_4_2.gemfile index 440f4ea..a7350b1 100644 --- a/gemfiles/rails_4_2.gemfile +++ b/gemfiles/rails_4_2.gemfile @@ -2,7 +2,7 @@ source "https://rubygems.org" -gem "activerecord", "~> 4.2.5" +gem "activerecord", "~> 4.2.11" gem "mysql2", ">= 0.3.13", "< 0.6.0" gem "pg", "~> 0.15" gem "sqlite3", "~> 1.3.6" diff --git a/gemfiles/rails_5_0.gemfile b/gemfiles/rails_5_0.gemfile index a2fe3f8..a2d1171 100644 --- a/gemfiles/rails_5_0.gemfile +++ b/gemfiles/rails_5_0.gemfile @@ -2,7 +2,7 @@ source "https://rubygems.org" -gem "activerecord", "~> 5.0.0" +gem "activerecord", "~> 5.0.7" gem "mysql2", ">= 0.3.18", "< 0.6.0" gem "pg", ">= 0.18", "< 2.0" gem "sqlite3", "~> 1.3.6" diff --git a/gemfiles/rails_5_1.gemfile b/gemfiles/rails_5_1.gemfile index ae647f6..bb41c09 100644 --- a/gemfiles/rails_5_1.gemfile +++ b/gemfiles/rails_5_1.gemfile @@ -2,9 +2,9 @@ source "https://rubygems.org" -gem "activerecord", "~> 5.1.0" +gem "activerecord", "~> 5.1.7" gem "mysql2", ">= 0.3.18", "< 0.6.0" gem "pg", ">= 0.18", "< 2.0" -gem "sqlite3", "~> 1.3.6" +gem "sqlite3", "~> 1.3", ">= 1.3.6" gemspec path: "../" diff --git a/gemfiles/rails_5_2.gemfile b/gemfiles/rails_5_2.gemfile index 8ca9d37..9d1c2a6 100644 --- a/gemfiles/rails_5_2.gemfile +++ b/gemfiles/rails_5_2.gemfile @@ -2,9 +2,9 @@ source "https://rubygems.org" -gem "activerecord", "~> 5.2.0.beta2" +gem "activerecord", "~> 5.2.3" gem "mysql2", ">= 0.4.4", "< 0.6.0" gem "pg", ">= 0.18", "< 2.0" -gem "sqlite3", "~> 1.3.6" +gem "sqlite3", "~> 1.3", ">= 1.3.6" gemspec path: "../" diff --git a/gemfiles/rails_6_0.gemfile b/gemfiles/rails_6_0.gemfile index 3c1c340..5efebe0 100644 --- a/gemfiles/rails_6_0.gemfile +++ b/gemfiles/rails_6_0.gemfile @@ -2,7 +2,7 @@ source "https://rubygems.org" -gem "activerecord", "~> 6.0.0.beta2" +gem "activerecord", "~> 6.0.0.beta3" gem "mysql2", ">= 0.4.4" gem "pg", ">= 0.18", "< 2.0" gem "sqlite3", "~> 1.3", ">= 1.3.6" From 5d2cf88819655a50dbc2e6812f8d65dae36012de Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sat, 24 Aug 2019 07:20:07 +0200 Subject: [PATCH 12/59] Travis: Test against latest Rubies and Rails 6.0.0 --- .travis.yml | 14 +++++++------- Appraisals | 2 +- README.md | 2 +- gemfiles/rails_6_0.gemfile | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index 881dafd..b9fc7cb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,9 @@ language: ruby rvm: - 2.3.8 - - 2.4.5 + - 2.4.6 - 2.5.5 - - 2.6.2 + - 2.6.3 gemfile: - gemfiles/rails_6_0.gemfile - gemfiles/rails_5_2.gemfile @@ -16,19 +16,19 @@ matrix: exclude: - rvm: 2.3.8 gemfile: gemfiles/rails_6_0.gemfile - - rvm: 2.4.5 + - rvm: 2.4.6 gemfile: gemfiles/rails_4_0.gemfile - - rvm: 2.4.5 + - rvm: 2.4.6 gemfile: gemfiles/rails_4_1.gemfile - - rvm: 2.4.5 + - rvm: 2.4.6 gemfile: gemfiles/rails_6_0.gemfile - rvm: 2.5.5 gemfile: gemfiles/rails_4_0.gemfile - rvm: 2.5.5 gemfile: gemfiles/rails_4_1.gemfile - - rvm: 2.6.2 + - rvm: 2.6.3 gemfile: gemfiles/rails_4_0.gemfile - - rvm: 2.6.2 + - rvm: 2.6.3 gemfile: gemfiles/rails_4_1.gemfile before_install: gem update bundler sudo: false diff --git a/Appraisals b/Appraisals index 8624fcf..6eafe88 100644 --- a/Appraisals +++ b/Appraisals @@ -2,7 +2,7 @@ appraise "rails-6-0" do gem "activerecord", "~> 6.0.0.beta3" gem "mysql2", ">= 0.4.4" gem "pg", ">= 0.18", "< 2.0" - gem "sqlite3", "~> 1.3", ">= 1.3.6" + gem "sqlite3", "~> 1.4" end appraise "rails-5-2" do diff --git a/README.md b/README.md index 566b3eb..c86901b 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Ruby gem to manage read/unread status of ActiveRecord objects - and it's fast. ## Requirements * Ruby 2.3 or newer -* Rails 4.0 or newer (including Rails 5.1 and 5.2) +* Rails 4.0 or newer (including Rails 6) * MySQL, PostgreSQL or SQLite * Needs a timestamp field in your models (like created_at or updated_at) with a database index on it diff --git a/gemfiles/rails_6_0.gemfile b/gemfiles/rails_6_0.gemfile index 5efebe0..54c91d5 100644 --- a/gemfiles/rails_6_0.gemfile +++ b/gemfiles/rails_6_0.gemfile @@ -5,6 +5,6 @@ source "https://rubygems.org" gem "activerecord", "~> 6.0.0.beta3" gem "mysql2", ">= 0.4.4" gem "pg", ">= 0.18", "< 2.0" -gem "sqlite3", "~> 1.3", ">= 1.3.6" +gem "sqlite3", "~> 1.4" gemspec path: "../" From d13d6574e88a9f5e697ec2af8f73160c3e8ff5a7 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sat, 24 Aug 2019 07:25:37 +0200 Subject: [PATCH 13/59] Travis: Fix creating databases --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index b9fc7cb..b7fc8c6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,6 +36,9 @@ env: - DB=sqlite - DB=mysql - DB=postgres +services: + - mysql + - postgres before_script: - gem update --system # https://github.com/travis-ci/travis-ci/issues/8978 - sh -c "if [ '$DB' = 'mysql' ]; then mysql -e 'create database IF NOT EXISTS unread_test;'; fi" From 161a60983f146fab0b71ea9fe712620b52321c59 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sat, 24 Aug 2019 07:38:27 +0200 Subject: [PATCH 14/59] Drop support for Ruby 2.3 (because EOL) --- .travis.yml | 3 --- README.md | 2 +- unread.gemspec | 2 +- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index b7fc8c6..d252172 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,5 @@ language: ruby rvm: - - 2.3.8 - 2.4.6 - 2.5.5 - 2.6.3 @@ -14,8 +13,6 @@ gemfile: - gemfiles/rails_4_0.gemfile matrix: exclude: - - rvm: 2.3.8 - gemfile: gemfiles/rails_6_0.gemfile - rvm: 2.4.6 gemfile: gemfiles/rails_4_0.gemfile - rvm: 2.4.6 diff --git a/README.md b/README.md index c86901b..0db9260 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Ruby gem to manage read/unread status of ActiveRecord objects - and it's fast. ## Requirements -* Ruby 2.3 or newer +* Ruby 2.4 or newer * Rails 4.0 or newer (including Rails 6) * MySQL, PostgreSQL or SQLite * Needs a timestamp field in your models (like created_at or updated_at) with a database index on it diff --git a/unread.gemspec b/unread.gemspec index ab1f9b5..97708ab 100644 --- a/unread.gemspec +++ b/unread.gemspec @@ -12,7 +12,7 @@ Gem::Specification.new do |s| s.homepage = "https://github.com/ledermann/unread" s.summary = %q{Manages read/unread status of ActiveRecord objects} s.description = %q{This gem creates a scope for unread objects and adds methods to mark objects as read } - s.required_ruby_version = '>= 2.3' + s.required_ruby_version = '>= 2.4' s.files = `git ls-files -z`.split("\x0").reject do |f| f.match(%r{^(test|spec|features)/}) From b3e257b6c450fe9256e99a3949dfa5a382a0e5fd Mon Sep 17 00:00:00 2001 From: Fotos Georgiadis Date: Sun, 25 Aug 2019 01:30:39 -0700 Subject: [PATCH 15/59] Quote the readable.id in Unread::Reader::Scopes (#108) * Quote the readable.id in Unread::Reader::Scopes Fixes an SQL syntax error when the readable.id is a UUID. * Add parantheses around quote_bound_value argument in Unread::Reader::Scopes --- lib/unread/reader_scopes.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/unread/reader_scopes.rb b/lib/unread/reader_scopes.rb index b6936c8..992e982 100644 --- a/lib/unread/reader_scopes.rb +++ b/lib/unread/reader_scopes.rb @@ -12,7 +12,7 @@ def join_read_marks(readable) joins "LEFT JOIN #{ReadMark.quoted_table_name} ON #{ReadMark.quoted_table_name}.readable_type = '#{readable.class.readable_parent.name}' - AND (#{ReadMark.quoted_table_name}.readable_id = #{readable.id} OR #{ReadMark.quoted_table_name}.readable_id IS NULL) + AND (#{ReadMark.quoted_table_name}.readable_id = #{quote_bound_value(readable.id)} OR #{ReadMark.quoted_table_name}.readable_id IS NULL) AND #{ReadMark.quoted_table_name}.reader_id = #{quoted_table_name}.#{quoted_primary_key} AND #{ReadMark.quoted_table_name}.reader_type = '#{connection.quote_string base_class.name}' AND #{ReadMark.quoted_table_name}.timestamp >= '#{connection.quoted_date readable.send(readable.class.readable_options[:on])}'" @@ -31,8 +31,8 @@ def with_read_marks_for(readable) join_read_marks(readable).select("#{quoted_table_name}.*, #{ReadMark.quoted_table_name}.id AS read_mark_id, - #{quote_bound_value readable.class.name}#{postgresql_string_cast} AS read_mark_readable_type, - #{readable.id} AS read_mark_readable_id") + #{quote_bound_value(readable.class.name)}#{postgresql_string_cast} AS read_mark_readable_type, + #{quote_bound_value(readable.id)} AS read_mark_readable_id") end end end From 058313d65091e10e0cce7e13f4f893dc00957593 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sun, 25 Aug 2019 10:49:14 +0200 Subject: [PATCH 16/59] 2019 --- MIT-LICENSE | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MIT-LICENSE b/MIT-LICENSE index 3d98d42..11f8026 100644 --- a/MIT-LICENSE +++ b/MIT-LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2010-2018 Georg Ledermann +Copyright (c) 2010-2019 Georg Ledermann Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/README.md b/README.md index 0db9260..b4df74d 100644 --- a/README.md +++ b/README.md @@ -223,4 +223,4 @@ AND messages.created_at > '2010-10-20 08:50:00' Hint: You should add a database index on `messages.created_at`. -Copyright (c) 2010-2018 [Georg Ledermann](http://www.georg-ledermann.de) and [contributors](https://github.com/ledermann/unread/graphs/contributors), released under the MIT license +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 From 727ee06346ada9930f1423f406e6a4510d3145c3 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sun, 25 Aug 2019 10:52:43 +0200 Subject: [PATCH 17/59] Bump 0.11.0 --- lib/unread/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/unread/version.rb b/lib/unread/version.rb index d1da520..e40b0f0 100644 --- a/lib/unread/version.rb +++ b/lib/unread/version.rb @@ -1,3 +1,3 @@ module Unread - VERSION = '0.10.1' + VERSION = '0.11.0' end From 404ffb557c6635609318162a18cb3c8ccdeec1d7 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Fri, 25 Oct 2019 09:59:00 +0200 Subject: [PATCH 18/59] Reaader#read_mark_gobal: Fix memoization Belongs to #111 --- lib/unread/reader.rb | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/unread/reader.rb b/lib/unread/reader.rb index f526728..dce4e96 100644 --- a/lib/unread/reader.rb +++ b/lib/unread/reader.rb @@ -16,7 +16,13 @@ module InstanceMethods def read_mark_global(klass) @read_mark_global ||= {} readable_klass = klass.readable_parent - @read_mark_global[readable_klass] ||= read_marks.where(readable_type: readable_klass.name).global.first + + # Memoize with NIL handling + if @read_mark_global.has_key?(readable_klass) + @read_mark_global[readable_klass] + else + @read_mark_global[readable_klass] = read_marks.where(readable_type: readable_klass.name).global.first + end end def forget_memoized_read_mark_global From 8133a635a699d4d54f62483e10da8d297eb39dc5 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sat, 26 Oct 2019 10:31:09 +0200 Subject: [PATCH 19/59] Travis: Test against latest Rubies --- .travis.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index d252172..f613ca6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,8 @@ language: ruby rvm: - - 2.4.6 - - 2.5.5 - - 2.6.3 + - 2.4.9 + - 2.5.7 + - 2.6.5 gemfile: - gemfiles/rails_6_0.gemfile - gemfiles/rails_5_2.gemfile @@ -13,19 +13,19 @@ gemfile: - gemfiles/rails_4_0.gemfile matrix: exclude: - - rvm: 2.4.6 + - rvm: 2.4.9 gemfile: gemfiles/rails_4_0.gemfile - - rvm: 2.4.6 + - rvm: 2.4.9 gemfile: gemfiles/rails_4_1.gemfile - - rvm: 2.4.6 + - rvm: 2.4.9 gemfile: gemfiles/rails_6_0.gemfile - - rvm: 2.5.5 + - rvm: 2.5.7 gemfile: gemfiles/rails_4_0.gemfile - - rvm: 2.5.5 + - rvm: 2.5.7 gemfile: gemfiles/rails_4_1.gemfile - - rvm: 2.6.3 + - rvm: 2.6.5 gemfile: gemfiles/rails_4_0.gemfile - - rvm: 2.6.3 + - rvm: 2.6.5 gemfile: gemfiles/rails_4_1.gemfile before_install: gem update bundler sudo: false From 0a86df30f5de41f316a36b40eb2c4f7404dd0ff9 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sat, 26 Oct 2019 10:32:59 +0200 Subject: [PATCH 20/59] Travis: Test against Rails 6.0.0 final --- Appraisals | 2 +- gemfiles/rails_6_0.gemfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Appraisals b/Appraisals index 6eafe88..f1a5d4a 100644 --- a/Appraisals +++ b/Appraisals @@ -1,5 +1,5 @@ appraise "rails-6-0" do - gem "activerecord", "~> 6.0.0.beta3" + gem "activerecord", "~> 6.0.0" gem "mysql2", ">= 0.4.4" gem "pg", ">= 0.18", "< 2.0" gem "sqlite3", "~> 1.4" diff --git a/gemfiles/rails_6_0.gemfile b/gemfiles/rails_6_0.gemfile index 54c91d5..2fd3073 100644 --- a/gemfiles/rails_6_0.gemfile +++ b/gemfiles/rails_6_0.gemfile @@ -2,7 +2,7 @@ source "https://rubygems.org" -gem "activerecord", "~> 6.0.0.beta3" +gem "activerecord", "~> 6.0.0" gem "mysql2", ">= 0.4.4" gem "pg", ">= 0.18", "< 2.0" gem "sqlite3", "~> 1.4" From 0f1b24285a276fb3226c330f26ba5402c94eddcc Mon Sep 17 00:00:00 2001 From: Konstantin Rudy Date: Sat, 31 Oct 2020 15:32:47 +0300 Subject: [PATCH 21/59] Added optional: true to reader's belongs_to [Fixes #120] (#121) * Added optional: true to read_marks [Fixes #120] * Added specs for the optional reader case [Fixes #120] --- lib/unread/base.rb | 6 +++++- spec/unread/readable_spec.rb | 28 ++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/lib/unread/base.rb b/lib/unread/base.rb index 3cfa080..a1289c6 100644 --- a/lib/unread/base.rb +++ b/lib/unread/base.rb @@ -8,7 +8,11 @@ def acts_as_reader ReadMark.reader_classes ||= [] unless ReadMark.reader_classes.include?(self) - ReadMark.belongs_to :reader, polymorphic: true, inverse_of: :read_marks + if ActiveRecord::VERSION::MAJOR < 5 + ReadMark.belongs_to :reader, polymorphic: true, inverse_of: :read_marks + else + ReadMark.belongs_to :reader, polymorphic: true, inverse_of: :read_marks, optional: true + end has_many :read_marks, dependent: :delete_all, as: :reader, inverse_of: :reader diff --git a/spec/unread/readable_spec.rb b/spec/unread/readable_spec.rb index c8add8c..ef275fc 100644 --- a/spec/unread/readable_spec.rb +++ b/spec/unread/readable_spec.rb @@ -253,6 +253,34 @@ expect(@reader.read_marks.single.count).to eq 1 end + + context 'when the reader class defines a default_scope that excludes tha reader instance' do + before { ReadMark.stub(belongs_to_required_by_default: true) } + + let!(:reader_class) do + CustomReader = Class.new(ActiveRecord::Base) do + self.primary_key = 'number' + self.table_name = 'readers' + + acts_as_reader + + default_scope { where.not(name: 'foo') } + end + end + let!(:reader) { reader_class.create!(name: 'foo') } + let(:document) { Document.create! } + + before do + wait + document + end + + subject { document.mark_as_read!(for: reader) } + + it 'does not raise_error' do + expect { subject }.not_to raise_error + end + end end describe '.mark_as_read!' do From 4ff961af72f9f0c440e858d4fea21c486edbba0b Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sat, 31 Oct 2020 13:37:22 +0100 Subject: [PATCH 22/59] Drop Ruby 2.4 (EOL), Add 2.7, --- .travis.yml | 20 +++++++++----------- README.md | 2 +- unread.gemspec | 2 +- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index f613ca6..15b5d49 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,8 @@ language: ruby rvm: - - 2.4.9 - - 2.5.7 - - 2.6.5 + - 2.5.8 + - 2.6.6 + - 2.7.2 gemfile: - gemfiles/rails_6_0.gemfile - gemfiles/rails_5_2.gemfile @@ -13,19 +13,17 @@ gemfile: - gemfiles/rails_4_0.gemfile matrix: exclude: - - rvm: 2.4.9 + - rvm: 2.5.8 gemfile: gemfiles/rails_4_0.gemfile - - rvm: 2.4.9 + - rvm: 2.5.8 gemfile: gemfiles/rails_4_1.gemfile - - rvm: 2.4.9 - gemfile: gemfiles/rails_6_0.gemfile - - rvm: 2.5.7 + - rvm: 2.6.6 gemfile: gemfiles/rails_4_0.gemfile - - rvm: 2.5.7 + - rvm: 2.6.6 gemfile: gemfiles/rails_4_1.gemfile - - rvm: 2.6.5 + - rvm: 2.7.2 gemfile: gemfiles/rails_4_0.gemfile - - rvm: 2.6.5 + - rvm: 2.7.2 gemfile: gemfiles/rails_4_1.gemfile before_install: gem update bundler sudo: false diff --git a/README.md b/README.md index b4df74d..e429ab7 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Ruby gem to manage read/unread status of ActiveRecord objects - and it's fast. ## Requirements -* Ruby 2.4 or newer +* Ruby 2.5 or newer * Rails 4.0 or newer (including Rails 6) * MySQL, PostgreSQL or SQLite * Needs a timestamp field in your models (like created_at or updated_at) with a database index on it diff --git a/unread.gemspec b/unread.gemspec index 97708ab..c6b8e70 100644 --- a/unread.gemspec +++ b/unread.gemspec @@ -12,7 +12,7 @@ Gem::Specification.new do |s| s.homepage = "https://github.com/ledermann/unread" s.summary = %q{Manages read/unread status of ActiveRecord objects} s.description = %q{This gem creates a scope for unread objects and adds methods to mark objects as read } - s.required_ruby_version = '>= 2.4' + s.required_ruby_version = '>= 2.5' s.files = `git ls-files -z`.split("\x0").reject do |f| f.match(%r{^(test|spec|features)/}) From ef70acad0118c247a1e5bfff7916c7f8ff9435a9 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sat, 31 Oct 2020 13:38:05 +0100 Subject: [PATCH 23/59] 2020 --- MIT-LICENSE | 2 +- README.md | 2 +- unread.gemspec | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/MIT-LICENSE b/MIT-LICENSE index 11f8026..cb51b06 100644 --- a/MIT-LICENSE +++ b/MIT-LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2010-2019 Georg Ledermann +Copyright (c) 2010-2020 Georg Ledermann Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/README.md b/README.md index e429ab7..5c68e45 100644 --- a/README.md +++ b/README.md @@ -223,4 +223,4 @@ AND messages.created_at > '2010-10-20 08:50:00' Hint: You should add a database index on `messages.created_at`. -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 +Copyright (c) 2010-2020 [Georg Ledermann](https://ledermann.dev) and [contributors](https://github.com/ledermann/unread/graphs/contributors), released under the MIT license diff --git a/unread.gemspec b/unread.gemspec index c6b8e70..51dcb5b 100644 --- a/unread.gemspec +++ b/unread.gemspec @@ -8,7 +8,7 @@ Gem::Specification.new do |s| s.version = Unread::VERSION s.licenses = ['MIT'] s.authors = ["Georg Ledermann"] - s.email = ["mail@georg-ledermann.de"] + s.email = ["georg@ledermann.dev"] s.homepage = "https://github.com/ledermann/unread" s.summary = %q{Manages read/unread status of ActiveRecord objects} s.description = %q{This gem creates a scope for unread objects and adds methods to mark objects as read } From 083259779f13f04992004ebc0ca1a0805c9c0b5a Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sat, 31 Oct 2020 14:38:02 +0100 Subject: [PATCH 24/59] Travis: Old Rails 4.2 conflicts with newest Ruby 2.7 --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 15b5d49..2b615ee 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,6 +26,8 @@ matrix: - rvm: 2.7.2 gemfile: gemfiles/rails_4_1.gemfile before_install: gem update bundler + - rvm: 2.7.2 + gemfile: gemfiles/rails_4_2.gemfile sudo: false env: - DB=sqlite From 8cf9a42a8e9d1ece6e21514638070acfab55c7bf Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sat, 31 Oct 2020 14:38:47 +0100 Subject: [PATCH 25/59] Travis: Remove outdated patches --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2b615ee..4ba6e4e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,7 +25,6 @@ matrix: gemfile: gemfiles/rails_4_0.gemfile - rvm: 2.7.2 gemfile: gemfiles/rails_4_1.gemfile -before_install: gem update bundler - rvm: 2.7.2 gemfile: gemfiles/rails_4_2.gemfile sudo: false @@ -37,7 +36,6 @@ services: - mysql - postgres before_script: - - gem update --system # https://github.com/travis-ci/travis-ci/issues/8978 - sh -c "if [ '$DB' = 'mysql' ]; then mysql -e 'create database IF NOT EXISTS unread_test;'; fi" - sh -c "if [ '$DB' = 'postgres' ]; then psql -c 'create database unread_test;' -U postgres; fi" addons: From 7d227ce2a6a57702702edd2443366b9d9efece50 Mon Sep 17 00:00:00 2001 From: Aleksey Strizhak Date: Mon, 8 Feb 2021 12:27:50 +0500 Subject: [PATCH 26/59] add 'null: false' option for timestamp fields in migration generator --- lib/generators/unread/migration/templates/migration.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/generators/unread/migration/templates/migration.rb b/lib/generators/unread/migration/templates/migration.rb index 098a51c..02244a4 100644 --- a/lib/generators/unread/migration/templates/migration.rb +++ b/lib/generators/unread/migration/templates/migration.rb @@ -3,7 +3,7 @@ def self.up create_table ReadMark, force: true, options: create_options do |t| t.references :readable, polymorphic: { null: false } t.references :reader, polymorphic: { null: false } - t.datetime :timestamp + t.datetime :timestamp, null: false end add_index ReadMark, [:reader_id, :reader_type, :readable_type, :readable_id], name: 'read_marks_reader_readable_index', unique: true From 917eda970f1ebb3921b3f4a8bd6c1f5afe77cea5 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Mon, 15 Feb 2021 09:45:29 +0100 Subject: [PATCH 27/59] 2021 --- MIT-LICENSE | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MIT-LICENSE b/MIT-LICENSE index cb51b06..2648a83 100644 --- a/MIT-LICENSE +++ b/MIT-LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2010-2020 Georg Ledermann +Copyright (c) 2010-2021 Georg Ledermann Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/README.md b/README.md index 5c68e45..849fc2e 100644 --- a/README.md +++ b/README.md @@ -223,4 +223,4 @@ AND messages.created_at > '2010-10-20 08:50:00' Hint: You should add a database index on `messages.created_at`. -Copyright (c) 2010-2020 [Georg Ledermann](https://ledermann.dev) and [contributors](https://github.com/ledermann/unread/graphs/contributors), released under the MIT license +Copyright (c) 2010-2021 [Georg Ledermann](https://ledermann.dev) and [contributors](https://github.com/ledermann/unread/graphs/contributors), released under the MIT license From 58baa50dfbfe76cca87db887e6a6d54c52f005c7 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Mon, 15 Feb 2021 09:44:57 +0100 Subject: [PATCH 28/59] Test against Ruby 3.0.0 and Rails 6.1 --- .travis.yml | 8 ++++++++ Appraisals | 7 +++++++ gemfiles/rails_6_1.gemfile | 10 ++++++++++ 3 files changed, 25 insertions(+) create mode 100644 gemfiles/rails_6_1.gemfile diff --git a/.travis.yml b/.travis.yml index 4ba6e4e..584244a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,9 @@ rvm: - 2.5.8 - 2.6.6 - 2.7.2 + - 3.0.0 gemfile: + - gemfiles/rails_6_1.gemfile - gemfiles/rails_6_0.gemfile - gemfiles/rails_5_2.gemfile - gemfiles/rails_5_1.gemfile @@ -27,6 +29,12 @@ matrix: gemfile: gemfiles/rails_4_1.gemfile - rvm: 2.7.2 gemfile: gemfiles/rails_4_2.gemfile + - rvm: 3.0.0 + gemfile: gemfiles/rails_4_0.gemfile + - rvm: 3.0.0 + gemfile: gemfiles/rails_4_1.gemfile + - rvm: 3.0.0 + gemfile: gemfiles/rails_4_2.gemfile sudo: false env: - DB=sqlite diff --git a/Appraisals b/Appraisals index f1a5d4a..615bc9b 100644 --- a/Appraisals +++ b/Appraisals @@ -1,3 +1,10 @@ +appraise "rails-6-1" do + gem "activerecord", "~> 6.1.2", ">= 6.1.2.1" + gem "mysql2", "~> 0.5" + gem "pg", "~> 1.1" + gem "sqlite3", "~> 1.4" +end + appraise "rails-6-0" do gem "activerecord", "~> 6.0.0" gem "mysql2", ">= 0.4.4" diff --git a/gemfiles/rails_6_1.gemfile b/gemfiles/rails_6_1.gemfile new file mode 100644 index 0000000..b107a77 --- /dev/null +++ b/gemfiles/rails_6_1.gemfile @@ -0,0 +1,10 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "activerecord", "~> 6.1.2", ">= 6.1.2.1" +gem "mysql2", "~> 0.5" +gem "pg", "~> 1.1" +gem "sqlite3", "~> 1.4" + +gemspec path: "../" From a7c7521ce35b323805d9226cc21f72d0c51c0044 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Mon, 15 Feb 2021 10:18:34 +0100 Subject: [PATCH 29/59] Travis: Ruby 3 requires Rails 6.0 or later --- .travis.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.travis.yml b/.travis.yml index 584244a..9bb842b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,6 +35,12 @@ matrix: gemfile: gemfiles/rails_4_1.gemfile - rvm: 3.0.0 gemfile: gemfiles/rails_4_2.gemfile + - rvm: 3.0.0 + gemfile: gemfiles/rails_5_0.gemfile + - rvm: 3.0.0 + gemfile: gemfiles/rails_5_1.gemfile + - rvm: 3.0.0 + gemfile: gemfiles/rails_5_2.gemfile sudo: false env: - DB=sqlite From 63f176a8f2cd818ff21a5d275a139a05d261e67d Mon Sep 17 00:00:00 2001 From: Taher Ahmed Ghaleb Date: Tue, 9 Mar 2021 00:56:08 -0500 Subject: [PATCH 30/59] Enable bundler caching for travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 9bb842b..27ff51e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,5 @@ language: ruby +cache: bundler rvm: - 2.5.8 - 2.6.6 From b7e566f8178828b1a2880f9fb2d9acc74342b9a4 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Thu, 8 Apr 2021 07:39:24 +0200 Subject: [PATCH 31/59] Drop support for Ruby 2.5 because of EOL --- .travis.yml | 5 ----- README.md | 2 +- unread.gemspec | 2 +- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 27ff51e..29044f3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ language: ruby cache: bundler rvm: - - 2.5.8 - 2.6.6 - 2.7.2 - 3.0.0 @@ -16,10 +15,6 @@ gemfile: - gemfiles/rails_4_0.gemfile matrix: exclude: - - rvm: 2.5.8 - gemfile: gemfiles/rails_4_0.gemfile - - rvm: 2.5.8 - gemfile: gemfiles/rails_4_1.gemfile - rvm: 2.6.6 gemfile: gemfiles/rails_4_0.gemfile - rvm: 2.6.6 diff --git a/README.md b/README.md index 849fc2e..f5faf24 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Ruby gem to manage read/unread status of ActiveRecord objects - and it's fast. ## Requirements -* Ruby 2.5 or newer +* Ruby 2.6 or newer * Rails 4.0 or newer (including Rails 6) * MySQL, PostgreSQL or SQLite * Needs a timestamp field in your models (like created_at or updated_at) with a database index on it diff --git a/unread.gemspec b/unread.gemspec index 51dcb5b..2c42205 100644 --- a/unread.gemspec +++ b/unread.gemspec @@ -12,7 +12,7 @@ Gem::Specification.new do |s| s.homepage = "https://github.com/ledermann/unread" s.summary = %q{Manages read/unread status of ActiveRecord objects} s.description = %q{This gem creates a scope for unread objects and adds methods to mark objects as read } - s.required_ruby_version = '>= 2.5' + s.required_ruby_version = '>= 2.6' s.files = `git ls-files -z`.split("\x0").reject do |f| f.match(%r{^(test|spec|features)/}) From 986ad088496aa9860d18699b8647d18e5ada7da1 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Thu, 8 Apr 2021 07:55:00 +0200 Subject: [PATCH 32/59] CI: Migrate from Travis to GitHub Actions Using code from https://github.com/makandra/active_type/blob/master/.github/workflows/test.yml --- .github/workflows/main.yml | 207 ++++++++++++++++++ .travis.yml | 52 ----- Appraisals | 16 +- README.md | 2 +- .../{rails_4_0.gemfile => rails_4.0.gemfile} | 0 .../{rails_4_1.gemfile => rails_4.1.gemfile} | 0 .../{rails_4_2.gemfile => rails_4.2.gemfile} | 0 .../{rails_5_0.gemfile => rails_5.0.gemfile} | 0 .../{rails_5_1.gemfile => rails_5.1.gemfile} | 0 .../{rails_5_2.gemfile => rails_5.2.gemfile} | 0 .../{rails_6_0.gemfile => rails_6.0.gemfile} | 0 .../{rails_6_1.gemfile => rails_6.1.gemfile} | 0 spec/database.yml | 6 + 13 files changed, 222 insertions(+), 61 deletions(-) create mode 100644 .github/workflows/main.yml delete mode 100644 .travis.yml rename gemfiles/{rails_4_0.gemfile => rails_4.0.gemfile} (100%) rename gemfiles/{rails_4_1.gemfile => rails_4.1.gemfile} (100%) rename gemfiles/{rails_4_2.gemfile => rails_4.2.gemfile} (100%) rename gemfiles/{rails_5_0.gemfile => rails_5.0.gemfile} (100%) rename gemfiles/{rails_5_1.gemfile => rails_5.1.gemfile} (100%) rename gemfiles/{rails_5_2.gemfile => rails_5.2.gemfile} (100%) rename gemfiles/{rails_6_0.gemfile => rails_6.0.gemfile} (100%) rename gemfiles/{rails_6_1.gemfile => rails_6.1.gemfile} (100%) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..0eb3322 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,207 @@ +name: Test + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + test_sqlite: + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + ruby: [ '2.6', '2.7', '3.0' ] + rails: [ '4.2', '5.0', '5.1', '5.2', '6.0', '6.1' ] + exclude: + - ruby: '2.6' + rails: '4.0' + - ruby: '2.6' + rails: '4.1' + - ruby: '2.7' + rails: '4.0' + - ruby: '2.7' + rails: '4.1' + - ruby: '2.7' + rails: '4.2' + - ruby: '3.0' + rails: '4.0' + - ruby: '3.0' + rails: '4.1' + - ruby: '3.0' + rails: '4.2' + - ruby: '3.0' + rails: '5.0' + - ruby: '3.0' + rails: '5.1' + - ruby: '3.0' + rails: '5.2' + + name: SQLite / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} + + steps: + - uses: actions/checkout@v2 + + - name: Setup Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby }} + + - name: Install gems + env: + MATRIX_RAILS_VERSION: ${{ matrix.rails }} + run: | + export BUNDLE_GEMFILE="${GITHUB_WORKSPACE}/gemfiles/rails_${MATRIX_RAILS_VERSION}.gemfile" + bundle install --jobs 4 --retry 3 + + - name: RSpec + run: bundle exec rake + + test_mysql: + runs-on: ubuntu-latest + + services: + mysql: + image: mysql:5.7 + env: + MYSQL_ROOT_PASSWORD: password + ports: + - 3306:3306 + options: >- + --health-cmd="mysqladmin ping" + --health-interval=10s + --health-timeout=5s + --health-retries=3 + + strategy: + fail-fast: false + matrix: + ruby: [ '2.6', '2.7', '3.0' ] + rails: [ '4.2', '5.0', '5.1', '5.2', '6.0', '6.1' ] + exclude: + - ruby: '2.6' + rails: '4.0' + - ruby: '2.6' + rails: '4.1' + - ruby: '2.7' + rails: '4.0' + - ruby: '2.7' + rails: '4.1' + - ruby: '2.7' + rails: '4.2' + - ruby: '3.0' + rails: '4.0' + - ruby: '3.0' + rails: '4.1' + - ruby: '3.0' + rails: '4.2' + - ruby: '3.0' + rails: '5.0' + - ruby: '3.0' + rails: '5.1' + - ruby: '3.0' + rails: '5.2' + + name: MySQL / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} + + steps: + - uses: actions/checkout@v2 + + - name: Setup Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby }} + + - name: Install database client + run: | + sudo apt-get update + sudo apt-get install -y mysql-client libmariadbclient-dev + + - name: Install gems + env: + MATRIX_RAILS_VERSION: ${{ matrix.rails }} + run: | + export BUNDLE_GEMFILE="${GITHUB_WORKSPACE}/gemfiles/rails_${MATRIX_RAILS_VERSION}.gemfile" + bundle install --jobs 4 --retry 3 + + - name: Setup database + run: | + mysql -e 'create database IF NOT EXISTS unread_test;' -u root --password=password -P 3306 -h 127.0.0.1 + + - name: RSpec + run: bundle exec rake + + test_postgres: + runs-on: ubuntu-latest + + services: + postgres: + image: postgres + env: + POSTGRES_PASSWORD: postgres + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 5432:5432 + + strategy: + fail-fast: false + matrix: + ruby: [ '2.6', '2.7', '3.0' ] + rails: [ '4.2', '5.0', '5.1', '5.2', '6.0', '6.1' ] + exclude: + - ruby: '2.6' + rails: '4.0' + - ruby: '2.6' + rails: '4.1' + - ruby: '2.7' + rails: '4.0' + - ruby: '2.7' + rails: '4.1' + - ruby: '2.7' + rails: '4.2' + - ruby: '3.0' + rails: '4.0' + - ruby: '3.0' + rails: '4.1' + - ruby: '3.0' + rails: '4.2' + - ruby: '3.0' + rails: '5.0' + - ruby: '3.0' + rails: '5.1' + - ruby: '3.0' + rails: '5.2' + + name: PostgreSQL / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} + + steps: + - uses: actions/checkout@v2 + + - name: Setup Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby }} + + - name: Install database client + run: | + sudo apt-get install -y postgresql-client + + - name: Install gems + env: + MATRIX_RAILS_VERSION: ${{ matrix.rails }} + run: | + export BUNDLE_GEMFILE="${GITHUB_WORKSPACE}/gemfiles/rails_${MATRIX_RAILS_VERSION}.gemfile" + bundle install --jobs 4 --retry 3 + + - name: Setup database + run: | + PGPASSWORD=postgres psql -c 'create database unread_test;' -U postgres -p 5432 -h localhost + + - name: RSpec + run: bundle exec rake diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 29044f3..0000000 --- a/.travis.yml +++ /dev/null @@ -1,52 +0,0 @@ -language: ruby -cache: bundler -rvm: - - 2.6.6 - - 2.7.2 - - 3.0.0 -gemfile: - - gemfiles/rails_6_1.gemfile - - gemfiles/rails_6_0.gemfile - - gemfiles/rails_5_2.gemfile - - gemfiles/rails_5_1.gemfile - - gemfiles/rails_5_0.gemfile - - gemfiles/rails_4_2.gemfile - - gemfiles/rails_4_1.gemfile - - gemfiles/rails_4_0.gemfile -matrix: - exclude: - - rvm: 2.6.6 - gemfile: gemfiles/rails_4_0.gemfile - - rvm: 2.6.6 - gemfile: gemfiles/rails_4_1.gemfile - - rvm: 2.7.2 - gemfile: gemfiles/rails_4_0.gemfile - - rvm: 2.7.2 - gemfile: gemfiles/rails_4_1.gemfile - - rvm: 2.7.2 - gemfile: gemfiles/rails_4_2.gemfile - - rvm: 3.0.0 - gemfile: gemfiles/rails_4_0.gemfile - - rvm: 3.0.0 - gemfile: gemfiles/rails_4_1.gemfile - - rvm: 3.0.0 - gemfile: gemfiles/rails_4_2.gemfile - - rvm: 3.0.0 - gemfile: gemfiles/rails_5_0.gemfile - - rvm: 3.0.0 - gemfile: gemfiles/rails_5_1.gemfile - - rvm: 3.0.0 - gemfile: gemfiles/rails_5_2.gemfile -sudo: false -env: - - DB=sqlite - - DB=mysql - - DB=postgres -services: - - mysql - - postgres -before_script: - - sh -c "if [ '$DB' = 'mysql' ]; then mysql -e 'create database IF NOT EXISTS unread_test;'; fi" - - sh -c "if [ '$DB' = 'postgres' ]; then psql -c 'create database unread_test;' -U postgres; fi" -addons: - postgresql: "9.4" diff --git a/Appraisals b/Appraisals index 615bc9b..eace2f0 100644 --- a/Appraisals +++ b/Appraisals @@ -1,53 +1,53 @@ -appraise "rails-6-1" do +appraise "rails-6.1" do gem "activerecord", "~> 6.1.2", ">= 6.1.2.1" gem "mysql2", "~> 0.5" gem "pg", "~> 1.1" gem "sqlite3", "~> 1.4" end -appraise "rails-6-0" do +appraise "rails-6.0" do gem "activerecord", "~> 6.0.0" gem "mysql2", ">= 0.4.4" gem "pg", ">= 0.18", "< 2.0" gem "sqlite3", "~> 1.4" end -appraise "rails-5-2" do +appraise "rails-5.2" do gem "activerecord", "~> 5.2.3" gem "mysql2", ">= 0.4.4", "< 0.6.0" gem "pg", ">= 0.18", "< 2.0" gem "sqlite3", "~> 1.3", ">= 1.3.6" end -appraise "rails-5-1" do +appraise "rails-5.1" do gem "activerecord", "~> 5.1.7" gem "mysql2", ">= 0.3.18", "< 0.6.0" gem "pg", ">= 0.18", "< 2.0" gem "sqlite3", "~> 1.3", ">= 1.3.6" end -appraise "rails-5-0" do +appraise "rails-5.0" do gem "activerecord", "~> 5.0.7" gem 'mysql2', '>= 0.3.18', '< 0.6.0' gem "pg", ">= 0.18", "< 2.0" gem 'sqlite3', '~> 1.3.6' end -appraise "rails-4-2" do +appraise "rails-4.2" do gem "activerecord", "~> 4.2.11" gem 'mysql2', '>= 0.3.13', '< 0.6.0' gem "pg", "~> 0.15" gem 'sqlite3', '~> 1.3.6' end -appraise "rails-4-1" do +appraise "rails-4.1" do gem "activerecord", "~> 4.1.16" gem 'mysql2', '~> 0.3.13' gem "pg", "~> 0.11" gem 'sqlite3', '~> 1.3.6' end -appraise "rails-4-0" do +appraise "rails-4.0" do gem "activerecord", "~> 4.0.13" gem "mysql2", '~> 0.3.10' gem "pg", "~> 0.11" diff --git a/README.md b/README.md index f5faf24..8160b96 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Unread Ruby gem to manage read/unread status of ActiveRecord objects - and it's fast. -[![Build Status](https://travis-ci.org/ledermann/unread.svg?branch=master)](https://travis-ci.org/ledermann/unread) +[![Build Status](https://github.com/ledermann/unread/workflows/Test/badge.svg?branch=master)](https://github.com/ledermann/unread/actions) [![Maintainability](https://api.codeclimate.com/v1/badges/930c8df0f99b20324444/maintainability)](https://codeclimate.com/github/ledermann/unread/maintainability) [![Coverage Status](https://coveralls.io/repos/ledermann/unread/badge.svg?branch=master)](https://coveralls.io/r/ledermann/unread?branch=master) diff --git a/gemfiles/rails_4_0.gemfile b/gemfiles/rails_4.0.gemfile similarity index 100% rename from gemfiles/rails_4_0.gemfile rename to gemfiles/rails_4.0.gemfile diff --git a/gemfiles/rails_4_1.gemfile b/gemfiles/rails_4.1.gemfile similarity index 100% rename from gemfiles/rails_4_1.gemfile rename to gemfiles/rails_4.1.gemfile diff --git a/gemfiles/rails_4_2.gemfile b/gemfiles/rails_4.2.gemfile similarity index 100% rename from gemfiles/rails_4_2.gemfile rename to gemfiles/rails_4.2.gemfile diff --git a/gemfiles/rails_5_0.gemfile b/gemfiles/rails_5.0.gemfile similarity index 100% rename from gemfiles/rails_5_0.gemfile rename to gemfiles/rails_5.0.gemfile diff --git a/gemfiles/rails_5_1.gemfile b/gemfiles/rails_5.1.gemfile similarity index 100% rename from gemfiles/rails_5_1.gemfile rename to gemfiles/rails_5.1.gemfile diff --git a/gemfiles/rails_5_2.gemfile b/gemfiles/rails_5.2.gemfile similarity index 100% rename from gemfiles/rails_5_2.gemfile rename to gemfiles/rails_5.2.gemfile diff --git a/gemfiles/rails_6_0.gemfile b/gemfiles/rails_6.0.gemfile similarity index 100% rename from gemfiles/rails_6_0.gemfile rename to gemfiles/rails_6.0.gemfile diff --git a/gemfiles/rails_6_1.gemfile b/gemfiles/rails_6.1.gemfile similarity index 100% rename from gemfiles/rails_6_1.gemfile rename to gemfiles/rails_6.1.gemfile diff --git a/spec/database.yml b/spec/database.yml index d7bc521..139b8d9 100644 --- a/spec/database.yml +++ b/spec/database.yml @@ -5,8 +5,14 @@ mysql: adapter: mysql2 database: unread_test username: root + password: password encoding: utf8 + host: 127.0.0.1 + port: 3306 postgres: adapter: postgresql database: unread_test username: postgres + password: postgres + host: localhost + port: 5432 From 58faff7a7c79f1af3082fbd93b234a024c20509f Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Thu, 16 Dec 2021 11:24:18 +0100 Subject: [PATCH 33/59] Test against Rails 7 --- .github/workflows/main.yml | 12 +++++++++--- Appraisals | 7 +++++++ README.md | 2 +- gemfiles/rails_7.0.gemfile | 10 ++++++++++ 4 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 gemfiles/rails_7.0.gemfile diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0eb3322..bd0e6b8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,12 +14,14 @@ jobs: fail-fast: false matrix: ruby: [ '2.6', '2.7', '3.0' ] - rails: [ '4.2', '5.0', '5.1', '5.2', '6.0', '6.1' ] + rails: [ '4.2', '5.0', '5.1', '5.2', '6.0', '6.1', '7.0' ] exclude: - ruby: '2.6' rails: '4.0' - ruby: '2.6' rails: '4.1' + - ruby: '2.6' + rails: '7.0' - ruby: '2.7' rails: '4.0' - ruby: '2.7' @@ -79,12 +81,14 @@ jobs: fail-fast: false matrix: ruby: [ '2.6', '2.7', '3.0' ] - rails: [ '4.2', '5.0', '5.1', '5.2', '6.0', '6.1' ] + rails: [ '4.2', '5.0', '5.1', '5.2', '6.0', '6.1', '7.0' ] exclude: - ruby: '2.6' rails: '4.0' - ruby: '2.6' rails: '4.1' + - ruby: '2.6' + rails: '7.0' - ruby: '2.7' rails: '4.0' - ruby: '2.7' @@ -153,12 +157,14 @@ jobs: fail-fast: false matrix: ruby: [ '2.6', '2.7', '3.0' ] - rails: [ '4.2', '5.0', '5.1', '5.2', '6.0', '6.1' ] + rails: [ '4.2', '5.0', '5.1', '5.2', '6.0', '6.1', '7.0' ] exclude: - ruby: '2.6' rails: '4.0' - ruby: '2.6' rails: '4.1' + - ruby: '2.6' + rails: '7.0' - ruby: '2.7' rails: '4.0' - ruby: '2.7' diff --git a/Appraisals b/Appraisals index eace2f0..f5e4f3d 100644 --- a/Appraisals +++ b/Appraisals @@ -1,3 +1,10 @@ +appraise "rails-7.0" do + gem "activerecord", "~> 7.0.0" + gem "mysql2", "~> 0.5" + gem "pg", "~> 1.1" + gem "sqlite3", "~> 1.4" +end + appraise "rails-6.1" do gem "activerecord", "~> 6.1.2", ">= 6.1.2.1" gem "mysql2", "~> 0.5" diff --git a/README.md b/README.md index 8160b96..33a6356 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Ruby gem to manage read/unread status of ActiveRecord objects - and it's fast. ## Requirements * Ruby 2.6 or newer -* Rails 4.0 or newer (including Rails 6) +* Rails 4.0 or newer (including Rails 7) * MySQL, PostgreSQL or SQLite * Needs a timestamp field in your models (like created_at or updated_at) with a database index on it diff --git a/gemfiles/rails_7.0.gemfile b/gemfiles/rails_7.0.gemfile new file mode 100644 index 0000000..e4e22d0 --- /dev/null +++ b/gemfiles/rails_7.0.gemfile @@ -0,0 +1,10 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "activerecord", "~> 7.0.0" +gem "mysql2", "~> 0.5" +gem "pg", "~> 1.1" +gem "sqlite3", "~> 1.4" + +gemspec path: "../" From 48460f7b4828849f0c4e67a52fc8d0ba84b6a761 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Thu, 16 Dec 2021 11:51:19 +0100 Subject: [PATCH 34/59] CI: Fix testing against MySQL --- .github/workflows/main.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index bd0e6b8..762dea7 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -118,11 +118,6 @@ jobs: with: ruby-version: ${{ matrix.ruby }} - - name: Install database client - run: | - sudo apt-get update - sudo apt-get install -y mysql-client libmariadbclient-dev - - name: Install gems env: MATRIX_RAILS_VERSION: ${{ matrix.rails }} From 7b645e762f2daadb49abe51021db9011e30edb8d Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Thu, 16 Dec 2021 11:52:41 +0100 Subject: [PATCH 35/59] CI: No need to install postgresql-client --- .github/workflows/main.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 762dea7..13cc9f2 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -189,10 +189,6 @@ jobs: with: ruby-version: ${{ matrix.ruby }} - - name: Install database client - run: | - sudo apt-get install -y postgresql-client - - name: Install gems env: MATRIX_RAILS_VERSION: ${{ matrix.rails }} From 25a9cfd888e07acc7441d53868c6f10ae74c93ca Mon Sep 17 00:00:00 2001 From: fatkodima Date: Sat, 26 Nov 2022 23:52:49 +0200 Subject: [PATCH 36/59] Do not prematurely load `ActiveRecord::Base` --- lib/unread.rb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/unread.rb b/lib/unread.rb index e617ebb..6702929 100644 --- a/lib/unread.rb +++ b/lib/unread.rb @@ -1,7 +1,6 @@ require 'active_record' require 'unread/base' -require 'unread/read_mark' require 'unread/readable' require 'unread/reader' require 'unread/readable_scopes' @@ -9,10 +8,14 @@ require 'unread/garbage_collector' require 'unread/version' -ActiveRecord::Base.send :include, Unread - Unread::MIGRATION_BASE_CLASS = if ActiveRecord::VERSION::MAJOR >= 5 ActiveRecord::Migration[5.0] else ActiveRecord::Migration end + +ActiveSupport.on_load(:active_record) do + require 'unread/read_mark' + + include Unread +end From 3f9ffb344ad9ad95b08944067e2706a24e0aa7b0 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sun, 27 Nov 2022 09:12:07 +0100 Subject: [PATCH 37/59] Drop support for old Ruby and Rails because EOL Now: Ruby 2.7 or later, Rails 6.0 or later --- .github/workflows/main.yml | 87 +++----------------------------------- Appraisals | 42 ------------------ README.md | 4 +- gemfiles/rails_4.0.gemfile | 10 ----- gemfiles/rails_4.1.gemfile | 10 ----- gemfiles/rails_4.2.gemfile | 10 ----- gemfiles/rails_5.0.gemfile | 10 ----- gemfiles/rails_5.1.gemfile | 10 ----- gemfiles/rails_5.2.gemfile | 10 ----- unread.gemspec | 2 +- 10 files changed, 9 insertions(+), 186 deletions(-) delete mode 100644 gemfiles/rails_4.0.gemfile delete mode 100644 gemfiles/rails_4.1.gemfile delete mode 100644 gemfiles/rails_4.2.gemfile delete mode 100644 gemfiles/rails_5.0.gemfile delete mode 100644 gemfiles/rails_5.1.gemfile delete mode 100644 gemfiles/rails_5.2.gemfile diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 13cc9f2..4c31b83 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,33 +13,8 @@ jobs: strategy: fail-fast: false matrix: - ruby: [ '2.6', '2.7', '3.0' ] - rails: [ '4.2', '5.0', '5.1', '5.2', '6.0', '6.1', '7.0' ] - exclude: - - ruby: '2.6' - rails: '4.0' - - ruby: '2.6' - rails: '4.1' - - ruby: '2.6' - rails: '7.0' - - ruby: '2.7' - rails: '4.0' - - ruby: '2.7' - rails: '4.1' - - ruby: '2.7' - rails: '4.2' - - ruby: '3.0' - rails: '4.0' - - ruby: '3.0' - rails: '4.1' - - ruby: '3.0' - rails: '4.2' - - ruby: '3.0' - rails: '5.0' - - ruby: '3.0' - rails: '5.1' - - ruby: '3.0' - rails: '5.2' + ruby: [ '2.7', '3.0', '3.1' ] + rails: [ '6.0', '6.1', '7.0' ] name: SQLite / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} @@ -80,33 +55,8 @@ jobs: strategy: fail-fast: false matrix: - ruby: [ '2.6', '2.7', '3.0' ] - rails: [ '4.2', '5.0', '5.1', '5.2', '6.0', '6.1', '7.0' ] - exclude: - - ruby: '2.6' - rails: '4.0' - - ruby: '2.6' - rails: '4.1' - - ruby: '2.6' - rails: '7.0' - - ruby: '2.7' - rails: '4.0' - - ruby: '2.7' - rails: '4.1' - - ruby: '2.7' - rails: '4.2' - - ruby: '3.0' - rails: '4.0' - - ruby: '3.0' - rails: '4.1' - - ruby: '3.0' - rails: '4.2' - - ruby: '3.0' - rails: '5.0' - - ruby: '3.0' - rails: '5.1' - - ruby: '3.0' - rails: '5.2' + ruby: [ '2.7', '3.0', '3.1' ] + rails: [ '6.0', '6.1', '7.0' ] name: MySQL / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} @@ -151,33 +101,8 @@ jobs: strategy: fail-fast: false matrix: - ruby: [ '2.6', '2.7', '3.0' ] - rails: [ '4.2', '5.0', '5.1', '5.2', '6.0', '6.1', '7.0' ] - exclude: - - ruby: '2.6' - rails: '4.0' - - ruby: '2.6' - rails: '4.1' - - ruby: '2.6' - rails: '7.0' - - ruby: '2.7' - rails: '4.0' - - ruby: '2.7' - rails: '4.1' - - ruby: '2.7' - rails: '4.2' - - ruby: '3.0' - rails: '4.0' - - ruby: '3.0' - rails: '4.1' - - ruby: '3.0' - rails: '4.2' - - ruby: '3.0' - rails: '5.0' - - ruby: '3.0' - rails: '5.1' - - ruby: '3.0' - rails: '5.2' + ruby: [ '2.7', '3.0', '3.1' ] + rails: [ '6.0', '6.1', '7.0' ] name: PostgreSQL / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} diff --git a/Appraisals b/Appraisals index f5e4f3d..446bb36 100644 --- a/Appraisals +++ b/Appraisals @@ -18,45 +18,3 @@ appraise "rails-6.0" do gem "pg", ">= 0.18", "< 2.0" gem "sqlite3", "~> 1.4" end - -appraise "rails-5.2" do - gem "activerecord", "~> 5.2.3" - gem "mysql2", ">= 0.4.4", "< 0.6.0" - gem "pg", ">= 0.18", "< 2.0" - gem "sqlite3", "~> 1.3", ">= 1.3.6" -end - -appraise "rails-5.1" do - gem "activerecord", "~> 5.1.7" - gem "mysql2", ">= 0.3.18", "< 0.6.0" - gem "pg", ">= 0.18", "< 2.0" - gem "sqlite3", "~> 1.3", ">= 1.3.6" -end - -appraise "rails-5.0" do - gem "activerecord", "~> 5.0.7" - gem 'mysql2', '>= 0.3.18', '< 0.6.0' - gem "pg", ">= 0.18", "< 2.0" - gem 'sqlite3', '~> 1.3.6' -end - -appraise "rails-4.2" do - gem "activerecord", "~> 4.2.11" - gem 'mysql2', '>= 0.3.13', '< 0.6.0' - gem "pg", "~> 0.15" - gem 'sqlite3', '~> 1.3.6' -end - -appraise "rails-4.1" do - gem "activerecord", "~> 4.1.16" - gem 'mysql2', '~> 0.3.13' - gem "pg", "~> 0.11" - gem 'sqlite3', '~> 1.3.6' -end - -appraise "rails-4.0" do - gem "activerecord", "~> 4.0.13" - gem "mysql2", '~> 0.3.10' - gem "pg", "~> 0.11" - gem 'sqlite3', '~> 1.3.6' -end diff --git a/README.md b/README.md index 33a6356..a835e76 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,8 @@ Ruby gem to manage read/unread status of ActiveRecord objects - and it's fast. ## Requirements -* Ruby 2.6 or newer -* Rails 4.0 or newer (including Rails 7) +* Ruby 2.7 or newer +* Rails 6.0 or newer (including Rails 7) * MySQL, PostgreSQL or SQLite * Needs a timestamp field in your models (like created_at or updated_at) with a database index on it diff --git a/gemfiles/rails_4.0.gemfile b/gemfiles/rails_4.0.gemfile deleted file mode 100644 index 3d1ccaf..0000000 --- a/gemfiles/rails_4.0.gemfile +++ /dev/null @@ -1,10 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "activerecord", "~> 4.0.13" -gem "mysql2", "~> 0.3.10" -gem "pg", "~> 0.11" -gem "sqlite3", "~> 1.3.6" - -gemspec path: "../" diff --git a/gemfiles/rails_4.1.gemfile b/gemfiles/rails_4.1.gemfile deleted file mode 100644 index 6ede9af..0000000 --- a/gemfiles/rails_4.1.gemfile +++ /dev/null @@ -1,10 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "activerecord", "~> 4.1.16" -gem "mysql2", "~> 0.3.13" -gem "pg", "~> 0.11" -gem "sqlite3", "~> 1.3.6" - -gemspec path: "../" diff --git a/gemfiles/rails_4.2.gemfile b/gemfiles/rails_4.2.gemfile deleted file mode 100644 index a7350b1..0000000 --- a/gemfiles/rails_4.2.gemfile +++ /dev/null @@ -1,10 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "activerecord", "~> 4.2.11" -gem "mysql2", ">= 0.3.13", "< 0.6.0" -gem "pg", "~> 0.15" -gem "sqlite3", "~> 1.3.6" - -gemspec path: "../" diff --git a/gemfiles/rails_5.0.gemfile b/gemfiles/rails_5.0.gemfile deleted file mode 100644 index a2d1171..0000000 --- a/gemfiles/rails_5.0.gemfile +++ /dev/null @@ -1,10 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "activerecord", "~> 5.0.7" -gem "mysql2", ">= 0.3.18", "< 0.6.0" -gem "pg", ">= 0.18", "< 2.0" -gem "sqlite3", "~> 1.3.6" - -gemspec path: "../" diff --git a/gemfiles/rails_5.1.gemfile b/gemfiles/rails_5.1.gemfile deleted file mode 100644 index bb41c09..0000000 --- a/gemfiles/rails_5.1.gemfile +++ /dev/null @@ -1,10 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "activerecord", "~> 5.1.7" -gem "mysql2", ">= 0.3.18", "< 0.6.0" -gem "pg", ">= 0.18", "< 2.0" -gem "sqlite3", "~> 1.3", ">= 1.3.6" - -gemspec path: "../" diff --git a/gemfiles/rails_5.2.gemfile b/gemfiles/rails_5.2.gemfile deleted file mode 100644 index 9d1c2a6..0000000 --- a/gemfiles/rails_5.2.gemfile +++ /dev/null @@ -1,10 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "activerecord", "~> 5.2.3" -gem "mysql2", ">= 0.4.4", "< 0.6.0" -gem "pg", ">= 0.18", "< 2.0" -gem "sqlite3", "~> 1.3", ">= 1.3.6" - -gemspec path: "../" diff --git a/unread.gemspec b/unread.gemspec index 2c42205..83525d8 100644 --- a/unread.gemspec +++ b/unread.gemspec @@ -12,7 +12,7 @@ Gem::Specification.new do |s| s.homepage = "https://github.com/ledermann/unread" s.summary = %q{Manages read/unread status of ActiveRecord objects} s.description = %q{This gem creates a scope for unread objects and adds methods to mark objects as read } - s.required_ruby_version = '>= 2.6' + s.required_ruby_version = '>= 2.7' s.files = `git ls-files -z`.split("\x0").reject do |f| f.match(%r{^(test|spec|features)/}) From adbfd4b23ce2afda3a6b0b80474affdffcddd585 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sun, 27 Nov 2022 09:16:50 +0100 Subject: [PATCH 38/59] Tests: Don't use ActiveRecord::Base.default_timezone in Rails 7 --- spec/spec_helper.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 45f5c45..34fd217 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -64,7 +64,12 @@ def setup_db puts "Testing with ActiveRecord #{ActiveRecord::VERSION::STRING} on #{db_name}" ActiveRecord::Base.establish_connection(db_name.to_sym) - ActiveRecord::Base.default_timezone = :utc + if ActiveRecord.respond_to?(:default_timezone=) + # Rails 7 + ActiveRecord.default_timezone = :utc + else + ActiveRecord::Base.default_timezone = :utc + end ActiveRecord::Migration.verbose = false UnreadMigration.up From 81f83e17e81e4658f701f3cff19c76ec58937100 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sun, 27 Nov 2022 09:05:16 +0100 Subject: [PATCH 39/59] 2022 --- MIT-LICENSE | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MIT-LICENSE b/MIT-LICENSE index 2648a83..77416d9 100644 --- a/MIT-LICENSE +++ b/MIT-LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2010-2021 Georg Ledermann +Copyright (c) 2010-2022 Georg Ledermann Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/README.md b/README.md index a835e76..3b8238b 100644 --- a/README.md +++ b/README.md @@ -223,4 +223,4 @@ AND messages.created_at > '2010-10-20 08:50:00' Hint: You should add a database index on `messages.created_at`. -Copyright (c) 2010-2021 [Georg Ledermann](https://ledermann.dev) and [contributors](https://github.com/ledermann/unread/graphs/contributors), released under the MIT license +Copyright (c) 2010-2022 [Georg Ledermann](https://ledermann.dev) and [contributors](https://github.com/ledermann/unread/graphs/contributors), released under the MIT license From 9f0b9be172a27986c49cf54f04748179b64ed91d Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sun, 27 Nov 2022 09:57:16 +0100 Subject: [PATCH 40/59] Drop code for unsupported Rails versions --- lib/generators/unread/migration/templates/migration.rb | 2 +- .../templates/unread_polymorphic_reader_migration.rb | 2 +- lib/unread.rb | 6 ------ lib/unread/base.rb | 6 +----- spec/support/spec_migration.rb | 2 +- 5 files changed, 4 insertions(+), 14 deletions(-) diff --git a/lib/generators/unread/migration/templates/migration.rb b/lib/generators/unread/migration/templates/migration.rb index 02244a4..099e74b 100644 --- a/lib/generators/unread/migration/templates/migration.rb +++ b/lib/generators/unread/migration/templates/migration.rb @@ -1,4 +1,4 @@ -class UnreadMigration < Unread::MIGRATION_BASE_CLASS +class UnreadMigration < ActiveRecord::Migration[6.0] def self.up create_table ReadMark, force: true, options: create_options do |t| t.references :readable, polymorphic: { null: false } diff --git a/lib/generators/unread/polymorphic_reader_migration/templates/unread_polymorphic_reader_migration.rb b/lib/generators/unread/polymorphic_reader_migration/templates/unread_polymorphic_reader_migration.rb index 485d4da..2113659 100644 --- a/lib/generators/unread/polymorphic_reader_migration/templates/unread_polymorphic_reader_migration.rb +++ b/lib/generators/unread/polymorphic_reader_migration/templates/unread_polymorphic_reader_migration.rb @@ -1,4 +1,4 @@ -class UnreadPolymorphicReaderMigration < Unread::MIGRATION_BASE_CLASS +class UnreadPolymorphicReaderMigration < ActiveRecord::Migration[6.0] def self.up remove_index :read_marks, [:user_id, :readable_type, :readable_id] rename_column :read_marks, :user_id, :reader_id diff --git a/lib/unread.rb b/lib/unread.rb index 6702929..1ded71c 100644 --- a/lib/unread.rb +++ b/lib/unread.rb @@ -8,12 +8,6 @@ require 'unread/garbage_collector' require 'unread/version' -Unread::MIGRATION_BASE_CLASS = if ActiveRecord::VERSION::MAJOR >= 5 - ActiveRecord::Migration[5.0] -else - ActiveRecord::Migration -end - ActiveSupport.on_load(:active_record) do require 'unread/read_mark' diff --git a/lib/unread/base.rb b/lib/unread/base.rb index a1289c6..078da27 100644 --- a/lib/unread/base.rb +++ b/lib/unread/base.rb @@ -8,11 +8,7 @@ def acts_as_reader ReadMark.reader_classes ||= [] unless ReadMark.reader_classes.include?(self) - if ActiveRecord::VERSION::MAJOR < 5 - ReadMark.belongs_to :reader, polymorphic: true, inverse_of: :read_marks - else - ReadMark.belongs_to :reader, polymorphic: true, inverse_of: :read_marks, optional: true - end + ReadMark.belongs_to :reader, polymorphic: true, inverse_of: :read_marks, optional: true has_many :read_marks, dependent: :delete_all, as: :reader, inverse_of: :reader diff --git a/spec/support/spec_migration.rb b/spec/support/spec_migration.rb index eb641ec..70a2398 100644 --- a/spec/support/spec_migration.rb +++ b/spec/support/spec_migration.rb @@ -1,4 +1,4 @@ -class SpecMigration < Unread::MIGRATION_BASE_CLASS +class SpecMigration < ActiveRecord::Migration[6.0] def self.up create_table Reader, primary_key: 'number', force: true do |t| t.string :name From b97539d8c6a8c3faf6dc613dffd05d03a3c1b475 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sun, 27 Nov 2022 10:26:30 +0100 Subject: [PATCH 41/59] Bump 0.12.0 --- lib/unread/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/unread/version.rb b/lib/unread/version.rb index e40b0f0..d88f91b 100644 --- a/lib/unread/version.rb +++ b/lib/unread/version.rb @@ -1,3 +1,3 @@ module Unread - VERSION = '0.11.0' + VERSION = '0.12.0' end From 8c6b34c10faf06b10513e69e8d9225e011b0082b Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sat, 23 Sep 2023 11:01:42 +0200 Subject: [PATCH 42/59] Drop support for Rails 6.0 --- .github/workflows/main.yml | 6 +++--- Appraisals | 6 ------ README.md | 2 +- gemfiles/rails_6.0.gemfile | 10 ---------- unread.gemspec | 2 +- 5 files changed, 5 insertions(+), 21 deletions(-) delete mode 100644 gemfiles/rails_6.0.gemfile diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4c31b83..07939ae 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,7 +14,7 @@ jobs: fail-fast: false matrix: ruby: [ '2.7', '3.0', '3.1' ] - rails: [ '6.0', '6.1', '7.0' ] + rails: [ '6.1', '7.0' ] name: SQLite / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} @@ -56,7 +56,7 @@ jobs: fail-fast: false matrix: ruby: [ '2.7', '3.0', '3.1' ] - rails: [ '6.0', '6.1', '7.0' ] + rails: [ '6.1', '7.0' ] name: MySQL / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} @@ -102,7 +102,7 @@ jobs: fail-fast: false matrix: ruby: [ '2.7', '3.0', '3.1' ] - rails: [ '6.0', '6.1', '7.0' ] + rails: [ '6.1', '7.0' ] name: PostgreSQL / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} diff --git a/Appraisals b/Appraisals index 446bb36..bbb1220 100644 --- a/Appraisals +++ b/Appraisals @@ -12,9 +12,3 @@ appraise "rails-6.1" do gem "sqlite3", "~> 1.4" end -appraise "rails-6.0" do - gem "activerecord", "~> 6.0.0" - gem "mysql2", ">= 0.4.4" - gem "pg", ">= 0.18", "< 2.0" - gem "sqlite3", "~> 1.4" -end diff --git a/README.md b/README.md index 3b8238b..3d3d534 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Ruby gem to manage read/unread status of ActiveRecord objects - and it's fast. ## Requirements * Ruby 2.7 or newer -* Rails 6.0 or newer (including Rails 7) +* Rails 6.1 or newer (including Rails 7) * MySQL, PostgreSQL or SQLite * Needs a timestamp field in your models (like created_at or updated_at) with a database index on it diff --git a/gemfiles/rails_6.0.gemfile b/gemfiles/rails_6.0.gemfile deleted file mode 100644 index 2fd3073..0000000 --- a/gemfiles/rails_6.0.gemfile +++ /dev/null @@ -1,10 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "activerecord", "~> 6.0.0" -gem "mysql2", ">= 0.4.4" -gem "pg", ">= 0.18", "< 2.0" -gem "sqlite3", "~> 1.4" - -gemspec path: "../" diff --git a/unread.gemspec b/unread.gemspec index 83525d8..88b4aab 100644 --- a/unread.gemspec +++ b/unread.gemspec @@ -21,7 +21,7 @@ Gem::Specification.new do |s| s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) } s.require_paths = ["lib"] - s.add_dependency 'activerecord', '>= 3' + s.add_dependency 'activerecord', '>= 6.1' s.add_development_dependency 'bundler' s.add_development_dependency 'rake' From 86c619cf94e89fc0128e30408a378f228f2db8e5 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sat, 23 Sep 2023 11:02:44 +0200 Subject: [PATCH 43/59] Drop support for Ruby 2.7 --- .github/workflows/main.yml | 6 +++--- README.md | 2 +- unread.gemspec | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 07939ae..5baf665 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,7 +13,7 @@ jobs: strategy: fail-fast: false matrix: - ruby: [ '2.7', '3.0', '3.1' ] + ruby: [ '3.0', '3.1', '3.2' ] rails: [ '6.1', '7.0' ] name: SQLite / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} @@ -55,7 +55,7 @@ jobs: strategy: fail-fast: false matrix: - ruby: [ '2.7', '3.0', '3.1' ] + ruby: [ '3.0', '3.1', '3.2' ] rails: [ '6.1', '7.0' ] name: MySQL / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} @@ -101,7 +101,7 @@ jobs: strategy: fail-fast: false matrix: - ruby: [ '2.7', '3.0', '3.1' ] + ruby: [ '3.0', '3.1', '3.2' ] rails: [ '6.1', '7.0' ] name: PostgreSQL / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} diff --git a/README.md b/README.md index 3d3d534..59b4351 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Ruby gem to manage read/unread status of ActiveRecord objects - and it's fast. ## Requirements -* Ruby 2.7 or newer +* Ruby 3.0 or newer * Rails 6.1 or newer (including Rails 7) * MySQL, PostgreSQL or SQLite * Needs a timestamp field in your models (like created_at or updated_at) with a database index on it diff --git a/unread.gemspec b/unread.gemspec index 88b4aab..0b4958c 100644 --- a/unread.gemspec +++ b/unread.gemspec @@ -12,7 +12,7 @@ Gem::Specification.new do |s| s.homepage = "https://github.com/ledermann/unread" s.summary = %q{Manages read/unread status of ActiveRecord objects} s.description = %q{This gem creates a scope for unread objects and adds methods to mark objects as read } - s.required_ruby_version = '>= 2.7' + s.required_ruby_version = '>= 3.0' s.files = `git ls-files -z`.split("\x0").reject do |f| f.match(%r{^(test|spec|features)/}) From f152b29d4156ecad8cbacd1ca6da8e66d5158958 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sat, 23 Sep 2023 11:03:21 +0200 Subject: [PATCH 44/59] Update GitHub actions --- .github/workflows/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5baf665..b10ae1f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -19,7 +19,7 @@ jobs: name: SQLite / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Setup Ruby uses: ruby/setup-ruby@v1 @@ -61,7 +61,7 @@ jobs: name: MySQL / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Setup Ruby uses: ruby/setup-ruby@v1 @@ -107,7 +107,7 @@ jobs: name: PostgreSQL / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Setup Ruby uses: ruby/setup-ruby@v1 From b34dd5b13372d74f1335376e47d1671eb6e602ca Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sat, 23 Sep 2023 11:04:36 +0200 Subject: [PATCH 45/59] Update coveralls setup --- .github/workflows/main.yml | 6 ++++++ unread.gemspec | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b10ae1f..4ffa2c8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -34,6 +34,8 @@ jobs: bundle install --jobs 4 --retry 3 - name: RSpec + env: + COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} run: bundle exec rake test_mysql: @@ -80,6 +82,8 @@ jobs: mysql -e 'create database IF NOT EXISTS unread_test;' -u root --password=password -P 3306 -h 127.0.0.1 - name: RSpec + env: + COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} run: bundle exec rake test_postgres: @@ -126,4 +130,6 @@ jobs: PGPASSWORD=postgres psql -c 'create database unread_test;' -U postgres -p 5432 -h localhost - name: RSpec + env: + COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} run: bundle exec rake diff --git a/unread.gemspec b/unread.gemspec index 0b4958c..bd356f0 100644 --- a/unread.gemspec +++ b/unread.gemspec @@ -32,6 +32,6 @@ Gem::Specification.new do |s| s.add_development_dependency 'rspec' s.add_development_dependency 'simplecov' s.add_development_dependency 'term-ansicolor' - s.add_development_dependency 'coveralls' + s.add_development_dependency 'coveralls_reborn' s.add_development_dependency 'appraisal' end From 83017c04d86cc0ee66d12fb944e473e75e136fcd Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sat, 23 Sep 2023 11:14:06 +0200 Subject: [PATCH 46/59] Test against Rails 7.1 --- .github/workflows/main.yml | 6 +++--- Appraisals | 7 +++++++ gemfiles/rails_7.1.gemfile | 10 ++++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 gemfiles/rails_7.1.gemfile diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4ffa2c8..bae5e3f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,7 +14,7 @@ jobs: fail-fast: false matrix: ruby: [ '3.0', '3.1', '3.2' ] - rails: [ '6.1', '7.0' ] + rails: [ '6.1', '7.0', '7.1' ] name: SQLite / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} @@ -58,7 +58,7 @@ jobs: fail-fast: false matrix: ruby: [ '3.0', '3.1', '3.2' ] - rails: [ '6.1', '7.0' ] + rails: [ '6.1', '7.0', '7.1' ] name: MySQL / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} @@ -106,7 +106,7 @@ jobs: fail-fast: false matrix: ruby: [ '3.0', '3.1', '3.2' ] - rails: [ '6.1', '7.0' ] + rails: [ '6.1', '7.0', '7.1' ] name: PostgreSQL / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} diff --git a/Appraisals b/Appraisals index bbb1220..2dccbc6 100644 --- a/Appraisals +++ b/Appraisals @@ -1,3 +1,10 @@ +appraise "rails-7.1" do + gem "activerecord", "~> 7.1.0.beta1" + gem "mysql2", "~> 0.5" + gem "pg", "~> 1.3" + gem "sqlite3", "~> 1.4" +end + appraise "rails-7.0" do gem "activerecord", "~> 7.0.0" gem "mysql2", "~> 0.5" diff --git a/gemfiles/rails_7.1.gemfile b/gemfiles/rails_7.1.gemfile new file mode 100644 index 0000000..5f94dd5 --- /dev/null +++ b/gemfiles/rails_7.1.gemfile @@ -0,0 +1,10 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "activerecord", "~> 7.1.0.beta1" +gem "mysql2", "~> 0.5" +gem "pg", "~> 1.3" +gem "sqlite3", "~> 1.4" + +gemspec path: "../" From d44e61a04b16efba1bd25025b1ca8a87770e201a Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sat, 23 Sep 2023 11:23:05 +0200 Subject: [PATCH 47/59] CI: Fix database testing --- .github/workflows/main.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index bae5e3f..8883abc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -36,6 +36,7 @@ jobs: - name: RSpec env: COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} + DB: sqlite run: bundle exec rake test_mysql: @@ -84,6 +85,7 @@ jobs: - name: RSpec env: COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} + DB: mysql run: bundle exec rake test_postgres: @@ -132,4 +134,5 @@ jobs: - name: RSpec env: COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} + DB: postgres run: bundle exec rake From 6029c8dda5b85c2de5ef1ec2d87d070a9d9cf886 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Wed, 27 Sep 2023 08:10:40 +0200 Subject: [PATCH 48/59] Test against Rails 7.1.0.rc1 --- gemfiles/rails_7.1.gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gemfiles/rails_7.1.gemfile b/gemfiles/rails_7.1.gemfile index 5f94dd5..7b8c761 100644 --- a/gemfiles/rails_7.1.gemfile +++ b/gemfiles/rails_7.1.gemfile @@ -2,7 +2,7 @@ source "https://rubygems.org" -gem "activerecord", "~> 7.1.0.beta1" +gem "activerecord", "~> 7.1.0.rc1" gem "mysql2", "~> 0.5" gem "pg", "~> 1.3" gem "sqlite3", "~> 1.4" From b313f2ff551864bda027d3d76577ab2dd953c8ad Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Fri, 6 Oct 2023 09:04:08 +0200 Subject: [PATCH 49/59] Test against Rails 7.1.0 final --- Appraisals | 2 +- gemfiles/rails_7.1.gemfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Appraisals b/Appraisals index 2dccbc6..d2bf2e1 100644 --- a/Appraisals +++ b/Appraisals @@ -1,5 +1,5 @@ appraise "rails-7.1" do - gem "activerecord", "~> 7.1.0.beta1" + gem "activerecord", "~> 7.1.0" gem "mysql2", "~> 0.5" gem "pg", "~> 1.3" gem "sqlite3", "~> 1.4" diff --git a/gemfiles/rails_7.1.gemfile b/gemfiles/rails_7.1.gemfile index 7b8c761..b155949 100644 --- a/gemfiles/rails_7.1.gemfile +++ b/gemfiles/rails_7.1.gemfile @@ -2,7 +2,7 @@ source "https://rubygems.org" -gem "activerecord", "~> 7.1.0.rc1" +gem "activerecord", "~> 7.1.0" gem "mysql2", "~> 0.5" gem "pg", "~> 1.3" gem "sqlite3", "~> 1.4" From 50285aca0b6ed44be192c7c808fb05ce85236b33 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Wed, 20 Dec 2023 08:48:54 +0100 Subject: [PATCH 50/59] Fix migration generator to support Rails 7.1 --- .../polymorphic_reader_migration_generator.rb | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/generators/unread/polymorphic_reader_migration/polymorphic_reader_migration_generator.rb b/lib/generators/unread/polymorphic_reader_migration/polymorphic_reader_migration_generator.rb index 05e0f2d..b865ac6 100644 --- a/lib/generators/unread/polymorphic_reader_migration/polymorphic_reader_migration_generator.rb +++ b/lib/generators/unread/polymorphic_reader_migration/polymorphic_reader_migration_generator.rb @@ -13,11 +13,22 @@ def create_migration_file end def self.next_migration_number(dirname) - if ActiveRecord::Base.timestamped_migrations - Time.now.utc.strftime("%Y%m%d%H%M%S") + if self.timestamped_migrations? + Time.now.utc.strftime('%Y%m%d%H%M%S') else "%.3d" % (current_migration_number(dirname) + 1) end end + + def self.timestamped_migrations? + ( + ActiveRecord::Base.respond_to?(:timestamped_migrations) && + ActiveRecord::Base.timestamped_migrations + ) || + ( + ActiveRecord.respond_to?(:timestamped_migrations) && + ActiveRecord.timestamped_migrations + ) + end end end From 0e0458ecef243e001ae44d9bf1e30717b4e1ef20 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Wed, 20 Dec 2023 08:54:32 +0100 Subject: [PATCH 51/59] 2023 --- MIT-LICENSE | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MIT-LICENSE b/MIT-LICENSE index 77416d9..75c4e85 100644 --- a/MIT-LICENSE +++ b/MIT-LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2010-2022 Georg Ledermann +Copyright (c) 2010-2023 Georg Ledermann Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/README.md b/README.md index 59b4351..d8c103f 100644 --- a/README.md +++ b/README.md @@ -223,4 +223,4 @@ AND messages.created_at > '2010-10-20 08:50:00' Hint: You should add a database index on `messages.created_at`. -Copyright (c) 2010-2022 [Georg Ledermann](https://ledermann.dev) and [contributors](https://github.com/ledermann/unread/graphs/contributors), released under the MIT license +Copyright (c) 2010-2023 [Georg Ledermann](https://ledermann.dev) and [contributors](https://github.com/ledermann/unread/graphs/contributors), released under the MIT license From 5391911aad8d8188ed2bfc4a9bc9e936f11dc0bb Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Wed, 20 Dec 2023 08:54:56 +0100 Subject: [PATCH 52/59] Add note about Rails 7.1 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d8c103f..413a21a 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Ruby gem to manage read/unread status of ActiveRecord objects - and it's fast. ## Requirements * Ruby 3.0 or newer -* Rails 6.1 or newer (including Rails 7) +* Rails 6.1 or newer (including Rails 7.1) * MySQL, PostgreSQL or SQLite * Needs a timestamp field in your models (like created_at or updated_at) with a database index on it From 8f51c5ac63ad08468c91168188c967b3050a13f2 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Wed, 20 Dec 2023 08:58:26 +0100 Subject: [PATCH 53/59] Bump 0.13.0 --- lib/unread/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/unread/version.rb b/lib/unread/version.rb index d88f91b..a8141b8 100644 --- a/lib/unread/version.rb +++ b/lib/unread/version.rb @@ -1,3 +1,3 @@ module Unread - VERSION = '0.12.0' + VERSION = '0.13.0' end From 1ae027010d88f607690d7ab1e4a78e6615fee23e Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Tue, 26 Dec 2023 07:09:27 +0100 Subject: [PATCH 54/59] Test against Ruby 3.3 --- .github/workflows/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8883abc..5995fbb 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,7 +13,7 @@ jobs: strategy: fail-fast: false matrix: - ruby: [ '3.0', '3.1', '3.2' ] + ruby: [ '3.0', '3.1', '3.2', '3.3' ] rails: [ '6.1', '7.0', '7.1' ] name: SQLite / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} @@ -58,7 +58,7 @@ jobs: strategy: fail-fast: false matrix: - ruby: [ '3.0', '3.1', '3.2' ] + ruby: [ '3.0', '3.1', '3.2', '3.3' ] rails: [ '6.1', '7.0', '7.1' ] name: MySQL / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} @@ -107,7 +107,7 @@ jobs: strategy: fail-fast: false matrix: - ruby: [ '3.0', '3.1', '3.2' ] + ruby: [ '3.0', '3.1', '3.2', '3.3' ] rails: [ '6.1', '7.0', '7.1' ] name: PostgreSQL / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} From b737eed34965d6a4b183ac1a8a2675bdcb7b09d6 Mon Sep 17 00:00:00 2001 From: James Adam Date: Fri, 9 Feb 2024 10:45:31 +0000 Subject: [PATCH 55/59] Fix migration generator to support Rails 7.1 As in 50285aca0b6ed44be192c7c808fb05ce85236b33 we need to support the new location of `timestamped_migrations` --- .../unread/migration/migration_generator.rb | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/generators/unread/migration/migration_generator.rb b/lib/generators/unread/migration/migration_generator.rb index e197c9b..3684340 100644 --- a/lib/generators/unread/migration/migration_generator.rb +++ b/lib/generators/unread/migration/migration_generator.rb @@ -13,11 +13,22 @@ def create_migration_file end def self.next_migration_number(dirname) - if ActiveRecord::Base.timestamped_migrations + if self.timestamped_migrations? Time.now.utc.strftime("%Y%m%d%H%M%S") else "%.3d" % (current_migration_number(dirname) + 1) end end + + def self.timestamped_migrations? + ( + ActiveRecord::Base.respond_to?(:timestamped_migrations) && + ActiveRecord::Base.timestamped_migrations + ) || + ( + ActiveRecord.respond_to?(:timestamped_migrations) && + ActiveRecord.timestamped_migrations + ) + end end end From 67eafa8e32e4fea68da0f0684792a19c033f3e32 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Fri, 9 Feb 2024 12:57:16 +0100 Subject: [PATCH 56/59] Bump 0.13.1 --- lib/unread/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/unread/version.rb b/lib/unread/version.rb index a8141b8..8339375 100644 --- a/lib/unread/version.rb +++ b/lib/unread/version.rb @@ -1,3 +1,3 @@ module Unread - VERSION = '0.13.0' + VERSION = '0.13.1' end From 675b7443af5ca23e44ffe3b70a443a5ec1d3952b Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sat, 17 Aug 2024 14:47:51 +0200 Subject: [PATCH 57/59] Add support for Rails 7.2 --- .github/workflows/main.yml | 12 ++++++------ Appraisals | 8 +++++++- README.md | 4 ++-- gemfiles/rails_7.2.gemfile | 10 ++++++++++ lib/unread/readable_scopes.rb | 16 ++++++++++++---- lib/unread/reader_scopes.rb | 14 +++++++++++--- unread.gemspec | 2 +- 7 files changed, 49 insertions(+), 17 deletions(-) create mode 100644 gemfiles/rails_7.2.gemfile diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5995fbb..4d78f68 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,8 +13,8 @@ jobs: strategy: fail-fast: false matrix: - ruby: [ '3.0', '3.1', '3.2', '3.3' ] - rails: [ '6.1', '7.0', '7.1' ] + ruby: ['3.1', '3.2', '3.3'] + rails: ['6.1', '7.0', '7.1', '7.2'] name: SQLite / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} @@ -58,8 +58,8 @@ jobs: strategy: fail-fast: false matrix: - ruby: [ '3.0', '3.1', '3.2', '3.3' ] - rails: [ '6.1', '7.0', '7.1' ] + ruby: ['3.1', '3.2', '3.3'] + rails: ['6.1', '7.0', '7.1', '7.2'] name: MySQL / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} @@ -107,8 +107,8 @@ jobs: strategy: fail-fast: false matrix: - ruby: [ '3.0', '3.1', '3.2', '3.3' ] - rails: [ '6.1', '7.0', '7.1' ] + ruby: ['3.1', '3.2', '3.3'] + rails: ['6.1', '7.0', '7.1', '7.2'] name: PostgreSQL / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} diff --git a/Appraisals b/Appraisals index d2bf2e1..17deb80 100644 --- a/Appraisals +++ b/Appraisals @@ -1,3 +1,10 @@ +appraise "rails-7.2" do + gem "activerecord", "~> 7.2.0" + gem "mysql2", "~> 0.5" + gem "pg", "~> 1.3" + gem "sqlite3", ">= 2.0" +end + appraise "rails-7.1" do gem "activerecord", "~> 7.1.0" gem "mysql2", "~> 0.5" @@ -18,4 +25,3 @@ appraise "rails-6.1" do gem "pg", "~> 1.1" gem "sqlite3", "~> 1.4" end - diff --git a/README.md b/README.md index 413a21a..b8e0e02 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,8 @@ Ruby gem to manage read/unread status of ActiveRecord objects - and it's fast. ## Requirements -* Ruby 3.0 or newer -* Rails 6.1 or newer (including Rails 7.1) +* Ruby 3.1 or newer +* Rails 6.1 or newer (including Rails 7.2) * MySQL, PostgreSQL or SQLite * Needs a timestamp field in your models (like created_at or updated_at) with a database index on it diff --git a/gemfiles/rails_7.2.gemfile b/gemfiles/rails_7.2.gemfile new file mode 100644 index 0000000..8254482 --- /dev/null +++ b/gemfiles/rails_7.2.gemfile @@ -0,0 +1,10 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "activerecord", "~> 7.2.0" +gem "mysql2", "~> 0.5" +gem "pg", "~> 1.3" +gem "sqlite3", ">= 2.0" + +gemspec path: "../" diff --git a/lib/unread/readable_scopes.rb b/lib/unread/readable_scopes.rb index ca1ca4d..eeff7b1 100644 --- a/lib/unread/readable_scopes.rb +++ b/lib/unread/readable_scopes.rb @@ -7,8 +7,8 @@ def join_read_marks(reader) joins "LEFT JOIN #{ReadMark.quoted_table_name} ON #{ReadMark.quoted_table_name}.readable_type = '#{readable_parent.name}' AND #{ReadMark.quoted_table_name}.readable_id = #{quoted_table_name}.#{quoted_primary_key} - AND #{ReadMark.quoted_table_name}.reader_id = #{quote_bound_value(reader.id)} - AND #{ReadMark.quoted_table_name}.reader_type = #{quote_bound_value(reader.class.base_class.name)} + AND #{ReadMark.quoted_table_name}.reader_id = #{quoted(reader.id)} + AND #{ReadMark.quoted_table_name}.reader_type = #{quoted(reader.class.base_class.name)} AND #{ReadMark.quoted_table_name}.timestamp >= #{quoted_table_name}.#{connection.quote_column_name(readable_options[:on])}" end @@ -39,8 +39,16 @@ def with_read_marks_for(reader) join_read_marks(reader).select("#{quoted_table_name}.*, #{ReadMark.quoted_table_name}.id AS read_mark_id, - #{quote_bound_value(reader.class.base_class.name)}#{postgresql_string_cast} AS read_mark_reader_type, - #{quote_bound_value(reader.id)} AS read_mark_reader_id") + #{quoted(reader.class.base_class.name)}#{postgresql_string_cast} AS read_mark_reader_type, + #{quoted(reader.id)} AS read_mark_reader_id") + end + + def quoted(value) + if Gem::Version.new(ActiveRecord::VERSION::STRING) >= Gem::Version.new('7.2') + quote_bound_value(connection, value) + else + quote_bound_value(value) + end end end end diff --git a/lib/unread/reader_scopes.rb b/lib/unread/reader_scopes.rb index 992e982..00a4831 100644 --- a/lib/unread/reader_scopes.rb +++ b/lib/unread/reader_scopes.rb @@ -12,7 +12,7 @@ def join_read_marks(readable) joins "LEFT JOIN #{ReadMark.quoted_table_name} ON #{ReadMark.quoted_table_name}.readable_type = '#{readable.class.readable_parent.name}' - AND (#{ReadMark.quoted_table_name}.readable_id = #{quote_bound_value(readable.id)} OR #{ReadMark.quoted_table_name}.readable_id IS NULL) + AND (#{ReadMark.quoted_table_name}.readable_id = #{quoted(readable.id)} OR #{ReadMark.quoted_table_name}.readable_id IS NULL) AND #{ReadMark.quoted_table_name}.reader_id = #{quoted_table_name}.#{quoted_primary_key} AND #{ReadMark.quoted_table_name}.reader_type = '#{connection.quote_string base_class.name}' AND #{ReadMark.quoted_table_name}.timestamp >= '#{connection.quoted_date readable.send(readable.class.readable_options[:on])}'" @@ -31,8 +31,16 @@ def with_read_marks_for(readable) join_read_marks(readable).select("#{quoted_table_name}.*, #{ReadMark.quoted_table_name}.id AS read_mark_id, - #{quote_bound_value(readable.class.name)}#{postgresql_string_cast} AS read_mark_readable_type, - #{quote_bound_value(readable.id)} AS read_mark_readable_id") + #{quoted(readable.class.name)}#{postgresql_string_cast} AS read_mark_readable_type, + #{quoted(readable.id)} AS read_mark_readable_id") + end + + def quoted(value) + if Gem::Version.new(ActiveRecord::VERSION::STRING) >= Gem::Version.new('7.2') + quote_bound_value(connection, value) + else + quote_bound_value(value) + end end end end diff --git a/unread.gemspec b/unread.gemspec index bd356f0..3dcfbca 100644 --- a/unread.gemspec +++ b/unread.gemspec @@ -12,7 +12,7 @@ Gem::Specification.new do |s| s.homepage = "https://github.com/ledermann/unread" s.summary = %q{Manages read/unread status of ActiveRecord objects} s.description = %q{This gem creates a scope for unread objects and adds methods to mark objects as read } - s.required_ruby_version = '>= 3.0' + s.required_ruby_version = '>= 3.1' s.files = `git ls-files -z`.split("\x0").reject do |f| f.match(%r{^(test|spec|features)/}) From c7552bd0acd50cc7dad7b1f7f5f0b6929d2d2e86 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sat, 5 Oct 2024 15:41:28 +0200 Subject: [PATCH 58/59] Bump 0.14.0 --- lib/unread/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/unread/version.rb b/lib/unread/version.rb index 8339375..5008351 100644 --- a/lib/unread/version.rb +++ b/lib/unread/version.rb @@ -1,3 +1,3 @@ module Unread - VERSION = '0.13.1' + VERSION = '0.14.0' end From c4761226f5ba94d16abd23715338357c33d04294 Mon Sep 17 00:00:00 2001 From: Georg Ledermann Date: Sat, 28 Dec 2024 09:23:53 +0100 Subject: [PATCH 59/59] CI: Test against Ruby 3.4 --- .github/workflows/main.yml | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4d78f68..dc07643 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,8 +13,13 @@ jobs: strategy: fail-fast: false matrix: - ruby: ['3.1', '3.2', '3.3'] + ruby: ['3.1', '3.2', '3.3', '3.4'] rails: ['6.1', '7.0', '7.1', '7.2'] + exclude: + - ruby: 3.4 + rails: 6.1 + - ruby: 3.4 + rails: 7.0 name: SQLite / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} @@ -58,8 +63,13 @@ jobs: strategy: fail-fast: false matrix: - ruby: ['3.1', '3.2', '3.3'] + ruby: ['3.1', '3.2', '3.3', '3.4'] rails: ['6.1', '7.0', '7.1', '7.2'] + exclude: + - ruby: 3.4 + rails: 6.1 + - ruby: 3.4 + rails: 7.0 name: MySQL / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }} @@ -107,8 +117,13 @@ jobs: strategy: fail-fast: false matrix: - ruby: ['3.1', '3.2', '3.3'] + ruby: ['3.1', '3.2', '3.3', '3.4'] rails: ['6.1', '7.0', '7.1', '7.2'] + exclude: + - ruby: 3.4 + rails: 6.1 + - ruby: 3.4 + rails: 7.0 name: PostgreSQL / Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }}