acts_as_paranoid 0.3.1 → 0.4.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/{MIT-LICENSE → LICENSE} +2 -2
- data/README.markdown +248 -0
- data/lib/acts_as_paranoid/associations.rb +34 -0
- data/lib/acts_as_paranoid/core.rb +184 -0
- data/lib/acts_as_paranoid/relation.rb +36 -0
- data/lib/acts_as_paranoid/validations.rb +43 -0
- data/lib/rails3_acts_as_paranoid.rb +61 -0
- metadata +65 -46
- data/CHANGELOG +0 -47
- data/README +0 -26
- data/RUNNING_UNIT_TESTS +0 -41
- data/lib/acts_as_paranoid.rb +0 -166
- data/test/database.yml +0 -18
- data/test/debug.log +0 -704
- data/test/fixtures/categories.yml +0 -19
- data/test/fixtures/categories_widgets.yml +0 -12
- data/test/fixtures/widgets.yml +0 -8
- data/test/paranoid_test.rb +0 -151
- data/test/schema.rb +0 -20
- data/test/test_helper.rb +0 -36
@@ -1,19 +0,0 @@
|
|
1
|
-
category_1:
|
2
|
-
id: 1
|
3
|
-
widget_id: 1
|
4
|
-
title: 'category 1'
|
5
|
-
category_2:
|
6
|
-
id: 2
|
7
|
-
widget_id: 1
|
8
|
-
title: 'category 2'
|
9
|
-
deleted_at: '2005-01-01 00:00:00'
|
10
|
-
category_3:
|
11
|
-
id: 3
|
12
|
-
widget_id: 2
|
13
|
-
title: 'category 3'
|
14
|
-
deleted_at: '2005-01-01 00:00:00'
|
15
|
-
category_4:
|
16
|
-
id: 4
|
17
|
-
widget_id: 2
|
18
|
-
title: 'category 4'
|
19
|
-
deleted_at: '2005-01-01 00:00:00'
|
data/test/fixtures/widgets.yml
DELETED
data/test/paranoid_test.rb
DELETED
@@ -1,151 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
-
|
3
|
-
class Widget < ActiveRecord::Base
|
4
|
-
acts_as_paranoid
|
5
|
-
has_many :categories, :dependent => true
|
6
|
-
has_and_belongs_to_many :habtm_categories, :class_name => 'Category'
|
7
|
-
has_one :category
|
8
|
-
belongs_to :parent_category, :class_name => 'Category'
|
9
|
-
end
|
10
|
-
|
11
|
-
class Category < ActiveRecord::Base
|
12
|
-
belongs_to :widget
|
13
|
-
acts_as_paranoid
|
14
|
-
end
|
15
|
-
|
16
|
-
class NonParanoidAndroid < ActiveRecord::Base
|
17
|
-
end
|
18
|
-
|
19
|
-
class ParanoidTest < Test::Unit::TestCase
|
20
|
-
fixtures :widgets, :categories, :categories_widgets
|
21
|
-
|
22
|
-
def test_should_set_deleted_at
|
23
|
-
assert_equal 1, Widget.count
|
24
|
-
assert_equal 1, Category.count
|
25
|
-
widgets(:widget_1).destroy
|
26
|
-
assert_equal 0, Widget.count
|
27
|
-
assert_equal 0, Category.count
|
28
|
-
assert_equal 2, Widget.count_with_deleted
|
29
|
-
assert_equal 4, Category.count_with_deleted
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_should_destroy
|
33
|
-
assert_equal 1, Widget.count
|
34
|
-
assert_equal 1, Category.count
|
35
|
-
widgets(:widget_1).destroy!
|
36
|
-
assert_equal 0, Widget.count
|
37
|
-
assert_equal 0, Category.count
|
38
|
-
assert_equal 1, Widget.count_with_deleted
|
39
|
-
# Category doesn't get destroyed because the dependent before_destroy callback uses #destroy
|
40
|
-
assert_equal 4, Category.count_with_deleted
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_should_not_count_deleted
|
44
|
-
assert_equal 1, Widget.count
|
45
|
-
assert_equal 1, Widget.count(['title=?', 'widget 1'])
|
46
|
-
assert_equal 2, Widget.count_with_deleted
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_should_not_find_deleted
|
50
|
-
assert_equal [widgets(:widget_1)], Widget.find(:all)
|
51
|
-
assert_equal [1, 2], Widget.find_with_deleted(:all, :order => 'id').collect { |w| w.id }
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_should_not_find_deleted_associations
|
55
|
-
assert_equal 2, Category.count_with_deleted('widget_id=1')
|
56
|
-
|
57
|
-
assert_equal 1, widgets(:widget_1).categories.size
|
58
|
-
assert_equal [categories(:category_1)], widgets(:widget_1).categories
|
59
|
-
|
60
|
-
assert_equal 1, widgets(:widget_1).habtm_categories.size
|
61
|
-
assert_equal [categories(:category_1)], widgets(:widget_1).habtm_categories
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_should_find_first_with_deleted
|
65
|
-
assert_equal widgets(:widget_1), Widget.find(:first)
|
66
|
-
assert_equal 2, Widget.find_with_deleted(:first, :order => 'id desc').id
|
67
|
-
end
|
68
|
-
|
69
|
-
def test_should_find_single_id
|
70
|
-
assert Widget.find(1)
|
71
|
-
assert Widget.find_with_deleted(2)
|
72
|
-
assert_raises(ActiveRecord::RecordNotFound) { Widget.find(2) }
|
73
|
-
end
|
74
|
-
|
75
|
-
def test_should_find_multiple_ids
|
76
|
-
assert_equal [1,2], Widget.find_with_deleted(1,2).sort_by { |w| w.id }.collect { |w| w.id }
|
77
|
-
assert_equal [1,2], Widget.find_with_deleted([1,2]).sort_by { |w| w.id }.collect { |w| w.id }
|
78
|
-
assert_raises(ActiveRecord::RecordNotFound) { Widget.find(1,2) }
|
79
|
-
end
|
80
|
-
|
81
|
-
def test_should_ignore_multiple_includes
|
82
|
-
Widget.class_eval { acts_as_paranoid }
|
83
|
-
assert Widget.find(1)
|
84
|
-
end
|
85
|
-
|
86
|
-
def test_should_not_override_scopes_when_counting
|
87
|
-
assert_equal 1, Widget.with_scope(:find => { :conditions => "title = 'widget 1'" }) { Widget.count }
|
88
|
-
assert_equal 0, Widget.with_scope(:find => { :conditions => "title = 'deleted widget 2'" }) { Widget.count }
|
89
|
-
assert_equal 1, Widget.with_scope(:find => { :conditions => "title = 'deleted widget 2'" }) { Widget.count_with_deleted }
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_should_not_override_scopes_when_finding
|
93
|
-
assert_equal [1], Widget.with_scope(:find => { :conditions => "title = 'widget 1'" }) { Widget.find(:all) }.ids
|
94
|
-
assert_equal [], Widget.with_scope(:find => { :conditions => "title = 'deleted widget 2'" }) { Widget.find(:all) }.ids
|
95
|
-
assert_equal [2], Widget.with_scope(:find => { :conditions => "title = 'deleted widget 2'" }) { Widget.find_with_deleted(:all) }.ids
|
96
|
-
end
|
97
|
-
|
98
|
-
def test_should_allow_multiple_scoped_calls_when_finding
|
99
|
-
Widget.with_scope(:find => { :conditions => "title = 'deleted widget 2'" }) do
|
100
|
-
assert_equal [2], Widget.find_with_deleted(:all).ids
|
101
|
-
assert_equal [2], Widget.find_with_deleted(:all).ids, "clobbers the constrain on the unmodified find"
|
102
|
-
assert_equal [], Widget.find(:all).ids
|
103
|
-
assert_equal [], Widget.find(:all).ids, 'clobbers the constrain on a paranoid find'
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
def test_should_allow_multiple_scoped_calls_when_counting
|
108
|
-
Widget.with_scope(:find => { :conditions => "title = 'deleted widget 2'" }) do
|
109
|
-
assert_equal 1, Widget.count_with_deleted
|
110
|
-
assert_equal 1, Widget.count_with_deleted, "clobbers the constrain on the unmodified find"
|
111
|
-
assert_equal 0, Widget.count
|
112
|
-
assert_equal 0, Widget.count, 'clobbers the constrain on a paranoid find'
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
def test_should_give_paranoid_status
|
117
|
-
assert Widget.paranoid?
|
118
|
-
assert !NonParanoidAndroid.paranoid?
|
119
|
-
end
|
120
|
-
|
121
|
-
# sorry charlie, these are out!
|
122
|
-
#def test_should_find_deleted_has_many_assocations_on_deleted_records_by_default
|
123
|
-
# w = Widget.find_with_deleted 2
|
124
|
-
# assert_equal 2, w.categories.length
|
125
|
-
# assert_equal 2, w.categories(true).size
|
126
|
-
#end
|
127
|
-
#
|
128
|
-
#def test_should_find_deleted_habtm_assocations_on_deleted_records_by_default
|
129
|
-
# w = Widget.find_with_deleted 2
|
130
|
-
# assert_equal 2, w.habtm_categories.length
|
131
|
-
# assert_equal 2, w.habtm_categories(true).size
|
132
|
-
#end
|
133
|
-
#
|
134
|
-
#def test_should_find_deleted_has_one_associations_on_deleted_records_by_default
|
135
|
-
# c = Category.find_with_deleted 3
|
136
|
-
# w = Widget.find_with_deleted 2
|
137
|
-
# assert_equal c, w.category
|
138
|
-
#end
|
139
|
-
#
|
140
|
-
#def test_should_find_deleted_belongs_to_associations_on_deleted_records_by_default
|
141
|
-
# c = Category.find_with_deleted 3
|
142
|
-
# w = Widget.find_with_deleted 2
|
143
|
-
# assert_equal c, w.parent_category
|
144
|
-
#end
|
145
|
-
end
|
146
|
-
|
147
|
-
class Array
|
148
|
-
def ids
|
149
|
-
collect { |i| i.id }
|
150
|
-
end
|
151
|
-
end
|
data/test/schema.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
ActiveRecord::Schema.define(:version => 1) do
|
2
|
-
|
3
|
-
create_table :widgets, :force => true do |t|
|
4
|
-
t.column :title, :string, :limit => 50
|
5
|
-
t.column :category_id, :integer
|
6
|
-
t.column :deleted_at, :timestamp
|
7
|
-
end
|
8
|
-
|
9
|
-
create_table :categories, :force => true do |t|
|
10
|
-
t.column :widget_id, :integer
|
11
|
-
t.column :title, :string, :limit => 50
|
12
|
-
t.column :deleted_at, :timestamp
|
13
|
-
end
|
14
|
-
|
15
|
-
create_table :categories_widgets, :force => true, :id => false do |t|
|
16
|
-
t.column :category_id, :integer
|
17
|
-
t.column :widget_id, :integer
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
data/test/test_helper.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
2
|
-
|
3
|
-
require 'test/unit'
|
4
|
-
require 'rubygems'
|
5
|
-
require 'active_record'
|
6
|
-
require 'active_record/fixtures'
|
7
|
-
require 'active_support/binding_of_caller'
|
8
|
-
require 'active_support/breakpoint'
|
9
|
-
require "#{File.dirname(__FILE__)}/../init"
|
10
|
-
|
11
|
-
config = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))
|
12
|
-
ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")
|
13
|
-
ActiveRecord::Base.establish_connection(config[ENV['DB'] || 'sqlite'])
|
14
|
-
|
15
|
-
load(File.dirname(__FILE__) + "/schema.rb")
|
16
|
-
|
17
|
-
Test::Unit::TestCase.fixture_path = File.dirname(__FILE__) + "/fixtures/"
|
18
|
-
$LOAD_PATH.unshift(Test::Unit::TestCase.fixture_path)
|
19
|
-
|
20
|
-
class Test::Unit::TestCase #:nodoc:
|
21
|
-
def create_fixtures(*table_names)
|
22
|
-
if block_given?
|
23
|
-
Fixtures.create_fixtures(Test::Unit::TestCase.fixture_path, table_names) { yield }
|
24
|
-
else
|
25
|
-
Fixtures.create_fixtures(Test::Unit::TestCase.fixture_path, table_names)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
# Turn off transactional fixtures if you're working with MyISAM tables in MySQL
|
30
|
-
self.use_transactional_fixtures = true
|
31
|
-
|
32
|
-
# Instantiated fixtures are slow, but give you @david where you otherwise would need people(:david)
|
33
|
-
self.use_instantiated_fixtures = false
|
34
|
-
|
35
|
-
# Add more helper methods to be used by all tests here...
|
36
|
-
end
|