paranoia 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
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
-