key_value 0.1.2 → 0.1.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.
- data/Readme.md +13 -3
- data/VERSION +1 -1
- data/key_value.gemspec +2 -2
- data/lib/key_value.rb +14 -0
- data/spec/key_value_spec.rb +52 -0
- metadata +4 -4
data/Readme.md
CHANGED
@@ -25,13 +25,23 @@ Migration
|
|
25
25
|
Usage
|
26
26
|
=====
|
27
27
|
KeyValue['xxx'] = {:baz=>'foo'})
|
28
|
-
KeyValue.set('xxx', {:baz=>'foo'})
|
28
|
+
or KeyValue.set('xxx', {:baz=>'foo'})
|
29
29
|
|
30
30
|
KeyValue['xxx'] -> {:baz=>'foo'}
|
31
|
-
KeyValue.get('xxx') -> {:baz=>'foo'}
|
31
|
+
or KeyValue.get('xxx') -> {:baz=>'foo'}
|
32
32
|
|
33
33
|
KeyValue['xxx'] = nil
|
34
|
-
KeyValue.del('xxx')
|
34
|
+
or KeyValue.del('xxx')
|
35
|
+
|
36
|
+
KeyValue.inc('xxx') # !! Not atomic
|
37
|
+
or KeyValue.inc('xxx', 5)
|
38
|
+
|
39
|
+
KeyValue.cache('xxx'){ ..something expensive.. }
|
40
|
+
|
41
|
+
TODO
|
42
|
+
====
|
43
|
+
- setting / caching of false <-> AR serialize does not handle false
|
44
|
+
- HandlerSocket support
|
35
45
|
|
36
46
|
Authors
|
37
47
|
=======
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
data/key_value.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{key_value}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Roman Heinrich", "Michael Grosser"]
|
12
|
-
s.date = %q{2011-05-
|
12
|
+
s.date = %q{2011-05-12}
|
13
13
|
s.email = %q{michael@grosser.it}
|
14
14
|
s.files = [
|
15
15
|
"Gemfile",
|
data/lib/key_value.rb
CHANGED
@@ -15,6 +15,7 @@ class KeyValue < ActiveRecord::Base
|
|
15
15
|
record = KeyValue.find_by_key(key) || KeyValue.new(:key => key)
|
16
16
|
record.value = value
|
17
17
|
record.save!
|
18
|
+
value
|
18
19
|
else
|
19
20
|
KeyValue.delete_all(:key => key)
|
20
21
|
end
|
@@ -28,4 +29,17 @@ class KeyValue < ActiveRecord::Base
|
|
28
29
|
def self.del(key)
|
29
30
|
set(key, nil)
|
30
31
|
end
|
32
|
+
|
33
|
+
def self.inc(key, offset=1)
|
34
|
+
set(key, (get(key) || 0) + offset)
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.cache(key)
|
38
|
+
value = get(key)
|
39
|
+
if value
|
40
|
+
value
|
41
|
+
else
|
42
|
+
set(key, yield)
|
43
|
+
end
|
44
|
+
end
|
31
45
|
end
|
data/spec/key_value_spec.rb
CHANGED
@@ -22,12 +22,22 @@ describe KeyValue do
|
|
22
22
|
KeyValue.get('xxx').should == 1
|
23
23
|
end
|
24
24
|
|
25
|
+
it "can set & get false" do
|
26
|
+
pending
|
27
|
+
KeyValue.set('xxx', false)
|
28
|
+
KeyValue.get('xxx').should == false
|
29
|
+
end
|
30
|
+
|
25
31
|
it "overwrites on set" do
|
26
32
|
KeyValue.set('xxx', 1)
|
27
33
|
KeyValue.set('xxx', 2)
|
28
34
|
KeyValue.get('xxx').should == 2
|
29
35
|
end
|
30
36
|
|
37
|
+
it "returns set value" do
|
38
|
+
KeyValue.set('xxx',1).should == 1
|
39
|
+
end
|
40
|
+
|
31
41
|
it "can unset" do
|
32
42
|
KeyValue.set('yyy', 1)
|
33
43
|
KeyValue.set('xxx', 1)
|
@@ -49,4 +59,46 @@ describe KeyValue do
|
|
49
59
|
KeyValue['xxx'] = 1
|
50
60
|
KeyValue['xxx'].should == 1
|
51
61
|
end
|
62
|
+
|
63
|
+
describe :inc do
|
64
|
+
it "can inc on nil" do
|
65
|
+
KeyValue.inc('xxx')
|
66
|
+
KeyValue['xxx'].should == 1
|
67
|
+
end
|
68
|
+
|
69
|
+
it "can inc on existing value" do
|
70
|
+
KeyValue['xxx'] = 1
|
71
|
+
KeyValue.inc('xxx')
|
72
|
+
KeyValue['xxx'].should == 2
|
73
|
+
end
|
74
|
+
|
75
|
+
it "can inc with offset" do
|
76
|
+
KeyValue.inc('xxx', 5)
|
77
|
+
KeyValue['xxx'].should == 5
|
78
|
+
end
|
79
|
+
|
80
|
+
it "does not inc on non-numbers" do
|
81
|
+
KeyValue['xxx'] = '1'
|
82
|
+
lambda{
|
83
|
+
KeyValue.inc('xxx')
|
84
|
+
}.should raise_error(TypeError)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe :cache do
|
89
|
+
it "fetches" do
|
90
|
+
KeyValue['xxx'] = 1
|
91
|
+
KeyValue.cache('xxx'){2}.should == 1
|
92
|
+
end
|
93
|
+
|
94
|
+
it "stores" do
|
95
|
+
KeyValue.cache('xxx'){2}.should == 2
|
96
|
+
end
|
97
|
+
|
98
|
+
it "can store false" do
|
99
|
+
pending
|
100
|
+
KeyValue.cache('xxx'){false}
|
101
|
+
KeyValue.cache('xxx'){true}.should == false
|
102
|
+
end
|
103
|
+
end
|
52
104
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: key_value
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 3
|
10
|
+
version: 0.1.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Roman Heinrich
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-05-
|
19
|
+
date: 2011-05-12 00:00:00 +02:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|