paranoia 2.1.5 → 2.2.0.pre
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/.travis.yml +17 -8
- data/CHANGELOG.md +6 -0
- data/Gemfile +5 -2
- data/README.md +27 -10
- data/lib/paranoia.rb +23 -12
- data/lib/paranoia/version.rb +1 -1
- data/paranoia.gemspec +16 -6
- data/test/paranoia_test.rb +36 -10
- metadata +28 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13ad6af701a1a810ddb2f8d320e32cb593dd894e
|
4
|
+
data.tar.gz: c6e90f3aa699e29f11ec9aa9021543f109501899
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4d8a2756f70124629e73dc9abc0ff81daf790c56a3f5dc19439f3639dd83ae2be71bc40b76089d0d6875dff67196031f047886563e6e8f18a73186b82ceb337c
|
7
|
+
data.tar.gz: b6038a394aec3dd2d9382a434fae9c31122b702b8390a02801194d8e79a7e4472481f68f7a3944171febd409a3174eda1355d348428f23daf11bf007218e2aa9
|
data/.travis.yml
CHANGED
@@ -1,13 +1,22 @@
|
|
1
1
|
sudo: false
|
2
2
|
language: ruby
|
3
|
+
cache: bundler
|
3
4
|
rvm:
|
4
|
-
- 2.
|
5
|
-
- 2.
|
6
|
-
- 2.
|
7
|
-
-
|
8
|
-
- jruby-19mode
|
5
|
+
- 2.1.10
|
6
|
+
- 2.2.5
|
7
|
+
- 2.3.1
|
8
|
+
- jruby-9.1.0.0
|
9
9
|
|
10
10
|
env:
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
matrix:
|
12
|
+
- RAILS='~> 4.1.15'
|
13
|
+
- RAILS='~> 4.2.6'
|
14
|
+
- RAILS='~> 5.0.0'
|
15
|
+
|
16
|
+
matrix:
|
17
|
+
exclude:
|
18
|
+
- env: RAILS='~> 5.0.0'
|
19
|
+
rvm: 2.1.10
|
20
|
+
allow_failures:
|
21
|
+
- env: RAILS='~> 5.0.0'
|
22
|
+
rvm: jruby-9.1.0.0
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# paranoia Changelog
|
2
2
|
|
3
|
+
## 2.2.0 (unreleased)
|
4
|
+
|
5
|
+
* Ruby 2.0 or greater is required
|
6
|
+
* Rails 5.0.0.beta1.1 support [@pigeonworks](https://github.com/pigeonworks) [@halostatue](https://github.com/halostatue) and [@gagalago](https://github.com/gagalago)
|
7
|
+
* Previously `#really_destroyed?` may have been defined on non-paranoid models, it is now only available on paranoid models, use regular `#destroyed?` instead.
|
8
|
+
|
3
9
|
## 2.1.5 (2016-01-06)
|
4
10
|
|
5
11
|
* Ruby 2.3 support
|
data/Gemfile
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
gem 'sqlite3', :
|
4
|
-
|
3
|
+
gem 'sqlite3', platforms: [:ruby]
|
4
|
+
|
5
|
+
platforms :jruby do
|
6
|
+
gem 'activerecord-jdbcsqlite3-adapter', github: 'jruby/activerecord-jdbc-adapter', branch: 'rails-5'
|
7
|
+
end
|
5
8
|
|
6
9
|
platforms :rbx do
|
7
10
|
gem 'rubysl', '~> 2.0'
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Paranoia
|
2
2
|
|
3
|
-
Paranoia is a re-implementation of [acts\_as\_paranoid](http://github.com/
|
3
|
+
Paranoia is a re-implementation of [acts\_as\_paranoid](http://github.com/ActsAsParanoid/acts_as_paranoid) for Rails 3/4/5, using much, much, much less code.
|
4
4
|
|
5
5
|
When your app is using Paranoia, calling `destroy` on an ActiveRecord object doesn't actually destroy the database record, but just *hides* it. 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.
|
6
6
|
|
@@ -20,18 +20,18 @@ For Rails 3, please use version 1 of Paranoia:
|
|
20
20
|
gem "paranoia", "~> 1.0"
|
21
21
|
```
|
22
22
|
|
23
|
-
For Rails 4, please use version 2 of Paranoia:
|
23
|
+
For Rails 4 or 5, please use version 2 of Paranoia:
|
24
24
|
|
25
25
|
``` ruby
|
26
26
|
gem "paranoia", "~> 2.0"
|
27
27
|
```
|
28
28
|
|
29
|
-
Of course you can install this from GitHub as well:
|
29
|
+
Of course you can install this from GitHub as well from one of these examples:
|
30
30
|
|
31
31
|
``` ruby
|
32
|
-
gem "paranoia", :
|
33
|
-
|
34
|
-
gem "paranoia", :
|
32
|
+
gem "paranoia", github: "rubysherpas/paranoia", branch: "rails3"
|
33
|
+
gem "paranoia", github: "rubysherpas/paranoia", branch: "rails4"
|
34
|
+
gem "paranoia", github: "rubysherpas/paranoia", branch: "rails5"
|
35
35
|
```
|
36
36
|
|
37
37
|
Then run:
|
@@ -47,7 +47,7 @@ Updating is as simple as `bundle update paranoia`.
|
|
47
47
|
Run:
|
48
48
|
|
49
49
|
``` shell
|
50
|
-
rails generate migration AddDeletedAtToClients deleted_at:datetime:index
|
50
|
+
bin/rails generate migration AddDeletedAtToClients deleted_at:datetime:index
|
51
51
|
```
|
52
52
|
|
53
53
|
and now you have a migration
|
@@ -104,6 +104,17 @@ class Client < ActiveRecord::Base
|
|
104
104
|
end
|
105
105
|
```
|
106
106
|
|
107
|
+
|
108
|
+
If you want to skip adding the default scope:
|
109
|
+
|
110
|
+
``` ruby
|
111
|
+
class Client < ActiveRecord::Base
|
112
|
+
acts_as_paranoid without_default_scope: true
|
113
|
+
|
114
|
+
...
|
115
|
+
end
|
116
|
+
```
|
117
|
+
|
107
118
|
If you want to access soft-deleted associations, override the getter method:
|
108
119
|
|
109
120
|
``` ruby
|
@@ -128,6 +139,12 @@ If you want to find all records, even those which are deleted:
|
|
128
139
|
Client.with_deleted
|
129
140
|
```
|
130
141
|
|
142
|
+
If you want to exclude deleted records, when not able to use the default_scope (e.g. when using without_default_scope):
|
143
|
+
|
144
|
+
``` ruby
|
145
|
+
Client.without_deleted
|
146
|
+
```
|
147
|
+
|
131
148
|
If you want to find only the deleted records:
|
132
149
|
|
133
150
|
``` ruby
|
@@ -187,7 +204,7 @@ Of course, this is not necessary for the indexes you always use in association w
|
|
187
204
|
|
188
205
|
##### Unique Indexes
|
189
206
|
|
190
|
-
|
207
|
+
Because NULL != NULL in standard SQL, we can not simply create a unique index
|
191
208
|
on the deleted_at column and expect it to enforce that there only be one record
|
192
209
|
with a certain combination of values.
|
193
210
|
|
@@ -244,9 +261,9 @@ The `recover` method in `acts_as_paranoid` runs `update` callbacks. Paranoia's
|
|
244
261
|
|
245
262
|
## Callbacks
|
246
263
|
|
247
|
-
Paranoia provides
|
264
|
+
Paranoia provides several callbacks. It triggers `destroy` callback when the record is marked as deleted and `real_destroy` when the record is completely removed from database. It also calls `restore` callback when the record is restored via paranoia
|
248
265
|
|
249
|
-
For example if you want to index
|
266
|
+
For example if you want to index your records in some search engine you can go like this:
|
250
267
|
|
251
268
|
```ruby
|
252
269
|
class Product < ActiveRecord::Base
|
data/lib/paranoia.rb
CHANGED
@@ -3,7 +3,7 @@ require 'active_record' unless defined? ActiveRecord
|
|
3
3
|
module Paranoia
|
4
4
|
@@default_sentinel_value = nil
|
5
5
|
|
6
|
-
# Change default_sentinel_value in a rails
|
6
|
+
# Change default_sentinel_value in a rails initializer
|
7
7
|
def self.default_sentinel_value=(val)
|
8
8
|
@@default_sentinel_value = val
|
9
9
|
end
|
@@ -38,7 +38,7 @@ module Paranoia
|
|
38
38
|
quoted_paranoia_column = connection.quote_column_name(paranoia_column)
|
39
39
|
with_deleted.where("#{quoted_paranoia_column} IS NULL OR #{quoted_paranoia_column} != ?", paranoia_sentinel_value)
|
40
40
|
end
|
41
|
-
|
41
|
+
alias_method :deleted, :only_deleted
|
42
42
|
|
43
43
|
def restore(id_or_ids, opts = {})
|
44
44
|
ids = Array(id_or_ids).flatten
|
@@ -207,9 +207,9 @@ end
|
|
207
207
|
|
208
208
|
class ActiveRecord::Base
|
209
209
|
def self.acts_as_paranoid(options={})
|
210
|
-
|
211
|
-
|
212
|
-
|
210
|
+
alias_method :really_destroyed?, :destroyed?
|
211
|
+
alias_method :really_delete, :delete
|
212
|
+
alias_method :destroy_without_paranoia, :destroy
|
213
213
|
|
214
214
|
include Paranoia
|
215
215
|
class_attribute :paranoia_column, :paranoia_sentinel_value
|
@@ -219,7 +219,11 @@ class ActiveRecord::Base
|
|
219
219
|
def self.paranoia_scope
|
220
220
|
where(paranoia_column => paranoia_sentinel_value)
|
221
221
|
end
|
222
|
-
|
222
|
+
class << self; alias_method :without_deleted, :paranoia_scope end
|
223
|
+
|
224
|
+
unless options[:without_default_scope]
|
225
|
+
default_scope { paranoia_scope }
|
226
|
+
end
|
223
227
|
|
224
228
|
before_restore {
|
225
229
|
self.class.notify_observers(:before_restore, self) if self.class.respond_to?(:notify_observers)
|
@@ -258,14 +262,21 @@ require 'paranoia/rspec' if defined? RSpec
|
|
258
262
|
|
259
263
|
module ActiveRecord
|
260
264
|
module Validations
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
relation = build_relation_without_paranoia(klass, table, attribute, value)
|
265
|
+
module UniquenessParanoiaValidator
|
266
|
+
def build_relation(klass, table, attribute, value)
|
267
|
+
relation = super(klass, table, attribute, value)
|
265
268
|
return relation unless klass.respond_to?(:paranoia_column)
|
266
|
-
|
269
|
+
arel_paranoia_scope = klass.arel_table[klass.paranoia_column].eq(klass.paranoia_sentinel_value)
|
270
|
+
if ActiveRecord::VERSION::STRING >= "5.0"
|
271
|
+
relation.where(arel_paranoia_scope)
|
272
|
+
else
|
273
|
+
relation.and(arel_paranoia_scope)
|
274
|
+
end
|
267
275
|
end
|
268
|
-
|
276
|
+
end
|
277
|
+
|
278
|
+
class UniquenessValidator < ActiveModel::EachValidator
|
279
|
+
prepend UniquenessParanoiaValidator
|
269
280
|
end
|
270
281
|
end
|
271
282
|
end
|
data/lib/paranoia/version.rb
CHANGED
data/paranoia.gemspec
CHANGED
@@ -5,16 +5,26 @@ Gem::Specification.new do |s|
|
|
5
5
|
s.name = "paranoia"
|
6
6
|
s.version = Paranoia::VERSION
|
7
7
|
s.platform = Gem::Platform::RUBY
|
8
|
-
s.authors =
|
9
|
-
s.email =
|
8
|
+
s.authors = %w(radarlistener@gmail.com)
|
9
|
+
s.email = %w(ben@benmorgan.io)
|
10
10
|
s.homepage = "http://rubygems.org/gems/paranoia"
|
11
|
-
s.
|
12
|
-
s.
|
11
|
+
s.license = 'MIT'
|
12
|
+
s.summary = "Paranoia is a re-implementation of acts_as_paranoid for Rails 3, 4, and 5, using much, much, much less code."
|
13
|
+
s.description = <<-DSC
|
14
|
+
Paranoia is a re-implementation of acts_as_paranoid for Rails 3, 4, and 5,
|
15
|
+
using much, much, much less code. You would use either plugin / gem if you
|
16
|
+
wished that when you called destroy on an Active Record object that it
|
17
|
+
didn't actually destroy it, but just "hid" the record. Paranoia does this
|
18
|
+
by setting a deleted_at field to the current time when you destroy a record,
|
19
|
+
and hides it by scoping all queries on your model to only include records
|
20
|
+
which do not have a deleted_at field.
|
21
|
+
DSC
|
22
|
+
|
13
23
|
|
14
24
|
s.required_rubygems_version = ">= 1.3.6"
|
15
|
-
s.
|
25
|
+
s.required_ruby_version = '>= 2.0'
|
16
26
|
|
17
|
-
s.add_dependency
|
27
|
+
s.add_dependency 'activerecord', '>= 4.0', '< 5.1'
|
18
28
|
|
19
29
|
s.add_development_dependency "bundler", ">= 1.0.0"
|
20
30
|
s.add_development_dependency "rake"
|
data/test/paranoia_test.rb
CHANGED
@@ -4,7 +4,6 @@ require 'minitest/autorun'
|
|
4
4
|
require 'paranoia'
|
5
5
|
|
6
6
|
test_framework = defined?(MiniTest::Test) ? MiniTest::Test : MiniTest::Unit::TestCase
|
7
|
-
ActiveRecord::Base.raise_in_transactional_callbacks = true if ActiveRecord::VERSION::STRING >= '4.2'
|
8
7
|
|
9
8
|
def connect!
|
10
9
|
ActiveRecord::Base.establish_connection :adapter => 'sqlite3', database: ':memory:'
|
@@ -40,7 +39,8 @@ def setup!
|
|
40
39
|
'namespaced_paranoid_belongs_tos' => 'deleted_at DATETIME, paranoid_has_one_id INTEGER',
|
41
40
|
'unparanoid_unique_models' => 'name VARCHAR(32), paranoid_with_unparanoids_id INTEGER',
|
42
41
|
'active_column_models' => 'deleted_at DATETIME, active BOOLEAN',
|
43
|
-
'active_column_model_with_uniqueness_validations' => 'name VARCHAR(32), deleted_at DATETIME, active BOOLEAN'
|
42
|
+
'active_column_model_with_uniqueness_validations' => 'name VARCHAR(32), deleted_at DATETIME, active BOOLEAN',
|
43
|
+
'without_default_scope_models' => 'deleted_at DATETIME'
|
44
44
|
}.each do |table_name, columns_as_sql_string|
|
45
45
|
ActiveRecord::Base.connection.execute "CREATE TABLE #{table_name} (id INTEGER NOT NULL PRIMARY KEY, #{columns_as_sql_string})"
|
46
46
|
end
|
@@ -56,8 +56,15 @@ setup!
|
|
56
56
|
|
57
57
|
class ParanoiaTest < test_framework
|
58
58
|
def setup
|
59
|
-
ActiveRecord::Base.connection
|
60
|
-
|
59
|
+
connection = ActiveRecord::Base.connection
|
60
|
+
cleaner = ->(source) {
|
61
|
+
ActiveRecord::Base.connection.execute "DELETE FROM #{source}"
|
62
|
+
}
|
63
|
+
|
64
|
+
if ActiveRecord::VERSION::MAJOR < 5
|
65
|
+
connection.tables.each(&cleaner)
|
66
|
+
else
|
67
|
+
connection.data_sources.each(&cleaner)
|
61
68
|
end
|
62
69
|
end
|
63
70
|
|
@@ -178,8 +185,10 @@ class ParanoiaTest < test_framework
|
|
178
185
|
assert_equal 0, parent1.paranoid_models.count
|
179
186
|
assert_equal 1, parent1.paranoid_models.only_deleted.count
|
180
187
|
assert_equal 1, parent1.paranoid_models.deleted.count
|
188
|
+
assert_equal 0, parent1.paranoid_models.without_deleted.count
|
181
189
|
p3 = ParanoidModel.create(:parent_model => parent1)
|
182
190
|
assert_equal 2, parent1.paranoid_models.with_deleted.count
|
191
|
+
assert_equal 1, parent1.paranoid_models.without_deleted.count
|
183
192
|
assert_equal [p1,p3], parent1.paranoid_models.with_deleted
|
184
193
|
end
|
185
194
|
|
@@ -204,6 +213,14 @@ class ParanoiaTest < test_framework
|
|
204
213
|
assert_equal nil, ParanoidModel.paranoia_sentinel_value
|
205
214
|
end
|
206
215
|
|
216
|
+
def test_without_default_scope_option
|
217
|
+
model = WithoutDefaultScopeModel.create
|
218
|
+
model.destroy
|
219
|
+
assert_equal 1, model.class.count
|
220
|
+
assert_equal 1, model.class.only_deleted.count
|
221
|
+
assert_equal 0, model.class.where(deleted_at: nil).count
|
222
|
+
end
|
223
|
+
|
207
224
|
def test_active_column_model
|
208
225
|
model = ActiveColumnModel.new
|
209
226
|
assert_equal 0, model.class.count
|
@@ -283,8 +300,7 @@ class ParanoiaTest < test_framework
|
|
283
300
|
# Regression test for #24
|
284
301
|
def test_chaining_for_paranoid_models
|
285
302
|
scope = FeaturefulModel.where(:name => "foo").only_deleted
|
286
|
-
assert_equal "foo", scope.where_values_hash
|
287
|
-
assert_equal 2, scope.where_values.count
|
303
|
+
assert_equal({'name' => "foo"}, scope.where_values_hash)
|
288
304
|
end
|
289
305
|
|
290
306
|
def test_only_destroyed_scope_for_paranoid_models
|
@@ -383,9 +399,9 @@ class ParanoiaTest < test_framework
|
|
383
399
|
# Just to demonstrate the AR behaviour
|
384
400
|
model = NonParanoidModel.new
|
385
401
|
model.destroy!
|
386
|
-
assert model.
|
402
|
+
assert model.destroyed?
|
387
403
|
model.destroy!
|
388
|
-
assert model.
|
404
|
+
assert model.destroyed?
|
389
405
|
|
390
406
|
# Mirrors behaviour above
|
391
407
|
model = ParanoidModel.new
|
@@ -762,7 +778,7 @@ class ParanoiaTest < test_framework
|
|
762
778
|
parent1 = ParentModel.create
|
763
779
|
pt1 = ParanoidModelWithTimestamp.create(:parent_model => parent1)
|
764
780
|
ParanoidModelWithTimestamp.record_timestamps = false
|
765
|
-
pt1.update_columns(created_at: 20.years.ago, updated_at: 10.years.ago, deleted_at: 10.years.ago)
|
781
|
+
pt1.update_columns(created_at: 20.years.ago, updated_at: 10.years.ago, deleted_at: 10.years.ago)
|
766
782
|
ParanoidModelWithTimestamp.record_timestamps = true
|
767
783
|
assert pt1.updated_at < 10.minutes.ago
|
768
784
|
refute pt1.deleted_at.nil?
|
@@ -948,7 +964,13 @@ class FailCallbackModel < ActiveRecord::Base
|
|
948
964
|
belongs_to :parent_model
|
949
965
|
acts_as_paranoid
|
950
966
|
|
951
|
-
before_destroy { |_|
|
967
|
+
before_destroy { |_|
|
968
|
+
if ActiveRecord::VERSION::MAJOR < 5
|
969
|
+
false
|
970
|
+
else
|
971
|
+
throw :abort
|
972
|
+
end
|
973
|
+
}
|
952
974
|
end
|
953
975
|
|
954
976
|
class FeaturefulModel < ActiveRecord::Base
|
@@ -1042,6 +1064,10 @@ class CustomSentinelModel < ActiveRecord::Base
|
|
1042
1064
|
acts_as_paranoid sentinel_value: DateTime.new(0)
|
1043
1065
|
end
|
1044
1066
|
|
1067
|
+
class WithoutDefaultScopeModel < ActiveRecord::Base
|
1068
|
+
acts_as_paranoid without_default_scope: true
|
1069
|
+
end
|
1070
|
+
|
1045
1071
|
class ActiveColumnModel < ActiveRecord::Base
|
1046
1072
|
acts_as_paranoid column: :active, sentinel_value: true
|
1047
1073
|
|
metadata
CHANGED
@@ -1,29 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paranoia
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- radarlistener@gmail.com
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '4.0'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '5.1'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '4.0'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '5.1'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: bundler
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,13 +58,16 @@ dependencies:
|
|
52
58
|
- - ">="
|
53
59
|
- !ruby/object:Gem::Version
|
54
60
|
version: '0'
|
55
|
-
description:
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
61
|
+
description: |2
|
62
|
+
Paranoia is a re-implementation of acts_as_paranoid for Rails 3, 4, and 5,
|
63
|
+
using much, much, much less code. You would use either plugin / gem if you
|
64
|
+
wished that when you called destroy on an Active Record object that it
|
65
|
+
didn't actually destroy it, but just "hid" the record. Paranoia does this
|
66
|
+
by setting a deleted_at field to the current time when you destroy a record,
|
67
|
+
and hides it by scoping all queries on your model to only include records
|
68
|
+
which do not have a deleted_at field.
|
69
|
+
email:
|
70
|
+
- ben@benmorgan.io
|
62
71
|
executables: []
|
63
72
|
extensions: []
|
64
73
|
extra_rdoc_files: []
|
@@ -77,7 +86,8 @@ files:
|
|
77
86
|
- paranoia.gemspec
|
78
87
|
- test/paranoia_test.rb
|
79
88
|
homepage: http://rubygems.org/gems/paranoia
|
80
|
-
licenses:
|
89
|
+
licenses:
|
90
|
+
- MIT
|
81
91
|
metadata: {}
|
82
92
|
post_install_message:
|
83
93
|
rdoc_options: []
|
@@ -87,17 +97,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
87
97
|
requirements:
|
88
98
|
- - ">="
|
89
99
|
- !ruby/object:Gem::Version
|
90
|
-
version: '0'
|
100
|
+
version: '2.0'
|
91
101
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
102
|
requirements:
|
93
103
|
- - ">="
|
94
104
|
- !ruby/object:Gem::Version
|
95
105
|
version: 1.3.6
|
96
106
|
requirements: []
|
97
|
-
rubyforge_project:
|
98
|
-
rubygems_version: 2.4
|
107
|
+
rubyforge_project:
|
108
|
+
rubygems_version: 2.6.4
|
99
109
|
signing_key:
|
100
110
|
specification_version: 4
|
101
|
-
summary: Paranoia is a re-implementation of acts_as_paranoid for Rails 3,
|
102
|
-
much, much less code.
|
111
|
+
summary: Paranoia is a re-implementation of acts_as_paranoid for Rails 3, 4, and 5,
|
112
|
+
using much, much, much less code.
|
103
113
|
test_files: []
|
114
|
+
has_rdoc:
|