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 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
@@ -0,0 +1,11 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ task :test do
5
+ load 'test/mark_only_test.rb'
6
+ #Dir['test/*_test.rb'].each do |testfile|
7
+ # load testfile
8
+ #end
9
+ end
10
+
11
+ task :default => :test
@@ -0,0 +1,3 @@
1
+ module MarkOnly
2
+ VERSION = "0.0.1"
3
+ end
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: []