mongoid_paranoia 0.2.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/LICENSE +21 -21
- data/README.md +117 -124
- data/lib/mongoid-paranoia.rb +3 -1
- data/lib/mongoid/paranoia.rb +206 -208
- data/lib/mongoid/paranoia/configuration.rb +13 -11
- data/lib/mongoid/paranoia/monkey_patches.rb +114 -113
- data/lib/mongoid/paranoia/version.rb +7 -5
- data/lib/mongoid_paranoia.rb +3 -1
- data/perf/scope.rb +65 -64
- data/spec/app/models/address.rb +71 -71
- data/spec/app/models/appointment.rb +7 -7
- data/spec/app/models/author.rb +6 -6
- data/spec/app/models/fish.rb +8 -8
- data/spec/app/models/paranoid_phone.rb +25 -25
- data/spec/app/models/paranoid_post.rb +65 -65
- data/spec/app/models/person.rb +21 -21
- data/spec/app/models/phone.rb +11 -11
- data/spec/app/models/relations.rb +247 -247
- data/spec/app/models/tag.rb +6 -6
- data/spec/app/models/title.rb +4 -4
- data/spec/mongoid/configuration_spec.rb +19 -19
- data/spec/mongoid/document_spec.rb +21 -21
- data/spec/mongoid/nested_attributes_spec.rb +164 -164
- data/spec/mongoid/paranoia_spec.rb +887 -887
- data/spec/mongoid/scoping_spec.rb +55 -55
- data/spec/mongoid/validatable/uniqueness_spec.rb +74 -74
- data/spec/spec_helper.rb +43 -73
- metadata +30 -27
@@ -1,55 +1,55 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::Criteria::Scopable do
|
4
|
-
|
5
|
-
context "when the document is paranoid" do
|
6
|
-
|
7
|
-
context "when calling a class method" do
|
8
|
-
|
9
|
-
let(:criteria) do
|
10
|
-
Fish.fresh
|
11
|
-
end
|
12
|
-
|
13
|
-
it "includes the deleted_at criteria in the selector" do
|
14
|
-
expect(criteria.selector).to eq({
|
15
|
-
"deleted_at" => nil, "fresh" => true
|
16
|
-
})
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
context "when chaining a class method to unscoped" do
|
21
|
-
|
22
|
-
let(:criteria) do
|
23
|
-
Fish.unscoped.fresh
|
24
|
-
end
|
25
|
-
|
26
|
-
it "does not include the deleted_at in the selector" do
|
27
|
-
expect(criteria.selector).to eq({ "fresh" => true })
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
context "when chaining a class method to deleted" do
|
32
|
-
|
33
|
-
let(:criteria) do
|
34
|
-
Fish.deleted.fresh
|
35
|
-
end
|
36
|
-
|
37
|
-
it "includes the deleted_at $ne criteria in the selector" do
|
38
|
-
expect(criteria.selector).to eq({
|
39
|
-
"deleted_at" => { "$ne" => nil }, "fresh" => true
|
40
|
-
})
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
context "when chaining a where to unscoped" do
|
45
|
-
|
46
|
-
let(:criteria) do
|
47
|
-
Fish.unscoped.where(fresh: true)
|
48
|
-
end
|
49
|
-
|
50
|
-
it "includes no default scoping information in the selector" do
|
51
|
-
expect(criteria.selector).to eq({ "fresh" => true })
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Criteria::Scopable do
|
4
|
+
|
5
|
+
context "when the document is paranoid" do
|
6
|
+
|
7
|
+
context "when calling a class method" do
|
8
|
+
|
9
|
+
let(:criteria) do
|
10
|
+
Fish.fresh
|
11
|
+
end
|
12
|
+
|
13
|
+
it "includes the deleted_at criteria in the selector" do
|
14
|
+
expect(criteria.selector).to eq({
|
15
|
+
"deleted_at" => nil, "fresh" => true
|
16
|
+
})
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context "when chaining a class method to unscoped" do
|
21
|
+
|
22
|
+
let(:criteria) do
|
23
|
+
Fish.unscoped.fresh
|
24
|
+
end
|
25
|
+
|
26
|
+
it "does not include the deleted_at in the selector" do
|
27
|
+
expect(criteria.selector).to eq({ "fresh" => true })
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context "when chaining a class method to deleted" do
|
32
|
+
|
33
|
+
let(:criteria) do
|
34
|
+
Fish.deleted.fresh
|
35
|
+
end
|
36
|
+
|
37
|
+
it "includes the deleted_at $ne criteria in the selector" do
|
38
|
+
expect(criteria.selector).to eq({
|
39
|
+
"deleted_at" => { "$ne" => nil }, "fresh" => true
|
40
|
+
})
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context "when chaining a where to unscoped" do
|
45
|
+
|
46
|
+
let(:criteria) do
|
47
|
+
Fish.unscoped.where(fresh: true)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "includes no default scoping information in the selector" do
|
51
|
+
expect(criteria.selector).to eq({ "fresh" => true })
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -1,74 +1,74 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe "Paranoia uniqueness scoped validator" do
|
4
|
-
describe "#valid?" do
|
5
|
-
context "when the document is a root document" do
|
6
|
-
context "when the document is paranoid" do
|
7
|
-
before do
|
8
|
-
ParanoidPost.validates(:title, uniqueness: { conditions: -> { ParanoidPost.where(deleted_at: nil) } })
|
9
|
-
end
|
10
|
-
|
11
|
-
after do
|
12
|
-
ParanoidPost.reset_callbacks(:validate)
|
13
|
-
end
|
14
|
-
|
15
|
-
let!(:post) do
|
16
|
-
ParanoidPost.create(title: "testing")
|
17
|
-
end
|
18
|
-
|
19
|
-
context "when the field is unique" do
|
20
|
-
|
21
|
-
let(:new_post) do
|
22
|
-
ParanoidPost.new(title: "test")
|
23
|
-
end
|
24
|
-
|
25
|
-
it "returns true" do
|
26
|
-
expect(new_post).to be_valid
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
context "when the field is unique for non soft deleted docs" do
|
31
|
-
|
32
|
-
before do
|
33
|
-
post.delete!
|
34
|
-
end
|
35
|
-
|
36
|
-
let(:new_post) do
|
37
|
-
ParanoidPost.new(title: "testing")
|
38
|
-
end
|
39
|
-
|
40
|
-
it "returns true" do
|
41
|
-
expect(new_post).to be_valid
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
context "when the field is not unique for soft deleted docs" do
|
46
|
-
|
47
|
-
before do
|
48
|
-
post = ParanoidPost.create(title: "test")
|
49
|
-
post.delete
|
50
|
-
end
|
51
|
-
|
52
|
-
let(:new_post) do
|
53
|
-
ParanoidPost.new(title: "test")
|
54
|
-
end
|
55
|
-
|
56
|
-
it "returns true" do
|
57
|
-
expect(new_post).to be_valid
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
context "when the field is not unique" do
|
62
|
-
|
63
|
-
let(:new_post) do
|
64
|
-
ParanoidPost.new(title: "testing")
|
65
|
-
end
|
66
|
-
|
67
|
-
it "returns false" do
|
68
|
-
expect(new_post).not_to be_valid
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "Paranoia uniqueness scoped validator" do
|
4
|
+
describe "#valid?" do
|
5
|
+
context "when the document is a root document" do
|
6
|
+
context "when the document is paranoid" do
|
7
|
+
before do
|
8
|
+
ParanoidPost.validates(:title, uniqueness: { conditions: -> { ParanoidPost.where(deleted_at: nil) } })
|
9
|
+
end
|
10
|
+
|
11
|
+
after do
|
12
|
+
ParanoidPost.reset_callbacks(:validate)
|
13
|
+
end
|
14
|
+
|
15
|
+
let!(:post) do
|
16
|
+
ParanoidPost.create(title: "testing")
|
17
|
+
end
|
18
|
+
|
19
|
+
context "when the field is unique" do
|
20
|
+
|
21
|
+
let(:new_post) do
|
22
|
+
ParanoidPost.new(title: "test")
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns true" do
|
26
|
+
expect(new_post).to be_valid
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context "when the field is unique for non soft deleted docs" do
|
31
|
+
|
32
|
+
before do
|
33
|
+
post.delete!
|
34
|
+
end
|
35
|
+
|
36
|
+
let(:new_post) do
|
37
|
+
ParanoidPost.new(title: "testing")
|
38
|
+
end
|
39
|
+
|
40
|
+
it "returns true" do
|
41
|
+
expect(new_post).to be_valid
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context "when the field is not unique for soft deleted docs" do
|
46
|
+
|
47
|
+
before do
|
48
|
+
post = ParanoidPost.create(title: "test")
|
49
|
+
post.delete
|
50
|
+
end
|
51
|
+
|
52
|
+
let(:new_post) do
|
53
|
+
ParanoidPost.new(title: "test")
|
54
|
+
end
|
55
|
+
|
56
|
+
it "returns true" do
|
57
|
+
expect(new_post).to be_valid
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context "when the field is not unique" do
|
62
|
+
|
63
|
+
let(:new_post) do
|
64
|
+
ParanoidPost.new(title: "testing")
|
65
|
+
end
|
66
|
+
|
67
|
+
it "returns false" do
|
68
|
+
expect(new_post).not_to be_valid
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,73 +1,43 @@
|
|
1
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__),
|
3
|
-
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
|
8
|
-
|
9
|
-
#
|
10
|
-
#
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
#
|
25
|
-
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
|
35
|
-
Mongoid.
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
module MyApp
|
45
|
-
class Application < Rails::Application
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
RSpec.configure do |config|
|
50
|
-
|
51
|
-
# Drop all collections
|
52
|
-
config.before(:each) do
|
53
|
-
Mongoid.purge!
|
54
|
-
end
|
55
|
-
|
56
|
-
config.before(:all) do
|
57
|
-
Mongoid.logger.level = Logger::INFO
|
58
|
-
Mongo::Logger.logger.level = Logger::INFO if Mongoid::Compatibility::Version.mongoid5?
|
59
|
-
end
|
60
|
-
|
61
|
-
config.after(:all) do
|
62
|
-
Mongoid.purge!
|
63
|
-
end
|
64
|
-
|
65
|
-
# Filter out MongoHQ specs if we can't connect to it.
|
66
|
-
config.filter_run_excluding(config: ->(value){
|
67
|
-
return true if value == :mongohq && !mongohq_connectable?
|
68
|
-
})
|
69
|
-
end
|
70
|
-
|
71
|
-
ActiveSupport::Inflector.inflections do |inflect|
|
72
|
-
inflect.singular("address_components", "address_component")
|
73
|
-
end
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
|
4
|
+
require 'mongoid'
|
5
|
+
require 'mongoid/paranoia'
|
6
|
+
require 'rspec'
|
7
|
+
|
8
|
+
# When testing locally we use the database named mongoid_test. However when
|
9
|
+
# tests are running in parallel on Travis we need to use different database
|
10
|
+
# names for each process running since we do not have transactions and want a
|
11
|
+
# clean slate before each spec run.
|
12
|
+
def database_id
|
13
|
+
'mongoid_paranoia_test'
|
14
|
+
end
|
15
|
+
|
16
|
+
# Set the database that the spec suite connects to.
|
17
|
+
Mongoid.configure do |config|
|
18
|
+
config.belongs_to_required_by_default = false
|
19
|
+
config.connect_to(database_id)
|
20
|
+
end
|
21
|
+
|
22
|
+
RSpec.configure do |config|
|
23
|
+
|
24
|
+
# Drop all collections
|
25
|
+
config.before(:each) do
|
26
|
+
Mongoid.purge!
|
27
|
+
end
|
28
|
+
|
29
|
+
config.before(:all) do
|
30
|
+
Mongoid.logger.level = Logger::INFO
|
31
|
+
Mongo::Logger.logger.level = Logger::INFO
|
32
|
+
end
|
33
|
+
|
34
|
+
config.after(:all) do
|
35
|
+
Mongoid.purge!
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
ActiveSupport::Inflector.inflections do |inflect|
|
40
|
+
inflect.singular('address_components', 'address_component')
|
41
|
+
end
|
42
|
+
|
43
|
+
Dir[File.join(File.dirname(__FILE__), 'app/models/*.rb')].each{ |f| require f }
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid_paranoia
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Durran Jordan
|
8
8
|
- Josef Šimánek
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-07-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongoid
|
@@ -17,31 +17,35 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '
|
20
|
+
version: '7.0'
|
21
|
+
- - "<"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '7.3'
|
21
24
|
type: :runtime
|
22
25
|
prerelease: false
|
23
26
|
version_requirements: !ruby/object:Gem::Requirement
|
24
27
|
requirements:
|
25
28
|
- - ">="
|
26
29
|
- !ruby/object:Gem::Version
|
27
|
-
version: '
|
30
|
+
version: '7.0'
|
31
|
+
- - "<"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '7.3'
|
28
34
|
- !ruby/object:Gem::Dependency
|
29
|
-
name:
|
35
|
+
name: rubocop
|
30
36
|
requirement: !ruby/object:Gem::Requirement
|
31
37
|
requirements:
|
32
38
|
- - ">="
|
33
39
|
- !ruby/object:Gem::Version
|
34
|
-
version:
|
35
|
-
type: :
|
40
|
+
version: 1.8.1
|
41
|
+
type: :development
|
36
42
|
prerelease: false
|
37
43
|
version_requirements: !ruby/object:Gem::Requirement
|
38
44
|
requirements:
|
39
45
|
- - ">="
|
40
46
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
42
|
-
description:
|
43
|
-
from the database, but "flagged" as deleted. Mongoid provides a Paranoia module
|
44
|
-
to give you just that.
|
47
|
+
version: 1.8.1
|
48
|
+
description: Provides a Paranoia module documents which soft-deletes documents.
|
45
49
|
email:
|
46
50
|
- durran@gmail.com
|
47
51
|
- retro@ballgag.cz
|
@@ -80,7 +84,7 @@ homepage: https://github.com/simi/mongoid-paranoia
|
|
80
84
|
licenses:
|
81
85
|
- MIT
|
82
86
|
metadata: {}
|
83
|
-
post_install_message:
|
87
|
+
post_install_message:
|
84
88
|
rdoc_options: []
|
85
89
|
require_paths:
|
86
90
|
- lib
|
@@ -95,28 +99,27 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
95
99
|
- !ruby/object:Gem::Version
|
96
100
|
version: '0'
|
97
101
|
requirements: []
|
98
|
-
|
99
|
-
|
100
|
-
signing_key:
|
102
|
+
rubygems_version: 3.1.2
|
103
|
+
signing_key:
|
101
104
|
specification_version: 4
|
102
105
|
summary: Paranoid documents
|
103
106
|
test_files:
|
104
107
|
- perf/scope.rb
|
105
|
-
- spec/app/models/author.rb
|
106
|
-
- spec/app/models/title.rb
|
107
|
-
- spec/app/models/appointment.rb
|
108
108
|
- spec/app/models/address.rb
|
109
|
-
- spec/app/models/
|
109
|
+
- spec/app/models/appointment.rb
|
110
|
+
- spec/app/models/author.rb
|
110
111
|
- spec/app/models/fish.rb
|
112
|
+
- spec/app/models/paranoid_phone.rb
|
113
|
+
- spec/app/models/paranoid_post.rb
|
111
114
|
- spec/app/models/person.rb
|
112
115
|
- spec/app/models/phone.rb
|
113
|
-
- spec/app/models/paranoid_post.rb
|
114
|
-
- spec/app/models/tag.rb
|
115
116
|
- spec/app/models/relations.rb
|
116
|
-
- spec/
|
117
|
-
- spec/
|
118
|
-
- spec/mongoid/validatable/uniqueness_spec.rb
|
119
|
-
- spec/mongoid/nested_attributes_spec.rb
|
120
|
-
- spec/mongoid/document_spec.rb
|
117
|
+
- spec/app/models/tag.rb
|
118
|
+
- spec/app/models/title.rb
|
121
119
|
- spec/mongoid/configuration_spec.rb
|
120
|
+
- spec/mongoid/document_spec.rb
|
121
|
+
- spec/mongoid/nested_attributes_spec.rb
|
122
|
+
- spec/mongoid/paranoia_spec.rb
|
122
123
|
- spec/mongoid/scoping_spec.rb
|
124
|
+
- spec/mongoid/validatable/uniqueness_spec.rb
|
125
|
+
- spec/spec_helper.rb
|