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