acts_as_soft_delete_by_field 1.0.2 → 1.0.3
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/README +7 -1
- data/Rakefile +3 -0
- data/lib/acts_as_soft_delete_by_field_assertions.rb +9 -0
- data/lib/soft_delete_by_field.rb +17 -6
- metadata +36 -8
data/README
CHANGED
@@ -18,6 +18,12 @@ The model object needs to have a datetime field, that on
|
|
18
18
|
delete will be set to the current time. By default, this field should
|
19
19
|
be :deleted_at, but you can also specify your own field.
|
20
20
|
|
21
|
+
Installation
|
22
|
+
------------
|
23
|
+
Add this to your Gemfile:
|
24
|
+
|
25
|
+
gem "acts_as_soft_delete_by_field"
|
26
|
+
|
21
27
|
Usage
|
22
28
|
-----
|
23
29
|
|
@@ -105,7 +111,7 @@ it is used.
|
|
105
111
|
class ThingTest < ActiveSupport::TestCase
|
106
112
|
|
107
113
|
def test_soft_delete
|
108
|
-
|
114
|
+
assert_soft_delete_by_field_working_for(Thing.first)
|
109
115
|
end
|
110
116
|
|
111
117
|
end
|
data/Rakefile
CHANGED
@@ -13,6 +13,7 @@
|
|
13
13
|
module ActsAsSoftDeleteByFieldAssertions
|
14
14
|
|
15
15
|
def assert_soft_delete_by_field_working_for(item)
|
16
|
+
assert_soft_delete_enabled_for_class(item)
|
16
17
|
# Using clones, as otherwise other assertions affected
|
17
18
|
@starting_number = item.class.count
|
18
19
|
assert_before_soft_delete_all_correct_for(item)
|
@@ -28,6 +29,13 @@ module ActsAsSoftDeleteByFieldAssertions
|
|
28
29
|
assert_before_soft_delete(item.clone)
|
29
30
|
assert_after_soft_delete(item.clone)
|
30
31
|
end
|
32
|
+
|
33
|
+
def assert_soft_delete_enabled_for_class(item)
|
34
|
+
assert(
|
35
|
+
item.class.ancestors.include?(ActiveRecord::Acts::SoftDeleteByField::InstanceMethods),
|
36
|
+
"#{item.class} should have acts_as_soft_delete_by_field defined"
|
37
|
+
)
|
38
|
+
end
|
31
39
|
|
32
40
|
def assert_soft_deleted(item)
|
33
41
|
assert_equal(true, item.reload.is_deleted?, error_messages_for(item, "Not deleted: #{item.inspect}"))
|
@@ -237,4 +245,5 @@ EOF
|
|
237
245
|
|
238
246
|
end
|
239
247
|
|
248
|
+
require 'active_support'
|
240
249
|
ActiveSupport::TestCase.send(:include, ActsAsSoftDeleteByFieldAssertions)
|
data/lib/soft_delete_by_field.rb
CHANGED
@@ -10,16 +10,27 @@ module ActiveRecord #:nodoc:
|
|
10
10
|
module ClassMethods
|
11
11
|
|
12
12
|
def soft_delete_by_field_name
|
13
|
-
@soft_delete_by_field_name
|
13
|
+
@soft_delete_by_field_name || parents_soft_delete_by_field_name || DEFAULT_FIELD_NAME
|
14
14
|
end
|
15
15
|
|
16
|
-
def
|
17
|
-
attr_accessor :reasons_not_to_delete
|
18
|
-
field_name ||= DEFAULT_FIELD_NAME
|
16
|
+
def soft_delete_by_field_name=(field_name)
|
19
17
|
@soft_delete_by_field_name = field_name.to_sym
|
18
|
+
end
|
19
|
+
|
20
|
+
def acts_as_soft_delete_by_field(field_name = DEFAULT_FIELD_NAME)
|
21
|
+
attr_accessor :reasons_not_to_delete
|
22
|
+
self.soft_delete_by_field_name = field_name
|
20
23
|
send :include, SoftDeleteByField::InstanceMethods
|
21
|
-
scope :extant, where([
|
22
|
-
scope :deleted, where([
|
24
|
+
scope :extant, where(arel_table[soft_delete_by_field_name].eq(nil))
|
25
|
+
scope :deleted, where(arel_table[soft_delete_by_field_name].not_eq(nil))
|
26
|
+
end
|
27
|
+
|
28
|
+
def soft_delete_class_table_name
|
29
|
+
(self.class.name.tableize + ".") if self.class.kind_of?(SoftDeleteByField)
|
30
|
+
end
|
31
|
+
|
32
|
+
def parents_soft_delete_by_field_name
|
33
|
+
superclass.soft_delete_by_field_name if superclass.respond_to? :soft_delete_by_field_name
|
23
34
|
end
|
24
35
|
|
25
36
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_soft_delete_by_field
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 17
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 3
|
10
|
+
version: 1.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Rob Nichols
|
@@ -15,8 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
19
|
-
default_executable:
|
18
|
+
date: 2013-06-18 00:00:00 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
21
|
name: activerecord
|
@@ -34,6 +33,36 @@ dependencies:
|
|
34
33
|
version: 3.0.0
|
35
34
|
type: :runtime
|
36
35
|
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: sqlite3
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 3
|
45
|
+
segments:
|
46
|
+
- 0
|
47
|
+
version: "0"
|
48
|
+
type: :development
|
49
|
+
version_requirements: *id002
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: standalone_migrations
|
52
|
+
prerelease: false
|
53
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
hash: 9
|
59
|
+
segments:
|
60
|
+
- 2
|
61
|
+
- 1
|
62
|
+
- 1
|
63
|
+
version: 2.1.1
|
64
|
+
type: :development
|
65
|
+
version_requirements: *id003
|
37
66
|
description: "Acts as Soft Delete by Field: Provides soft deletion for ActiveRecord models using a field to flag the datetime of deletion"
|
38
67
|
email: rob@nicholshayes.co.uk
|
39
68
|
executables: []
|
@@ -48,7 +77,6 @@ files:
|
|
48
77
|
- lib/acts_as_soft_delete_by_field_assertions.rb
|
49
78
|
- lib/acts_as_soft_delete_by_field.rb
|
50
79
|
- lib/soft_delete_by_field.rb
|
51
|
-
has_rdoc: true
|
52
80
|
homepage: https://github.com/reggieb/acts_as_soft_delete_by_field
|
53
81
|
licenses: []
|
54
82
|
|
@@ -78,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
78
106
|
requirements: []
|
79
107
|
|
80
108
|
rubyforge_project:
|
81
|
-
rubygems_version: 1.
|
109
|
+
rubygems_version: 1.8.15
|
82
110
|
signing_key:
|
83
111
|
specification_version: 3
|
84
112
|
summary: Provides soft deletion for ActiveRecord models
|