jsl-hashback 0.0.1.1 → 0.0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/hashback.gemspec +2 -1
- data/lib/hashback.rb +1 -0
- data/lib/hashback/backend.rb +14 -14
- data/spec/hashback/backend_spec.rb +33 -6
- data/spec/spec_helper.rb +1 -1
- metadata +11 -1
data/hashback.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "hashback"
|
3
|
-
s.version = "0.0.1.
|
3
|
+
s.version = "0.0.1.2"
|
4
4
|
s.date = "2009-05-13"
|
5
5
|
s.summary = "Generic tool for writing namespaced key-value data to a variety of hash-type systems"
|
6
6
|
s.email = "justin@phq.org"
|
@@ -24,4 +24,5 @@ Gem::Specification.new do |s|
|
|
24
24
|
"spec/spec_helper.rb"
|
25
25
|
]
|
26
26
|
s.add_dependency("wycats-moneta", ["> 0.0.0"])
|
27
|
+
s.add_dependency("activesupport", ["> 0.0.0"])
|
27
28
|
end
|
data/lib/hashback.rb
CHANGED
data/lib/hashback/backend.rb
CHANGED
@@ -8,33 +8,37 @@ module HashBack
|
|
8
8
|
def initialize(namespace, moneta_klass, options = { })
|
9
9
|
@namespace = namespace
|
10
10
|
@options = options
|
11
|
-
@
|
11
|
+
@moneta = initialize_moneta_klass(moneta_klass)
|
12
12
|
end
|
13
13
|
|
14
14
|
def [](key)
|
15
|
-
@
|
15
|
+
@moneta[key_name_for(key)]
|
16
16
|
end
|
17
17
|
|
18
18
|
def []=(key, value)
|
19
|
-
@
|
19
|
+
@moneta[key_name_for(key)] = value
|
20
20
|
end
|
21
21
|
|
22
22
|
def delete(key)
|
23
|
-
@
|
23
|
+
@moneta.delete(key_name_for(key))
|
24
24
|
end
|
25
25
|
|
26
26
|
private
|
27
27
|
|
28
|
-
def
|
29
|
-
require_moneta_library_for(
|
30
|
-
|
31
|
-
klass_const.new(@options)
|
28
|
+
def initialize_moneta_klass(klass)
|
29
|
+
require_moneta_library_for(klass)
|
30
|
+
load_moneta_klass(klass)
|
32
31
|
end
|
33
32
|
|
34
|
-
def require_moneta_library_for(
|
35
|
-
require_klass(
|
33
|
+
def require_moneta_library_for(klass)
|
34
|
+
require_klass(klass.to_s.gsub(/::/, '/').downcase)
|
36
35
|
end
|
37
36
|
|
37
|
+
def load_moneta_klass(klass)
|
38
|
+
klass_const = klass.respond_to?(:constantize) ? klass.constantize : klass
|
39
|
+
klass_const.new(@options)
|
40
|
+
end
|
41
|
+
|
38
42
|
def require_klass(klass)
|
39
43
|
require klass
|
40
44
|
end
|
@@ -42,9 +46,5 @@ module HashBack
|
|
42
46
|
def key_name_for(key)
|
43
47
|
[ @namespace, key ].join('-')
|
44
48
|
end
|
45
|
-
|
46
|
-
def table_name_from(archived_attribute)
|
47
|
-
archived_attribute.instance.class.table_name
|
48
|
-
end
|
49
49
|
end
|
50
50
|
end
|
@@ -2,32 +2,59 @@ require File.join(File.dirname(__FILE__), %w[ .. spec_helper ])
|
|
2
2
|
|
3
3
|
describe HashBack::Backend do
|
4
4
|
before do
|
5
|
-
@
|
6
|
-
|
7
|
-
@b = HashBack::Backend.new('foo',
|
5
|
+
@mock_moneta = mock('moneta')
|
6
|
+
@moneta_klass = "Moneta::Memory"
|
7
|
+
@b = HashBack::Backend.new('foo', @moneta_klass, { })
|
8
|
+
@b.instance_variable_set(:@moneta, @mock_moneta)
|
8
9
|
@b.stubs(:key_name_for).returns('keyname')
|
9
10
|
end
|
10
11
|
|
11
12
|
describe "methods proxied to backend" do
|
12
13
|
describe "#[]" do
|
13
14
|
it "should call the backend with the key name" do
|
14
|
-
@
|
15
|
+
@mock_moneta.expects(:[]).with('keyname')
|
15
16
|
@b['keyname']
|
16
17
|
end
|
17
18
|
end
|
18
19
|
|
19
20
|
describe "#[]=" do
|
20
21
|
it "should call the backend with the key name and value" do
|
21
|
-
@
|
22
|
+
@mock_moneta.expects(:[]=).with('keyname', 'value')
|
22
23
|
@b['keyname'] = 'value'
|
23
24
|
end
|
24
25
|
end
|
25
26
|
|
26
27
|
describe "#delete" do
|
27
28
|
it "should call delete for this key name on the backend" do
|
28
|
-
@
|
29
|
+
@mock_moneta.expects(:delete).with('keyname')
|
29
30
|
@b.delete('foo')
|
30
31
|
end
|
31
32
|
end
|
32
33
|
end
|
34
|
+
|
35
|
+
describe "#initialize_moneta_klass" do
|
36
|
+
it "should call require_moneta_library_for and load_moneta_klass" do
|
37
|
+
b = HashBack::Backend.new('foo', @moneta_klass, { })
|
38
|
+
b.expects(:require_moneta_library_for).with(@moneta_klass)
|
39
|
+
b.expects(:load_moneta_klass).with(@moneta_klass)
|
40
|
+
b.__send__(:initialize_moneta_klass, @moneta_klass)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "#require_moneta_library_for" do
|
45
|
+
it "should require the class given" do
|
46
|
+
@b.expects(:require_klass).with('moneta/memory')
|
47
|
+
@b.__send__(:require_moneta_library_for, "Moneta::Memory")
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "#load_moneta_klass" do
|
52
|
+
it "should load the klass without error" do
|
53
|
+
require 'moneta/memory'
|
54
|
+
|
55
|
+
lambda {
|
56
|
+
@b.__send__(:load_moneta_klass, "Moneta::Memory")
|
57
|
+
}.should_not raise_error
|
58
|
+
end
|
59
|
+
end
|
33
60
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsl-hashback
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.1.
|
4
|
+
version: 0.0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Leitgeb
|
@@ -22,6 +22,16 @@ dependencies:
|
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: 0.0.0
|
24
24
|
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: activesupport
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.0.0
|
34
|
+
version:
|
25
35
|
description: Wrapper around Moneta that facilitates using the key-value store as a backend for applications requiring namespacing
|
26
36
|
email: justin@phq.org
|
27
37
|
executables: []
|