sequel-paranoid 0.2.0 → 0.3.0

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.
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: