riakpb 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ .DS_Store
2
+ *.tmproj
3
+ pkg
4
+ *.gem
5
+ .bundle
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ -cfs
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in riak-pbclient.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,35 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ riakpb (0.2.3)
5
+ activesupport (~> 3.0.0)
6
+ ruby_protobuf (~> 0.4.8)
7
+ yard (~> 0.6.4)
8
+
9
+ GEM
10
+ remote: http://rubygems.org/
11
+ specs:
12
+ activesupport (3.0.3)
13
+ diff-lcs (1.1.2)
14
+ i18n (0.5.0)
15
+ rspec (2.3.0)
16
+ rspec-core (~> 2.3.0)
17
+ rspec-expectations (~> 2.3.0)
18
+ rspec-mocks (~> 2.3.0)
19
+ rspec-core (2.3.1)
20
+ rspec-expectations (2.3.0)
21
+ diff-lcs (~> 1.1.2)
22
+ rspec-mocks (2.3.0)
23
+ ruby_protobuf (0.4.8)
24
+ yard (0.6.4)
25
+
26
+ PLATFORMS
27
+ ruby
28
+
29
+ DEPENDENCIES
30
+ activesupport (~> 3.0.0)
31
+ i18n (~> 0.5.0)
32
+ riakpb!
33
+ rspec (~> 2.3.0)
34
+ ruby_protobuf (~> 0.4.8)
35
+ yard (~> 0.6.4)
data/Rakefile CHANGED
@@ -1,76 +1,44 @@
1
- require 'rubygems'
2
- require 'rake/gempackagetask'
3
- require 'fileutils'
4
- require './lib/riakpb'
5
-
6
- gemspec = Gem::Specification.new do |gem|
7
- gem.name = "riakpb"
8
- gem.summary = %Q{riakpb is a protocol buffer client for Riakpb--the distributed database by Basho.}
9
- gem.description = %Q{riakpb is a protocol buffer client for Riakpb--the distributed database by Basho.}
10
- gem.version = Riakpb::VERSION
11
- gem.email = "me@inherentlylame.com"
12
- gem.homepage = "http://github.com/aitrus/riak-pbclient"
13
- gem.authors = ["Scott Gonyea"]
14
- gem.add_development_dependency "rspec", "~>2.0.0.beta.9"
15
- gem.add_dependency "activesupport", ">= 2.3.5"
16
- gem.add_dependency "ruby_protobuf", ">=0.4.4"
17
-
18
- files = FileList["**/*"]
19
- files.exclude /\.DS_Store/
20
- files.exclude /\#/
21
- files.exclude /~/
22
- files.exclude /\.swp/
23
- files.exclude '**/._*'
24
- files.exclude '**/*.orig'
25
- files.exclude '**/*.rej'
26
- files.exclude /^pkg/
27
- files.exclude 'riakpb.gemspec'
28
-
29
- gem.files = files.to_a
30
-
31
- gem.test_files = FileList["spec/**/*.rb"].to_a
32
- end
33
-
34
- # Gem packaging tasks
35
- Rake::GemPackageTask.new(gemspec) do |pkg|
36
- pkg.need_zip = false
37
- pkg.need_tar = false
38
- end
39
-
40
- task :gem => :gemspec
41
-
42
- desc %{Build the gemspec file.}
43
- task :gemspec do
44
- gemspec.validate
45
- File.open("#{gemspec.name}.gemspec", 'w'){|f| f.write gemspec.to_ruby }
46
- end
47
-
48
- desc %{Release the gem to RubyGems.org}
49
- task :release => :gem do
50
- "gem push pkg/#{gemspec.name}-#{gemspec.version}.gem"
51
- end
52
-
53
- require 'rspec/core'
54
- require 'rspec/core/rake_task'
55
-
56
- desc "Run Unit Specs Only"
57
- Rspec::Core::RakeTask.new(:spec) do |spec|
58
- spec.pattern = "spec/riakpb/**/*_spec.rb"
59
- end
60
-
61
- namespace :spec do
62
- desc "Run Integration Specs Only"
63
- Rspec::Core::RakeTask.new(:integration) do |spec|
64
- spec.pattern = "spec/integration/**/*_spec.rb"
65
- end
66
-
67
- desc "Run All Specs"
68
- Rspec::Core::RakeTask.new(:all) do |spec|
69
- spec.pattern = Rake::FileList["spec/**/*_spec.rb"]
70
- end
71
- end
72
-
73
- # TODO - want other tests/tasks run by default? Add them to the list
74
- # remove_task :default
75
- # task :default => [:spec, :features]
76
-
1
+ require 'bundler'
2
+
3
+ Bundler::GemHelper.install_tasks
4
+
5
+ require 'rspec/core'
6
+ require 'rspec/core/rake_task'
7
+
8
+
9
+ # task :release => :spec
10
+
11
+ desc "Run Specs"
12
+ Rspec::Core::RakeTask.new(:spec) do |spec|
13
+ spec.pattern = "spec/**/*_spec.rb"
14
+ spec.verbose = true
15
+ spec.rspec_opts = ['--color']
16
+ end
17
+
18
+ require 'yard'
19
+
20
+ desc "Generate YARD docs"
21
+ YARD::Rake::YardocTask.new(:yard) do |t|
22
+ t.files += ['lib/**/*.rb']
23
+ end
24
+
25
+ desc "Run Unit Specs Only"
26
+ Rspec::Core::RakeTask.new(:spec) do |spec|
27
+ spec.pattern = "spec/riakpb/**/*_spec.rb"
28
+ end
29
+
30
+ namespace :spec do
31
+ desc "Run Integration Specs Only"
32
+ Rspec::Core::RakeTask.new(:integration) do |spec|
33
+ spec.pattern = "spec/integration/**/*_spec.rb"
34
+ end
35
+
36
+ desc "Run All Specs"
37
+ Rspec::Core::RakeTask.new(:all) do |spec|
38
+ spec.pattern = Rake::FileList["spec/**/*_spec.rb"]
39
+ end
40
+ end
41
+
42
+ # TODO - want other tests/tasks run by default? Add them to the list
43
+ # remove_task :default
44
+ # task :default => [:spec, :features]
@@ -0,0 +1,26 @@
1
+ require 'rubygems' if RUBY_VERSION < '1.9'
2
+ require 'bundler'
3
+
4
+ Bundler.require
5
+
6
+ require 'csv'
7
+ require 'benchmark'
8
+
9
+ @noisy = ARGV.grep("-q").none?
10
+
11
+ Benchmark.bmbm do |x|
12
+ x.report do
13
+
14
+ client = Riakpb::Client.new
15
+ bucket = client["goog"]
16
+
17
+ CSV.foreach('goog.csv', :headers => true) do |row|
18
+ @noisy && puts(row.first[1].to_s)
19
+
20
+ key = bucket[row.first[1].to_s]
21
+ key.content.value = Hash[row.to_a]
22
+ key.save
23
+ end
24
+
25
+ end
26
+ end
@@ -1,7 +1,7 @@
1
1
  # Special thanks to:
2
2
  #
3
3
  # - Radar in #ruby-lang
4
- # - xnotdotorg / arilerner[at]gmail.com -
4
+ # - xnotdotorg / arilerner[at]gmail.com -
5
5
  # http://blog.xnot.org/2008/11/16/communicating-from-ruby-to-erlang/
6
6
  #
7
7
  require 'socket'
@@ -67,14 +67,14 @@ module Riakpb
67
67
  @set_c_id_req ||= assemble_request( Util::MessageCode::SET_CLIENT_ID_REQUEST,
68
68
  @set_client_id.serialize_to_string)
69
69
 
70
- socket.send(@set_c_id_req, 0)
71
- set_c_id_resp = socket.recv(@limit)
70
+ socket.write(@set_c_id_req)
71
+ set_c_id_resp = socket.sysread(@limit)
72
72
 
73
73
  resp_code, resp_msg = decode_message(set_c_id_resp)
74
74
 
75
75
  return(resp_code == Util::MessageCode::SET_CLIENT_ID_RESPONSE)
76
76
  end
77
-
77
+
78
78
  # Sends the request to the riak node
79
79
  # @param [Fixnum] mc The message code that identifies the request
80
80
  # @param [Protobuf::Message] pb_msg The protobuf message, if applicable, for the message code
@@ -93,8 +93,8 @@ module Riakpb
93
93
  @req_message = assemble_request mc
94
94
  end
95
95
 
96
- socket.send(@req_message, 0)
97
- self.parse_response socket.recv(@limit)
96
+ socket.write(@req_message)
97
+ self.parse_response socket.sysread(@limit)
98
98
 
99
99
  end while(false == (@response[:done] rescue true))
100
100
 
@@ -126,7 +126,7 @@ module Riakpb
126
126
  raise FailedExchange.new(MC_RESPONSE_FOR[@req_message_code], @resp_message_codes, response_chunk, "failed_request")
127
127
  end
128
128
  end
129
-
129
+
130
130
  if response_chunk.size > 0
131
131
  @response.parse_from_string response_chunk
132
132
  end
@@ -0,0 +1,3 @@
1
+ module Riakpb
2
+ VERSION = '0.2.3'
3
+ end
data/lib/riakpb.rb CHANGED
@@ -9,8 +9,6 @@ require 'base64'
9
9
  require 'riakpb/client_pb'
10
10
 
11
11
  module Riakpb
12
- VERSION = '0.2.2'
13
-
14
12
  # Domain objects
15
13
  autoload :I18n, 'riakpb/i18n'
16
14
  autoload :Client, 'riakpb/client'
data/load_stocks.rb CHANGED
@@ -1,11 +1,19 @@
1
- require 'riakpb'
1
+ require 'rubygems' if RUBY_VERSION < '1.9'
2
+ require 'bundler'
3
+
4
+ Bundler.require
5
+
2
6
  require 'csv'
7
+ require 'benchmark'
8
+
9
+ @noisy = ARGV.grep("-q").none?
3
10
 
4
11
  client = Riakpb::Client.new
5
12
  bucket = client["goog"]
6
13
 
7
14
  CSV.foreach('goog.csv', :headers => true) do |row|
8
- puts row.first[1].to_s
15
+ @noisy && puts(row.first[1].to_s)
16
+
9
17
  key = bucket[row.first[1].to_s]
10
18
  key.content.value = Hash[row.to_a]
11
19
  key.save
@@ -0,0 +1,157 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>currentDocument</key>
6
+ <string>lib/riakpb/client/rpc.rb</string>
7
+ <key>documents</key>
8
+ <array>
9
+ <dict>
10
+ <key>expanded</key>
11
+ <true/>
12
+ <key>name</key>
13
+ <string>riak-pbclient</string>
14
+ <key>regexFileFilter</key>
15
+ <string>!.*(\.DS_Store)</string>
16
+ <key>regexFolderFilter</key>
17
+ <string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
18
+ <key>selected</key>
19
+ <true/>
20
+ <key>sourceDirectory</key>
21
+ <string></string>
22
+ </dict>
23
+ </array>
24
+ <key>fileHierarchyDrawerWidth</key>
25
+ <integer>200</integer>
26
+ <key>metaData</key>
27
+ <dict>
28
+ <key>.rspec</key>
29
+ <dict>
30
+ <key>caret</key>
31
+ <dict>
32
+ <key>column</key>
33
+ <integer>0</integer>
34
+ <key>line</key>
35
+ <integer>1</integer>
36
+ </dict>
37
+ <key>firstVisibleColumn</key>
38
+ <integer>0</integer>
39
+ <key>firstVisibleLine</key>
40
+ <integer>0</integer>
41
+ </dict>
42
+ <key>Gemfile</key>
43
+ <dict>
44
+ <key>caret</key>
45
+ <dict>
46
+ <key>column</key>
47
+ <integer>0</integer>
48
+ <key>line</key>
49
+ <integer>0</integer>
50
+ </dict>
51
+ <key>firstVisibleColumn</key>
52
+ <integer>0</integer>
53
+ <key>firstVisibleLine</key>
54
+ <integer>0</integer>
55
+ </dict>
56
+ <key>Rakefile</key>
57
+ <dict>
58
+ <key>caret</key>
59
+ <dict>
60
+ <key>column</key>
61
+ <integer>0</integer>
62
+ <key>line</key>
63
+ <integer>23</integer>
64
+ </dict>
65
+ <key>firstVisibleColumn</key>
66
+ <integer>0</integer>
67
+ <key>firstVisibleLine</key>
68
+ <integer>0</integer>
69
+ </dict>
70
+ <key>lib/riakpb.rb</key>
71
+ <dict>
72
+ <key>caret</key>
73
+ <dict>
74
+ <key>column</key>
75
+ <integer>13</integer>
76
+ <key>line</key>
77
+ <integer>10</integer>
78
+ </dict>
79
+ <key>firstVisibleColumn</key>
80
+ <integer>0</integer>
81
+ <key>firstVisibleLine</key>
82
+ <integer>0</integer>
83
+ </dict>
84
+ <key>lib/riakpb/client/rpc.rb</key>
85
+ <dict>
86
+ <key>caret</key>
87
+ <dict>
88
+ <key>column</key>
89
+ <integer>79</integer>
90
+ <key>line</key>
91
+ <integer>64</integer>
92
+ </dict>
93
+ <key>firstVisibleColumn</key>
94
+ <integer>0</integer>
95
+ <key>firstVisibleLine</key>
96
+ <integer>0</integer>
97
+ </dict>
98
+ <key>load_stocks.rb</key>
99
+ <dict>
100
+ <key>caret</key>
101
+ <dict>
102
+ <key>column</key>
103
+ <integer>0</integer>
104
+ <key>line</key>
105
+ <integer>20</integer>
106
+ </dict>
107
+ <key>firstVisibleColumn</key>
108
+ <integer>0</integer>
109
+ <key>firstVisibleLine</key>
110
+ <integer>0</integer>
111
+ </dict>
112
+ <key>riak-pbclient.tmproj</key>
113
+ <dict>
114
+ <key>caret</key>
115
+ <dict>
116
+ <key>column</key>
117
+ <integer>0</integer>
118
+ <key>line</key>
119
+ <integer>0</integer>
120
+ </dict>
121
+ <key>firstVisibleColumn</key>
122
+ <integer>0</integer>
123
+ <key>firstVisibleLine</key>
124
+ <integer>0</integer>
125
+ </dict>
126
+ <key>riakpb.gemspec</key>
127
+ <dict>
128
+ <key>caret</key>
129
+ <dict>
130
+ <key>column</key>
131
+ <integer>0</integer>
132
+ <key>line</key>
133
+ <integer>28</integer>
134
+ </dict>
135
+ <key>firstVisibleColumn</key>
136
+ <integer>0</integer>
137
+ <key>firstVisibleLine</key>
138
+ <integer>0</integer>
139
+ </dict>
140
+ </dict>
141
+ <key>openDocuments</key>
142
+ <array>
143
+ <string>Rakefile</string>
144
+ <string>riakpb.gemspec</string>
145
+ <string>load_stocks.rb</string>
146
+ <string>lib/riakpb.rb</string>
147
+ <string>lib/riakpb/client/rpc.rb</string>
148
+ <string>Gemfile</string>
149
+ <string>.rspec</string>
150
+ <string>riak-pbclient.tmproj</string>
151
+ </array>
152
+ <key>showFileHierarchyDrawer</key>
153
+ <true/>
154
+ <key>windowFrame</key>
155
+ <string>{{61, 282}, {1246, 746}}</string>
156
+ </dict>
157
+ </plist>
data/riakpb.gemspec ADDED
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "riakpb/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "riakpb"
7
+ s.version = Riakpb::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Scott Gonyea"]
10
+ s.email = ["me@sgonyea.com"]
11
+ s.homepage = %q{http://github.com/sgonyea/riak-pbclient}
12
+ s.summary = %q{riakpb is a protocol buffer client for Riak--the distributed database by Basho.}
13
+ s.description = %q{riakpb is an all-ruby protocol buffer client for Riak--the distributed database by Basho.}
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_dependency 'activesupport', '~> 3.0.0'
22
+ s.add_dependency 'ruby_protobuf', '~> 0.4.8'
23
+
24
+ s.add_dependency 'yard', '~> 0.6.4'
25
+
26
+ s.add_development_dependency 'rspec', '~> 2.3.0'
27
+ s.add_development_dependency 'i18n', '~> 0.5.0'
28
+ end
@@ -0,0 +1,105 @@
1
+ require File.expand_path("../spec_helper", File.dirname(__FILE__))
2
+
3
+ describe Riakpb::Bucket do
4
+ describe "when directly initializing" do
5
+ before :each do
6
+ @client = Riakpb::Client.new
7
+ end
8
+
9
+ it "should default with the client and name, and empty n_val or allow_mult" do
10
+ bucket = Riakpb::Bucket.new(@client, "test")
11
+ bucket.client.should == @client
12
+ bucket.name.should == "test"
13
+ bucket.n_val.should == nil
14
+ bucket.allow_mult.should == nil
15
+ end
16
+
17
+ it "should correctly accept an n_val" do
18
+ bucket = Riakpb::Bucket.new(@client, "test")
19
+ bucket.n_val = 5
20
+ bucket.n_val.should be_kind_of(Fixnum)
21
+ lambda { bucket.n_val="5" }.should raise_error(ArgumentError)
22
+ end
23
+
24
+ it "should correctly accept an allow_mult" do
25
+ bucket = Riakpb::Bucket.new(@client, "test")
26
+ bucket.allow_mult = true
27
+ bucket.allow_mult.should be_kind_of(TrueClass)
28
+ bucket.allow_mult = false
29
+ bucket.allow_mult.should be_kind_of(FalseClass)
30
+ lambda { bucket.allow_mult="no" }.should raise_error(ArgumentError)
31
+ end
32
+ end # describe "when directly initializing"
33
+
34
+ describe "when initialized from the Client" do
35
+ before :each do
36
+ @client = Riakpb::Client.new
37
+ @client.rpc.stub!(:request).and_return(nil)
38
+ end
39
+
40
+ it "should have set the properties" do
41
+ @client.rpc.stub!(:request).with(
42
+ Riakpb::Util::MessageCode::GET_BUCKET_REQUEST,
43
+ Riakpb::RpbGetBucketReq.new(:bucket => "goog")
44
+ ).and_return(
45
+ Riakpb::RpbGetBucketResp.new(
46
+ { :props => {
47
+ :allow_mult => false,
48
+ :n_val => 3
49
+ }
50
+ }
51
+ ))
52
+ bucket = @client["goog"]
53
+ bucket.should be_kind_of(Riakpb::Bucket)
54
+ bucket.client.should == @client
55
+ bucket.name.should == "goog"
56
+ bucket.n_val.should == 3
57
+ bucket.allow_mult.should == false
58
+ end
59
+ end # describe "when initialized from the Client"
60
+
61
+ describe "key retrieval" do
62
+ before :each do
63
+ @client = Riakpb::Client.new
64
+ @client.rpc.stub!(:request).with(
65
+ Riakpb::Util::MessageCode::GET_BUCKET_REQUEST,
66
+ Riakpb::RpbGetBucketReq.new(:bucket => "goog")
67
+ ).and_return(
68
+ Riakpb::RpbGetBucketResp.new(
69
+ { :props => {
70
+ :allow_mult => false,
71
+ :n_val => 3
72
+ }
73
+ }
74
+ ))
75
+ @bucket = @client["goog"]
76
+ end
77
+
78
+ it "should list the keys within the bucket" do
79
+ @client.rpc.stub!(:request).with(
80
+ Riakpb::Util::MessageCode::LIST_KEYS_REQUEST,
81
+ Riakpb::RpbListKeysReq.new(:bucket => "goog")
82
+ ).and_return(
83
+ Riakpb::RpbListKeysResp.new(
84
+ { :keys => ["2010-04-12", "2008-01-10", "2006-06-06"],
85
+ :done => true
86
+ }
87
+ ))
88
+ @bucket.keys.should be_kind_of(Protobuf::Field::FieldArray)
89
+ end
90
+
91
+ it "should return a key, when requested" do
92
+ @client.rpc.stub!(:request).with(
93
+ Riakpb::Util::MessageCode::GET_REQUEST,
94
+ Riakpb::RpbGetReq.new(:bucket => "goog", :key => "2010-04-12", :r => nil)
95
+ ).and_return(
96
+ Riakpb::RpbGetResp.new(
97
+ { :content => [],
98
+ :vclock => ""
99
+ }
100
+ ))
101
+ @bucket["2010-04-12"].should be_kind_of(Riakpb::Key)
102
+ end
103
+ end # describe "key retrieval"
104
+
105
+ end # Riakpb::Client