jsl-hashback 0.0.1.1 → 0.0.1.2
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/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: []
|