acts_as_removable 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c7668aae0ef68e4f3a34049142e66af8ae3dde45
4
- data.tar.gz: 3368f24e31ebd5cc6af0a17a74424e1aec5c2a7b
3
+ metadata.gz: f55f6c4ecc0f0ced45e825af183aad144e21a974
4
+ data.tar.gz: 4602fa5ebca4018257d7b799ea11cb23f4837a60
5
5
  SHA512:
6
- metadata.gz: 07025ebbedcd757e04a3e014e7811d2347b50d741b431d826db279afbcb4bd7fd96b86a6f48155163e069ac2f31a09e0cdd7b84592306ae5d8205c38d3537f1e
7
- data.tar.gz: 10ed3f98b93efb322e4d22d02e0c3089fcea6e5792c9525e7f53c876f2c675a896a6b0c2cccb6f567720b852213f57785418cd4fc37ea33a76f52492f0c5b968
6
+ metadata.gz: aecc89b6b88285c230e23a58db97b9c22f7291b9266f195fd93ece71cb2b68aa0cfb1e61798f532547acde46a9e9d11970c32443b844150c40d13203958030cf
7
+ data.tar.gz: 57b8ea17f54ec4d3c37f354be41b666d68d0d73521ce92d78321e707a28e377acbe06b11801ba3536d3b4fdd9f0227caddf1daefedf31cdb2e40ec5d63af9021
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # ActsAsRemovable
1
+ # acts_as_removable
2
2
 
3
3
  This gem allows you to easily manage ActiveRecord objects that are pseudo destroyed a.k.a. removed.
4
4
 
@@ -42,7 +42,7 @@ And you can use callbacks:
42
42
  class MyModel < ActiveRecord::Base
43
43
  acts_as_removable
44
44
 
45
- before_save do |r|
45
+ before_remove do |r|
46
46
  puts "Before removing record"
47
47
  end
48
48
 
@@ -18,8 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "activesupport", "~> 4.0.0.rc2"
22
- spec.add_dependency "activerecord", "~> 4.0.0.rc2"
21
+ spec.add_dependency "activesupport", "~> 4.0.0"
22
+ spec.add_dependency "activerecord", "~> 4.0.0"
23
23
 
24
24
  spec.add_development_dependency "bundler", "~> 1.3"
25
25
  spec.add_development_dependency "rake"
@@ -1,3 +1,3 @@
1
1
  module ActsAsRemovable
2
- VERSION = "0.9.0"
2
+ VERSION = "0.9.1"
3
3
  end
@@ -10,15 +10,27 @@ module ActsAsRemovable
10
10
  end
11
11
 
12
12
  module ClassMethods
13
+
14
+ # Add ability to remove ActiveRecord instances
15
+ #
16
+ # acts_as_removable
17
+ # acts_as_removable column_name: 'other_column_name'
18
+ # acts_as_removable without_default_scope: true
19
+ #
20
+ # ===== Options
21
+ #
22
+ # * <tt>:column_name</tt> - A symbol or string with the column to use for removal timestamp.
23
+ # * <tt>:without_default_scope</tt> - A boolean indicating to not set a default scope.
13
24
  def acts_as_removable(options={})
14
25
  self.class_eval do
15
- @_acts_as_removable_column_name = options[:column_name] || 'removed_at'
26
+ @_acts_as_removable_column_name = (options[:column_name] || 'removed_at').to_s
16
27
  def self._acts_as_removable_column_name
17
28
  @_acts_as_removable_column_name
18
29
  end
19
30
 
20
- default_scope -> {where("#{self.table_name}.#{self._acts_as_removable_column_name} IS NULL")}
21
- scope :removed, -> {where("#{self.table_name}.#{self._acts_as_removable_column_name} IS NOT NULL")}
31
+ scope :removed, -> {unscoped.where("#{self.table_name}.#{self._acts_as_removable_column_name} IS NOT NULL")}
32
+ scope :actives, -> {unscoped.where("#{self.table_name}.#{self._acts_as_removable_column_name} IS NULL")}
33
+ default_scope -> {actives} unless options[:without_default_scope]
22
34
 
23
35
  define_callbacks :remove
24
36
 
@@ -34,15 +46,28 @@ module ActsAsRemovable
34
46
  self.send(self.class._acts_as_removable_column_name).present?
35
47
  end
36
48
 
37
- def remove
38
- run_callbacks :remove do
39
- self.update_attributes(self.class._acts_as_removable_column_name => Time.now)
40
- end
49
+ def remove(options={})
50
+ _update_remove_attribute(Time.now, false, options)
51
+ end
52
+
53
+ def remove!(options={})
54
+ _update_remove_attribute(Time.now, true, options)
41
55
  end
42
56
 
43
- def remove!
57
+ def unremove(options={})
58
+ _update_remove_attribute(nil, false, options)
59
+ end
60
+
61
+ def unremove!(options={})
62
+ _update_remove_attribute(nil, true, options)
63
+ end
64
+
65
+ private
66
+
67
+ def _update_remove_attribute(value, with_bang=false, options={})
44
68
  run_callbacks :remove do
45
- self.update_attributes!(self.class._acts_as_removable_column_name => Time.now)
69
+ self.send("#{self.class._acts_as_removable_column_name}=", value)
70
+ with_bang ? self.save!(options) : self.save(options)
46
71
  end
47
72
  end
48
73
  end
@@ -13,7 +13,7 @@ describe 'acts_as_removable' do
13
13
  end
14
14
 
15
15
  class MySecondModel < ActiveRecord::Base
16
- acts_as_removable column_name: :use_this_column
16
+ acts_as_removable column_name: :use_this_column, without_default_scope: true
17
17
  end
18
18
 
19
19
  before do
@@ -46,6 +46,26 @@ describe 'acts_as_removable' do
46
46
  end
47
47
  end
48
48
 
49
+ it "test scopes" do
50
+ MyModel.delete_all
51
+ MySecondModel.delete_all
52
+
53
+ MyModel.create!
54
+ MyModel.create!.remove!
55
+ MySecondModel.create!
56
+ MySecondModel.create!.remove!
57
+
58
+ MyModel.count.to_i.should be(1)
59
+ MyModel.actives.count.should be(1)
60
+ MyModel.removed.count.should be(1)
61
+ MyModel.unscoped.count.should be(2)
62
+
63
+ MySecondModel.count.to_i.should be(2)
64
+ MySecondModel.actives.count.should be(1)
65
+ MySecondModel.removed.count.should be(1)
66
+ MySecondModel.unscoped.count.should be(2)
67
+ end
68
+
49
69
  it "test callbacks" do
50
70
  r = MyModel.create!
51
71
  r.callback_before.should be_false
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_removable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Schwab
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-24 00:00:00.000000000 Z
11
+ date: 2013-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 4.0.0.rc2
19
+ version: 4.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: 4.0.0.rc2
26
+ version: 4.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activerecord
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: 4.0.0.rc2
33
+ version: 4.0.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: 4.0.0.rc2
40
+ version: 4.0.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement