riak-client 0.9.8 → 1.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. data/.gitignore +32 -0
  2. data/Gemfile +17 -11
  3. data/Guardfile +14 -0
  4. data/Rakefile +18 -44
  5. data/erl_src/riak_kv_test_backend.beam +0 -0
  6. data/erl_src/riak_kv_test_backend.erl +461 -128
  7. data/erl_src/riak_search_test_backend.beam +0 -0
  8. data/erl_src/riak_search_test_backend.erl +175 -0
  9. data/lib/active_support/cache/riak_store.rb +0 -13
  10. data/lib/riak.rb +11 -16
  11. data/lib/riak/bucket.rb +59 -41
  12. data/lib/riak/cache_store.rb +1 -14
  13. data/lib/riak/client.rb +145 -73
  14. data/lib/riak/client/beefcake/messages.rb +36 -31
  15. data/lib/riak/client/beefcake/object_methods.rb +27 -19
  16. data/lib/riak/client/beefcake_protobuffs_backend.rb +27 -33
  17. data/lib/riak/client/excon_backend.rb +0 -13
  18. data/lib/riak/client/http_backend.rb +95 -60
  19. data/lib/riak/client/http_backend/configuration.rb +144 -19
  20. data/lib/riak/client/http_backend/key_streamer.rb +1 -14
  21. data/lib/riak/client/http_backend/object_methods.rb +16 -16
  22. data/lib/riak/client/http_backend/request_headers.rb +0 -13
  23. data/lib/riak/client/http_backend/transport_methods.rb +26 -56
  24. data/lib/riak/client/net_http_backend.rb +11 -13
  25. data/lib/riak/client/protobuffs_backend.rb +21 -19
  26. data/lib/riak/client/pump.rb +1 -15
  27. data/lib/riak/client/search.rb +85 -0
  28. data/lib/riak/cluster.rb +151 -0
  29. data/lib/riak/core_ext.rb +1 -0
  30. data/lib/riak/core_ext/deep_dup.rb +13 -0
  31. data/lib/riak/core_ext/json.rb +15 -0
  32. data/lib/riak/core_ext/stringify_keys.rb +1 -1
  33. data/lib/riak/core_ext/symbolize_keys.rb +1 -1
  34. data/lib/riak/encoding.rb +6 -0
  35. data/lib/riak/failed_request.rb +2 -15
  36. data/lib/riak/i18n.rb +0 -13
  37. data/lib/riak/json.rb +19 -8
  38. data/lib/riak/link.rb +18 -20
  39. data/lib/riak/locale/en.yml +13 -16
  40. data/lib/riak/map_reduce.rb +40 -20
  41. data/lib/riak/map_reduce/filter_builder.rb +14 -18
  42. data/lib/riak/map_reduce/phase.rb +0 -13
  43. data/lib/riak/map_reduce_error.rb +0 -13
  44. data/lib/riak/node.rb +38 -0
  45. data/lib/riak/node/configuration.rb +286 -0
  46. data/lib/riak/node/console.rb +139 -0
  47. data/lib/riak/node/control.rb +207 -0
  48. data/lib/riak/node/defaults.rb +70 -0
  49. data/lib/riak/node/generation.rb +99 -0
  50. data/lib/riak/node/log.rb +34 -0
  51. data/lib/riak/node/version.rb +37 -0
  52. data/lib/riak/robject.rb +45 -41
  53. data/lib/riak/search.rb +2 -161
  54. data/lib/riak/serializers.rb +74 -0
  55. data/lib/riak/stamp.rb +77 -0
  56. data/lib/riak/test_server.rb +56 -220
  57. data/lib/riak/util/escape.rb +58 -17
  58. data/lib/riak/util/headers.rb +2 -15
  59. data/lib/riak/util/multipart.rb +0 -13
  60. data/lib/riak/util/multipart/stream_parser.rb +0 -13
  61. data/lib/riak/util/tcp_socket_extensions.rb +1 -14
  62. data/lib/riak/util/translation.rb +0 -13
  63. data/lib/riak/version.rb +3 -0
  64. data/lib/riak/walk_spec.rb +0 -13
  65. data/riak-client.gemspec +27 -47
  66. data/spec/fixtures/multipart-with-marked-tombstones.txt +17 -0
  67. data/spec/fixtures/multipart-with-unmarked-tombstone.txt +16 -0
  68. data/spec/integration/riak/cache_store_spec.rb +2 -40
  69. data/spec/integration/riak/cluster_spec.rb +88 -0
  70. data/spec/integration/riak/http_backends_spec.rb +6 -30
  71. data/spec/integration/riak/node_spec.rb +184 -0
  72. data/spec/integration/riak/protobuffs_backends_spec.rb +2 -26
  73. data/spec/integration/riak/test_server_spec.rb +31 -167
  74. data/spec/riak/beefcake_protobuffs_backend_spec.rb +5 -4
  75. data/spec/riak/bucket_spec.rb +26 -36
  76. data/spec/riak/client_spec.rb +44 -38
  77. data/spec/riak/escape_spec.rb +56 -30
  78. data/spec/riak/excon_backend_spec.rb +4 -17
  79. data/spec/riak/headers_spec.rb +1 -14
  80. data/spec/riak/http_backend/configuration_spec.rb +211 -34
  81. data/spec/riak/http_backend/object_methods_spec.rb +52 -18
  82. data/spec/riak/http_backend/transport_methods_spec.rb +5 -38
  83. data/spec/riak/http_backend_spec.rb +84 -78
  84. data/spec/riak/link_spec.rb +19 -18
  85. data/spec/riak/map_reduce/filter_builder_spec.rb +1 -14
  86. data/spec/riak/map_reduce/phase_spec.rb +1 -14
  87. data/spec/riak/map_reduce_spec.rb +141 -43
  88. data/spec/riak/multipart_spec.rb +1 -14
  89. data/spec/riak/net_http_backend_spec.rb +2 -15
  90. data/spec/riak/robject_spec.rb +129 -97
  91. data/spec/riak/search_spec.rb +45 -62
  92. data/spec/riak/serializers_spec.rb +93 -0
  93. data/spec/riak/stamp_spec.rb +54 -0
  94. data/spec/riak/stream_parser_spec.rb +3 -16
  95. data/spec/riak/walk_spec_spec.rb +1 -14
  96. data/spec/spec_helper.rb +22 -27
  97. data/spec/support/http_backend_implementation_examples.rb +49 -79
  98. data/spec/support/integration_setup.rb +10 -0
  99. data/spec/support/mock_server.rb +0 -14
  100. data/spec/support/mocks.rb +0 -13
  101. data/spec/support/test_server.rb +30 -0
  102. data/spec/support/test_server.yml.example +14 -2
  103. data/spec/support/unified_backend_examples.rb +36 -27
  104. metadata +100 -31
  105. data/lib/riak/client/curb_backend.rb +0 -89
  106. data/spec/riak/curb_backend_spec.rb +0 -76
@@ -1,89 +0,0 @@
1
- # Copyright 2010 Sean Cribbs, Sonian Inc., and Basho Technologies, Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- require 'thread'
16
- require 'riak/client/http_backend'
17
- require 'riak/client/pump'
18
- require 'riak/failed_request'
19
-
20
- module Riak
21
- class Client
22
- # An HTTP backend for Riak::Client that uses the 'curb' library/gem.
23
- # Conforms to the Riak::Client::HTTPBackend interface.
24
- class CurbBackend < HTTPBackend
25
- def self.configured?
26
- begin
27
- require 'curb'
28
- true
29
- rescue LoadError
30
- false
31
- end
32
- end
33
-
34
- private
35
- def perform(method, uri, headers, expect, data=nil, &block)
36
- # Setup
37
- curl.headers = RequestHeaders.new(headers).to_a
38
- curl.url = uri.to_s
39
- response_headers.initialize_http_header(nil)
40
- if block_given?
41
- curl.on_body(&Pump.new(block))
42
- else
43
- curl.on_body
44
- end
45
- # Perform
46
- case method
47
- when :post
48
- data = data.read if data.respond_to?(:read)
49
- curl.http_post(data)
50
- when :put
51
- # Hacks around limitations in curb's PUT semantics
52
- _headers, curl.headers = curl.headers, {}
53
- curl.put_data = data
54
- curl.headers = RequestHeaders.new(curl.headers).to_a + _headers
55
- curl.http("PUT")
56
- else
57
- curl.send("http_#{method}")
58
- end
59
-
60
- # Verify
61
- if valid_response?(expect, curl.response_code)
62
- result = { :headers => response_headers.to_hash, :code => curl.response_code.to_i }
63
- if return_body?(method, curl.response_code, block_given?)
64
- result[:body] = curl.body_str
65
- end
66
- result
67
- else
68
- raise HTTPFailedRequest.new(method, expect, curl.response_code, response_headers.to_hash, curl.body_str)
69
- end
70
- end
71
-
72
- def curl
73
- Thread.current[:curl_easy_handle] ||= Curl::Easy.new.tap do |c|
74
- configure_ssl(c) if @client.ssl_enabled?
75
-
76
- c.follow_location = false
77
- c.on_header do |header_line|
78
- response_headers.parse(header_line)
79
- header_line.size
80
- end
81
- end
82
- end
83
-
84
- def configure_ssl(curl)
85
- curl.ssl_verify_peer = @client.ssl_options[:verify_mode] == "peer"
86
- end
87
- end
88
- end
89
- end
@@ -1,76 +0,0 @@
1
- # Copyright 2010 Sean Cribbs, Sonian Inc., and Basho Technologies, Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
- require File.expand_path("../spec_helper", File.dirname(__FILE__))
15
-
16
- begin
17
- require 'curb'
18
- rescue LoadError
19
- warn "Skipping CurbBackend specs, curb library not found."
20
- else
21
- $mock_server = DrbMockServer
22
- $mock_server.maybe_start
23
-
24
- describe Riak::Client::CurbBackend do
25
- def setup_http_mock(method, uri, options={})
26
- method = method.to_s.upcase
27
- uri = URI.parse(uri)
28
- path = uri.path || "/"
29
- query = uri.query || ""
30
- status = options[:status] ? Array(options[:status]).first.to_i : 200
31
- body = options[:body] || []
32
- headers = options[:headers] || {}
33
- headers['Content-Type'] ||= "text/plain"
34
- @_mock_set = [status, headers, method, path, query, body]
35
- $mock_server.expect(*@_mock_set)
36
- end
37
-
38
- before :each do
39
- @client = Riak::Client.new(:http_port => $mock_server.port, :http_backend => :Curb) # Point to our mock
40
- @backend = @client.http
41
- @_mock_set = false
42
- end
43
-
44
- after :each do
45
- if @_mock_set
46
- $mock_server.satisfied.should be_true("Expected #{@_mock_set.inspect}, failed")
47
- end
48
- Thread.current[:curl_easy_handle] = nil
49
- end
50
-
51
- it_should_behave_like "HTTP backend"
52
-
53
- it "should split long headers into 8KB chunks" do
54
- setup_http_mock(:put, @backend.path("/riak/","foo").to_s, :body => "ok")
55
- lambda do
56
- @backend.put(200, "/riak/", "foo", "body",{"Long-Header" => (["12345678"*10]*100).join(", ") })
57
- headers = @backend.send(:curl).headers
58
- headers.should be_kind_of(Array)
59
- headers.select {|h| h =~ /^Long-Header:/ }.should have(2).items
60
- headers.select {|h| h =~ /^Long-Header:/ }.should be_all {|h| h.size < 8192 }
61
- end.should_not raise_error
62
- end
63
-
64
- it "should support IO objects as the request body" do
65
- file = File.open(File.expand_path("../../fixtures/cat.jpg", __FILE__))
66
- lambda do
67
- setup_http_mock(:put, @backend.path("/riak/","foo").to_s, :body => "ok")
68
- @backend.put(200, "/riak/", "foo", file,{})
69
- end.should_not raise_error
70
- lambda do
71
- setup_http_mock(:post, @backend.path("/riak/","foo").to_s, :body => "ok")
72
- @backend.post(200, "/riak/", "foo", file, {})
73
- end.should_not raise_error
74
- end
75
- end
76
- end