mongoid_paranoia 0.1.2 → 0.2.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 +5 -13
- data/LICENSE +21 -21
- data/README.md +124 -110
- data/lib/mongoid-paranoia.rb +1 -1
- data/lib/mongoid/paranoia.rb +208 -154
- data/lib/mongoid/paranoia/configuration.rb +11 -0
- data/lib/mongoid/paranoia/monkey_patches.rb +113 -113
- data/lib/mongoid/paranoia/version.rb +5 -5
- data/lib/mongoid_paranoia.rb +1 -1
- data/perf/scope.rb +64 -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 -53
- data/spec/app/models/person.rb +21 -190
- data/spec/app/models/phone.rb +11 -11
- data/spec/app/models/relations.rb +247 -0
- data/spec/app/models/tag.rb +6 -6
- data/spec/app/models/title.rb +4 -4
- data/spec/mongoid/configuration_spec.rb +19 -0
- data/spec/mongoid/document_spec.rb +21 -21
- data/spec/mongoid/nested_attributes_spec.rb +164 -164
- data/spec/mongoid/paranoia_spec.rb +887 -751
- data/spec/mongoid/scoping_spec.rb +55 -55
- data/spec/mongoid/validatable/uniqueness_spec.rb +74 -74
- data/spec/spec_helper.rb +73 -80
- metadata +37 -19
@@ -1,7 +1,7 @@
|
|
1
|
-
class Appointment
|
2
|
-
include Mongoid::Document
|
3
|
-
field :active, type: Boolean, default: true
|
4
|
-
field :timed, type: Boolean, default: true
|
5
|
-
embedded_in :person
|
6
|
-
default_scope ->{where(active: true)}
|
7
|
-
end
|
1
|
+
class Appointment
|
2
|
+
include Mongoid::Document
|
3
|
+
field :active, type: Boolean, default: true
|
4
|
+
field :timed, type: Boolean, default: true
|
5
|
+
embedded_in :person
|
6
|
+
default_scope ->{where(active: true)}
|
7
|
+
end
|
data/spec/app/models/author.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
class Author
|
2
|
-
include Mongoid::Document
|
3
|
-
field :name, type: String
|
4
|
-
|
5
|
-
belongs_to :post, class_name: "ParanoidPost"
|
6
|
-
end
|
1
|
+
class Author
|
2
|
+
include Mongoid::Document
|
3
|
+
field :name, type: String
|
4
|
+
|
5
|
+
belongs_to :post, class_name: "ParanoidPost"
|
6
|
+
end
|
data/spec/app/models/fish.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
class Fish
|
2
|
-
include Mongoid::Document
|
3
|
-
include Mongoid::Paranoia
|
4
|
-
|
5
|
-
def self.fresh
|
6
|
-
where(fresh: true)
|
7
|
-
end
|
8
|
-
end
|
1
|
+
class Fish
|
2
|
+
include Mongoid::Document
|
3
|
+
include Mongoid::Paranoia
|
4
|
+
|
5
|
+
def self.fresh
|
6
|
+
where(fresh: true)
|
7
|
+
end
|
8
|
+
end
|
@@ -1,25 +1,25 @@
|
|
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
|
-
person.age == 42 ? false : true
|
24
|
-
end
|
25
|
-
end
|
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
|
+
person.age == 42 ? false : true
|
24
|
+
end
|
25
|
+
end
|
@@ -1,53 +1,65 @@
|
|
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
|
-
:
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
has_many :
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
def
|
31
|
-
self.
|
32
|
-
end
|
33
|
-
|
34
|
-
def
|
35
|
-
self.
|
36
|
-
end
|
37
|
-
|
38
|
-
def
|
39
|
-
self.
|
40
|
-
end
|
41
|
-
|
42
|
-
def
|
43
|
-
self.
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
end
|
53
|
-
|
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, inverse_of: :post
|
16
|
+
has_many :titles, dependent: :restrict
|
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
CHANGED
@@ -1,190 +1,21 @@
|
|
1
|
-
class Person
|
2
|
-
include Mongoid::Document
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
field :owner_id, type: Integer
|
23
|
-
field :security_code
|
24
|
-
field :reading, type: Object
|
25
|
-
field :bson_id, type: BSON::ObjectId
|
26
|
-
field :pattern, type: Regexp
|
27
|
-
field :override_me, type: Integer
|
28
|
-
field :t, as: :test, type: String
|
29
|
-
field :i, as: :inte, type: Integer
|
30
|
-
field :a, as: :array, type: Array
|
31
|
-
field :desc, localize: true
|
32
|
-
|
33
|
-
index age: 1
|
34
|
-
index addresses: 1
|
35
|
-
index dob: 1
|
36
|
-
index name: 1
|
37
|
-
index title: 1
|
38
|
-
|
39
|
-
index({ ssn: 1 }, { unique: true })
|
40
|
-
|
41
|
-
attr_reader :rescored
|
42
|
-
|
43
|
-
embeds_many :phone_numbers, class_name: "Phone", validate: false
|
44
|
-
embeds_many :phones, store_as: :mobile_phones, validate: false
|
45
|
-
embeds_many :addresses, as: :addressable, validate: false do
|
46
|
-
def extension
|
47
|
-
"Testing"
|
48
|
-
end
|
49
|
-
def find_by_street(street)
|
50
|
-
where(street: street).first
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
embeds_many :appointments, validate: false
|
55
|
-
embeds_many :paranoid_phones, validate: false
|
56
|
-
|
57
|
-
embeds_one :passport, autobuild: true, store_as: :pass, validate: false
|
58
|
-
embeds_one :pet, class_name: "Animal", validate: false
|
59
|
-
embeds_one :name, as: :namable, validate: false do
|
60
|
-
def extension
|
61
|
-
"Testing"
|
62
|
-
end
|
63
|
-
def dawkins?
|
64
|
-
first_name == "Richard" && last_name == "Dawkins"
|
65
|
-
end
|
66
|
-
end
|
67
|
-
embeds_one :quiz, validate: false
|
68
|
-
|
69
|
-
has_one :game, dependent: :destroy, validate: false do
|
70
|
-
def extension
|
71
|
-
"Testing"
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
has_many \
|
76
|
-
:posts,
|
77
|
-
dependent: :delete,
|
78
|
-
validate: false do
|
79
|
-
def extension
|
80
|
-
"Testing"
|
81
|
-
end
|
82
|
-
end
|
83
|
-
has_many :ordered_posts, order: :rating.desc, validate: false
|
84
|
-
has_and_belongs_to_many \
|
85
|
-
:preferences,
|
86
|
-
index: true,
|
87
|
-
dependent: :nullify,
|
88
|
-
validate: false
|
89
|
-
has_and_belongs_to_many :user_accounts, validate: false
|
90
|
-
has_and_belongs_to_many :houses, validate: false
|
91
|
-
has_and_belongs_to_many :ordered_preferences, order: :value.desc, validate: false
|
92
|
-
|
93
|
-
has_many :drugs, validate: false
|
94
|
-
has_many :paranoid_posts, validate: false
|
95
|
-
has_one :account, validate: false
|
96
|
-
has_one :cat, dependent: :nullify, validate: false
|
97
|
-
has_one :book, autobuild: true, validate: false
|
98
|
-
has_one :home, dependent: :delete, validate: false
|
99
|
-
|
100
|
-
belongs_to :paranoid_post
|
101
|
-
|
102
|
-
has_and_belongs_to_many \
|
103
|
-
:administrated_events,
|
104
|
-
class_name: 'Event',
|
105
|
-
inverse_of: :administrators,
|
106
|
-
dependent: :nullify,
|
107
|
-
validate: false
|
108
|
-
|
109
|
-
accepts_nested_attributes_for :addresses
|
110
|
-
accepts_nested_attributes_for :name, update_only: true
|
111
|
-
accepts_nested_attributes_for :pet, allow_destroy: true
|
112
|
-
accepts_nested_attributes_for :game, allow_destroy: true
|
113
|
-
accepts_nested_attributes_for :posts
|
114
|
-
accepts_nested_attributes_for :preferences
|
115
|
-
accepts_nested_attributes_for :quiz
|
116
|
-
accepts_nested_attributes_for :paranoid_phones
|
117
|
-
|
118
|
-
scope :minor, ->{where(:age.lt => 18)}
|
119
|
-
scope :without_ssn, ->{without(:ssn)}
|
120
|
-
scope :search, ->(query){ any_of({ title: query }) }
|
121
|
-
|
122
|
-
def score_with_rescoring=(score)
|
123
|
-
@rescored = score.to_i + 20
|
124
|
-
self.score_without_rescoring = score
|
125
|
-
end
|
126
|
-
|
127
|
-
alias_method_chain :score=, :rescoring
|
128
|
-
|
129
|
-
def update_addresses
|
130
|
-
addresses.each do |address|
|
131
|
-
address.street = "Updated Address"
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
def employer=(emp)
|
136
|
-
self.employer_id = emp.id
|
137
|
-
end
|
138
|
-
|
139
|
-
def set_addresses=(addresses)
|
140
|
-
self.addresses = addresses
|
141
|
-
end
|
142
|
-
|
143
|
-
def override_me
|
144
|
-
read_attribute(:override_me).to_s
|
145
|
-
end
|
146
|
-
|
147
|
-
class << self
|
148
|
-
def accepted
|
149
|
-
scoped.where(terms: true)
|
150
|
-
end
|
151
|
-
def knight
|
152
|
-
scoped.where(title: "Sir")
|
153
|
-
end
|
154
|
-
def old
|
155
|
-
scoped.where(age: { "$gt" => 50 })
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
def reject_if_city_is_empty(attrs)
|
160
|
-
attrs[:city].blank?
|
161
|
-
end
|
162
|
-
|
163
|
-
def reject_if_name_is_blank(attrs)
|
164
|
-
attrs[:first_name].blank?
|
165
|
-
end
|
166
|
-
|
167
|
-
def foo
|
168
|
-
'i_am_foo'
|
169
|
-
end
|
170
|
-
|
171
|
-
def preference_names=(names)
|
172
|
-
names.split(",").each do |name|
|
173
|
-
preference = Preference.where(name: name).first
|
174
|
-
if preference
|
175
|
-
self.preferences << preference
|
176
|
-
else
|
177
|
-
preferences.build(name: name)
|
178
|
-
end
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
def set_on_map_with_default=(value)
|
183
|
-
self.map_with_default["key"] = value
|
184
|
-
end
|
185
|
-
|
186
|
-
reset_callbacks(:validate)
|
187
|
-
reset_callbacks(:create)
|
188
|
-
reset_callbacks(:save)
|
189
|
-
reset_callbacks(:destroy)
|
190
|
-
end
|
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
|
data/spec/app/models/phone.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
class Phone
|
2
|
-
include Mongoid::Document
|
3
|
-
|
4
|
-
attr_accessor :number_in_observer
|
5
|
-
|
6
|
-
field :_id, type: String, default: ->{ number }
|
7
|
-
|
8
|
-
field :number
|
9
|
-
embeds_one :country_code
|
10
|
-
embedded_in :person
|
11
|
-
end
|
1
|
+
class Phone
|
2
|
+
include Mongoid::Document
|
3
|
+
|
4
|
+
attr_accessor :number_in_observer
|
5
|
+
|
6
|
+
field :_id, type: String, default: ->{ number }
|
7
|
+
|
8
|
+
field :number
|
9
|
+
embeds_one :country_code
|
10
|
+
embedded_in :person
|
11
|
+
end
|