From 2b6cc0b747c681a1bc72ce84378f4dca48f408d5 Mon Sep 17 00:00:00 2001 From: "Luis E. Guardiola" Date: Mon, 1 Jul 2019 20:33:26 -0300 Subject: [PATCH] Apply deletion filters when retrieving data. --- lib/sequel/plugins/soft_destroy.rb | 8 +++++++- test/sequel/plugins/soft_destroy_test.rb | 12 +++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/sequel/plugins/soft_destroy.rb b/lib/sequel/plugins/soft_destroy.rb index e83eb8c..0129d16 100644 --- a/lib/sequel/plugins/soft_destroy.rb +++ b/lib/sequel/plugins/soft_destroy.rb @@ -9,7 +9,13 @@ module ClassMethods Sequel::Plugins.def_dataset_methods(self, :filter_deleted) def [](*args) - model = super + args = args.first if args.size <= 1 + + return filter_deleted.first(args) if args.is_a?(Hash) + + return if args.nil? + + model = primary_key_lookup(args) return if model.nil? || model.deleted? diff --git a/test/sequel/plugins/soft_destroy_test.rb b/test/sequel/plugins/soft_destroy_test.rb index 0af2d62..0144502 100644 --- a/test/sequel/plugins/soft_destroy_test.rb +++ b/test/sequel/plugins/soft_destroy_test.rb @@ -48,9 +48,19 @@ def test_filter_deleted assert_equal [foo_1, foo_2], Foo.filter_deleted.where(Sequel.ilike(:name, "foo%")).all end - def test_fetch + def test_fetch_by_id foo = Foo.create(name: "foo 1").soft_destroy assert_nil Foo[foo.id] end + + def test_fetch_by_key + foo_1 = Foo.create(name: "foo").soft_destroy + + assert_nil Foo[name: "foo"] + + foo_2 = Foo.create(name: "foo") + + assert_equal foo_2, Foo[name: "foo"] + end end