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 CHANGED
@@ -1,3 +1,5 @@
1
1
  pkg/*
2
2
  *.gem
3
3
  .bundle
4
+ tmp
5
+ .rvmrc
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.8)
11
- activesupport (= 3.0.8)
12
- builder (~> 2.1.2)
13
- i18n (~> 0.5.0)
14
- activerecord (3.0.8)
15
- activemodel (= 3.0.8)
16
- activesupport (= 3.0.8)
17
- arel (~> 2.0.10)
18
- tzinfo (~> 0.3.23)
19
- activesupport (3.0.8)
20
- arel (2.0.10)
21
- builder (2.1.2)
22
- i18n (0.5.0)
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.3)
25
- tzinfo (0.3.28)
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
- gem 'paranoia'
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
- gem 'paranoia'
23
+ ```ruby
24
+ gem 'paranoia'
25
+ ```
22
26
 
23
27
  Then run:
24
28
 
25
- bundle install
29
+ ```shell
30
+ bundle install
31
+ ```
26
32
 
27
33
  #### Rails 2:
28
34
 
29
35
  In your _config/environment.rb_:
30
36
 
31
- config.gem 'paranoia'
37
+ ```ruby
38
+ config.gem 'paranoia'
39
+ ```
32
40
 
33
41
  Then run:
34
42
 
35
- rake gems:install
43
+ ```shell
44
+ rake gems:install
45
+ ```
36
46
 
37
47
  #### Run your migrations for the desired models
38
48
 
39
- class AddDeletedAtToClient < ActiveRecord::Migration
40
- def self.up
41
- add_column :clients, :deleted_at, :datetime
42
- end
43
-
44
- def self.down
45
- remove_column :clients, :deleted_at
46
- end
47
- end
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
- class Client < ActiveRecord::Base
54
- acts_as_paranoid
65
+ ```ruby
66
+ class Client < ActiveRecord::Base
67
+ acts_as_paranoid
55
68
 
56
- ...
57
- end
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
- class Client < ActiveRecord::Base
64
- acts_as_paranoid
77
+ ```ruby
78
+ class Client < ActiveRecord::Base
79
+ acts_as_paranoid
65
80
 
66
- before_destroy :some_method
81
+ before_destroy :some_method
67
82
 
68
- def some_method
69
- # do stuff
70
- end
83
+ def some_method
84
+ # do stuff
85
+ end
71
86
 
72
- ...
73
- end
87
+ ...
88
+ end
89
+ ```
74
90
 
75
91
  You can replace the older acts_as_paranoid methods as follows:
76
92
 
77
- find_with_deleted(:all) # => unscoped
78
- find_with_deleted(:first) # => unscoped.first
79
- find_with_deleted(id) # => unscoped.find(id)
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
- find_only_deleted(:all) # => only_deleted
82
- find_only_deleted(:first) # => only_deleted.first
83
- find_only_deleted(id) # => only_deleted.find(id)
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
@@ -5,4 +5,6 @@ task :test do
5
5
  Dir['test/*_test.rb'].each do |testfile|
6
6
  load testfile
7
7
  end
8
- end
8
+ end
9
+
10
+ task :default => :test
@@ -1,3 +1,3 @@
1
1
  module Paranoia
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.0"
3
3
  end
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
- unscoped {
11
- where("deleted_at is not null")
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
- self.update_attribute(:deleted_at, Time.now) if !deleted? && persisted?
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
- update_attribute :deleted_at, nil
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, without the clusterfuck"
12
- s.description = "acts_as_paranoid, without the clusterfuck"
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"
@@ -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 paranoid_models (id INTEGER NOT NULL PRIMARY KEY, deleted_at DATETIME)'
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
- date: 2011-07-11 00:00:00 +10:00
14
- default_executable:
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
- prerelease: false
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
- requirement: &id002 !ruby/object:Gem::Requirement
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
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
42
41
  none: false
43
- requirements:
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: "0"
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
- requirement: &id004 !ruby/object:Gem::Requirement
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
- version_requirements: *id004
60
- description: acts_as_paranoid, without the clusterfuck
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: "0"
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.6.2
119
+ rubygems_version: 1.8.24
104
120
  signing_key:
105
121
  specification_version: 3
106
- summary: acts_as_paranoid, without the clusterfuck
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
-