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 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: []