sequel-paranoid 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/sequel/plugins/paranoid.rb +31 -16
  2. metadata +3 -3
@@ -3,28 +3,36 @@ require 'sequel'
3
3
  module Sequel::Plugins
4
4
  module Paranoid
5
5
  def self.configure(model, options = {})
6
- model.instance_eval do
6
+ options = {
7
+ :deleted_at_field_name => :deleted_at,
8
+ :deleted_by_field_name => :deleted_by,
9
+ :enable_deleted_by => false,
10
+ :deleted_scope_name => :deleted,
11
+ :non_deleted_scope_name => :present,
12
+ :ignore_deletion_scope_name => :with_deleted,
13
+ :set_default_scope => false
14
+ }.merge(options)
7
15
 
16
+ model.instance_eval do
8
17
  #
9
18
  # Inject the scopes for the deleted and the existing entries.
10
19
  #
11
20
 
12
21
  dataset_module do
13
- def deleted
14
- unfiltered.exclude(:deleted_at => nil)
22
+ # scope for deleted items
23
+ define_method(options[:deleted_scope_name]) do
24
+ send(options[:ignore_deletion_scope_name]).exclude(options[:deleted_at_field_name] => nil)
15
25
  end
16
26
 
17
- def existing
18
- unfiltered.filter(:deleted_at => nil)
27
+ # scope for non-deleted items
28
+ define_method(options[:non_deleted_scope_name]) do
29
+ filter(options[:deleted_at_field_name] => nil)
19
30
  end
20
- end
21
31
 
22
- #
23
- # Shortcut method to return the unfiltered dataset.
24
- #
25
-
26
- def unfiltered
27
- dataset.unfiltered
32
+ # scope for both
33
+ define_method(options[:ignore_deletion_scope_name]) do
34
+ unfiltered
35
+ end
28
36
  end
29
37
 
30
38
  #
@@ -32,10 +40,15 @@ module Sequel::Plugins
32
40
  #
33
41
 
34
42
  define_method("destroy") do
35
- self.before_destroy if self.respond_to?(:before_destroy)
43
+ # call the before_destroy hook if present
44
+ if self.respond_to?(:before_destroy)
45
+ self.before_destroy
46
+ end
36
47
 
48
+ # set the deletion time
37
49
  self.deleted_at = Time.now
38
50
 
51
+ # save the instance and call the after_destroy hook if present
39
52
  if save and self.respond_to?(:after_destroy)
40
53
  self.after_destroy
41
54
  end
@@ -46,7 +59,7 @@ module Sequel::Plugins
46
59
  #
47
60
 
48
61
  define_method("recover") do
49
- self.class.unfiltered.where(:id => self.id).update(:deleted_at => nil)
62
+ self.class.send(options[:ignore_deletion_scope_name]).where(:id => self.id).update(options[:deleted_at_field_name] => nil)
50
63
  end
51
64
 
52
65
  #
@@ -54,14 +67,16 @@ module Sequel::Plugins
54
67
  #
55
68
 
56
69
  define_method("deleted?") do
57
- !!self.deleted_at
70
+ !!send(options[:deleted_at_field_name])
58
71
  end
59
72
 
60
73
  #
61
74
  # Inject the default scope that filters deleted entries.
62
75
  #
63
76
 
64
- set_dataset(self.existing)
77
+ if options[:set_default_scope]
78
+ set_dataset(self.send(options[:non_deleted_scope_name]))
79
+ end
65
80
  end
66
81
  end
67
82
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel-paranoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-30 00:00:00.000000000 Z
12
+ date: 2013-07-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sequel
@@ -50,7 +50,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
50
50
  version: '0'
51
51
  segments:
52
52
  - 0
53
- hash: 3326233814081102724
53
+ hash: 2232120226963572193
54
54
  required_rubygems_version: !ruby/object:Gem::Requirement
55
55
  none: false
56
56
  requirements: