coin 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 +25 -4
- data/lib/coin/vault.rb +9 -5
- data/lib/coin/version.rb +1 -1
- metadata +2 -2
data/README.md
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
# Coin
|
2
2
|
|
3
|
-
## Memcached? We don't need no stinking Memcached.
|
3
|
+
## Memcached? We don't need no stinking Memcached. <sup><a href="#cultural-references">1</a></sup>
|
4
4
|
|
5
|
-
...
|
6
|
-
|
5
|
+
Well... you might depending upon your specific needs.,
|
6
|
+
but have a look at Coin before you reach for the sledgehammer.
|
7
7
|
|
8
8
|
Coin is an absurdly simple in memory object caching system written in Ruby.
|
9
9
|
|
@@ -104,6 +104,24 @@ Coin.start_server # => true
|
|
104
104
|
Coin.start_server true # => true
|
105
105
|
```
|
106
106
|
|
107
|
+
## Best Practices
|
108
|
+
|
109
|
+
All objects stored with Coin must be able to marshal.
|
110
|
+
|
111
|
+
Its generally a good idea to store only the most basic objects.
|
112
|
+
For example:
|
113
|
+
|
114
|
+
* Boolean
|
115
|
+
* String
|
116
|
+
* Number
|
117
|
+
|
118
|
+
Its possible to store more complex objects such as:
|
119
|
+
|
120
|
+
* Array
|
121
|
+
* Hash
|
122
|
+
|
123
|
+
Just be sure to limit the keys & values to basic types.
|
124
|
+
|
107
125
|
## Run the Tests
|
108
126
|
|
109
127
|
```bash
|
@@ -122,4 +140,7 @@ shared access across all processes on a **single machine**.
|
|
122
140
|
_It should be relatively simple to update Coin to work across multiple machines,
|
123
141
|
so keep an eye peeled for this feature in the future._
|
124
142
|
|
125
|
-
|
143
|
+
|
144
|
+
## Cultural References
|
145
|
+
|
146
|
+
1. "Badges? We don't need no stinking badges!" - from Mel Brooks' film [Blazing Saddles](http://en.wikipedia.org/wiki/Stinking_badges)
|
data/lib/coin/vault.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
require "thread"
|
2
2
|
require "singleton"
|
3
3
|
require "forwardable"
|
4
|
+
require "monitor"
|
4
5
|
|
5
6
|
module Coin
|
6
7
|
class Vault
|
7
8
|
extend Forwardable
|
8
9
|
include Singleton
|
10
|
+
include MonitorMixin
|
9
11
|
def_delegators :@dict, :length
|
10
12
|
|
11
13
|
def read(key)
|
@@ -17,7 +19,7 @@ module Coin
|
|
17
19
|
|
18
20
|
def read_and_delete(key)
|
19
21
|
value = nil
|
20
|
-
|
22
|
+
synchronize do
|
21
23
|
value = read(key)
|
22
24
|
@dict.delete(key)
|
23
25
|
end
|
@@ -25,18 +27,18 @@ module Coin
|
|
25
27
|
end
|
26
28
|
|
27
29
|
def write(key, value, lifetime=300)
|
28
|
-
|
30
|
+
synchronize do
|
29
31
|
@dict[key] = { :value => value, :cached_at => Time.now, :lifetime => lifetime }
|
30
32
|
end
|
31
33
|
value
|
32
34
|
end
|
33
35
|
|
34
36
|
def delete(key)
|
35
|
-
|
37
|
+
synchronize { @dict.delete(key) }
|
36
38
|
end
|
37
39
|
|
38
40
|
def clear
|
39
|
-
|
41
|
+
synchronize { @dict = {} }
|
40
42
|
end
|
41
43
|
|
42
44
|
def ok?
|
@@ -46,9 +48,11 @@ module Coin
|
|
46
48
|
protected
|
47
49
|
|
48
50
|
def initialize
|
49
|
-
@mutex = Mutex.new
|
50
51
|
@dict = {}
|
51
52
|
start_sweeper
|
53
|
+
# have to directly call mon_initialize since this is a
|
54
|
+
# singleton class and constructor is protected
|
55
|
+
mon_initialize
|
52
56
|
end
|
53
57
|
|
54
58
|
def start_sweeper
|
data/lib/coin/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-05 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description:
|
15
15
|
email:
|