mark_only 0.0.1
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 +15 -0
- data/README.md +82 -0
- data/Rakefile +11 -0
- data/lib/mark_only/version.rb +3 -0
- data/lib/mark_only.rb +73 -0
- metadata +121 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZTFhODAwYWViNjgwOTcyNjdmYjkzNTQ0ZDI2MzdhMWQ2NDkzNzM5YQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ZjZhNmNmMzZjMzFjMjJkMDExYTc0YmIxZGI3ZTdiNmEzMGYwYmU2Nw==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MDJiMmVmNGJmZDJiNmQyMTBjYzExZWZjOTgxY2YxOTM4YThlM2NkMzU5Yjc3
|
10
|
+
ZDgyM2E5M2FiNWI0MWMzMzFhOGIxZmU3MWQ2ZTA2NmRlMjFkZmQ1ODYyNGEz
|
11
|
+
MzAxYTU0ZTg4MzI0MDE1ZjUzOWRhYmExY2I4MWM5MzFlNzI5Nzc=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MTQ4MDQyZGYzYThjMWY0OWIzYzk0Yjg2MTkyOWFmM2E3NzhjNDA2OTQzNjcz
|
14
|
+
NjM1ZjUzMDE3NTAzYmNiZTcyYjBkZWM3ZGI2ZDhiNzAzYTUwMmJmZDM3NGRm
|
15
|
+
YmUyZjFkYTdiYjNkYjg1Y2E1ZTE3MWY4NmFjOTgzNmI0ZGE1ZjA=
|
data/README.md
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
# Mark Only
|
2
|
+
|
3
|
+
Mark Only is a fork of [Paranoia][paranoia] (by Ryan Bigg and others) with significant changes. It only sets a specified column with a specified value on destroy/delete. Like Paranoia it allows before_destroy, etc. callbacks.
|
4
|
+
|
5
|
+
However, it does not unscope marked records. This means that anything that attempts to find the record after a destroy will still find it.
|
6
|
+
|
7
|
+
To *really* destroy or delete records, use the Paranoia/acts_as_paranoid convention of calling `destroy!` or `delete!`.
|
8
|
+
|
9
|
+
## Installation & Usage
|
10
|
+
|
11
|
+
Put this in your Gemfile:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
gem 'mark_only'
|
15
|
+
```
|
16
|
+
|
17
|
+
Then run:
|
18
|
+
|
19
|
+
```shell
|
20
|
+
bundle install
|
21
|
+
```
|
22
|
+
|
23
|
+
Updating is as simple as `bundle update mark_only`.
|
24
|
+
|
25
|
+
#### Run your migrations for the desired models
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
class AddDeletedAtToClient < ActiveRecord::Migration
|
29
|
+
def self.up
|
30
|
+
add_column :clients, :some_column_to_mark, :string
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.down
|
34
|
+
remove_column :clients, :some_column_to_mark
|
35
|
+
end
|
36
|
+
end
|
37
|
+
```
|
38
|
+
|
39
|
+
### Usage
|
40
|
+
|
41
|
+
#### In your environment.rb:
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
MarkOnly.configure do
|
45
|
+
self.active_value = 'active'
|
46
|
+
self.deleted_value = 'deleted'
|
47
|
+
end
|
48
|
+
|
49
|
+
...
|
50
|
+
```
|
51
|
+
|
52
|
+
#### In your model:
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
class Client < ActiveRecord::Base
|
56
|
+
mark_only :some_column_to_mark
|
57
|
+
|
58
|
+
...
|
59
|
+
end
|
60
|
+
```
|
61
|
+
|
62
|
+
If you want a method to be called on destroy, simply provide a _before\_destroy_ callback:
|
63
|
+
|
64
|
+
```ruby
|
65
|
+
class Client < ActiveRecord::Base
|
66
|
+
mark_only :some_column_to_mark
|
67
|
+
|
68
|
+
before_destroy :some_method
|
69
|
+
|
70
|
+
def some_method
|
71
|
+
# do stuff
|
72
|
+
end
|
73
|
+
|
74
|
+
...
|
75
|
+
end
|
76
|
+
```
|
77
|
+
|
78
|
+
## License
|
79
|
+
|
80
|
+
This gem is released under the MIT license.
|
81
|
+
|
82
|
+
[paranoia]: https://github.com/radar/paranoia
|
data/Rakefile
ADDED
data/lib/mark_only.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'mark_only/version'
|
2
|
+
|
3
|
+
module MarkOnly
|
4
|
+
class << self
|
5
|
+
[:deleted_value, :active_value].each{|o|attr_accessor o}
|
6
|
+
def configure(&blk); class_eval(&blk); end
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.included(klazz)
|
10
|
+
klazz.extend Query
|
11
|
+
end
|
12
|
+
|
13
|
+
module Query
|
14
|
+
def mark_only? ; true ; end
|
15
|
+
end
|
16
|
+
|
17
|
+
def destroy
|
18
|
+
run_callbacks(:destroy) { delete }
|
19
|
+
end
|
20
|
+
|
21
|
+
def delete
|
22
|
+
puts "updating column #{self.mark_only_column} with value #{MarkOnly.deleted_value}"
|
23
|
+
update_attribute_or_column(self.mark_only_column, MarkOnly.deleted_value) if !deleted? && persisted?
|
24
|
+
end
|
25
|
+
|
26
|
+
def restore!
|
27
|
+
puts "updating column #{self.mark_only_column} with value #{MarkOnly.active_value}"
|
28
|
+
update_attribute_or_column self.mark_only_column, MarkOnly.active_value
|
29
|
+
end
|
30
|
+
|
31
|
+
def destroyed?
|
32
|
+
self.send(self.mark_only_column.to_sym) == MarkOnly.deleted_value
|
33
|
+
end
|
34
|
+
alias :deleted? :destroyed?
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def default_mark_only_column
|
39
|
+
self.send("#{self.mark_only_column}=".to_sym, MarkOnly.active_value) unless self.send(self.mark_only_column.to_sym) == MarkOnly.deleted_value
|
40
|
+
end
|
41
|
+
|
42
|
+
# Rails 3.1 adds update_column. Rails > 3.2.6 deprecates update_attribute, gone in Rails 4.
|
43
|
+
def update_attribute_or_column(*args)
|
44
|
+
respond_to?(:update_column) ? update_column(*args) : update_attribute(*args)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
MarkOnly.configure do
|
49
|
+
self.active_value = 'active'
|
50
|
+
self.deleted_value = 'deleted'
|
51
|
+
end
|
52
|
+
|
53
|
+
class ActiveRecord::Base
|
54
|
+
def self.mark_only(col_name)
|
55
|
+
after_initialize :default_mark_only_column
|
56
|
+
before_save :default_mark_only_column
|
57
|
+
class_attribute :mark_only_column, instance_writer: true
|
58
|
+
self.mark_only_column = col_name.to_sym
|
59
|
+
alias :destroy! :destroy
|
60
|
+
alias :delete! :delete
|
61
|
+
include MarkOnly
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.mark_only? ; false ; end
|
65
|
+
def mark_only? ; self.class.mark_only? ; end
|
66
|
+
|
67
|
+
# Override the persisted method to allow for the paranoia gem.
|
68
|
+
# If a mark_only record is selected, then we only want to check
|
69
|
+
# if it's a new record, not if it is "destroyed".
|
70
|
+
def persisted?
|
71
|
+
mark_only? ? !new_record? : super
|
72
|
+
end
|
73
|
+
end
|
metadata
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mark_only
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Gary S. Weaver
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-04-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activerecord
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ! '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.0.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activerecord
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 3.0.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 3.0.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.0.0
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.0.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: sqlite3
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.8.7
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.8.7
|
83
|
+
description: A fork of Paranoia (by Ryan Bigg and others) that updates a specified
|
84
|
+
column with an pre-configured value on destroy, and does no scoping. Supports destroy
|
85
|
+
hooks.
|
86
|
+
email:
|
87
|
+
- garysweaver@gmail.com
|
88
|
+
executables: []
|
89
|
+
extensions: []
|
90
|
+
extra_rdoc_files: []
|
91
|
+
files:
|
92
|
+
- lib/mark_only/version.rb
|
93
|
+
- lib/mark_only.rb
|
94
|
+
- Rakefile
|
95
|
+
- README.md
|
96
|
+
homepage: https://github.com/garysweaver/mark_only
|
97
|
+
licenses:
|
98
|
+
- MIT
|
99
|
+
metadata: {}
|
100
|
+
post_install_message:
|
101
|
+
rdoc_options: []
|
102
|
+
require_paths:
|
103
|
+
- lib
|
104
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - ! '>='
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ! '>='
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: 1.3.6
|
114
|
+
requirements: []
|
115
|
+
rubyforge_project:
|
116
|
+
rubygems_version: 2.0.3
|
117
|
+
signing_key:
|
118
|
+
specification_version: 4
|
119
|
+
summary: A fork of Paranoia (by Ryan Bigg and others) that updates a specified column
|
120
|
+
with an pre-configured value on delete/destroy.
|
121
|
+
test_files: []
|