mongoid_paranoia 0.5.0 → 0.6.0
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 +4 -4
- data/README.md +11 -2
- data/lib/mongoid/paranoia/version.rb +1 -1
- data/lib/mongoid/paranoia.rb +3 -3
- metadata +8 -59
- data/perf/scope.rb +0 -65
- data/spec/app/models/address.rb +0 -71
- data/spec/app/models/appointment.rb +0 -7
- data/spec/app/models/author.rb +0 -6
- data/spec/app/models/fish.rb +0 -8
- data/spec/app/models/paranoid_phone.rb +0 -25
- data/spec/app/models/paranoid_post.rb +0 -65
- data/spec/app/models/person.rb +0 -21
- data/spec/app/models/phone.rb +0 -11
- data/spec/app/models/relations.rb +0 -247
- data/spec/app/models/tag.rb +0 -6
- data/spec/app/models/title.rb +0 -4
- data/spec/mongoid/configuration_spec.rb +0 -19
- data/spec/mongoid/document_spec.rb +0 -21
- data/spec/mongoid/nested_attributes_spec.rb +0 -164
- data/spec/mongoid/paranoia_spec.rb +0 -887
- data/spec/mongoid/scoping_spec.rb +0 -55
- data/spec/mongoid/validatable/uniqueness_spec.rb +0 -74
- data/spec/spec_helper.rb +0 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c03b7dee0f348835ab02ae6dd3543c6af25a9593a2b3655192d35516dbe6eeec
|
4
|
+
data.tar.gz: 43bf43f4fa43bff574b843213beb54e5a2d3ed4b6c80205d3443212e6ac1ca2a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5a5b3bf5cf3074a00565798032c1b3fae4c23e2c4ed80091600305a11a52e981ad735503a1ddb6369aa17da4900e010b366e2af8b46db842a0c1b55bdff3e3c
|
7
|
+
data.tar.gz: fceeb94c3cf50a52dd90e500988f63c9e4e850153d31808604bf226a7099b33401df37e04448474f07511905371fd9f068390689509c2480f8b5862b521b4d44
|
data/README.md
CHANGED
@@ -1,12 +1,21 @@
|
|
1
1
|
# Paranoid Documents for Mongoid
|
2
2
|
[](https://travis-ci.org/simi/mongoid_paranoia) [](https://rubygems.org/gems/mongoid_paranoia) [](https://gitter.im/simi/mongoid_paranoia)
|
3
3
|
|
4
|
-
`Mongoid::Paranoia` enables a "soft delete" of Mongoid documents.
|
4
|
+
`Mongoid::Paranoia` enables a "soft delete" of Mongoid documents.
|
5
|
+
Instead of being removed from the database, paranoid docs are flagged
|
6
|
+
with a `deleted_at` timestamp and are ignored from queries by default.
|
5
7
|
|
6
|
-
The `Mongoid::Paranoia` functionality was originally supported in Mongoid
|
8
|
+
The `Mongoid::Paranoia` functionality was originally supported in Mongoid
|
9
|
+
itself, but was dropped from version 4.0 onwards. This gem was extracted
|
10
|
+
from the [Mongoid 3.0.0-stable branch](https://github.com/mongodb/mongoid/tree/3.0.0-stable).
|
7
11
|
|
8
12
|
**Caution:** This repo/gem `mongoid_paranoia` (underscored) is different than [mongoid-paranoia](https://github.com/haihappen/mongoid-paranoia) (hyphenated). The goal of `mongoid-paranoia` (hyphenated) is to stay API compatible and it only accepts security fixes.
|
9
13
|
|
14
|
+
## Version Support
|
15
|
+
|
16
|
+
* The current release is compatible with Mongoid 7.3 and later, and Ruby 2.7 and later.
|
17
|
+
* Earlier Mongoid and Ruby versions are supported on earlier releases.
|
18
|
+
|
10
19
|
## Installation
|
11
20
|
|
12
21
|
Add this line to your application's Gemfile:
|
data/lib/mongoid/paranoia.rb
CHANGED
@@ -75,7 +75,7 @@ module Mongoid
|
|
75
75
|
# @return [ true ] True.
|
76
76
|
#
|
77
77
|
# @since 1.0.0
|
78
|
-
alias
|
78
|
+
alias orig_delete delete
|
79
79
|
|
80
80
|
def remove(_ = {})
|
81
81
|
time = self.deleted_at = Time.now
|
@@ -84,8 +84,8 @@ module Mongoid
|
|
84
84
|
true
|
85
85
|
end
|
86
86
|
|
87
|
-
alias
|
88
|
-
alias
|
87
|
+
alias delete remove
|
88
|
+
alias delete! orig_delete
|
89
89
|
|
90
90
|
# Delete the paranoid +Document+ from the database completely. This will
|
91
91
|
# run the destroy and remove callbacks.
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid_paranoia
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Durran Jordan
|
@@ -9,36 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2023-09-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongoid
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '7.3'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
|
-
requirements:
|
25
|
-
- - "~>"
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
version: '7.3'
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
name: rubocop
|
30
|
-
requirement: !ruby/object:Gem::Requirement
|
31
|
-
requirements:
|
32
|
-
- - ">="
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: 1.8.1
|
35
|
-
type: :development
|
36
|
-
prerelease: false
|
37
23
|
version_requirements: !ruby/object:Gem::Requirement
|
38
24
|
requirements:
|
39
25
|
- - ">="
|
40
26
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
27
|
+
version: '7.3'
|
42
28
|
description: Provides a Paranoia module documents which soft-deletes documents.
|
43
29
|
email:
|
44
30
|
- durran@gmail.com
|
@@ -55,29 +41,11 @@ files:
|
|
55
41
|
- lib/mongoid/paranoia/monkey_patches.rb
|
56
42
|
- lib/mongoid/paranoia/version.rb
|
57
43
|
- lib/mongoid_paranoia.rb
|
58
|
-
- perf/scope.rb
|
59
|
-
- spec/app/models/address.rb
|
60
|
-
- spec/app/models/appointment.rb
|
61
|
-
- spec/app/models/author.rb
|
62
|
-
- spec/app/models/fish.rb
|
63
|
-
- spec/app/models/paranoid_phone.rb
|
64
|
-
- spec/app/models/paranoid_post.rb
|
65
|
-
- spec/app/models/person.rb
|
66
|
-
- spec/app/models/phone.rb
|
67
|
-
- spec/app/models/relations.rb
|
68
|
-
- spec/app/models/tag.rb
|
69
|
-
- spec/app/models/title.rb
|
70
|
-
- spec/mongoid/configuration_spec.rb
|
71
|
-
- spec/mongoid/document_spec.rb
|
72
|
-
- spec/mongoid/nested_attributes_spec.rb
|
73
|
-
- spec/mongoid/paranoia_spec.rb
|
74
|
-
- spec/mongoid/scoping_spec.rb
|
75
|
-
- spec/mongoid/validatable/uniqueness_spec.rb
|
76
|
-
- spec/spec_helper.rb
|
77
44
|
homepage: https://github.com/simi/mongoid-paranoia
|
78
45
|
licenses:
|
79
46
|
- MIT
|
80
|
-
metadata:
|
47
|
+
metadata:
|
48
|
+
rubygems_mfa_required: 'true'
|
81
49
|
post_install_message:
|
82
50
|
rdoc_options: []
|
83
51
|
require_paths:
|
@@ -93,27 +61,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
61
|
- !ruby/object:Gem::Version
|
94
62
|
version: '0'
|
95
63
|
requirements: []
|
96
|
-
rubygems_version: 3.
|
64
|
+
rubygems_version: 3.4.4
|
97
65
|
signing_key:
|
98
66
|
specification_version: 4
|
99
67
|
summary: Paranoid documents
|
100
|
-
test_files:
|
101
|
-
- perf/scope.rb
|
102
|
-
- spec/app/models/address.rb
|
103
|
-
- spec/app/models/appointment.rb
|
104
|
-
- spec/app/models/author.rb
|
105
|
-
- spec/app/models/fish.rb
|
106
|
-
- spec/app/models/paranoid_phone.rb
|
107
|
-
- spec/app/models/paranoid_post.rb
|
108
|
-
- spec/app/models/person.rb
|
109
|
-
- spec/app/models/phone.rb
|
110
|
-
- spec/app/models/relations.rb
|
111
|
-
- spec/app/models/tag.rb
|
112
|
-
- spec/app/models/title.rb
|
113
|
-
- spec/mongoid/configuration_spec.rb
|
114
|
-
- spec/mongoid/document_spec.rb
|
115
|
-
- spec/mongoid/nested_attributes_spec.rb
|
116
|
-
- spec/mongoid/paranoia_spec.rb
|
117
|
-
- spec/mongoid/scoping_spec.rb
|
118
|
-
- spec/mongoid/validatable/uniqueness_spec.rb
|
119
|
-
- spec/spec_helper.rb
|
68
|
+
test_files: []
|
data/perf/scope.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'bundler/setup'
|
4
|
-
require 'mongoid'
|
5
|
-
require 'mongoid/paranoia'
|
6
|
-
require 'benchmark'
|
7
|
-
|
8
|
-
Mongoid.configure do |config|
|
9
|
-
config.connect_to('my_little_test')
|
10
|
-
end
|
11
|
-
|
12
|
-
class Model
|
13
|
-
include Mongoid::Document
|
14
|
-
field :text, type: String
|
15
|
-
|
16
|
-
index({ text: 'text' })
|
17
|
-
end
|
18
|
-
|
19
|
-
class ParanoidModel
|
20
|
-
include Mongoid::Document
|
21
|
-
include Mongoid::Paranoia
|
22
|
-
field :text, type: String
|
23
|
-
|
24
|
-
index({ text: 'text' })
|
25
|
-
end
|
26
|
-
|
27
|
-
class MetaParanoidModel
|
28
|
-
include Mongoid::Document
|
29
|
-
field :text, type: String
|
30
|
-
field :deleted_at, type: Time
|
31
|
-
default_scope -> { where(deleted_at: nil) }
|
32
|
-
|
33
|
-
index({ text: 'text' })
|
34
|
-
end
|
35
|
-
|
36
|
-
if ENV['FORCE']
|
37
|
-
Mongoid.purge!
|
38
|
-
::Mongoid::Tasks::Database.create_indexes
|
39
|
-
|
40
|
-
n = 50_000
|
41
|
-
n.times {|i| Model.create(text: "text #{i}") }
|
42
|
-
n.times {|i| ParanoidModel.create(text: "text #{i}") }
|
43
|
-
n.times {|i| MetaParanoidModel.create(text: "text #{i}") }
|
44
|
-
end
|
45
|
-
|
46
|
-
n = 100
|
47
|
-
|
48
|
-
puts 'text_search benchmark ***'
|
49
|
-
Benchmark.bm(20) do |x|
|
50
|
-
x.report('without') { n.times { Model.text_search('text').execute } }
|
51
|
-
x.report('with') { n.times { ParanoidModel.text_search('text').execute } }
|
52
|
-
x.report('meta') { n.times { MetaParanoidModel.text_search('text').execute } }
|
53
|
-
x.report('unscoped meta') { n.times { MetaParanoidModel.unscoped.text_search('text').execute } }
|
54
|
-
x.report('unscoped paranoid') { n.times { ParanoidModel.unscoped.text_search('text').execute } }
|
55
|
-
end
|
56
|
-
|
57
|
-
puts ''
|
58
|
-
puts 'Pluck all ids benchmark ***'
|
59
|
-
Benchmark.bm(20) do |x|
|
60
|
-
x.report('without') { n.times { Model.all.pluck(:id) } }
|
61
|
-
x.report('with') { n.times { ParanoidModel.all.pluck(:id) } }
|
62
|
-
x.report('meta') { n.times { MetaParanoidModel.all.pluck(:id) } }
|
63
|
-
x.report('unscoped meta') { n.times { MetaParanoidModel.unscoped.all.pluck(:id) } }
|
64
|
-
x.report('unscoped paranoid') { n.times { ParanoidModel.unscoped.all.pluck(:id) } }
|
65
|
-
end
|
data/spec/app/models/address.rb
DELETED
@@ -1,71 +0,0 @@
|
|
1
|
-
class Address
|
2
|
-
include Mongoid::Document
|
3
|
-
|
4
|
-
field :_id, type: String, default: ->{ street.try(:parameterize) }
|
5
|
-
|
6
|
-
attr_accessor :mode
|
7
|
-
|
8
|
-
field :address_type
|
9
|
-
field :number, type: Integer
|
10
|
-
field :street
|
11
|
-
field :city
|
12
|
-
field :state
|
13
|
-
field :post_code
|
14
|
-
field :parent_title
|
15
|
-
field :services, type: Array
|
16
|
-
field :latlng, type: Array
|
17
|
-
field :map, type: Hash
|
18
|
-
field :move_in, type: DateTime
|
19
|
-
field :s, type: String, as: :suite
|
20
|
-
field :name, localize: true
|
21
|
-
|
22
|
-
embeds_one :code, validate: false
|
23
|
-
embeds_one :target, as: :targetable, validate: false
|
24
|
-
|
25
|
-
embedded_in :addressable, polymorphic: true do
|
26
|
-
def extension
|
27
|
-
"Testing"
|
28
|
-
end
|
29
|
-
def doctor?
|
30
|
-
title == "Dr"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
accepts_nested_attributes_for :code, :target
|
35
|
-
|
36
|
-
belongs_to :account
|
37
|
-
|
38
|
-
scope :without_postcode, -> {where(postcode: nil)}
|
39
|
-
scope :rodeo, -> {
|
40
|
-
where(street: "Rodeo Dr") do
|
41
|
-
def mansion?
|
42
|
-
all? { |address| address.street == "Rodeo Dr" }
|
43
|
-
end
|
44
|
-
end
|
45
|
-
}
|
46
|
-
|
47
|
-
validates_presence_of :street, on: :update
|
48
|
-
validates_format_of :street, with: /\D/, allow_nil: true
|
49
|
-
|
50
|
-
def set_parent=(set = false)
|
51
|
-
self.parent_title = addressable.title if set
|
52
|
-
end
|
53
|
-
|
54
|
-
def <=>(other)
|
55
|
-
street <=> other.street
|
56
|
-
end
|
57
|
-
|
58
|
-
class << self
|
59
|
-
def california
|
60
|
-
where(state: "CA")
|
61
|
-
end
|
62
|
-
|
63
|
-
def homes
|
64
|
-
where(address_type: "Home")
|
65
|
-
end
|
66
|
-
|
67
|
-
def streets
|
68
|
-
all.map(&:street)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
data/spec/app/models/author.rb
DELETED
data/spec/app/models/fish.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
class ParanoidPhone
|
2
|
-
include Mongoid::Document
|
3
|
-
include Mongoid::Paranoia
|
4
|
-
|
5
|
-
attr_accessor :after_destroy_called, :before_destroy_called
|
6
|
-
|
7
|
-
field :number, type: String
|
8
|
-
|
9
|
-
embedded_in :person
|
10
|
-
|
11
|
-
before_destroy :before_destroy_stub, :halt_me
|
12
|
-
after_destroy :after_destroy_stub
|
13
|
-
|
14
|
-
def before_destroy_stub
|
15
|
-
self.before_destroy_called = true
|
16
|
-
end
|
17
|
-
|
18
|
-
def after_destroy_stub
|
19
|
-
self.after_destroy_called = true
|
20
|
-
end
|
21
|
-
|
22
|
-
def halt_me
|
23
|
-
throw :abort if person.age == 42
|
24
|
-
end
|
25
|
-
end
|
@@ -1,65 +0,0 @@
|
|
1
|
-
class ParanoidPost
|
2
|
-
include Mongoid::Document
|
3
|
-
include Mongoid::Paranoia
|
4
|
-
|
5
|
-
field :title, type: String
|
6
|
-
|
7
|
-
attr_accessor :after_destroy_called, :before_destroy_called,
|
8
|
-
:after_restore_called, :before_restore_called,
|
9
|
-
:after_remove_called, :before_remove_called,
|
10
|
-
:around_before_restore_called, :around_after_restore_called
|
11
|
-
|
12
|
-
belongs_to :person
|
13
|
-
|
14
|
-
has_and_belongs_to_many :tags
|
15
|
-
has_many :authors, dependent: :delete_all, inverse_of: :post
|
16
|
-
has_many :titles, dependent: :restrict_with_error
|
17
|
-
|
18
|
-
scope :recent, -> {where(created_at: { "$lt" => Time.now, "$gt" => 30.days.ago })}
|
19
|
-
|
20
|
-
before_destroy :before_destroy_stub
|
21
|
-
after_destroy :after_destroy_stub
|
22
|
-
|
23
|
-
before_remove :before_remove_stub
|
24
|
-
after_remove :after_remove_stub
|
25
|
-
|
26
|
-
before_restore :before_restore_stub
|
27
|
-
after_restore :after_restore_stub
|
28
|
-
around_restore :around_restore_stub
|
29
|
-
|
30
|
-
def before_destroy_stub
|
31
|
-
self.before_destroy_called = true
|
32
|
-
end
|
33
|
-
|
34
|
-
def after_destroy_stub
|
35
|
-
self.after_destroy_called = true
|
36
|
-
end
|
37
|
-
|
38
|
-
def before_remove_stub
|
39
|
-
self.before_remove_called = true
|
40
|
-
end
|
41
|
-
|
42
|
-
def after_remove_stub
|
43
|
-
self.after_remove_called = true
|
44
|
-
end
|
45
|
-
|
46
|
-
def before_restore_stub
|
47
|
-
self.before_restore_called = true
|
48
|
-
end
|
49
|
-
|
50
|
-
def after_restore_stub
|
51
|
-
self.after_restore_called = true
|
52
|
-
end
|
53
|
-
|
54
|
-
def around_restore_stub
|
55
|
-
self.around_before_restore_called = true
|
56
|
-
yield
|
57
|
-
self.around_after_restore_called = true
|
58
|
-
end
|
59
|
-
|
60
|
-
class << self
|
61
|
-
def old
|
62
|
-
where(created_at: { "$lt" => 30.days.ago })
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
data/spec/app/models/person.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
class Person
|
2
|
-
include Mongoid::Document
|
3
|
-
|
4
|
-
field :age, type: Integer, default: "100"
|
5
|
-
field :score, type: Integer
|
6
|
-
|
7
|
-
attr_reader :rescored
|
8
|
-
|
9
|
-
embeds_many :phone_numbers, class_name: "Phone", validate: false
|
10
|
-
embeds_many :phones, store_as: :mobile_phones, validate: false
|
11
|
-
embeds_many :addresses, as: :addressable, validate: false
|
12
|
-
|
13
|
-
embeds_many :appointments, validate: false
|
14
|
-
embeds_many :paranoid_phones, validate: false
|
15
|
-
|
16
|
-
has_many :paranoid_posts, validate: false
|
17
|
-
belongs_to :paranoid_post
|
18
|
-
|
19
|
-
accepts_nested_attributes_for :addresses
|
20
|
-
accepts_nested_attributes_for :paranoid_phones
|
21
|
-
end
|