Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update activesupport requirement from >= 5.2, < 7.1 to >= 5.2, < 7.2 #41

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ gemfiles/*.lock
.ruby-version
coverage/
log/
test/tmp
8 changes: 8 additions & 0 deletions Appraisals
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
# frozen_string_literal: true

appraise "active_record_52" do
gem "activejob", "~> 5.2.0", require: "active_job"
gem "activerecord", "~> 5.2.0", require: "active_record"
gem "activestorage", "~> 5.2.0"
gem "activesupport", "~> 5.2.0", require: "active_support"
end

appraise "active_record_60" do
gem "activejob", "~> 6.0.0", require: "active_job"
gem "activerecord", "~> 6.0.0", require: "active_record"
gem "activestorage", "~> 6.0.0"
gem "activesupport", "~> 6.0.0", require: "active_support"

group :development do
Expand All @@ -15,7 +19,9 @@ appraise "active_record_60" do
end

appraise "active_record_61" do
gem "activejob", "~> 6.1.0", require: "active_job"
gem "activerecord", "~> 6.1.0", require: "active_record"
gem "activestorage", "~> 6.1.0"
gem "activesupport", "~> 6.1.0", require: "active_support"

group :development do
Expand All @@ -24,7 +30,9 @@ appraise "active_record_61" do
end

appraise "active_record_70" do
gem "activejob", "~> 7.0.0", require: "active_job"
gem "activerecord", "~> 7.0.0", require: "active_record"
gem "activestorage", "~> 7.0.0"
gem "activesupport", "~> 7.0.0", require: "active_support"

group :development do
Expand Down
2 changes: 1 addition & 1 deletion acts_as_paranoid.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
spec.require_paths = ["lib"]

spec.add_runtime_dependency "activerecord", ">= 5.2", "< 7.1"
spec.add_runtime_dependency "activesupport", ">= 5.2", "< 7.1"
spec.add_runtime_dependency "activesupport", ">= 5.2", "< 7.2"

spec.add_development_dependency "appraisal", "~> 2.3"
spec.add_development_dependency "minitest", "~> 5.14"
Expand Down
2 changes: 2 additions & 0 deletions gemfiles/active_record_52.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@

source "https://rubygems.org"

gem "activejob", "~> 5.2.0", require: "active_job"
gem "activerecord", "~> 5.2.0", require: "active_record"
gem "activestorage", "~> 5.2.0"
gem "activesupport", "~> 5.2.0", require: "active_support"

group :development do
Expand Down
2 changes: 2 additions & 0 deletions gemfiles/active_record_60.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@

source "https://rubygems.org"

gem "activejob", "~> 6.0.0", require: "active_job"
gem "activerecord", "~> 6.0.0", require: "active_record"
gem "activestorage", "~> 6.0.0"
gem "activesupport", "~> 6.0.0", require: "active_support"

group :development do
Expand Down
2 changes: 2 additions & 0 deletions gemfiles/active_record_61.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@

source "https://rubygems.org"

gem "activejob", "~> 6.1.0", require: "active_job"
gem "activerecord", "~> 6.1.0", require: "active_record"
gem "activestorage", "~> 6.1.0"
gem "activesupport", "~> 6.1.0", require: "active_support"

group :development do
Expand Down
2 changes: 2 additions & 0 deletions gemfiles/active_record_70.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@

source "https://rubygems.org"

gem "activejob", "~> 7.0.0", require: "active_job"
gem "activerecord", "~> 7.0.0", require: "active_record"
gem "activestorage", "~> 7.0.0"
gem "activesupport", "~> 7.0.0", require: "active_support"

group :development do
Expand Down
31 changes: 31 additions & 0 deletions lib/acts_as_paranoid/core.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@ module ActsAsParanoid
module Core
def self.included(base)
base.extend ClassMethods
if ActiveRecord::VERSION::MAJOR == 5
base.send(:alias_method, :committed_without_paranoid!, :committed!)
base.send(:alias_method, :committed!, :committed_with_paranoid!)
base.send(:alias_method, :remember_transaction_record_state_without_paranoid, :remember_transaction_record_state)
base.send(:alias_method, :remember_transaction_record_state, :remember_transaction_record_state_with_paranoid)
end
end

module ClassMethods
Expand Down Expand Up @@ -156,6 +162,8 @@ def destroy_fully!
decrement_counters_on_associations
end

@_trigger_destroy_callback = true

@destroyed = true
freeze
end
Expand Down Expand Up @@ -242,6 +250,16 @@ def deleted_fully?

alias destroyed_fully? deleted_fully?

if ActiveRecord::VERSION::MAJOR == 5
def committed_with_paranoid!(should_run_callbacks: true)
committed_without_paranoid!(should_run_callbacks: should_run_callbacks)
ensure
if defined?(@_trigger_destroy_callback) && !@_trigger_destroy_callback.nil? && !@destroyed && deleted?
@_trigger_destroy_callback = nil
end
end
end

private

def recover_dependent_associations(deleted_value, options)
Expand Down Expand Up @@ -327,5 +345,18 @@ def stale_paranoid_value
self.paranoid_value = self.class.delete_now_value
clear_attribute_changes([self.class.paranoid_column])
end

if ActiveRecord::VERSION::MAJOR == 5
def remember_transaction_record_state_with_paranoid
remember_transaction_record_state_without_paranoid
remember_trigger_destroy_callback_before_last_commit
end

def remember_trigger_destroy_callback_before_last_commit
return unless _committed_already_called && defined?(@_trigger_destroy_callback) && !@_trigger_destroy_callback.nil? && !@destroyed && deleted?

@_trigger_destroy_callback = nil
end
end
end
end
1 change: 1 addition & 0 deletions test/fixtures/hello.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Hello, world!
148 changes: 148 additions & 0 deletions test/test_active_storage.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
# frozen_string_literal: true

require "test_helper"

# load ActiveStorage
require "global_id"
ActiveRecord::Base.include(GlobalID::Identification)
GlobalID.app = "ActsAsParanoid"

require "active_job"
ActiveJob::Base.queue_adapter = :test

require "active_support/cache"

require "active_storage"
require "active_storage/attached"
require "active_storage/service/disk_service"
if ActiveRecord::VERSION::MAJOR >= 6
require "active_storage/reflection"
ActiveRecord::Base.include(ActiveStorage::Reflection::ActiveRecordExtensions)
ActiveRecord::Reflection.singleton_class.prepend(ActiveStorage::Reflection::ReflectionExtension)
ActiveRecord::Base.include(ActiveStorage::Attached::Model)

if ActiveRecord::VERSION::MAJOR == 6 && ActiveRecord::VERSION::MINOR.zero?
module Rails
def self.autoloaders
Object.new.tap do |o|
def o.zeitwerk_enabled?
false
end
end
end
end
else
require "#{Gem.loaded_specs['activestorage'].full_gem_path}/app/models/active_storage/record"
module ActiveStorage
class Blob < Record
end
end
Dir.glob("#{Gem.loaded_specs['activestorage'].full_gem_path}/app/models/active_storage/blob/*").sort.each do |f|
require f
end
end
else
ActiveRecord::Base.extend(ActiveStorage::Attached::Macros)
end
$LOAD_PATH << "#{Gem.loaded_specs['activestorage'].full_gem_path}/app/models/"
Dir.glob("#{Gem.loaded_specs['activestorage'].full_gem_path}/app/models/active_storage/*").sort.each do |f|
require f
end
if ActiveStorage::Blob.respond_to?(:services=)
require "active_storage/service/disk_service"
ActiveStorage::Blob.services = {
"test" => ActiveStorage::Service::DiskService.build(name: "test", configurator: nil, root: "test/tmp")
}
end
if File.exist?("#{Gem.loaded_specs['activestorage'].full_gem_path}/app/jobs/active_storage/base_job.rb")
require "#{Gem.loaded_specs['activestorage'].full_gem_path}/app/jobs/active_storage/base_job"
end
Dir.glob("#{Gem.loaded_specs['activestorage'].full_gem_path}/app/jobs/active_storage/*").sort.each do |f|
require f
end
ActiveStorage::Blob.service = ActiveStorage::Service::DiskService.new(root: "test/tmp")

class ParanoidActiveStorageTest < ActiveSupport::TestCase
self.file_fixture_path = "test/fixtures"

class ParanoidActiveStorage < ActiveRecord::Base
acts_as_paranoid

has_one_attached :main_file
has_many_attached :files
has_one_attached :undependent_main_file, dependent: false
has_many_attached :undependent_files, dependent: false
end

def setup_db
ActiveRecord::Schema.define(version: 1) do
create_table :active_storage_blobs do |t|
t.string :key, null: false
t.string :filename, null: false
t.string :content_type
t.text :metadata
t.string :service_name
t.bigint :byte_size, null: false
t.string :checksum, null: false
t.datetime :created_at, null: false
t.index [:key], name: "index_active_storage_blobs_on_key", unique: true
end

create_table :active_storage_attachments do |t|
t.string :name, null: false
t.references :record, null: false, polymorphic: true, index: false
t.references :blob, null: false
t.datetime :created_at, null: false
t.index [:record_type, :record_id, :name, :blob_id], name: "index_active_storage_attachments_uniqueness", unique: true
end

create_table :active_storage_variant_records do |t|
t.belongs_to :blob, null: false, index: false
t.string :variation_digest, null: false
t.index [:blob_id, :variation_digest], name: "index_active_storage_variant_records_uniqueness", unique: true
end

create_table :paranoid_active_storages do |t|
t.datetime :deleted_at
timestamps t
end
end
end

def clean_active_storage_attachments
Dir.glob("test/tmp/*").each do |f|
FileUtils.rm_r(f)
end
end

def create_file_blob(filename: "hello.txt", content_type: "text/plain", metadata: nil)
args = { io: file_fixture(filename).open, filename: filename, content_type: content_type, metadata: metadata }
if ActiveRecord::VERSION::MAJOR > 6 || (ActiveRecord::VERSION::MAJOR == 6 && ActiveRecord::VERSION::MINOR >= 1)
args[:service_name] = "test"
end
if ActiveStorage::Blob.respond_to?(:create_and_upload!)
ActiveStorage::Blob.create_and_upload!(**args)
else
ActiveStorage::Blob.create_after_upload!(**args)
end
end

def setup
setup_db
end

def teardown
super
clean_active_storage_attachments
end

def test_paranoid_active_storage
pt = ParanoidActiveStorage.create({
main_file: create_file_blob,
files: [create_file_blob, create_file_blob],
undependent_main_file: create_file_blob,
undependent_files: [create_file_blob, create_file_blob]
})
pt.destroy
end
end
Loading
Loading