key_value 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/Readme.md CHANGED
@@ -10,8 +10,8 @@ Migration
10
10
 
11
11
  class CreateKeyValue < ActiveRecord::Migration
12
12
  def self.up
13
- create_table :key_values, :id => false do |t|
14
- t.string :key, :null => false, :primary => true
13
+ create_table :key_values do |t|
14
+ t.string :key, :null => false
15
15
  t.text :value, :null => false
16
16
  end
17
17
  add_index :key_values, :key, :unique => true
@@ -53,7 +53,6 @@ HandlerSocket ([Ubuntu natty guide](http://grosser.it/2011/05/14/installing-mysq
53
53
 
54
54
  TODO
55
55
  ====
56
- - nice error handling for HandlerSocket
57
56
  - HandlerSocket write support
58
57
  - make test database configurable
59
58
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.4.0
data/key_value.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{key_value}
8
- s.version = "0.3.0"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Roman Heinrich", "Michael Grosser"]
12
- s.date = %q{2011-05-15}
12
+ s.date = %q{2011-05-17}
13
13
  s.email = %q{michael@grosser.it}
14
14
  s.files = [
15
15
  "Gemfile",
data/lib/key_value.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require 'active_record'
2
2
 
3
3
  class KeyValue < ActiveRecord::Base
4
+ class HandlerSocketError < RuntimeError; end
5
+
4
6
  HS_DEFAULT_CONFIG = {:port => '9998'}
5
7
  HS_INDEX = 31234 # just some high number...
6
8
  VERSION = File.read( File.join(File.dirname(__FILE__),'..','VERSION') ).strip
@@ -19,9 +21,8 @@ class KeyValue < ActiveRecord::Base
19
21
  def self.get(key)
20
22
  if handler_socket
21
23
  open_key_index
22
- result = hs_connection.execute_single(HS_INDEX, '=', [key])
23
- return unless result = result[1][0]
24
- YAML.load(result[0])
24
+ result = hs_find_by_key(key)
25
+ YAML.load(result) if result
25
26
  else
26
27
  KeyValue.find_by_key(key).try(:value)
27
28
  end
@@ -78,6 +79,18 @@ class KeyValue < ActiveRecord::Base
78
79
  end
79
80
 
80
81
  def self.open_key_index
81
- @open_key_index ||= hs_connection.open_index(HS_INDEX, hs_connection_config[:database], table_name, "index_#{table_name}_on_key", 'value')
82
+ @open_key_index ||= begin
83
+ result = hs_connection.open_index(HS_INDEX, hs_connection_config[:database], table_name, "index_#{table_name}_on_key", 'value')
84
+ raise HandlerSocketError, result[1] if result[0] == -1
85
+ end
86
+ end
87
+
88
+ def self.hs_find_by_key(key)
89
+ result = hs_connection.execute_single(HS_INDEX, '=', [key])
90
+ if result[0] == -1
91
+ raise HandlerSocketError, result[1]
92
+ else
93
+ result[1][0].try(:[],0)
94
+ end
82
95
  end
83
96
  end
@@ -124,6 +124,13 @@ describe KeyValue do
124
124
  KeyValue['xxx'].should == false
125
125
  end
126
126
 
127
+ it "raises on hs error" do
128
+ KeyValue.hs_connection.should_receive(:execute_single).and_return [-1, 'wtf']
129
+ lambda{
130
+ KeyValue['xxx'].should == '123'
131
+ }.should raise_error('wtf')
132
+ end
133
+
127
134
  it "uses defaults" do
128
135
  KeyValue.send(:hs_connection_config).except(:username, :password).should == {
129
136
  :flags=>2,
data/spec/spec_helper.rb CHANGED
@@ -19,8 +19,8 @@ end
19
19
  ActiveRecord::Schema.define(:version => 1) do
20
20
  drop_table :key_values rescue nil
21
21
 
22
- create_table :key_values, :id => false do |t|
23
- t.string :key, :null => false,:primary => true
22
+ create_table :key_values do |t|
23
+ t.string :key, :null => false
24
24
  t.text :value, :null => false
25
25
  end
26
26
  add_index :key_values, :key, :unique => true
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: key_value
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 15
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 3
8
+ - 4
9
9
  - 0
10
- version: 0.3.0
10
+ version: 0.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Roman Heinrich
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-05-15 00:00:00 +02:00
19
+ date: 2011-05-17 00:00:00 +02:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency