acts_as_expirable 0.0.3
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.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/Gemfile +2 -0
- data/Rakefile +12 -0
- data/acts_as_expirable.gemspec +24 -0
- data/lib/acts_as_expirable.rb +2 -0
- data/lib/acts_as_expirable/expirable.rb +84 -0
- data/lib/acts_as_expirable/version.rb +3 -0
- metadata +93 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b899168c5eb93007211f94db8bb907b43eb629c9
|
4
|
+
data.tar.gz: a0975e616f04ec8409f158d007ecbf958ac86ead
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 751c14d25cfd54b0484ef5782412ebfadf8981918fc7070da93a7894e214cf3826b07ef8cf022d24f409e813e1d26e46cc2fbef94263f3515368f368555591fb
|
7
|
+
data.tar.gz: 9d45a7a348d6a0c3dec36704cd2bbf8864a0cc31b9ae682c537254427dd5150b60d625c09c9935b6d4529a46abe07762f27babd81c13568ef43b796864c71956
|
data/.gitignore
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# See http://help.github.com/ignore-files/ for more about ignoring files.
|
2
|
+
#
|
3
|
+
# If you find yourself ignoring temporary files generated by your text editor
|
4
|
+
# or operating system, you probably want to add a global ignore instead:
|
5
|
+
# git config --global core.excludesfile ~/.gitignore_global
|
6
|
+
|
7
|
+
# Ignore bundler config
|
8
|
+
/.bundle
|
9
|
+
|
10
|
+
Gemfile.lock
|
11
|
+
|
12
|
+
*.swp
|
13
|
+
*.DS_Store
|
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
|
4
|
+
desc 'Default: run acts_as_expirable unit tests.'
|
5
|
+
task :default => :test
|
6
|
+
|
7
|
+
desc 'Test the acts_as_expirable plugin.'
|
8
|
+
Rake::TestTask.new(:test) do |t|
|
9
|
+
t.libs << 'lib'
|
10
|
+
t.pattern = 'test/**/*_test.rb'
|
11
|
+
t.verbose = true
|
12
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
$:.push File.dirname(__FILE__) + '/lib'
|
2
|
+
require 'acts_as_expirable/version'
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.name = %q{acts_as_expirable}
|
6
|
+
gem.authors = ["Jeff Ching"]
|
7
|
+
gem.date = %q{2012-10-15}
|
8
|
+
gem.description = %q{With ActsAsExpirable, you can mark ActiveRecord records as expired and programmatically find expired record.}
|
9
|
+
gem.summary = "Basic expiry for Rails."
|
10
|
+
gem.email = %q{ching.jeff@gmail.com}
|
11
|
+
gem.homepage = 'http://github.com/chingor13/acts_as_expirable'
|
12
|
+
gem.license = 'MIT'
|
13
|
+
|
14
|
+
gem.add_runtime_dependency 'rails', '>= 3.0'
|
15
|
+
gem.add_development_dependency 'sqlite3'
|
16
|
+
gem.add_development_dependency 'mysql2', '~> 0.3.7'
|
17
|
+
|
18
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
gem.files = `git ls-files`.split("\n")
|
20
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
21
|
+
gem.name = "acts_as_expirable"
|
22
|
+
gem.require_paths = ['lib']
|
23
|
+
gem.version = ActsAsExpirable::VERSION
|
24
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module ActsAsExpirable
|
2
|
+
def self.included(base)
|
3
|
+
base.extend(ClassMethods)
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.cleanup!
|
7
|
+
expirable_classes.each do |klass|
|
8
|
+
klass.unscoped.destroy_expired
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.expirable_classes
|
13
|
+
@expirable_classes ||= []
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.register_expirable(klass)
|
17
|
+
@expirable_classes ||= []
|
18
|
+
@expirable_classes << klass
|
19
|
+
end
|
20
|
+
|
21
|
+
module ClassMethods
|
22
|
+
def acts_as_expirable(options = {})
|
23
|
+
ActsAsExpirable.register_expirable(self)
|
24
|
+
|
25
|
+
configuration = { :column => "expires_at" }
|
26
|
+
configuration.update(options) if options.is_a?(Hash)
|
27
|
+
|
28
|
+
class_eval %{
|
29
|
+
include ActsAsExpirable::InstanceMethods
|
30
|
+
|
31
|
+
scope :expired, where('#{configuration[:column]} <= UTC_TIMESTAMP()')
|
32
|
+
scope :unexpired, where('#{configuration[:column]} IS NULL OR #{configuration[:column]} > UTC_TIMESTAMP()')
|
33
|
+
|
34
|
+
class << self
|
35
|
+
def expiry_column
|
36
|
+
'#{configuration[:column]}'
|
37
|
+
end
|
38
|
+
|
39
|
+
def destroy_expired
|
40
|
+
expired.destroy_all
|
41
|
+
end
|
42
|
+
|
43
|
+
def delete_expired
|
44
|
+
expired.delete_all
|
45
|
+
end
|
46
|
+
|
47
|
+
def default_scope
|
48
|
+
unexpired
|
49
|
+
end
|
50
|
+
end
|
51
|
+
}
|
52
|
+
|
53
|
+
case configuration[:default]
|
54
|
+
when Proc
|
55
|
+
before_validation configuration[:default], :on => :create do
|
56
|
+
write_attribute(configuration[:column], configuration[:default].call(self)) if read_attribute(configuration[:column]).nil?
|
57
|
+
true
|
58
|
+
end
|
59
|
+
when NilClass
|
60
|
+
else
|
61
|
+
before_validation :on => :create do
|
62
|
+
write_attribute(configuration[:column], configuration[:default]) if read_attribute(configuration[:column]).nil?
|
63
|
+
true
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
module InstanceMethods
|
70
|
+
def expire
|
71
|
+
write_attribute(self.class.expiry_column, Time.now)
|
72
|
+
end
|
73
|
+
|
74
|
+
def expire!
|
75
|
+
update_attribute(self.class.expiry_column, Time.now)
|
76
|
+
end
|
77
|
+
|
78
|
+
def expired?
|
79
|
+
expire_time = read_attribute(self.class.expiry_column)
|
80
|
+
return false if expire_time.nil?
|
81
|
+
expire_time <= Time.now
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
metadata
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: acts_as_expirable
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jeff Ching
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2012-10-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sqlite3
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: mysql2
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.3.7
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.3.7
|
55
|
+
description: With ActsAsExpirable, you can mark ActiveRecord records as expired and
|
56
|
+
programmatically find expired record.
|
57
|
+
email: ching.jeff@gmail.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- .gitignore
|
63
|
+
- Gemfile
|
64
|
+
- Rakefile
|
65
|
+
- acts_as_expirable.gemspec
|
66
|
+
- lib/acts_as_expirable.rb
|
67
|
+
- lib/acts_as_expirable/expirable.rb
|
68
|
+
- lib/acts_as_expirable/version.rb
|
69
|
+
homepage: http://github.com/chingor13/acts_as_expirable
|
70
|
+
licenses:
|
71
|
+
- MIT
|
72
|
+
metadata: {}
|
73
|
+
post_install_message:
|
74
|
+
rdoc_options: []
|
75
|
+
require_paths:
|
76
|
+
- lib
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - '>='
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
requirements: []
|
88
|
+
rubyforge_project:
|
89
|
+
rubygems_version: 2.0.3
|
90
|
+
signing_key:
|
91
|
+
specification_version: 4
|
92
|
+
summary: Basic expiry for Rails.
|
93
|
+
test_files: []
|