acts_as_sweepable 0.1.4 → 0.2.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.
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,6 @@
1
+ = Version 0.2.0
2
+ * Changes to API (no backword compatibility)
3
+ * Using only updated_at by default
1
4
  = Version 0.1.4
2
5
  * use_delete - use delete_all instead of destroy_all
3
6
  = Version 0.1.3
data/README.md CHANGED
@@ -14,20 +14,21 @@ Adds a class method called sweep to ActiveRecord - used to remove old elements.
14
14
 
15
15
  ## Example
16
16
 
17
- # Will remove elements older than 10 days
17
+ # Will remove elements that weren't updated from at least 10 days
18
18
  MyClass.sweep(:time => '10d')
19
19
 
20
- # Will remove elements older than 10 hours
20
+ # Will remove elements that weren't updated from at least 10 hours
21
21
  MyClass.sweep(:time => '10h')
22
22
 
23
- # Will remove elements older than 10 minutes
23
+ # Will remove elements that weren't updated from at least 10 minutes
24
24
  MyClass.sweep(:time => '10m')
25
25
 
26
26
  Params accepted by this method:
27
27
 
28
28
  * `time` - d(days),h(hours), m(minutes)
29
29
  * `conditions` - additional SQL conditions (like WHERE)
30
- * `active` - (default true) - should it use updated_at and created_at to determine if object is old enough or should it use just created_at.
30
+ * `columns` - (default :updated_at) - which columns should it consider when removing
31
+ * `method` - (default: destroy_all) - which method should it use to destroy objects
31
32
 
32
33
  You can also yield a block of code - it will be performed on every object that should be deleted:
33
34
 
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'echoe'
4
4
 
5
- Echoe.new('acts_as_sweepable', '0.1.4') do |p|
5
+ Echoe.new('acts_as_sweepable', '0.2.0') do |p|
6
6
  p.description = "Adds a class method called sweep to ActiveRecord - used to remove old elements"
7
7
  p.url = "https://github.com/mensfeld/Acts-as-Sweepable"
8
8
  p.author = "Maciej Mensfeld"
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "acts_as_sweepable"
5
- s.version = "0.1.4"
5
+ s.version = "0.2.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Maciej Mensfeld"]
9
- s.date = "2012-06-16"
9
+ s.date = "2012-06-17"
10
10
  s.description = "Adds a class method called sweep to ActiveRecord - used to remove old elements"
11
11
  s.email = "maciej@mensfeld.pl"
12
12
  s.extra_rdoc_files = ["CHANGELOG.rdoc", "README.md", "lib/acts_as_sweepable.rb"]
@@ -16,10 +16,10 @@ module Acts
16
16
 
17
17
  time_ago = options.delete(:time)
18
18
  conditions = options.delete(:conditions)
19
- created_or_updated = options.delete(:created_or_updated)
20
- delete = options.delete(:use_delete) || false
21
- created_or_updated = true if created_or_updated.nil?
22
-
19
+ columns = [options.delete(:columns) || :updated_at].flatten
20
+ remove_method = options.delete(:method) || :destroy_all
21
+
22
+
23
23
  time = case time_ago
24
24
  when /^(\d+)m$/ then Time.now - $1.to_i.minute
25
25
  when /^(\d+)h$/ then Time.now - $1.to_i.hour
@@ -27,26 +27,22 @@ module Acts
27
27
  else raise(InvalidTime, time_ago)
28
28
  end
29
29
 
30
- statement = "updated_at < '#{time.to_s(:db)}'"
31
-
32
- if created_or_updated
33
- statement += " OR created_at < '#{time.to_s(:db)}')"
34
- statement = '('+statement
30
+ statement = []
31
+ columns.each do |column|
32
+ statement << "#{column} < '#{time.to_s(:db)}'"
35
33
  end
36
34
 
37
- conditions = "AND #{conditions} " if conditions
35
+ statement = "(#{statement.join(' OR ')})"
38
36
 
39
- els = self.where("#{statement} #{conditions}")
37
+ conditions = "AND #{conditions} " if conditions
40
38
 
41
39
  # Run on each block of code
42
- els.each {|el| yield el } if block_given?
43
-
44
- if delete
45
- self.delete_all "#{statement} #{conditions}"
46
- else
47
- self.destroy_all "#{statement} #{conditions}"
40
+ if block_given?
41
+ els = self.where("#{statement} #{conditions}")
42
+ els.each {|el| yield el }
48
43
  end
49
44
 
45
+ self.send(remove_method, "#{statement} #{conditions}")
50
46
  end
51
47
  end
52
48
 
@@ -54,4 +50,3 @@ module Acts
54
50
  end
55
51
 
56
52
  ActiveRecord::Base.send(:include, Acts::AsSweepable)
57
-
@@ -12,19 +12,34 @@ describe CoolElement do
12
12
 
13
13
  context "when object is old enough" do
14
14
  it "should be sweeped" do
15
- el = subject.create(:created_at => 10.days.ago)
15
+ el = subject.create(
16
+ :created_at => 10.days.ago,
17
+ :updated_at => 10.days.ago
18
+ )
16
19
  subject.sweep(:time => '9d')
17
20
  subject.all.count.should eql(0)
18
- el = subject.create(:created_at => 10.hours.ago)
21
+ el = subject.create(
22
+ :created_at => 10.hours.ago,
23
+ :updated_at => 10.hours.ago
24
+ )
19
25
  subject.sweep(:time => '9h')
20
26
  subject.all.count.should eql(0)
21
- el = subject.create(:created_at => 10.minutes.ago)
27
+ el = subject.create(
28
+ :created_at => 10.minutes.ago,
29
+ :updated_at => 10.minutes.ago
30
+ )
22
31
  subject.sweep(:time => '9m')
23
32
  subject.all.count.should eql(0)
24
- el = subject.create(:created_at => 10.minutes.ago, :updated_at => 1.minutes.ago)
25
- subject.sweep(:time => '9m')
33
+ el = subject.create(
34
+ :created_at => 10.minutes.ago,
35
+ :updated_at => 1.minutes.ago
36
+ )
37
+ subject.sweep(:time => '9m', :columns => [:created_at])
26
38
  subject.all.count.should eql(0)
27
- el = subject.create(:created_at => 1.minutes.ago, :updated_at => 10.minutes.ago)
39
+ el = subject.create(
40
+ :created_at => 1.minutes.ago,
41
+ :updated_at => 10.minutes.ago
42
+ )
28
43
  subject.sweep(:time => '9m')
29
44
  subject.all.count.should eql(0)
30
45
  end
@@ -36,7 +51,7 @@ describe CoolElement do
36
51
  subject.sweep(:time => '11d')
37
52
  subject.all.count.should eql(1)
38
53
  el = subject.create(:created_at => 10.minutes.ago)
39
- subject.sweep(:time => '11m')
54
+ subject.sweep(:time => '11m', :columns => :created_at)
40
55
  subject.all.count.should eql(1)
41
56
  el = subject.create(:created_at => 10.hours.ago)
42
57
  subject.sweep(:time => '11h')
@@ -46,8 +61,13 @@ describe CoolElement do
46
61
 
47
62
  context "when we add additional parameter" do
48
63
  it "should be used" do
49
- el1 = subject.create(:created_at => 10.days.ago, :name => 'First')
50
- el2 = subject.create(:created_at => 10.days.ago, :name => 'Second')
64
+ el1 = subject.create(
65
+ :created_at => 10.days.ago, :name => 'First')
66
+ el2 = subject.create(
67
+ :created_at => 10.days.ago,
68
+ :updated_at => 10.days.ago,
69
+ :name => 'Second'
70
+ )
51
71
  subject.sweep(:time => '9d', :conditions => 'name LIKE "Second"')
52
72
  subject.all.count.should eql(1)
53
73
  subject.all.first.name.should eql "First"
@@ -64,7 +84,7 @@ describe CoolElement do
64
84
  it "should not sweep recently updated objects" do
65
85
  el = subject.create(:updated_at => 1.days.ago, :created_at => 11.days.ago)
66
86
  subject.all.count.should eql(1)
67
- subject.sweep(:time => '9d', :created_or_updated => false)
87
+ subject.sweep(:time => '9d')
68
88
  subject.all.count.should eql(1)
69
89
  end
70
90
  end
@@ -72,7 +92,13 @@ describe CoolElement do
72
92
  context "When we sweep smthg" do
73
93
  it "should be able to perform on each" do
74
94
  subject.expects(:destroy_all)
75
- 2.times { |i| subject.create(:created_at => 10.days.ago, :name => i.to_s) }
95
+ 2.times do |i|
96
+ subject.create(
97
+ :created_at => 10.days.ago,
98
+ :updated_at => 10.days.ago,
99
+ :name => i.to_s
100
+ )
101
+ end
76
102
  saved = []
77
103
  subject.sweep(:time => '1d') do |el|
78
104
  saved << el.name
@@ -86,7 +112,7 @@ describe CoolElement do
86
112
  it 'should use it instead of destroy' do
87
113
  2.times { |i| subject.create(:created_at => 10.days.ago, :name => i.to_s) }
88
114
  subject.expects(:delete_all)
89
- subject.sweep(:time => '1d', :use_delete => true)
115
+ subject.sweep(:time => '1d', :method => :delete_all)
90
116
  end
91
117
  end
92
118
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_sweepable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-16 00:00:00.000000000Z
12
+ date: 2012-06-17 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &16911420 !ruby/object:Gem::Requirement
16
+ requirement: &7499640 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.0.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *16911420
24
+ version_requirements: *7499640
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: mocha
27
- requirement: &16910580 !ruby/object:Gem::Requirement
27
+ requirement: &7498720 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *16910580
35
+ version_requirements: *7498720
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: active_record
38
- requirement: &16906940 !ruby/object:Gem::Requirement
38
+ requirement: &7495540 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *16906940
46
+ version_requirements: *7495540
47
47
  description: Adds a class method called sweep to ActiveRecord - used to remove old
48
48
  elements
49
49
  email: maciej@mensfeld.pl