paranoia 1.1.0 → 1.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.
- data/.gitignore +2 -0
- data/Gemfile.lock +17 -15
- data/LICENSE +17 -0
- data/README.md +50 -32
- data/Rakefile +3 -1
- data/lib/paranoia/version.rb +1 -1
- data/lib/paranoia.rb +23 -7
- data/paranoia.gemspec +2 -2
- data/test/paranoia_test.rb +123 -12
- metadata +76 -60
data/Gemfile.lock
CHANGED
@@ -7,22 +7,24 @@ PATH
|
|
7
7
|
GEM
|
8
8
|
remote: http://rubygems.org/
|
9
9
|
specs:
|
10
|
-
activemodel (3.0
|
11
|
-
activesupport (= 3.0
|
12
|
-
builder (~>
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
10
|
+
activemodel (3.2.0)
|
11
|
+
activesupport (= 3.2.0)
|
12
|
+
builder (~> 3.0.0)
|
13
|
+
activerecord (3.2.0)
|
14
|
+
activemodel (= 3.2.0)
|
15
|
+
activesupport (= 3.2.0)
|
16
|
+
arel (~> 3.0.0)
|
17
|
+
tzinfo (~> 0.3.29)
|
18
|
+
activesupport (3.2.0)
|
19
|
+
i18n (~> 0.6)
|
20
|
+
multi_json (~> 1.0)
|
21
|
+
arel (3.0.0)
|
22
|
+
builder (3.0.0)
|
23
|
+
i18n (0.6.0)
|
24
|
+
multi_json (1.0.4)
|
23
25
|
rake (0.8.7)
|
24
|
-
sqlite3 (1.3.
|
25
|
-
tzinfo (0.3.
|
26
|
+
sqlite3 (1.3.5)
|
27
|
+
tzinfo (0.3.31)
|
26
28
|
|
27
29
|
PLATFORMS
|
28
30
|
ruby
|
data/LICENSE
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
Permission is hereby granted, without written agreement and without
|
2
|
+
license or royalty fees, to use, copy, modify, and distribute this
|
3
|
+
software and its documentation for any purpose, provided that the
|
4
|
+
above copyright notice and the following two paragraphs appear in
|
5
|
+
all copies of this software.
|
6
|
+
|
7
|
+
IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
|
8
|
+
DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
|
9
|
+
ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
|
10
|
+
IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
11
|
+
DAMAGE.
|
12
|
+
|
13
|
+
THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
|
14
|
+
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
|
16
|
+
ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
|
17
|
+
PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
|
data/README.md
CHANGED
@@ -8,7 +8,9 @@ You would use either plugin / gem if you wished that when you called `destroy` o
|
|
8
8
|
|
9
9
|
Put this in your Gemfile:
|
10
10
|
|
11
|
-
|
11
|
+
```ruby
|
12
|
+
gem 'paranoia'
|
13
|
+
```
|
12
14
|
|
13
15
|
Then run `bundle`. Done.
|
14
16
|
|
@@ -18,69 +20,85 @@ Updating is as simple as `bundle update paranoia`.
|
|
18
20
|
|
19
21
|
In your _Gemfile_:
|
20
22
|
|
21
|
-
|
23
|
+
```ruby
|
24
|
+
gem 'paranoia'
|
25
|
+
```
|
22
26
|
|
23
27
|
Then run:
|
24
28
|
|
25
|
-
|
29
|
+
```shell
|
30
|
+
bundle install
|
31
|
+
```
|
26
32
|
|
27
33
|
#### Rails 2:
|
28
34
|
|
29
35
|
In your _config/environment.rb_:
|
30
36
|
|
31
|
-
|
37
|
+
```ruby
|
38
|
+
config.gem 'paranoia'
|
39
|
+
```
|
32
40
|
|
33
41
|
Then run:
|
34
42
|
|
35
|
-
|
43
|
+
```shell
|
44
|
+
rake gems:install
|
45
|
+
```
|
36
46
|
|
37
47
|
#### Run your migrations for the desired models
|
38
48
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
49
|
+
```ruby
|
50
|
+
class AddDeletedAtToClient < ActiveRecord::Migration
|
51
|
+
def self.up
|
52
|
+
add_column :clients, :deleted_at, :datetime
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.down
|
56
|
+
remove_column :clients, :deleted_at
|
57
|
+
end
|
58
|
+
end
|
59
|
+
```
|
48
60
|
|
49
61
|
### Usage
|
50
62
|
|
51
63
|
#### In your model:
|
52
64
|
|
53
|
-
|
54
|
-
|
65
|
+
```ruby
|
66
|
+
class Client < ActiveRecord::Base
|
67
|
+
acts_as_paranoid
|
55
68
|
|
56
|
-
|
57
|
-
|
69
|
+
...
|
70
|
+
end
|
71
|
+
```
|
58
72
|
|
59
73
|
Hey presto, it's there!
|
60
74
|
|
61
75
|
If you want a method to be called on destroy, simply provide a _before\_destroy_ callback:
|
62
76
|
|
63
|
-
|
64
|
-
|
77
|
+
```ruby
|
78
|
+
class Client < ActiveRecord::Base
|
79
|
+
acts_as_paranoid
|
65
80
|
|
66
|
-
|
81
|
+
before_destroy :some_method
|
67
82
|
|
68
|
-
|
69
|
-
|
70
|
-
|
83
|
+
def some_method
|
84
|
+
# do stuff
|
85
|
+
end
|
71
86
|
|
72
|
-
|
73
|
-
|
87
|
+
...
|
88
|
+
end
|
89
|
+
```
|
74
90
|
|
75
91
|
You can replace the older acts_as_paranoid methods as follows:
|
76
92
|
|
77
|
-
|
78
|
-
|
79
|
-
|
93
|
+
```ruby
|
94
|
+
find_with_deleted(:all) # => with_deleted
|
95
|
+
find_with_deleted(:first) # => with_deleted.first
|
96
|
+
find_with_deleted(id) # => with_deleted.find(id)
|
80
97
|
|
81
|
-
|
82
|
-
|
83
|
-
|
98
|
+
find_only_deleted(:all) # => only_deleted
|
99
|
+
find_only_deleted(:first) # => only_deleted.first
|
100
|
+
find_only_deleted(id) # => only_deleted.find(id)
|
101
|
+
```
|
84
102
|
|
85
103
|
## License
|
86
104
|
|
data/Rakefile
CHANGED
data/lib/paranoia/version.rb
CHANGED
data/lib/paranoia.rb
CHANGED
@@ -7,9 +7,11 @@ module Paranoia
|
|
7
7
|
def paranoid? ; true ; end
|
8
8
|
|
9
9
|
def only_deleted
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
scoped.tap { |x| x.default_scoped = false }.where("#{self.table_name}.deleted_at is not null")
|
11
|
+
end
|
12
|
+
|
13
|
+
def with_deleted
|
14
|
+
scoped.tap { |x| x.default_scoped = false }
|
13
15
|
end
|
14
16
|
end
|
15
17
|
|
@@ -17,19 +19,26 @@ module Paranoia
|
|
17
19
|
_run_destroy_callbacks { delete }
|
18
20
|
end
|
19
21
|
|
20
|
-
def delete
|
21
|
-
|
22
|
+
def delete
|
23
|
+
update_attribute_or_column(:deleted_at, Time.now) if !deleted? && persisted?
|
22
24
|
freeze
|
23
25
|
end
|
24
|
-
|
26
|
+
|
25
27
|
def restore!
|
26
|
-
|
28
|
+
update_attribute_or_column :deleted_at, nil
|
27
29
|
end
|
28
30
|
|
29
31
|
def destroyed?
|
30
32
|
!self.deleted_at.nil?
|
31
33
|
end
|
32
34
|
alias :deleted? :destroyed?
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
# Rails 3.1 adds update_column. Rails > 3.2.6 deprecates update_attribute, gone in Rails 4.
|
39
|
+
def update_attribute_or_column(*args)
|
40
|
+
respond_to?(:update_column) ? update_column(*args) : update_attribute(*args)
|
41
|
+
end
|
33
42
|
end
|
34
43
|
|
35
44
|
class ActiveRecord::Base
|
@@ -42,4 +51,11 @@ class ActiveRecord::Base
|
|
42
51
|
|
43
52
|
def self.paranoid? ; false ; end
|
44
53
|
def paranoid? ; self.class.paranoid? ; end
|
54
|
+
|
55
|
+
# Override the persisted method to allow for the paranoia gem.
|
56
|
+
# If a paranoid record is selected, then we only want to check
|
57
|
+
# if it's a new record, not if it is "destroyed".
|
58
|
+
def persisted?
|
59
|
+
paranoid? ? !new_record? : super
|
60
|
+
end
|
45
61
|
end
|
data/paranoia.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.authors = ["radarlistener@gmail.com"]
|
9
9
|
s.email = []
|
10
10
|
s.homepage = "http://rubygems.org/gems/paranoia"
|
11
|
-
s.summary = "acts_as_paranoid,
|
12
|
-
s.description = "acts_as_paranoid,
|
11
|
+
s.summary = "Paranoia is a re-implementation of acts_as_paranoid for Rails 3, using much, much, much less code."
|
12
|
+
s.description = "Paranoia is a re-implementation of acts_as_paranoid for Rails 3, using much, much, much less code. You would use either plugin / gem if you wished that when you called destroy on an Active Record object that it didn't actually destroy it, but just \"hid\" the record. Paranoia does this by setting a deleted_at field to the current time when you destroy a record, and hides it by scoping all queries on your model to only include records which do not have a deleted_at field."
|
13
13
|
|
14
14
|
s.required_rubygems_version = ">= 1.3.6"
|
15
15
|
s.rubyforge_project = "paranoia"
|
data/test/paranoia_test.rb
CHANGED
@@ -8,10 +8,15 @@ FileUtils.mkdir_p File.dirname(DB_FILE)
|
|
8
8
|
FileUtils.rm_f DB_FILE
|
9
9
|
|
10
10
|
ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => DB_FILE
|
11
|
-
ActiveRecord::Base.connection.execute 'CREATE TABLE
|
11
|
+
ActiveRecord::Base.connection.execute 'CREATE TABLE parent_models (id INTEGER NOT NULL PRIMARY KEY, deleted_at DATETIME)'
|
12
|
+
ActiveRecord::Base.connection.execute 'CREATE TABLE paranoid_models (id INTEGER NOT NULL PRIMARY KEY, parent_model_id INTEGER, deleted_at DATETIME)'
|
12
13
|
ActiveRecord::Base.connection.execute 'CREATE TABLE featureful_models (id INTEGER NOT NULL PRIMARY KEY, deleted_at DATETIME, name VARCHAR(32))'
|
13
14
|
ActiveRecord::Base.connection.execute 'CREATE TABLE plain_models (id INTEGER NOT NULL PRIMARY KEY, deleted_at DATETIME)'
|
14
15
|
ActiveRecord::Base.connection.execute 'CREATE TABLE callback_models (id INTEGER NOT NULL PRIMARY KEY, deleted_at DATETIME)'
|
16
|
+
ActiveRecord::Base.connection.execute 'CREATE TABLE related_models (id INTEGER NOT NULL PRIMARY KEY, parent_model_id INTEGER NOT NULL, deleted_at DATETIME)'
|
17
|
+
ActiveRecord::Base.connection.execute 'CREATE TABLE employers (id INTEGER NOT NULL PRIMARY KEY, deleted_at DATETIME)'
|
18
|
+
ActiveRecord::Base.connection.execute 'CREATE TABLE employees (id INTEGER NOT NULL PRIMARY KEY, deleted_at DATETIME)'
|
19
|
+
ActiveRecord::Base.connection.execute 'CREATE TABLE jobs (id INTEGER NOT NULL PRIMARY KEY, employer_id INTEGER NOT NULL, employee_id INTEGER NOT NULL, deleted_at DATETIME)'
|
15
20
|
|
16
21
|
class ParanoiaTest < Test::Unit::TestCase
|
17
22
|
def test_plain_model_class_is_not_paranoid
|
@@ -30,6 +35,17 @@ class ParanoiaTest < Test::Unit::TestCase
|
|
30
35
|
assert_equal true, ParanoidModel.new.paranoid?
|
31
36
|
end
|
32
37
|
|
38
|
+
def test_paranoid_models_to_param
|
39
|
+
model = ParanoidModel.new
|
40
|
+
model.save
|
41
|
+
to_param = model.to_param
|
42
|
+
|
43
|
+
model.destroy
|
44
|
+
|
45
|
+
assert_not_equal nil, model.to_param
|
46
|
+
assert_equal to_param, model.to_param
|
47
|
+
end
|
48
|
+
|
33
49
|
def test_destroy_behavior_for_plain_models
|
34
50
|
model = PlainModel.new
|
35
51
|
assert_equal 0, model.class.count
|
@@ -56,7 +72,21 @@ class ParanoiaTest < Test::Unit::TestCase
|
|
56
72
|
|
57
73
|
assert_equal 0, model.class.count
|
58
74
|
assert_equal 1, model.class.unscoped.count
|
59
|
-
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_scoping_behavior_for_paranoid_models
|
78
|
+
ParanoidModel.unscoped.delete_all
|
79
|
+
parent1 = ParentModel.create
|
80
|
+
parent2 = ParentModel.create
|
81
|
+
p1 = ParanoidModel.create(:parent_model => parent1)
|
82
|
+
p2 = ParanoidModel.create(:parent_model => parent2)
|
83
|
+
p1.destroy
|
84
|
+
p2.destroy
|
85
|
+
assert_equal 0, parent1.paranoid_models.count
|
86
|
+
assert_equal 1, parent1.paranoid_models.only_deleted.count
|
87
|
+
p3 = ParanoidModel.create(:parent_model => parent1)
|
88
|
+
assert_equal 2, parent1.paranoid_models.with_deleted.count
|
89
|
+
assert_equal [p1,p3], parent1.paranoid_models.with_deleted
|
60
90
|
end
|
61
91
|
|
62
92
|
def test_destroy_behavior_for_featureful_paranoid_models
|
@@ -72,6 +102,13 @@ class ParanoiaTest < Test::Unit::TestCase
|
|
72
102
|
assert_equal 1, model.class.unscoped.count
|
73
103
|
end
|
74
104
|
|
105
|
+
# Regression test for #24
|
106
|
+
def test_chaining_for_paranoid_models
|
107
|
+
scope = FeaturefulModel.where(:name => "foo").only_deleted
|
108
|
+
assert_equal "foo", scope.where_values_hash[:name]
|
109
|
+
assert_equal 2, scope.where_values.count
|
110
|
+
end
|
111
|
+
|
75
112
|
def test_only_destroyed_scope_for_paranoid_models
|
76
113
|
model = ParanoidModel.new
|
77
114
|
model.save
|
@@ -82,48 +119,89 @@ class ParanoiaTest < Test::Unit::TestCase
|
|
82
119
|
assert_equal model, ParanoidModel.only_deleted.last
|
83
120
|
assert_equal false, ParanoidModel.only_deleted.include?(model2)
|
84
121
|
end
|
85
|
-
|
122
|
+
|
123
|
+
def test_default_scope_for_has_many_relationships
|
124
|
+
parent = ParentModel.create
|
125
|
+
assert_equal 0, parent.related_models.count
|
126
|
+
|
127
|
+
child = parent.related_models.create
|
128
|
+
assert_equal 1, parent.related_models.count
|
129
|
+
|
130
|
+
child.destroy
|
131
|
+
assert_equal false, child.deleted_at.nil?
|
132
|
+
|
133
|
+
assert_equal 0, parent.related_models.count
|
134
|
+
assert_equal 1, parent.related_models.unscoped.count
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_default_scope_for_has_many_through_relationships
|
138
|
+
employer = Employer.create
|
139
|
+
employee = Employee.create
|
140
|
+
assert_equal 0, employer.jobs.count
|
141
|
+
assert_equal 0, employer.employees.count
|
142
|
+
assert_equal 0, employee.jobs.count
|
143
|
+
assert_equal 0, employee.employers.count
|
144
|
+
|
145
|
+
job = Job.create :employer => employer, :employee => employee
|
146
|
+
assert_equal 1, employer.jobs.count
|
147
|
+
assert_equal 1, employer.employees.count
|
148
|
+
assert_equal 1, employee.jobs.count
|
149
|
+
assert_equal 1, employee.employers.count
|
150
|
+
|
151
|
+
employee2 = Employee.create
|
152
|
+
job2 = Job.create :employer => employer, :employee => employee2
|
153
|
+
employee2.destroy
|
154
|
+
assert_equal 2, employer.jobs.count
|
155
|
+
assert_equal 1, employer.employees.count
|
156
|
+
|
157
|
+
job.destroy
|
158
|
+
assert_equal 1, employer.jobs.count
|
159
|
+
assert_equal 0, employer.employees.count
|
160
|
+
assert_equal 0, employee.jobs.count
|
161
|
+
assert_equal 0, employee.employers.count
|
162
|
+
end
|
163
|
+
|
86
164
|
def test_delete_behavior_for_callbacks
|
87
165
|
model = CallbackModel.new
|
88
166
|
model.save
|
89
167
|
model.delete
|
90
168
|
assert_equal nil, model.instance_variable_get(:@callback_called)
|
91
169
|
end
|
92
|
-
|
170
|
+
|
93
171
|
def test_destroy_behavior_for_callbacks
|
94
172
|
model = CallbackModel.new
|
95
173
|
model.save
|
96
174
|
model.destroy
|
97
175
|
assert model.instance_variable_get(:@callback_called)
|
98
176
|
end
|
99
|
-
|
177
|
+
|
100
178
|
def test_restore
|
101
179
|
model = ParanoidModel.new
|
102
180
|
model.save
|
103
181
|
id = model.id
|
104
182
|
model.destroy
|
105
|
-
|
183
|
+
|
106
184
|
assert model.destroyed?
|
107
|
-
|
185
|
+
|
108
186
|
model = ParanoidModel.only_deleted.find(id)
|
109
187
|
model.restore!
|
110
|
-
|
188
|
+
|
111
189
|
assert_equal false, model.destroyed?
|
112
190
|
end
|
113
|
-
|
191
|
+
|
114
192
|
def test_real_destroy
|
115
193
|
model = ParanoidModel.new
|
116
194
|
model.save
|
117
195
|
model.destroy!
|
118
|
-
|
196
|
+
|
119
197
|
assert_equal false, ParanoidModel.unscoped.exists?(model.id)
|
120
198
|
end
|
121
|
-
|
199
|
+
|
122
200
|
def test_real_delete
|
123
201
|
model = ParanoidModel.new
|
124
202
|
model.save
|
125
203
|
model.delete!
|
126
|
-
|
204
|
+
|
127
205
|
assert_equal false, ParanoidModel.unscoped.exists?(model.id)
|
128
206
|
end
|
129
207
|
|
@@ -135,7 +213,12 @@ end
|
|
135
213
|
|
136
214
|
# Helper classes
|
137
215
|
|
216
|
+
class ParentModel < ActiveRecord::Base
|
217
|
+
has_many :paranoid_models
|
218
|
+
end
|
219
|
+
|
138
220
|
class ParanoidModel < ActiveRecord::Base
|
221
|
+
belongs_to :parent_model
|
139
222
|
acts_as_paranoid
|
140
223
|
end
|
141
224
|
|
@@ -151,3 +234,31 @@ class CallbackModel < ActiveRecord::Base
|
|
151
234
|
acts_as_paranoid
|
152
235
|
before_destroy {|model| model.instance_variable_set :@callback_called, true }
|
153
236
|
end
|
237
|
+
|
238
|
+
class ParentModel < ActiveRecord::Base
|
239
|
+
acts_as_paranoid
|
240
|
+
has_many :related_models
|
241
|
+
end
|
242
|
+
|
243
|
+
class RelatedModel < ActiveRecord::Base
|
244
|
+
acts_as_paranoid
|
245
|
+
belongs_to :parent_model
|
246
|
+
end
|
247
|
+
|
248
|
+
class Employer < ActiveRecord::Base
|
249
|
+
acts_as_paranoid
|
250
|
+
has_many :jobs
|
251
|
+
has_many :employees, :through => :jobs
|
252
|
+
end
|
253
|
+
|
254
|
+
class Employee < ActiveRecord::Base
|
255
|
+
acts_as_paranoid
|
256
|
+
has_many :jobs
|
257
|
+
has_many :employers, :through => :jobs
|
258
|
+
end
|
259
|
+
|
260
|
+
class Job < ActiveRecord::Base
|
261
|
+
acts_as_paranoid
|
262
|
+
belongs_to :employer
|
263
|
+
belongs_to :employee
|
264
|
+
end
|
metadata
CHANGED
@@ -1,108 +1,124 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: paranoia
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.2.0
|
4
5
|
prerelease:
|
5
|
-
version: 1.1.0
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- radarlistener@gmail.com
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
dependencies:
|
16
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-11-22 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
17
15
|
name: activerecord
|
18
|
-
|
19
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
20
17
|
none: false
|
21
|
-
requirements:
|
22
|
-
- -
|
23
|
-
- !ruby/object:Gem::Version
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
24
21
|
version: 3.0.0
|
25
22
|
type: :runtime
|
26
|
-
version_requirements: *id001
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: bundler
|
29
23
|
prerelease: false
|
30
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 3.0.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: bundler
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
31
33
|
none: false
|
32
|
-
requirements:
|
33
|
-
- -
|
34
|
-
- !ruby/object:Gem::Version
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
35
37
|
version: 1.0.0
|
36
38
|
type: :development
|
37
|
-
version_requirements: *id002
|
38
|
-
- !ruby/object:Gem::Dependency
|
39
|
-
name: sqlite3
|
40
39
|
prerelease: false
|
41
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
41
|
none: false
|
43
|
-
requirements:
|
44
|
-
- -
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version:
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.0.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: sqlite3
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
47
54
|
type: :development
|
48
|
-
version_requirements: *id003
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: rake
|
51
55
|
prerelease: false
|
52
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rake
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
53
65
|
none: false
|
54
|
-
requirements:
|
55
|
-
- -
|
56
|
-
- !ruby/object:Gem::Version
|
66
|
+
requirements:
|
67
|
+
- - '='
|
68
|
+
- !ruby/object:Gem::Version
|
57
69
|
version: 0.8.7
|
58
70
|
type: :development
|
59
|
-
|
60
|
-
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - '='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.8.7
|
78
|
+
description: Paranoia is a re-implementation of acts_as_paranoid for Rails 3, using
|
79
|
+
much, much, much less code. You would use either plugin / gem if you wished that
|
80
|
+
when you called destroy on an Active Record object that it didn't actually destroy
|
81
|
+
it, but just "hid" the record. Paranoia does this by setting a deleted_at field
|
82
|
+
to the current time when you destroy a record, and hides it by scoping all queries
|
83
|
+
on your model to only include records which do not have a deleted_at field.
|
61
84
|
email: []
|
62
|
-
|
63
85
|
executables: []
|
64
|
-
|
65
86
|
extensions: []
|
66
|
-
|
67
87
|
extra_rdoc_files: []
|
68
|
-
|
69
|
-
files:
|
88
|
+
files:
|
70
89
|
- .gitignore
|
71
90
|
- Gemfile
|
72
91
|
- Gemfile.lock
|
92
|
+
- LICENSE
|
73
93
|
- README.md
|
74
94
|
- Rakefile
|
75
95
|
- lib/paranoia.rb
|
76
96
|
- lib/paranoia/version.rb
|
77
97
|
- paranoia.gemspec
|
78
98
|
- test/paranoia_test.rb
|
79
|
-
has_rdoc: true
|
80
99
|
homepage: http://rubygems.org/gems/paranoia
|
81
100
|
licenses: []
|
82
|
-
|
83
101
|
post_install_message:
|
84
102
|
rdoc_options: []
|
85
|
-
|
86
|
-
require_paths:
|
103
|
+
require_paths:
|
87
104
|
- lib
|
88
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
89
106
|
none: false
|
90
|
-
requirements:
|
91
|
-
- -
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version:
|
94
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
95
112
|
none: false
|
96
|
-
requirements:
|
97
|
-
- -
|
98
|
-
- !ruby/object:Gem::Version
|
113
|
+
requirements:
|
114
|
+
- - ! '>='
|
115
|
+
- !ruby/object:Gem::Version
|
99
116
|
version: 1.3.6
|
100
117
|
requirements: []
|
101
|
-
|
102
118
|
rubyforge_project: paranoia
|
103
|
-
rubygems_version: 1.
|
119
|
+
rubygems_version: 1.8.24
|
104
120
|
signing_key:
|
105
121
|
specification_version: 3
|
106
|
-
summary: acts_as_paranoid,
|
122
|
+
summary: Paranoia is a re-implementation of acts_as_paranoid for Rails 3, using much,
|
123
|
+
much, much less code.
|
107
124
|
test_files: []
|
108
|
-
|