mini_memory_store 0.1.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/Gemfile +7 -0
- data/Gemfile.lock +26 -0
- data/Rakefile +20 -0
- data/Readme.md +15 -0
- data/VERSION +1 -0
- data/lib/mini_memory_store.rb +43 -0
- data/mini_memory_store.gemspec +53 -0
- data/spec/mini_memory_store_spec.rb +59 -0
- data/spec/spec_helper.rb +2 -0
- metadata +117 -0
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
diff-lcs (1.1.2)
|
5
|
+
git (1.2.5)
|
6
|
+
jeweler (1.5.2)
|
7
|
+
bundler (~> 1.0.0)
|
8
|
+
git (>= 1.2.5)
|
9
|
+
rake
|
10
|
+
rake (0.8.7)
|
11
|
+
rspec (2.3.0)
|
12
|
+
rspec-core (~> 2.3.0)
|
13
|
+
rspec-expectations (~> 2.3.0)
|
14
|
+
rspec-mocks (~> 2.3.0)
|
15
|
+
rspec-core (2.3.1)
|
16
|
+
rspec-expectations (2.3.0)
|
17
|
+
diff-lcs (~> 1.1.2)
|
18
|
+
rspec-mocks (2.3.0)
|
19
|
+
|
20
|
+
PLATFORMS
|
21
|
+
ruby
|
22
|
+
|
23
|
+
DEPENDENCIES
|
24
|
+
jeweler
|
25
|
+
rake
|
26
|
+
rspec (~> 2)
|
data/Rakefile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
task :default => :spec
|
2
|
+
require "rspec/core/rake_task"
|
3
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
4
|
+
t.rspec_opts = '--backtrace --color'
|
5
|
+
end
|
6
|
+
|
7
|
+
begin
|
8
|
+
require 'jeweler'
|
9
|
+
Jeweler::Tasks.new do |gem|
|
10
|
+
gem.name = 'mini_memory_store'
|
11
|
+
gem.summary = "Store a single value in memory with expiration"
|
12
|
+
gem.email = "michael@grosser.it"
|
13
|
+
gem.homepage = "http://github.com/grosser/#{gem.name}"
|
14
|
+
gem.authors = ["Michael Grosser"]
|
15
|
+
end
|
16
|
+
|
17
|
+
Jeweler::GemcutterTasks.new
|
18
|
+
rescue LoadError
|
19
|
+
puts "Jeweler, or one of its dependencies, is not available. Install it with: gem install jeweler"
|
20
|
+
end
|
data/Readme.md
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
Store a single value in memory with expiration
|
2
|
+
|
3
|
+
Install
|
4
|
+
=======
|
5
|
+
sudo gem install mini_memory_store
|
6
|
+
|
7
|
+
Usage
|
8
|
+
=====
|
9
|
+
CODE_EXAMPLE
|
10
|
+
|
11
|
+
Author
|
12
|
+
======
|
13
|
+
[Michael Grosser](http://grosser.it)
|
14
|
+
grosser.michael@gmail.com
|
15
|
+
Hereby placed under public domain, do what you want, just do not hold me accountable...
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class MiniMemoryStore
|
2
|
+
VERSION = File.read( File.join(File.dirname(__FILE__),'..','VERSION') ).strip
|
3
|
+
|
4
|
+
def initialize(options={})
|
5
|
+
@options = options
|
6
|
+
@last_set = 0
|
7
|
+
end
|
8
|
+
|
9
|
+
def set(value)
|
10
|
+
@last_set = Time.now.to_i
|
11
|
+
@value = value
|
12
|
+
end
|
13
|
+
|
14
|
+
def get
|
15
|
+
if expired?
|
16
|
+
nil
|
17
|
+
else
|
18
|
+
@value
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def cache(&block)
|
23
|
+
value = get
|
24
|
+
if value.nil?
|
25
|
+
value = block.call
|
26
|
+
set(value)
|
27
|
+
value
|
28
|
+
else
|
29
|
+
value
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def clear
|
34
|
+
set nil
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def expired?
|
40
|
+
return unless @options[:expires_in]
|
41
|
+
(Time.now.to_i - @options[:expires_in]) >= @last_set
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{mini_memory_store}
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Michael Grosser"]
|
12
|
+
s.date = %q{2010-12-22}
|
13
|
+
s.email = %q{michael@grosser.it}
|
14
|
+
s.files = [
|
15
|
+
"Gemfile",
|
16
|
+
"Gemfile.lock",
|
17
|
+
"Rakefile",
|
18
|
+
"Readme.md",
|
19
|
+
"VERSION",
|
20
|
+
"lib/mini_memory_store.rb",
|
21
|
+
"mini_memory_store.gemspec",
|
22
|
+
"spec/mini_memory_store_spec.rb",
|
23
|
+
"spec/spec_helper.rb"
|
24
|
+
]
|
25
|
+
s.homepage = %q{http://github.com/grosser/mini_memory_store}
|
26
|
+
s.require_paths = ["lib"]
|
27
|
+
s.rubygems_version = %q{1.3.7}
|
28
|
+
s.summary = %q{Store a single value in memory with expiration}
|
29
|
+
s.test_files = [
|
30
|
+
"spec/mini_memory_store_spec.rb",
|
31
|
+
"spec/spec_helper.rb"
|
32
|
+
]
|
33
|
+
|
34
|
+
if s.respond_to? :specification_version then
|
35
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
36
|
+
s.specification_version = 3
|
37
|
+
|
38
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
39
|
+
s.add_development_dependency(%q<rake>, [">= 0"])
|
40
|
+
s.add_development_dependency(%q<rspec>, ["~> 2"])
|
41
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
42
|
+
else
|
43
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
44
|
+
s.add_dependency(%q<rspec>, ["~> 2"])
|
45
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
46
|
+
end
|
47
|
+
else
|
48
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
49
|
+
s.add_dependency(%q<rspec>, ["~> 2"])
|
50
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require File.expand_path('spec/spec_helper')
|
2
|
+
|
3
|
+
describe MiniMemoryStore do
|
4
|
+
let(:store){ MiniMemoryStore.new }
|
5
|
+
|
6
|
+
it "has a VERSION" do
|
7
|
+
MiniMemoryStore::VERSION.should =~ /^\d+\.\d+\.\d+$/
|
8
|
+
end
|
9
|
+
|
10
|
+
it "is nil when not set" do
|
11
|
+
store.get.should == nil
|
12
|
+
end
|
13
|
+
|
14
|
+
it "can store a value" do
|
15
|
+
store.set 1
|
16
|
+
store.get.should == 1
|
17
|
+
end
|
18
|
+
|
19
|
+
it "can cache a value" do
|
20
|
+
store.cache{1}.should == 1
|
21
|
+
store.cache{2}.should == 1
|
22
|
+
end
|
23
|
+
|
24
|
+
it "can cache false" do
|
25
|
+
store.cache{false}.should == false
|
26
|
+
store.cache{1}.should == false
|
27
|
+
end
|
28
|
+
|
29
|
+
it "does not cache nil" do
|
30
|
+
store.cache{nil}.should == nil
|
31
|
+
store.cache{1}.should == 1
|
32
|
+
end
|
33
|
+
|
34
|
+
it "clears" do
|
35
|
+
store.set 1
|
36
|
+
store.clear
|
37
|
+
store.get.should == nil
|
38
|
+
end
|
39
|
+
|
40
|
+
it "does not expire" do
|
41
|
+
store.set 1
|
42
|
+
sleep 1
|
43
|
+
store.get.should == 1
|
44
|
+
end
|
45
|
+
|
46
|
+
it "expires after given time" do
|
47
|
+
store = MiniMemoryStore.new(:expires_in => 1)
|
48
|
+
store.set 1
|
49
|
+
store.get.should == 1
|
50
|
+
sleep 1
|
51
|
+
store.get.should == nil
|
52
|
+
end
|
53
|
+
|
54
|
+
it "expires immediately with expires_in => 0" do
|
55
|
+
store = MiniMemoryStore.new(:expires_in => 0)
|
56
|
+
store.set 1
|
57
|
+
store.get.should == nil
|
58
|
+
end
|
59
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mini_memory_store
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Michael Grosser
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-12-22 00:00:00 +01:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
23
|
+
none: false
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
hash: 3
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
version: "0"
|
31
|
+
name: rake
|
32
|
+
prerelease: false
|
33
|
+
type: :development
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ~>
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
hash: 7
|
42
|
+
segments:
|
43
|
+
- 2
|
44
|
+
version: "2"
|
45
|
+
name: rspec
|
46
|
+
prerelease: false
|
47
|
+
type: :development
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
hash: 3
|
56
|
+
segments:
|
57
|
+
- 0
|
58
|
+
version: "0"
|
59
|
+
name: jeweler
|
60
|
+
prerelease: false
|
61
|
+
type: :development
|
62
|
+
version_requirements: *id003
|
63
|
+
description:
|
64
|
+
email: michael@grosser.it
|
65
|
+
executables: []
|
66
|
+
|
67
|
+
extensions: []
|
68
|
+
|
69
|
+
extra_rdoc_files: []
|
70
|
+
|
71
|
+
files:
|
72
|
+
- Gemfile
|
73
|
+
- Gemfile.lock
|
74
|
+
- Rakefile
|
75
|
+
- Readme.md
|
76
|
+
- VERSION
|
77
|
+
- lib/mini_memory_store.rb
|
78
|
+
- mini_memory_store.gemspec
|
79
|
+
- spec/mini_memory_store_spec.rb
|
80
|
+
- spec/spec_helper.rb
|
81
|
+
has_rdoc: true
|
82
|
+
homepage: http://github.com/grosser/mini_memory_store
|
83
|
+
licenses: []
|
84
|
+
|
85
|
+
post_install_message:
|
86
|
+
rdoc_options: []
|
87
|
+
|
88
|
+
require_paths:
|
89
|
+
- lib
|
90
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
hash: 3
|
96
|
+
segments:
|
97
|
+
- 0
|
98
|
+
version: "0"
|
99
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
|
+
none: false
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
hash: 3
|
105
|
+
segments:
|
106
|
+
- 0
|
107
|
+
version: "0"
|
108
|
+
requirements: []
|
109
|
+
|
110
|
+
rubyforge_project:
|
111
|
+
rubygems_version: 1.3.7
|
112
|
+
signing_key:
|
113
|
+
specification_version: 3
|
114
|
+
summary: Store a single value in memory with expiration
|
115
|
+
test_files:
|
116
|
+
- spec/mini_memory_store_spec.rb
|
117
|
+
- spec/spec_helper.rb
|