acts_as_sweepable 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +2 -1
- data/Rakefile +1 -1
- data/acts_as_sweepable.gemspec +1 -1
- data/lib/acts_as_sweepable.rb +14 -3
- data/spec/acts_as_sweepable_spec.rb +20 -3
- data/spec/spec_helper.rb +9 -0
- metadata +7 -7
data/README.md
CHANGED
@@ -28,7 +28,8 @@ Params accepted by this method:
|
|
28
28
|
* `time` - d(days),h(hours), m(minutes)
|
29
29
|
* `conditions` - additional SQL conditions (like WHERE)
|
30
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
|
+
* `method` - (default: :destroy_all) - which method should it use to destroy objects
|
32
|
+
* `format` - (default: :db) - should it use to_s(:db) or to_i
|
32
33
|
|
33
34
|
You can also yield a block of code - it will be performed on every object that should be deleted:
|
34
35
|
|
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.2.
|
5
|
+
Echoe.new('acts_as_sweepable', '0.2.2') 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"
|
data/acts_as_sweepable.gemspec
CHANGED
data/lib/acts_as_sweepable.rb
CHANGED
@@ -2,7 +2,8 @@
|
|
2
2
|
module Acts
|
3
3
|
module AsSweepable
|
4
4
|
|
5
|
-
class InvalidTime
|
5
|
+
class InvalidTime < StandardError; end
|
6
|
+
class InvalidFormat < StandardError; end
|
6
7
|
|
7
8
|
def self.included(base)
|
8
9
|
base.extend ClassMethods
|
@@ -18,18 +19,28 @@ module Acts
|
|
18
19
|
conditions = options.delete(:conditions)
|
19
20
|
columns = [options.delete(:columns) || :updated_at].flatten
|
20
21
|
remove_method = options.delete(:method) || :destroy_all
|
21
|
-
|
22
|
+
time_format = options.delete(:format) || :db
|
22
23
|
|
23
24
|
time = case time_ago
|
25
|
+
when /^(\d+)s$/ then Time.now - $1.to_i.second
|
24
26
|
when /^(\d+)m$/ then Time.now - $1.to_i.minute
|
25
27
|
when /^(\d+)h$/ then Time.now - $1.to_i.hour
|
26
28
|
when /^(\d+)d$/ then Time.now - $1.to_i.day
|
27
29
|
else raise(InvalidTime, time_ago)
|
28
30
|
end
|
29
31
|
|
32
|
+
case time_format
|
33
|
+
when :db then
|
34
|
+
time = time.to_s(:db)
|
35
|
+
when :integer then
|
36
|
+
time = time.to_i
|
37
|
+
else
|
38
|
+
raise(InvalidFormat, time_format)
|
39
|
+
end
|
40
|
+
|
30
41
|
statement = []
|
31
42
|
columns.each do |column|
|
32
|
-
statement << "#{column} < '#{time
|
43
|
+
statement << "#{column} < '#{time}'"
|
33
44
|
end
|
34
45
|
|
35
46
|
statement = "(#{statement.join(' OR ')})"
|
@@ -2,9 +2,6 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
ROOT = File.expand_path(File.dirname(__FILE__))
|
4
4
|
|
5
|
-
class CoolElement < ActiveRecord::Base
|
6
|
-
end
|
7
|
-
|
8
5
|
describe CoolElement do
|
9
6
|
subject { CoolElement }
|
10
7
|
|
@@ -117,3 +114,23 @@ describe CoolElement do
|
|
117
114
|
end
|
118
115
|
|
119
116
|
end
|
117
|
+
|
118
|
+
describe IntElement do
|
119
|
+
subject { IntElement }
|
120
|
+
|
121
|
+
before(:each){ IntElement.destroy_all}
|
122
|
+
|
123
|
+
context 'when we have a integer timestamp' do
|
124
|
+
it 'should work in a normal way' do
|
125
|
+
el = subject.create(
|
126
|
+
:timestamp => 10.days.ago.to_i
|
127
|
+
)
|
128
|
+
subject.sweep(:time => '9d', :format => :integer, :columns => :timestamp)
|
129
|
+
subject.all.count.should eql(0)
|
130
|
+
|
131
|
+
el = subject.create(:timestamp => 10.days.ago.to_i)
|
132
|
+
subject.sweep(:time => '11d', :format => :integer, :columns => :timestamp)
|
133
|
+
subject.all.count.should eql(1)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -23,3 +23,12 @@ ActiveRecord::Schema.define do
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
+
ActiveRecord::Schema.define do
|
27
|
+
create_table :int_elements do |table|
|
28
|
+
table.text :name
|
29
|
+
table.integer :timestamp
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class CoolElement < ActiveRecord::Base; end
|
34
|
+
class IntElement < ActiveRecord::Base; end
|
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.2.
|
4
|
+
version: 0.2.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-06-17 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &16651720 !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: *
|
24
|
+
version_requirements: *16651720
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: mocha
|
27
|
-
requirement: &
|
27
|
+
requirement: &16650940 !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: *
|
35
|
+
version_requirements: *16650940
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: active_record
|
38
|
-
requirement: &
|
38
|
+
requirement: &16647120 !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: *
|
46
|
+
version_requirements: *16647120
|
47
47
|
description: Adds a class method called sweep to ActiveRecord - used to remove old
|
48
48
|
elements
|
49
49
|
email: maciej@mensfeld.pl
|