riak-client 2.2.0.pre1 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
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
data/riak-client.gemspec CHANGED
@@ -7,9 +7,9 @@ Gem::Specification.new do |gem|
7
7
  gem.version = Riak::VERSION
8
8
  gem.summary = %Q{riak-client is a rich client for Riak, the distributed database by Basho.}
9
9
  gem.description = %Q{riak-client is a rich client for Riak, the distributed database by Basho. It supports the full HTTP and Protocol Buffers interfaces including storage operations, bucket configuration, link-walking, secondary indexes and map-reduce.}
10
- gem.email = ["sean@basho.com", 'bryce@basho.com']
10
+ gem.email = ['bryce@basho.com']
11
11
  gem.homepage = "http://github.com/basho/riak-ruby-client"
12
- gem.authors = ["Sean Cribbs", 'Bryce Kerley']
12
+ gem.authors = ['Bryce Kerley']
13
13
  gem.license = 'Apache 2.0'
14
14
 
15
15
  gem.required_ruby_version = '>= 1.9.3'
@@ -19,11 +19,12 @@ Gem::Specification.new do |gem|
19
19
  gem.add_development_dependency 'rake', '~> 10.1.1'
20
20
  gem.add_development_dependency 'yard', '~> 0.8.7'
21
21
  gem.add_development_dependency 'kramdown', '~> 1.4'
22
- gem.add_development_dependency 'simplecov', '~> 0.8.2'
22
+ gem.add_development_dependency 'simplecov', '~> 0.10.0'
23
23
  gem.add_development_dependency "instrumentable", "~> 1.1.0"
24
+ gem.add_development_dependency "rubocop", "~> 0.28.0"
24
25
 
25
26
  gem.add_runtime_dependency "i18n", ">=0.4.0"
26
- gem.add_runtime_dependency "beefcake", "~> 1.0"
27
+ gem.add_runtime_dependency "beefcake", "~> 1.1"
27
28
  gem.add_runtime_dependency "multi_json", "~>1.0"
28
29
  gem.add_runtime_dependency "innertube", "~>1.0.2"
29
30
  gem.add_runtime_dependency 'cert_validator', '~> 0.0.1'
@@ -41,6 +41,31 @@ describe 'Bucket Types', test_client: true, integration: true do
41
41
  expect(bucket.exists?('lawnmower')).to be
42
42
  end
43
43
 
44
+ describe 'loading and modifying a RObject' do
45
+ it "doesn't modify objects in other buckets" do
46
+ expect(o = bucket.get(object.key)).to be
47
+ o.data = 'updated'
48
+ o.store
49
+ o.reload
50
+
51
+ expect(o.data).to eq 'updated'
52
+
53
+ expect{ untyped_bucket.get(object.key)}.to raise_error(/not found/)
54
+
55
+ expect(o3 = bucket.get(object.key)).to be
56
+ expect(o3.data).to eq o.data
57
+ end
58
+
59
+ it "doesn't delete objects in other buckets'" do
60
+ expect{ untyped_object.reload }.to_not raise_error
61
+
62
+ expect(o = bucket.get(object.key)).to be
63
+ o.delete
64
+
65
+ expect{ untyped_object.reload }.to_not raise_error
66
+ end
67
+ end
68
+
44
69
  it 'only retrieves with a bucket type' do
45
70
  expect(bucket.get(object.key).data).to eq object.data
46
71
  expect{ untyped_bucket.get object.key }.to raise_error /not_found/
@@ -59,10 +84,15 @@ describe 'Bucket Types', test_client: true, integration: true do
59
84
  expect(bucket.keys).to include object.key
60
85
  end
61
86
 
87
+ it 'keeps the bucket type attached to value objects' do
88
+ expect(bucket.get(object.key).bucket).to eq bucket
89
+ expect(bucket.get(object.key).bucket.type).to eq bucket_type
90
+ end
91
+
62
92
  describe 'deletion' do
63
93
  it 'self-deletes with a bucket type' do
64
94
  expect(untyped_object).to be # ensure existence
65
-
95
+
66
96
  expect(object.delete).to be
67
97
  expect{ object.reload }.to raise_error /not_found/
68
98
  expect(untyped_object).to be
@@ -116,7 +146,7 @@ describe 'Bucket Types', test_client: true, integration: true do
116
146
  it 'map-reduces correctly with a robject in a typed bucket' do
117
147
  expect(object).to be
118
148
  expect(untyped_object).to be
119
-
149
+
120
150
  mapred.add object
121
151
  result = mapred.run
122
152
 
@@ -130,11 +160,11 @@ describe 'Bucket Types', test_client: true, integration: true do
130
160
  let(:bucket_type){ test_client.bucket_type 'yokozuna' }
131
161
  let(:bucket){ bucket_type.bucket random_key }
132
162
  let(:untyped_bucket){ test_client.bucket bucket.name }
133
-
163
+
134
164
  it 'allows reading and writing bucket properties' do
135
165
  expect(test_client.get_bucket_props(bucket, type: 'yokozuna')['last_write_wins']).to_not be
136
166
  expect(test_client.get_bucket_props(untyped_bucket)['last_write_wins']).to_not be
137
-
167
+
138
168
  # test setting
139
169
  expect{ bucket.props = {'last_write_wins' => true} }.to_not raise_error
140
170
 
@@ -152,7 +182,7 @@ describe 'Bucket Types', test_client: true, integration: true do
152
182
  # test clearing
153
183
  expect{ bucket.clear_props }.to_not raise_error
154
184
 
155
- # make sure clearing doesn't leak to canary setting on untyped bucket
185
+ # make sure clearing doesn't leak to canary setting on untyped bucket
156
186
  expect(test_client.get_bucket_props(bucket, type: 'yokozuna')['last_write_wins']).to_not be
157
187
  expect(test_client.get_bucket_props(untyped_bucket)['n_val']).to eq 1
158
188
  end
@@ -57,7 +57,7 @@ describe 'Conflict resolution', integration: true, test_client: true do
57
57
 
58
58
  subject.attempt_conflict_resolution
59
59
  subject.reload
60
-
60
+
61
61
  expect(subject).to_not be_conflict
62
62
  expect(subject.data).to eq 100
63
63
 
@@ -23,7 +23,7 @@ describe Riak::Counter, test_client: true, integration: true do
23
23
 
24
24
  5.times do
25
25
  amt = rand(10_000)
26
-
26
+
27
27
  @counter.increment amt
28
28
  expect(@counter.value).to eq(initial + amt)
29
29
 
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+ require 'riak'
3
+
4
+ describe "CRDT configuration", integration: true, test_client: true do
5
+ let(:bucket) { random_bucket }
6
+
7
+ it "allows default bucket-types to be configured for each data type" do
8
+ expect(Riak::Crdt::Set.new(bucket, 'set').bucket_type).to eq 'sets'
9
+
10
+ Riak::Crdt::DEFAULT_BUCKET_TYPES[:set] = 'new_set_default'
11
+ expect(Riak::Crdt::Set.new(bucket, 'set').bucket_type).to eq 'new_set_default'
12
+
13
+ Riak::Crdt::DEFAULT_BUCKET_TYPES[:set] = 'sets'
14
+ expect(Riak::Crdt::Set.new(bucket, 'set').bucket_type).to eq 'sets'
15
+ end
16
+
17
+ describe 'overriding bucket-types' do
18
+ let(:name){ 'other_counters' }
19
+ let(:type){ test_client.bucket_type name }
20
+ let(:typed_bucket){ type.bucket bucket.name }
21
+
22
+ it "overrides with a string" do
23
+ ctr = Riak::Crdt::Counter.new(bucket, 'ctr', name)
24
+ expect(ctr.bucket_type).to eq name
25
+ end
26
+
27
+ it "overrides with a typed bucket" do
28
+ ctr = Riak::Crdt::Counter.new(typed_bucket, 'ctr')
29
+ expect(ctr.bucket_type).to eq name
30
+ end
31
+
32
+ it "overrides with a bucket type object" do
33
+ ctr = Riak::Crdt::Counter.new(bucket, 'ctr', type)
34
+ expect(ctr.bucket_type).to eq name
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,176 @@
1
+ require 'spec_helper'
2
+ require 'riak/search'
3
+
4
+ describe 'CRDT Search API', crdt_search_config: true do
5
+ describe 'querying maps' do
6
+ let(:query) { index.query 'arroz_register:frijoles' }
7
+
8
+ before(:all) do
9
+ expect(first_map).to be
10
+ end
11
+
12
+ subject{ query.results }
13
+
14
+ it 'finds maps' do
15
+ expect(subject.length).to be > 0
16
+ end
17
+
18
+ it 'provides access to maps through the #map accessor' do
19
+ expect(subject.maps.first).to eq first_map
20
+ expect(subject.docs.first.map).to eq first_map
21
+ end
22
+
23
+ it 'provides access to maps through the #crdt accessor' do
24
+ expect(subject.crdts.first).to eq first_map
25
+ expect(subject.docs.first.crdt).to eq first_map
26
+ end
27
+
28
+ it 'provides access to maps through the #object accessor' do
29
+ expect(subject.first).to eq first_map
30
+ expect(subject.docs.first.object).to eq first_map
31
+ end
32
+
33
+ it 'raises errors on the set, counter, and robject accessors' do
34
+ expect{ subject.docs.first.robject }.
35
+ to raise_error Riak::SearchError::UnexpectedResultError
36
+ expect{ subject.docs.first.counter }.
37
+ to raise_error Riak::CrdtError::UnexpectedDataType
38
+ expect{ subject.docs.first.set }.
39
+ to raise_error Riak::CrdtError::UnexpectedDataType
40
+ end
41
+ end
42
+
43
+ describe 'querying sets' do
44
+ let(:query) { index.query 'set:frijoles' }
45
+
46
+ before(:all) do
47
+ expect(first_set).to be
48
+ end
49
+
50
+ subject{ query.results }
51
+
52
+ it 'finds sets' do
53
+ expect(subject.length).to be > 0
54
+ end
55
+
56
+ it 'provides access to sets through the #set accessor' do
57
+ expect(subject.sets.first).to eq first_set
58
+ expect(subject.docs.first.set).to eq first_set
59
+ end
60
+
61
+ it 'provides access to sets through the #object accessor' do
62
+ expect(subject.first).to eq first_set
63
+ expect(subject.docs.first.object).to eq first_set
64
+ end
65
+
66
+ it 'raises errors on the counter, map, and robject accessors' do
67
+ expect{ subject.docs.first.robject }.
68
+ to raise_error Riak::SearchError::UnexpectedResultError
69
+ expect{ subject.docs.first.counter }.
70
+ to raise_error Riak::CrdtError::UnexpectedDataType
71
+ expect{ subject.docs.first.map }.
72
+ to raise_error Riak::CrdtError::UnexpectedDataType
73
+ end
74
+ end
75
+
76
+ describe 'querying counters' do
77
+ let(:query) { index.query 'counter:83475' }
78
+
79
+ before(:all) do
80
+ expect(first_counter).to be
81
+ end
82
+
83
+ subject{ query.results }
84
+
85
+ it 'finds counters' do
86
+ expect(subject.length).to be > 0
87
+ end
88
+
89
+ it 'provides access to counters through the #counter accessor' do
90
+ expect(subject.counters.first).to eq first_counter
91
+ expect(subject.docs.first.counter).to eq first_counter
92
+ end
93
+
94
+ it 'provides access to counters through the #object accessor' do
95
+ expect(subject.first).to eq first_counter
96
+ expect(subject.docs.first.object).to eq first_counter
97
+ end
98
+
99
+ it 'raises errors on the counter, map, and robject accessors' do
100
+ expect{ subject.docs.first.robject }.
101
+ to raise_error Riak::SearchError::UnexpectedResultError
102
+ expect{ subject.docs.first.set }.
103
+ to raise_error Riak::CrdtError::UnexpectedDataType
104
+ expect{ subject.docs.first.map }.
105
+ to raise_error Riak::CrdtError::UnexpectedDataType
106
+ end
107
+ end
108
+
109
+ describe 'querying multiple kinds of CRDT' do
110
+ let(:query) do
111
+ index.query 'arroz_register:frijoles OR set:frijoles OR counter:83475'
112
+ end
113
+ subject{ query.results }
114
+
115
+ before(:all) do
116
+ expect(first_counter).to be
117
+ expect(first_map).to be
118
+ expect(first_set).to be
119
+ end
120
+
121
+ it 'finds CRDTs' do
122
+ expect(subject.length).to be >= 3
123
+ end
124
+
125
+ it 'provides access through appropriate accessors' do
126
+ expect(subject.counters.first).to eq first_counter
127
+ expect(subject.maps.first).to eq first_map
128
+ expect(subject.sets.first).to eq first_set
129
+ expect(subject.crdts).to include first_counter
130
+ expect(subject.crdts).to include first_map
131
+ expect(subject.crdts).to include first_set
132
+ end
133
+
134
+ it 'allows looping through each object' do
135
+ # I worry that this may be order-dependent and occasionally fail
136
+ expect{ |b| subject.crdts.each &b }.
137
+ to yield_successive_args(first_counter, first_map, first_set)
138
+ end
139
+
140
+ it 'allows looping through each kind of object' do
141
+ expect{ |b| subject.counters.each &b }.to yield_with_args(first_counter)
142
+ expect{ |b| subject.maps.each &b }.to yield_with_args(first_map)
143
+ expect{ |b| subject.sets.each &b }.to yield_with_args(first_set)
144
+ end
145
+ end
146
+
147
+ describe 'querying both CRDTs and RObjects' do
148
+ let(:query) do
149
+ index.query 'arroz_register:frijoles OR set:frijoles OR counter:83475 OR "bitcask"'
150
+ end
151
+ subject{ query.results }
152
+
153
+ before(:all) do
154
+ load_corpus
155
+ expect(first_counter).to be
156
+ expect(first_map).to be
157
+ expect(first_set).to be
158
+ end
159
+
160
+ let(:first_robject){ subject.robjects.first }
161
+
162
+ it 'finds CRDTs and RObjects' do
163
+ expect(subject.objects).to include first_counter
164
+ expect(subject.objects).to include first_map
165
+ expect(subject.objects).to include first_set
166
+ expect(subject.objects).to include first_robject
167
+ end
168
+
169
+ it 'provides access through appropriate accessors' do
170
+ expect(subject.crdts).to_not include first_robject
171
+ expect(subject.robjects).to_not include first_counter
172
+ expect(subject.robjects).to_not include first_map
173
+ expect(subject.robjects).to_not include first_set
174
+ end
175
+ end
176
+ end
@@ -4,39 +4,6 @@ require 'riak'
4
4
  describe "CRDTs", integration: true, test_client: true do
5
5
  let(:bucket) { random_bucket }
6
6
 
7
- describe 'configuration' do
8
- it "allows default bucket-types to be configured for each data type" do
9
- expect(Riak::Crdt::Set.new(bucket, 'set').bucket_type).to eq 'sets'
10
-
11
- Riak::Crdt::DEFAULT_BUCKET_TYPES[:set] = 'new_set_default'
12
- expect(Riak::Crdt::Set.new(bucket, 'set').bucket_type).to eq 'new_set_default'
13
-
14
- Riak::Crdt::DEFAULT_BUCKET_TYPES[:set] = 'sets'
15
- expect(Riak::Crdt::Set.new(bucket, 'set').bucket_type).to eq 'sets'
16
- end
17
-
18
- describe 'overriding bucket-types' do
19
- let(:name){ 'other_counters' }
20
- let(:type){ test_client.bucket_type name }
21
- let(:typed_bucket){ type.bucket bucket.name }
22
-
23
- it "overrides with a string" do
24
- ctr = Riak::Crdt::Counter.new(bucket, 'ctr', name)
25
- expect(ctr.bucket_type).to eq name
26
- end
27
-
28
- it "overrides with a typed bucket" do
29
- ctr = Riak::Crdt::Counter.new(typed_bucket, 'ctr')
30
- expect(ctr.bucket_type).to eq name
31
- end
32
-
33
- it "overrides with a bucket type object" do
34
- ctr = Riak::Crdt::Counter.new(bucket, 'ctr', type)
35
- expect(ctr.bucket_type).to eq name
36
- end
37
- end
38
- end
39
-
40
7
  describe 'Riak-assigned names' do
41
8
  describe 'an anonymous counter' do
42
9
  subject { Riak::Crdt::Counter.new bucket, nil }
@@ -105,6 +72,15 @@ describe "CRDTs", integration: true, test_client: true do
105
72
  expect(subject.dirty?).to_not be
106
73
  expect(subject.value).to eq(start + 10 + 1)
107
74
  end
75
+
76
+ describe 'equality' do
77
+ let(:same){ Riak::Crdt::Counter.new subject.bucket, subject.key }
78
+ let(:same_bucket){ Riak::Bucket.new test_client, bucket.name }
79
+ let(:similar){ Riak::Crdt::Counter.new same_bucket, subject.key }
80
+ it { is_expected.to eq subject }
81
+ it { is_expected.to eq same }
82
+ it { is_expected.to eq similar }
83
+ end
108
84
  end
109
85
  describe 'sets' do
110
86
 
@@ -22,7 +22,7 @@ describe 'CRDT map validation', integration: true, test_client: true do
22
22
  end.to_not raise_error
23
23
 
24
24
  map2 = Riak::Crdt::Map.new bucket, map.key
25
-
25
+
26
26
  expect(map2.sets['set'].members).to eq ::Set.new(['Z'])
27
27
  end
28
28
 
@@ -30,7 +30,7 @@ describe 'CRDT map validation', integration: true, test_client: true do
30
30
  map.counters['counter'].increment 5
31
31
 
32
32
  map.reload
33
-
33
+
34
34
  expect(map.counters['counter'].value).to eq 5
35
35
 
36
36
  map.batch do |m|
@@ -50,13 +50,13 @@ describe 'CRDT map validation', integration: true, test_client: true do
50
50
  end
51
51
 
52
52
  map.reload
53
- expect(map.maps['map'].sets['set'].members).to eq ::Set.new(['X', 'Y'])
53
+ expect(map.maps['map'].sets['set'].members).to eq ::Set.new(%w(X Y))
54
54
 
55
55
  map.batch do |m|
56
56
  m.maps.delete 'map'
57
57
  m.maps['map'].sets['set'].add "Z"
58
58
  end
59
-
59
+
60
60
  map2 = Riak::Crdt::Map.new bucket, map.key
61
61
  expect(map2.maps['map'].sets['set'].members).to eq ::Set.new(['Z'])
62
62
  end
@@ -4,7 +4,7 @@ require 'riak'
4
4
  describe 'CRDT set validation', integration: true, test_client: true do
5
5
  let(:bucket){ random_bucket 'crdt_validation' }
6
6
  let(:set){ Riak::Crdt::Set.new bucket, random_key }
7
-
7
+
8
8
  it 'removes recently-added set entries during batch mode' do
9
9
  expect do
10
10
  set.batch do |s|
@@ -15,17 +15,17 @@ describe 'CRDT set validation', integration: true, test_client: true do
15
15
  end
16
16
  end.to raise_error Riak::CrdtError::SetRemovalWithoutContextError
17
17
  end
18
-
18
+
19
19
  it 'removes non-members with context' do
20
20
  set.batch do |s|
21
21
  s.add 'X'
22
22
  s.add 'Y'
23
23
  end
24
-
24
+
25
25
  set.reload
26
-
26
+
27
27
  expect{ set.remove 'bogus' }.to_not raise_error
28
-
28
+
29
29
  set2 = Riak::Crdt::Set.new bucket, set.key
30
30
  expect(set2.members).to eq ::Set.new(%w{X Y})
31
31
  end
@@ -35,9 +35,9 @@ describe 'CRDT set validation', integration: true, test_client: true do
35
35
  s.add 'X'
36
36
  s.add 'Y'
37
37
  end
38
-
38
+
39
39
  set.reload
40
-
40
+
41
41
  expect{ set.add 'X' }.to_not raise_error
42
42
 
43
43
  set2 = Riak::Crdt::Set.new bucket, set.key
@@ -90,14 +90,14 @@ describe 'CRDT set validation', integration: true, test_client: true do
90
90
  s.add 'X'
91
91
  s.add 'Y'
92
92
  end
93
-
93
+
94
94
  set_parallel = Riak::Crdt::Set.new bucket, set.key
95
95
  set_parallel.add 'Z'
96
-
96
+
97
97
  set.reload
98
-
98
+
99
99
  expect{ set.remove 'Z' }.to_not raise_error
100
-
100
+
101
101
  set2 = Riak::Crdt::Set.new bucket, set.key
102
102
  expect(set2.members).to eq ::Set.new(%w{X Y})
103
103
  end
@@ -107,9 +107,9 @@ describe 'CRDT set validation', integration: true, test_client: true do
107
107
  s.add 'X'
108
108
  s.add 'Y'
109
109
  end
110
-
110
+
111
111
  set.reload
112
-
112
+
113
113
  set_parallel = Riak::Crdt::Set.new bucket, set.key
114
114
  set_parallel.add 'Z'
115
115