riak-client 2.2.0.pre1 → 2.2.0

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.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Gemfile +0 -2
  4. data/README.markdown +11 -7
  5. data/RELEASE_NOTES.md +29 -2
  6. data/Rakefile +5 -3
  7. data/lib/riak/bucket.rb +55 -23
  8. data/lib/riak/bucket_properties.rb +8 -1
  9. data/lib/riak/bucket_type.rb +29 -0
  10. data/lib/riak/bucket_typed/bucket.rb +15 -7
  11. data/lib/riak/client.rb +24 -8
  12. data/lib/riak/client/beefcake/bucket_properties_operator.rb +8 -8
  13. data/lib/riak/client/beefcake/crdt/set_loader.rb +1 -1
  14. data/lib/riak/client/beefcake/crdt_loader.rb +1 -1
  15. data/lib/riak/client/beefcake/crdt_operator.rb +9 -9
  16. data/lib/riak/client/beefcake/message_codes.rb +4 -0
  17. data/lib/riak/client/beefcake/message_overlay.rb +4 -0
  18. data/lib/riak/client/beefcake/messages.rb +35 -5
  19. data/lib/riak/client/beefcake/object_methods.rb +21 -13
  20. data/lib/riak/client/beefcake/protocol.rb +7 -7
  21. data/lib/riak/client/beefcake/socket.rb +2 -2
  22. data/lib/riak/client/beefcake_protobuffs_backend.rb +58 -33
  23. data/lib/riak/client/protobuffs_backend.rb +5 -5
  24. data/lib/riak/client/yokozuna.rb +3 -3
  25. data/lib/riak/core_ext/deep_dup.rb +1 -1
  26. data/lib/riak/counter.rb +10 -10
  27. data/lib/riak/crdt/base.rb +39 -21
  28. data/lib/riak/crdt/batch_counter.rb +5 -5
  29. data/lib/riak/crdt/batch_map.rb +2 -2
  30. data/lib/riak/crdt/counter.rb +7 -7
  31. data/lib/riak/crdt/inner_counter.rb +4 -4
  32. data/lib/riak/crdt/inner_flag.rb +3 -3
  33. data/lib/riak/crdt/inner_map.rb +1 -1
  34. data/lib/riak/crdt/inner_register.rb +1 -1
  35. data/lib/riak/crdt/inner_set.rb +5 -5
  36. data/lib/riak/crdt/map.rb +9 -9
  37. data/lib/riak/crdt/set.rb +10 -10
  38. data/lib/riak/crdt/typed_collection.rb +39 -36
  39. data/lib/riak/errors/base.rb +1 -1
  40. data/lib/riak/errors/crdt_error.rb +20 -0
  41. data/lib/riak/errors/search_error.rb +6 -0
  42. data/lib/riak/index_collection.rb +1 -1
  43. data/lib/riak/link.rb +5 -3
  44. data/lib/riak/locale/en.yml +5 -1
  45. data/lib/riak/map_reduce.rb +7 -7
  46. data/lib/riak/map_reduce/filter_builder.rb +2 -2
  47. data/lib/riak/map_reduce/phase.rb +2 -2
  48. data/lib/riak/preflist_item.rb +7 -0
  49. data/lib/riak/rcontent.rb +8 -8
  50. data/lib/riak/robject.rb +27 -14
  51. data/lib/riak/search.rb +1 -0
  52. data/lib/riak/search/index.rb +17 -3
  53. data/lib/riak/search/query.rb +14 -6
  54. data/lib/riak/search/result_collection.rb +56 -3
  55. data/lib/riak/search/result_document.rb +71 -1
  56. data/lib/riak/search/schema.rb +6 -6
  57. data/lib/riak/secondary_index.rb +20 -12
  58. data/lib/riak/serializers.rb +0 -1
  59. data/lib/riak/util/escape.rb +2 -2
  60. data/lib/riak/util/translation.rb +1 -2
  61. data/lib/riak/version.rb +1 -1
  62. data/lib/riak/walk_spec.rb +67 -32
  63. data/riak-client.gemspec +5 -4
  64. data/spec/integration/riak/bucket_types_spec.rb +35 -5
  65. data/spec/integration/riak/conflict_resolution_spec.rb +1 -1
  66. data/spec/integration/riak/counters_spec.rb +1 -1
  67. data/spec/integration/riak/crdt/configuration_spec.rb +37 -0
  68. data/spec/integration/riak/crdt_search_spec.rb +176 -0
  69. data/spec/integration/riak/crdt_spec.rb +9 -33
  70. data/spec/integration/riak/crdt_validation/map_spec.rb +4 -4
  71. data/spec/integration/riak/crdt_validation/set_spec.rb +13 -13
  72. data/spec/integration/riak/preflist_spec.rb +31 -0
  73. data/spec/integration/riak/protobuffs/interrupted_request_spec.rb +2 -2
  74. data/spec/integration/riak/protobuffs_backends_spec.rb +9 -2
  75. data/spec/integration/riak/search_spec.rb +3 -3
  76. data/spec/integration/riak/secondary_index_spec.rb +3 -3
  77. data/spec/integration/riak/security_spec.rb +7 -7
  78. data/spec/integration/yokozuna/queries_spec.rb +1 -1
  79. data/spec/riak/beefcake_protobuffs_backend/bucket_properties_operator_spec.rb +9 -9
  80. data/spec/riak/beefcake_protobuffs_backend/crdt_operator_spec.rb +9 -9
  81. data/spec/riak/beefcake_protobuffs_backend/protocol_spec.rb +5 -5
  82. data/spec/riak/beefcake_protobuffs_backend_spec.rb +8 -8
  83. data/spec/riak/bucket_properties_spec.rb +27 -6
  84. data/spec/riak/bucket_spec.rb +5 -5
  85. data/spec/riak/bucket_type_spec.rb +21 -5
  86. data/spec/riak/bucket_typed/bucket_spec.rb +62 -0
  87. data/spec/riak/client_spec.rb +36 -18
  88. data/spec/riak/counter_spec.rb +4 -4
  89. data/spec/riak/crdt/counter_spec.rb +2 -2
  90. data/spec/riak/crdt/inner_flag_spec.rb +2 -2
  91. data/spec/riak/crdt/inner_map_spec.rb +4 -4
  92. data/spec/riak/crdt/inner_register_spec.rb +1 -1
  93. data/spec/riak/crdt/map_spec.rb +4 -4
  94. data/spec/riak/crdt/shared_examples.rb +5 -5
  95. data/spec/riak/crdt/typed_collection_spec.rb +21 -21
  96. data/spec/riak/map_reduce/filter_builder_spec.rb +2 -2
  97. data/spec/riak/map_reduce/phase_spec.rb +4 -4
  98. data/spec/riak/map_reduce_spec.rb +60 -42
  99. data/spec/riak/multiget_spec.rb +2 -2
  100. data/spec/riak/robject_spec.rb +55 -14
  101. data/spec/riak/search/index_spec.rb +12 -2
  102. data/spec/riak/search/query_spec.rb +4 -4
  103. data/spec/riak/search/result_collection_spec.rb +6 -4
  104. data/spec/riak/search/result_document_spec.rb +52 -9
  105. data/spec/riak/search/schema_spec.rb +2 -2
  106. data/spec/riak/secondary_index_spec.rb +6 -6
  107. data/spec/riak/serializers_spec.rb +27 -10
  108. data/spec/riak/walk_spec_spec.rb +10 -6
  109. data/spec/spec_helper.rb +11 -2
  110. data/spec/support/crdt_search_config.rb +112 -0
  111. data/spec/support/crdt_search_fixtures.rb +42 -0
  112. data/spec/support/search_config.rb +7 -5
  113. data/spec/support/search_corpus_setup.rb +2 -2
  114. data/spec/support/test_client.rb +2 -2
  115. data/spec/support/unified_backend_examples.rb +5 -5
  116. data/spec/support/version_filter.rb +5 -3
  117. data/spec/support/wait_until.rb +9 -3
  118. metadata +36 -13
  119. data/spec/riak/bucket_typed/bucket.rb +0 -43
@@ -11,7 +11,7 @@ describe Riak::MapReduce::FilterBuilder do
11
11
  it "adds filters to the list" do
12
12
  subject.to_lower
13
13
  subject.similar_to("ripple", 3)
14
- expect(subject.to_a).to eq([[:to_lower],[:similar_to, "ripple", 3]])
14
+ expect(subject.to_a).to eq([[:to_lower], [:similar_to, "ripple", 3]])
15
15
  end
16
16
 
17
17
  it "adds a logical operation with a block" do
@@ -19,7 +19,7 @@ describe Riak::MapReduce::FilterBuilder do
19
19
  starts_with "foo"
20
20
  ends_with "bar"
21
21
  end
22
- expect(subject.to_a).to eq([[:or, [[:starts_with, "foo"],[:ends_with, "bar"]]]])
22
+ expect(subject.to_a).to eq([[:or, [[:starts_with, "foo"], [:ends_with, "bar"]]]])
23
23
  end
24
24
 
25
25
  it "raises an error on a filter arity mismatch" do
@@ -14,9 +14,9 @@ describe Riak::MapReduce::Phase do
14
14
  end
15
15
 
16
16
  it "initializes with a type and an MF" do
17
- phase = Riak::MapReduce::Phase.new(:type => :map, :function => ["module", "function"], :language => "erlang")
17
+ phase = Riak::MapReduce::Phase.new(:type => :map, :function => %w(module function), :language => "erlang")
18
18
  expect(phase.type).to eq(:map)
19
- expect(phase.function).to eq(["module", "function"])
19
+ expect(phase.function).to eq(%w(module function))
20
20
  expect(phase.language).to eq("erlang")
21
21
  end
22
22
 
@@ -28,7 +28,7 @@ describe Riak::MapReduce::Phase do
28
28
  end
29
29
 
30
30
  it "assumes the language is erlang when the function is an array" do
31
- phase = Riak::MapReduce::Phase.new(:type => :map, :function => ["module", "function"])
31
+ phase = Riak::MapReduce::Phase.new(:type => :map, :function => %w(module function))
32
32
  expect(phase.language).to eq("erlang")
33
33
  end
34
34
 
@@ -100,7 +100,7 @@ describe Riak::MapReduce::Phase do
100
100
  end
101
101
 
102
102
  it "includes the module and function when invoking an Erlang function" do
103
- @phase.function = ["riak_mapreduce", "mapreduce_fun"]
103
+ @phase.function = %w(riak_mapreduce mapreduce_fun)
104
104
  expect(@phase.to_json).to include('"module":"riak_mapreduce"')
105
105
  expect(@phase.to_json).to include('"function":"mapreduce_fun"')
106
106
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Riak::MapReduce do
4
-
4
+
5
5
  let(:backend){ double 'Backend' }
6
6
  let(:client) do
7
7
  Riak::Client.new.tap do |c|
@@ -42,20 +42,20 @@ describe Riak::MapReduce do
42
42
  end
43
43
 
44
44
  it "adds bucket/key pairs to the inputs" do
45
- mr.add("foo","bar")
46
- expect(mr.inputs).to eq([["foo","bar"]])
45
+ mr.add("foo", "bar")
46
+ expect(mr.inputs).to eq([%w(foo bar)])
47
47
  end
48
48
 
49
49
  it "adds an array containing a bucket/key pair to the inputs" do
50
- mr.add(["foo","bar"])
51
- expect(mr.inputs).to eq([["foo","bar"]])
50
+ mr.add(%w(foo bar))
51
+ expect(mr.inputs).to eq([%w(foo bar)])
52
52
  end
53
53
 
54
54
  it "adds an object to the inputs by its bucket and key" do
55
55
  bucket = Riak::Bucket.new(client, "foo")
56
56
  obj = Riak::RObject.new(bucket, "bar")
57
57
  mr.add(obj)
58
- expect(mr.inputs).to eq([["foo", "bar"]])
58
+ expect(mr.inputs).to eq([%w(foo bar)])
59
59
  end
60
60
 
61
61
  it 'adds a bucket-typed object to the inputs' do
@@ -68,8 +68,8 @@ describe Riak::MapReduce do
68
68
  end
69
69
 
70
70
  it "adds an array containing a bucket/key/key-data triple to the inputs" do
71
- mr.add(["foo","bar",1000])
72
- expect(mr.inputs).to eq([["foo","bar",1000]])
71
+ mr.add(["foo", "bar", 1000])
72
+ expect(mr.inputs).to eq([["foo", "bar", 1000]])
73
73
  end
74
74
 
75
75
  it "uses a bucket name as the single input" do
@@ -90,8 +90,14 @@ describe Riak::MapReduce do
90
90
  end
91
91
 
92
92
  it "accepts a list of key-filters along with a bucket" do
93
- mr.add("foo", [[:tokenize, "-", 3], [:string_to_int], [:between, 2009, 2010]])
94
- expect(mr.inputs).to eq({:bucket => "foo", :key_filters => [[:tokenize, "-", 3], [:string_to_int], [:between, 2009, 2010]]})
93
+ mr.add("foo",
94
+ [[:tokenize, "-", 3],
95
+ [:string_to_int],
96
+ [:between, 2009, 2010]])
97
+ expect(mr.inputs).to eq({bucket: "foo",
98
+ key_filters: [[:tokenize, "-", 3],
99
+ [:string_to_int],
100
+ [:between, 2009, 2010]]})
95
101
  end
96
102
 
97
103
  it 'accepts a list of key-filters along with a bucket-typed bucket' do
@@ -104,7 +110,7 @@ describe Riak::MapReduce do
104
110
  mr.add(typed_bucket, filters)
105
111
 
106
112
  expect(mr.inputs).to eq(
107
- bucket: [typed_bucket.type.name,
113
+ bucket: [typed_bucket.type.name,
108
114
  typed_bucket.name],
109
115
  key_filters: filters
110
116
  )
@@ -116,23 +122,35 @@ describe Riak::MapReduce do
116
122
  string_to_int
117
123
  between 2009, 2010
118
124
  end
119
- expect(mr.inputs).to eq({:bucket => "foo", :key_filters => [[:tokenize, "-", 3], [:string_to_int], [:between, 2009, 2010]]})
125
+ expect(mr.inputs).to eq(bucket: "foo",
126
+ key_filters: [[:tokenize, "-", 3],
127
+ [:string_to_int],
128
+ [:between, 2009, 2010]])
120
129
  end
121
130
 
122
131
  context "using secondary indexes as inputs" do
123
132
  it "sets the inputs for equality" do
124
133
  expect(mr.index("foo", "email_bin", "sean@basho.com")).to eq(mr)
125
- expect(mr.inputs).to eq({:bucket => "foo", :index => "email_bin", :key => "sean@basho.com"})
134
+ expect(mr.inputs).to eq(bucket: "foo",
135
+ index: "email_bin",
136
+ key: "sean@basho.com")
126
137
  end
127
138
 
128
139
  it "sets the inputs for a range" do
129
140
  expect(mr.index("foo", "rank_int", 10..20)).to eq(mr)
130
- expect(mr.inputs).to eq({:bucket => "foo", :index => "rank_int", :start => 10, :end => 20})
141
+ expect(mr.inputs).to eq(bucket: "foo",
142
+ index: "rank_int",
143
+ start: 10,
144
+ end: 20)
131
145
  end
132
146
 
133
147
  it "raises an error when given an invalid query" do
134
- expect { mr.index("foo", "rank_int", 1.0348) }.to raise_error(ArgumentError)
135
- expect { mr.index("foo", "rank_int", Range.new(1.03, 1.05)) }.to raise_error(ArgumentError)
148
+ expect do
149
+ mr.index("foo", "rank_int", 1.0348)
150
+ end.to raise_error(ArgumentError)
151
+ expect do
152
+ mr.index("foo", "rank_int", Range.new(1.03, 1.05))
153
+ end.to raise_error(ArgumentError)
136
154
  end
137
155
  end
138
156
 
@@ -145,13 +163,13 @@ describe Riak::MapReduce do
145
163
  after { Riak.url_decoding = @urldecode }
146
164
 
147
165
  it "adds bucket/key pairs to the inputs with bucket and key escaped" do
148
- mr.add("[foo]","(bar)")
149
- expect(mr.inputs).to eq([["%5Bfoo%5D","%28bar%29"]])
166
+ mr.add("[foo]", "(bar)")
167
+ expect(mr.inputs).to eq([["%5Bfoo%5D", "%28bar%29"]])
150
168
  end
151
169
 
152
170
  it "adds an escaped array containing a bucket/key pair to the inputs" do
153
- mr.add(["[foo]","(bar)"])
154
- expect(mr.inputs).to eq([["%5Bfoo%5D","%28bar%29"]])
171
+ mr.add(["[foo]", "(bar)"])
172
+ expect(mr.inputs).to eq([["%5Bfoo%5D", "%28bar%29"]])
155
173
  end
156
174
 
157
175
  it "adds an object to the inputs by its escaped bucket and key" do
@@ -162,8 +180,8 @@ describe Riak::MapReduce do
162
180
  end
163
181
 
164
182
  it "adds an escaped array containing a bucket/key/key-data triple to the inputs" do
165
- mr.add(["[foo]","(bar)","[]()"])
166
- expect(mr.inputs).to eq([["%5Bfoo%5D", "%28bar%29","[]()"]])
183
+ mr.add(["[foo]", "(bar)", "[]()"])
184
+ expect(mr.inputs).to eq([["%5Bfoo%5D", "%28bar%29", "[]()"]])
167
185
  end
168
186
 
169
187
  it "uses an escaped bucket name as the single input" do
@@ -179,25 +197,25 @@ describe Riak::MapReduce do
179
197
  after { Riak.url_decoding = @urldecode }
180
198
 
181
199
  it "adds bucket/key pairs to the inputs with bucket and key unescaped" do
182
- mr.add("[foo]","(bar)")
183
- expect(mr.inputs).to eq([["[foo]","(bar)"]])
200
+ mr.add("[foo]", "(bar)")
201
+ expect(mr.inputs).to eq([["[foo]", "(bar)"]])
184
202
  end
185
203
 
186
204
  it "adds an unescaped array containing a bucket/key pair to the inputs" do
187
- mr.add(["[foo]","(bar)"])
188
- expect(mr.inputs).to eq([["[foo]","(bar)"]])
205
+ mr.add(["[foo]", "(bar)"])
206
+ expect(mr.inputs).to eq([["[foo]", "(bar)"]])
189
207
  end
190
208
 
191
209
  it "adds an object to the inputs by its unescaped bucket and key" do
192
210
  bucket = Riak::Bucket.new(client, "[foo]")
193
211
  obj = Riak::RObject.new(bucket, "(bar)")
194
212
  mr.add(obj)
195
- expect(mr.inputs).to eq([["[foo]","(bar)"]])
213
+ expect(mr.inputs).to eq([["[foo]", "(bar)"]])
196
214
  end
197
215
 
198
216
  it "adds an unescaped array containing a bucket/key/key-data triple to the inputs" do
199
- mr.add(["[foo]","(bar)","[]()"])
200
- expect(mr.inputs).to eq([["[foo]","(bar)","[]()"]])
217
+ mr.add(["[foo]", "(bar)", "[]()"])
218
+ expect(mr.inputs).to eq([["[foo]", "(bar)", "[]()"]])
201
219
  end
202
220
 
203
221
  it "uses an unescaped bucket name as the single input" do
@@ -214,13 +232,13 @@ describe Riak::MapReduce do
214
232
  after { Riak.escaper = @oldesc }
215
233
 
216
234
  it "adds bucket/key pairs to the inputs with bucket and key escaped" do
217
- mr.add("[foo]","(bar)")
218
- expect(mr.inputs).to eq([["%5Bfoo%5D","%28bar%29"]])
235
+ mr.add("[foo]", "(bar)")
236
+ expect(mr.inputs).to eq([["%5Bfoo%5D", "%28bar%29"]])
219
237
  end
220
238
 
221
239
  it "adds an escaped array containing a bucket/key pair to the inputs" do
222
- mr.add(["[foo]","(bar)"])
223
- expect(mr.inputs).to eq([["%5Bfoo%5D","%28bar%29"]])
240
+ mr.add(["[foo]", "(bar)"])
241
+ expect(mr.inputs).to eq([["%5Bfoo%5D", "%28bar%29"]])
224
242
  end
225
243
 
226
244
  it "adds an object to the inputs by its escaped bucket and key" do
@@ -231,8 +249,8 @@ describe Riak::MapReduce do
231
249
  end
232
250
 
233
251
  it "adds an escaped array containing a bucket/key/key-data triple to the inputs" do
234
- mr.add(["[foo]","(bar)","[]()"])
235
- expect(mr.inputs).to eq([["%5Bfoo%5D", "%28bar%29","[]()"]])
252
+ mr.add(["[foo]", "(bar)", "[]()"])
253
+ expect(mr.inputs).to eq([["%5Bfoo%5D", "%28bar%29", "[]()"]])
236
254
  end
237
255
 
238
256
  it "uses an escaped bucket name as the single input" do
@@ -284,19 +302,19 @@ describe Riak::MapReduce do
284
302
  end
285
303
 
286
304
  it "accepts a module/function pair" do
287
- mr.send(type, ["riak","mapsomething"])
305
+ mr.send(type, %w(riak mapsomething))
288
306
  expect(mr.query.size).to eq(1)
289
307
  phase = mr.query.first
290
- expect(phase.function).to eq(["riak", "mapsomething"])
308
+ expect(phase.function).to eq(%w(riak mapsomething))
291
309
  expect(phase.type).to eq(type)
292
310
  expect(phase.language).to eq("erlang")
293
311
  end
294
312
 
295
313
  it "accepts a module/function pair with extra options" do
296
- mr.send(type, ["riak", "mapsomething"], :arg => [1000])
314
+ mr.send(type, %w(riak mapsomething), :arg => [1000])
297
315
  expect(mr.query.size).to eq(1)
298
316
  phase = mr.query.first
299
- expect(phase.function).to eq(["riak", "mapsomething"])
317
+ expect(phase.function).to eq(%w(riak mapsomething))
300
318
  expect(phase.type).to eq(type)
301
319
  expect(phase.language).to eq("erlang")
302
320
  expect(phase.arg).to eq([1000])
@@ -356,7 +374,7 @@ describe Riak::MapReduce do
356
374
  end
357
375
 
358
376
  it "emits an array of inputs when there are multiple inputs" do
359
- mr.add("foo","bar",1000).add("foo","baz")
377
+ mr.add("foo", "bar", 1000).add("foo", "baz")
360
378
  expect(mr.to_json).to include('"inputs":[["foo","bar",1000],["foo","baz"]]')
361
379
  end
362
380
 
@@ -372,7 +390,7 @@ describe Riak::MapReduce do
372
390
 
373
391
  describe "executing the map reduce job" do
374
392
  before :each do
375
- mr.map("Riak.mapValues",:keep => true)
393
+ mr.map("Riak.mapValues", :keep => true)
376
394
  end
377
395
 
378
396
  it "submits the query to the backend" do
@@ -384,7 +402,7 @@ describe Riak::MapReduce do
384
402
  arr = []
385
403
  expect(backend).to receive(:mapred).with(mr).and_yield("foo").and_yield("bar")
386
404
  mr.run {|v| arr << v }
387
- expect(arr).to eq(["foo", "bar"])
405
+ expect(arr).to eq(%w(foo bar))
388
406
  end
389
407
 
390
408
  it "interprets failed requests with JSON content-types as map reduce errors" do
@@ -42,7 +42,7 @@ describe Riak::Multiget do
42
42
 
43
43
  expect(@multiget.finished?).to be_falsey
44
44
 
45
- # allow fetch
45
+ # allow fetch
46
46
  @slow_mtx.unlock
47
47
 
48
48
  @results = @multiget.results
@@ -70,7 +70,7 @@ describe Riak::Multiget do
70
70
  it "returns a hash of pairs to values" do
71
71
  expect(@bucket).to receive(:[]).with('key1')
72
72
  expect(@bucket).to receive(:[]).with('key2')
73
-
73
+
74
74
  @multiget = Riak::Multiget.new(@client, @pairs)
75
75
  @multiget.fetch
76
76
  @results = @multiget.results
@@ -147,13 +147,13 @@ describe Riak::RObject do
147
147
  "vclock"=> "a85hYGBgzmDKBVIsCfs+fc9gSN9wlA8q/hKosDpIOAsA",
148
148
  "values"=> [
149
149
  {"metadata"=>
150
- {"Links"=>[["addresses", "A2cbUQ2KEMbeyWGtdz97LoTi1DN", "home_address"]],
150
+ {"Links"=>[%w(addresses A2cbUQ2KEMbeyWGtdz97LoTi1DN home_address)],
151
151
  "X-Riak-VTag"=>"5bnavU3rrubcxLI8EvFXhB",
152
152
  "content-type"=>"application/json",
153
153
  "X-Riak-Last-Modified"=>"Mon, 12 Jul 2010 21:37:43 GMT",
154
154
  "X-Riak-Meta"=>{"X-Riak-Meta-King-Of-Robots"=>"I"},
155
155
  "index" => {
156
- "email_bin" => ["sean@basho.com","seancribbs@gmail.com"],
156
+ "email_bin" => ["sean@basho.com", "seancribbs@gmail.com"],
157
157
  "rank_int" => 50
158
158
  }
159
159
  },
@@ -163,7 +163,7 @@ describe Riak::RObject do
163
163
  ]
164
164
  }
165
165
  ]
166
- @object = Riak::RObject.load_from_mapreduce(@client,@sample_response).first
166
+ @object = Riak::RObject.load_from_mapreduce(@client, @sample_response).first
167
167
  expect(@object).to be_kind_of(Riak::RObject)
168
168
  end
169
169
 
@@ -181,6 +181,7 @@ describe Riak::RObject do
181
181
 
182
182
  it "sets the vclock" do
183
183
  expect(@object.vclock).to eq("a85hYGBgzmDKBVIsCfs+fc9gSN9wlA8q/hKosDpIOAsA")
184
+ expect(@object.causal_context).to eq @object.vclock
184
185
  end
185
186
 
186
187
  it "loads and parse links" do
@@ -274,17 +275,31 @@ describe Riak::RObject do
274
275
  end
275
276
 
276
277
  it "raises an error when the content_type is blank" do
277
- expect { @object.content_type = nil; @object.store }.to raise_error(ArgumentError)
278
- expect { @object.content_type = " "; @object.store }.to raise_error(ArgumentError)
278
+ expect do
279
+ @object.content_type = nil
280
+ @object.store
281
+ end.to raise_error(ArgumentError)
282
+ expect do
283
+ @object.content_type = ' '
284
+ @object.store
285
+ end.to raise_error(ArgumentError)
279
286
  end
280
287
 
281
288
  it "raises an error when given an empty string as key" do
282
- expect { @object.key = ''; @object.store }.to raise_error(ArgumentError)
289
+ expect do
290
+ @object.key = ''
291
+ @object.store
292
+ end.to raise_error(ArgumentError)
283
293
  end
284
294
 
285
295
  it "passes quorum parameters and returnbody to the backend" do
286
- expect(@backend).to receive(:store_object).with(@object, :returnbody => false, :w => 3, :dw => 2).and_return(true)
287
- @object.store(:returnbody => false, :w => 3, :dw => 2)
296
+ expect(@backend).to receive(:store_object).
297
+ with(@object,
298
+ returnbody: false,
299
+ w: 3,
300
+ dw: 2).
301
+ and_return(true)
302
+ @object.store(returnbody: false, w: 3, dw: 2)
288
303
  end
289
304
 
290
305
  it "raises an error if the object is in conflict" do
@@ -393,7 +408,9 @@ describe Riak::RObject do
393
408
  object.raw_data = { 'a' => 7 }
394
409
  object.content_type = 'inspect/type'
395
410
  Riak::Serializers['inspect/type'] = Object.new.tap do |o|
396
- def o.load(object); "serialize for inspect"; end
411
+ def o.load(object)
412
+ "serialize for inspect"
413
+ end
397
414
  end
398
415
 
399
416
  expect(object.inspect).to match(/serialize for inspect/)
@@ -412,13 +429,37 @@ describe Riak::RObject do
412
429
  end
413
430
 
414
431
  describe '#attempt_conflict_resolution' do
415
- let(:conflicted_robject) { Riak::RObject.new(@bucket, "conflicted") { |r| r.siblings = [ Riak::RContent.new(r), Riak::RContent.new(r)] } }
432
+ let(:conflicted_robject) do
433
+ Riak::RObject.new(@bucket, "conflicted") do |r|
434
+ r.siblings = [ Riak::RContent.new(r), Riak::RContent.new(r)]
435
+ end
436
+ end
416
437
  let(:resolved_robject) { Riak::RObject.new(@bucket, "resolved") }
417
438
  let(:invoked_resolvers) { [] }
418
- let(:resolver_1) { lambda { |r| invoked_resolvers << :resolver_1; nil } }
419
- let(:resolver_2) { lambda { |r| invoked_resolvers << :resolver_2; :not_an_robject } }
420
- let(:resolver_3) { lambda { |r| invoked_resolvers << :resolver_3; r } }
421
- let(:resolver_4) { lambda { |r| invoked_resolvers << :resolver_4; resolved_robject } }
439
+ let(:resolver_1) do
440
+ lambda do |r|
441
+ invoked_resolvers << :resolver_1
442
+ nil
443
+ end
444
+ end
445
+ let(:resolver_2) do
446
+ lambda do |r|
447
+ invoked_resolvers << :resolver_2
448
+ :not_an_robject
449
+ end
450
+ end
451
+ let(:resolver_3) do
452
+ lambda do |r|
453
+ invoked_resolvers << :resolver_3
454
+ r
455
+ end
456
+ end
457
+ let(:resolver_4) do
458
+ lambda do |r|
459
+ invoked_resolvers << :resolver_4
460
+ resolved_robject
461
+ end
462
+ end
422
463
 
423
464
  before(:each) do
424
465
  described_class.on_conflict(&resolver_1)
@@ -42,7 +42,7 @@ describe Riak::Search::Index do
42
42
  and_raise(Riak::ProtobuffsFailedRequest.new(:not_found, 'not found'))
43
43
 
44
44
  expect(backend).to receive(:create_search_index).
45
- with(index_name, nil, nil)
45
+ with(index_name, nil, nil, nil)
46
46
 
47
47
  expect{ subject.create! }.to_not raise_error
48
48
  end
@@ -50,9 +50,19 @@ describe Riak::Search::Index do
50
50
  it 'raises an error when creating an index that already exists' do
51
51
  index_exists_expectation
52
52
 
53
- expect{ subject.create! }.to raise_error(Riak::SearchError::IndexExistsError)
53
+ expect{ subject.create! }.
54
+ to raise_error(Riak::SearchError::IndexExistsError)
54
55
  end
55
56
 
57
+ it "spawns a query" do
58
+ t = "some query term"
59
+ expect(subject).to receive(:exists?).and_return(true)
60
+ expect(query = subject.query(t)).to be_a Riak::Search::Query
61
+ expect(query.term).to eq t
62
+ expect(query.index).to eq subject
63
+ expect(query.client).to eq subject.client
64
+ end
65
+
56
66
  it 'returns data about the index' do
57
67
  index_exists_expectation
58
68