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 CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "hashback"
3
- s.version = "0.0.1.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
@@ -1,3 +1,4 @@
1
1
  require 'moneta'
2
+ require 'activesupport'
2
3
 
3
4
  require File.expand_path(File.join(File.dirname(__FILE__), %w[hashback backend] ))
@@ -8,33 +8,37 @@ module HashBack
8
8
  def initialize(namespace, moneta_klass, options = { })
9
9
  @namespace = namespace
10
10
  @options = options
11
- @cache = initialize_cache_klass(moneta_klass)
11
+ @moneta = initialize_moneta_klass(moneta_klass)
12
12
  end
13
13
 
14
14
  def [](key)
15
- @cache[key_name_for(key)]
15
+ @moneta[key_name_for(key)]
16
16
  end
17
17
 
18
18
  def []=(key, value)
19
- @cache[key_name_for(key)] = value
19
+ @moneta[key_name_for(key)] = value
20
20
  end
21
21
 
22
22
  def delete(key)
23
- @cache.delete(key_name_for(key))
23
+ @moneta.delete(key_name_for(key))
24
24
  end
25
25
 
26
26
  private
27
27
 
28
- def initialize_cache_klass(cache_klass)
29
- require_moneta_library_for(cache_klass)
30
- klass_const = cache_klass.respond_to?(:constantize) ? cache_klass.constantize : cache_klass
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(cache_klass)
35
- require_klass(cache_klass.to_s.gsub(/::/, '/').downcase)
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
- @moneta = mock('moneta')
6
- HashBack::Backend.any_instance.stubs(:initialize_cache_klass).returns(@moneta)
7
- @b = HashBack::Backend.new('foo', 'MonetaKlass', { })
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
- @moneta.expects(:[]).with('keyname')
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
- @moneta.expects(:[]=).with('keyname', 'value')
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
- @moneta.expects(:delete).with('keyname')
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
@@ -6,4 +6,4 @@ Spec::Runner.configure do |config|
6
6
  config.mock_with(:mocha)
7
7
  end
8
8
 
9
- require File.join(File.dirname(__FILE__), %w[.. init])
9
+ require File.join(File.dirname(__FILE__), %w[.. lib hashback])
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.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: []