ripple 0.9.5 → 1.0.0.beta
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +32 -0
- data/Gemfile +10 -9
- data/Guardfile +15 -0
- data/Rakefile +11 -40
- data/lib/rails/generators/ripple/configuration/configuration_generator.rb +0 -13
- data/lib/rails/generators/ripple/configuration/templates/ripple.yml +4 -4
- data/lib/rails/generators/ripple/js/js_generator.rb +0 -13
- data/lib/rails/generators/ripple/js/templates/js/contrib.js +0 -17
- data/lib/rails/generators/ripple/js/templates/js/ripple.js +0 -13
- data/lib/rails/generators/ripple/model/model_generator.rb +0 -14
- data/lib/rails/generators/ripple/model/templates/model.rb +1 -1
- data/lib/rails/generators/ripple/observer/observer_generator.rb +0 -14
- data/lib/rails/generators/ripple/test/test_generator.rb +7 -19
- data/lib/rails/generators/ripple_generator.rb +1 -14
- data/lib/ripple.rb +7 -14
- data/lib/ripple/associations.rb +129 -26
- data/lib/ripple/associations/embedded.rb +1 -15
- data/lib/ripple/associations/instantiators.rb +0 -13
- data/lib/ripple/associations/linked.rb +41 -19
- data/lib/ripple/associations/many.rb +0 -14
- data/lib/ripple/associations/many_embedded_proxy.rb +0 -14
- data/lib/ripple/associations/many_linked_proxy.rb +39 -18
- data/lib/ripple/associations/many_reference_proxy.rb +93 -0
- data/lib/ripple/associations/many_stored_key_proxy.rb +76 -0
- data/lib/ripple/associations/one.rb +1 -15
- data/lib/ripple/associations/one_embedded_proxy.rb +0 -14
- data/lib/ripple/associations/one_key_proxy.rb +58 -0
- data/lib/ripple/associations/one_linked_proxy.rb +4 -14
- data/lib/ripple/associations/one_stored_key_proxy.rb +43 -0
- data/lib/ripple/associations/proxy.rb +8 -14
- data/lib/ripple/attribute_methods.rb +19 -17
- data/lib/ripple/attribute_methods/dirty.rb +19 -15
- data/lib/ripple/attribute_methods/query.rb +0 -14
- data/lib/ripple/attribute_methods/read.rb +0 -14
- data/lib/ripple/attribute_methods/write.rb +0 -14
- data/lib/ripple/callbacks.rb +10 -16
- data/lib/ripple/conflict/basic_resolver.rb +82 -0
- data/lib/ripple/conflict/document_hooks.rb +20 -0
- data/lib/ripple/conflict/resolver.rb +71 -0
- data/lib/ripple/conflict/test_helper.rb +33 -0
- data/lib/ripple/conversion.rb +0 -14
- data/lib/ripple/core_ext.rb +1 -14
- data/lib/ripple/core_ext/casting.rb +19 -19
- data/lib/ripple/core_ext/object.rb +8 -0
- data/lib/ripple/document.rb +21 -16
- data/lib/ripple/document/bucket_access.rb +0 -14
- data/lib/ripple/document/finders.rb +17 -23
- data/lib/ripple/document/key.rb +8 -28
- data/lib/ripple/document/link.rb +30 -0
- data/lib/ripple/document/persistence.rb +12 -20
- data/lib/ripple/embedded_document.rb +10 -15
- data/lib/ripple/embedded_document/around_callbacks.rb +18 -0
- data/lib/ripple/embedded_document/finders.rb +7 -18
- data/lib/ripple/embedded_document/persistence.rb +5 -17
- data/lib/ripple/i18n.rb +0 -14
- data/lib/ripple/inspection.rb +21 -15
- data/lib/ripple/locale/en.yml +9 -13
- data/lib/ripple/nested_attributes.rb +33 -39
- data/lib/ripple/observable.rb +0 -13
- data/lib/ripple/properties.rb +1 -14
- data/lib/ripple/property_type_mismatch.rb +0 -14
- data/lib/ripple/railtie.rb +4 -14
- data/lib/ripple/railties/ripple.rake +86 -0
- data/lib/ripple/serialization.rb +11 -11
- data/lib/ripple/test_server.rb +36 -0
- data/lib/ripple/timestamps.rb +0 -13
- data/lib/ripple/translation.rb +4 -14
- data/lib/ripple/validations.rb +1 -15
- data/lib/ripple/validations/associated_validator.rb +26 -17
- data/lib/ripple/version.rb +3 -0
- data/ripple.gemspec +24 -35
- data/spec/integration/ripple/associations_spec.rb +89 -58
- data/spec/integration/ripple/conflict_resolution_spec.rb +298 -0
- data/spec/integration/ripple/nested_attributes_spec.rb +19 -19
- data/spec/integration/ripple/persistence_spec.rb +15 -34
- data/spec/integration/ripple/search_associations_spec.rb +31 -0
- data/spec/ripple/associations/many_embedded_proxy_spec.rb +23 -36
- data/spec/ripple/associations/many_linked_proxy_spec.rb +133 -45
- data/spec/ripple/associations/many_reference_proxy_spec.rb +170 -0
- data/spec/ripple/associations/many_stored_key_proxy_spec.rb +158 -0
- data/spec/ripple/associations/one_embedded_proxy_spec.rb +24 -37
- data/spec/ripple/associations/one_key_proxy_spec.rb +82 -0
- data/spec/ripple/associations/one_linked_proxy_spec.rb +22 -23
- data/spec/ripple/associations/one_stored_key_proxy_spec.rb +72 -0
- data/spec/ripple/associations/proxy_spec.rb +21 -15
- data/spec/ripple/associations_spec.rb +54 -23
- data/spec/ripple/attribute_methods/dirty_spec.rb +56 -5
- data/spec/ripple/attribute_methods_spec.rb +47 -21
- data/spec/ripple/bucket_access_spec.rb +4 -17
- data/spec/ripple/callbacks_spec.rb +52 -15
- data/spec/ripple/conflict/resolver_spec.rb +42 -0
- data/spec/ripple/conversion_spec.rb +2 -15
- data/spec/ripple/core_ext_spec.rb +12 -15
- data/spec/ripple/document/link_spec.rb +67 -0
- data/spec/ripple/document_spec.rb +34 -19
- data/spec/ripple/embedded_document/finders_spec.rb +12 -19
- data/spec/ripple/embedded_document/persistence_spec.rb +20 -26
- data/spec/ripple/embedded_document_spec.rb +44 -34
- data/spec/ripple/finders_spec.rb +58 -29
- data/spec/ripple/inspection_spec.rb +40 -37
- data/spec/ripple/key_spec.rb +5 -17
- data/spec/ripple/observable_spec.rb +3 -16
- data/spec/ripple/persistence_spec.rb +134 -18
- data/spec/ripple/properties_spec.rb +21 -15
- data/spec/ripple/ripple_spec.rb +1 -14
- data/spec/ripple/serialization_spec.rb +16 -17
- data/spec/ripple/timestamps_spec.rb +73 -52
- data/spec/ripple/validations/associated_validator_spec.rb +69 -25
- data/spec/ripple/validations_spec.rb +3 -16
- data/spec/spec_helper.rb +17 -18
- data/spec/support/associations.rb +1 -1
- data/spec/support/associations/proxies.rb +0 -13
- data/spec/support/integration_setup.rb +11 -0
- data/spec/support/mocks.rb +0 -13
- data/spec/support/models.rb +33 -2
- data/spec/support/models/address.rb +1 -16
- data/spec/support/models/box.rb +7 -14
- data/spec/support/models/car.rb +27 -1
- data/spec/support/models/cardboard_box.rb +0 -14
- data/spec/support/models/clock.rb +6 -15
- data/spec/support/models/clock_observer.rb +0 -14
- data/spec/support/models/credit_card.rb +5 -0
- data/spec/support/models/customer.rb +0 -14
- data/spec/support/models/email.rb +0 -14
- data/spec/support/models/family.rb +1 -13
- data/spec/support/models/favorite.rb +0 -14
- data/spec/support/models/invoice.rb +0 -14
- data/spec/support/models/late_invoice.rb +0 -14
- data/spec/support/models/nested.rb +12 -0
- data/spec/support/models/ninja.rb +7 -0
- data/spec/support/models/note.rb +0 -14
- data/spec/support/models/page.rb +1 -15
- data/spec/support/models/paid_invoice.rb +0 -14
- data/spec/support/models/post.rb +12 -0
- data/spec/support/models/profile.rb +7 -0
- data/spec/support/models/subscription.rb +26 -0
- data/spec/support/models/tasks.rb +0 -18
- data/spec/support/models/team.rb +11 -0
- data/spec/support/models/transactions.rb +17 -0
- data/spec/support/models/tree.rb +2 -16
- data/spec/support/models/user.rb +14 -16
- data/spec/support/models/widget.rb +8 -14
- data/spec/support/search.rb +14 -0
- data/spec/support/test_server.rb +22 -12
- data/spec/support/test_server.yml.example +14 -2
- metadata +223 -59
- data/lib/rails/generators/ripple/test/templates/test_server.rb +0 -46
- data/spec/support/models/driver.rb +0 -5
- data/spec/support/models/engine.rb +0 -4
- data/spec/support/models/passenger.rb +0 -5
- data/spec/support/models/seat.rb +0 -4
- data/spec/support/models/wheel.rb +0 -5
@@ -1,36 +1,29 @@
|
|
1
|
-
|
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__)
|
1
|
+
require 'spec_helper'
|
15
2
|
|
16
3
|
describe Ripple::EmbeddedDocument::Finders do
|
17
|
-
require 'support/models/address'
|
18
|
-
require 'support/models/favorite'
|
4
|
+
# require 'support/models/address'
|
5
|
+
# require 'support/models/favorite'
|
19
6
|
|
20
7
|
before :each do
|
21
|
-
@
|
8
|
+
@address = Address.new
|
22
9
|
end
|
23
10
|
|
24
11
|
it "should instantiate a document" do
|
25
12
|
Address.stub!(:new).and_return(@address)
|
26
13
|
Address.instantiate('_type' => 'Address').should == @address
|
27
14
|
end
|
28
|
-
|
15
|
+
|
29
16
|
it "should instantiate a class of _type if present in attrs" do
|
30
17
|
Favorite.instantiate('_type' => 'Address').class.should == Address
|
31
18
|
end
|
32
|
-
|
19
|
+
|
33
20
|
it "should use self if being called from a class including Ripple::EmbeddedDocument and _type is not present" do
|
34
21
|
Address.instantiate({}).class.should == Address
|
35
22
|
end
|
23
|
+
|
24
|
+
it 'initializes the document with no changes' do
|
25
|
+
a = Address.instantiate('_type' => 'Address', 'street' => 'Pine St')
|
26
|
+
a.should_not be_changed
|
27
|
+
a.changes.should be_empty
|
28
|
+
end
|
36
29
|
end
|
@@ -1,25 +1,12 @@
|
|
1
|
-
|
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__)
|
1
|
+
require 'spec_helper'
|
15
2
|
|
16
3
|
describe Ripple::EmbeddedDocument::Persistence do
|
17
|
-
require 'support/models/user'
|
18
|
-
require 'support/models/address'
|
19
|
-
|
4
|
+
# require 'support/models/user'
|
5
|
+
# require 'support/models/address'
|
6
|
+
|
20
7
|
before :each do
|
21
8
|
@root = User.new
|
22
|
-
@addr = Address.new(:street => "196 Broadway")
|
9
|
+
@addr = Address.new(:street => "196 Broadway", :kind => "Home")
|
23
10
|
@addr._parent_document = @root
|
24
11
|
end
|
25
12
|
|
@@ -32,17 +19,17 @@ describe Ripple::EmbeddedDocument::Persistence do
|
|
32
19
|
@root.should_receive(:save).and_return(true)
|
33
20
|
@addr.save.should be_true
|
34
21
|
end
|
35
|
-
|
22
|
+
|
36
23
|
it "should delegate save! to the root document" do
|
37
24
|
@root.should_receive(:save).and_return(true)
|
38
25
|
@addr.save!.should be_true
|
39
26
|
end
|
40
|
-
|
27
|
+
|
41
28
|
it "should raise NoRootDocument when calling save without a root document" do
|
42
29
|
@addr._parent_document = nil
|
43
30
|
lambda { @addr.save }.should raise_error(Ripple::NoRootDocument)
|
44
31
|
end
|
45
|
-
|
32
|
+
|
46
33
|
it "should raise NoRootDocument when calling save! without a root document" do
|
47
34
|
@addr._parent_document = nil
|
48
35
|
lambda { @addr.save! }.should raise_error(Ripple::NoRootDocument)
|
@@ -51,25 +38,32 @@ describe Ripple::EmbeddedDocument::Persistence do
|
|
51
38
|
it "should have a root document" do
|
52
39
|
@addr._root_document.should == @root
|
53
40
|
end
|
54
|
-
|
41
|
+
|
55
42
|
it "should have a parent document" do
|
56
43
|
@addr._parent_document.should == @root
|
57
44
|
end
|
58
|
-
|
45
|
+
|
59
46
|
it "should respond to new_record?" do
|
60
47
|
@addr.should respond_to(:new_record?)
|
61
48
|
@addr.should be_a_new_record
|
62
49
|
end
|
63
|
-
|
50
|
+
|
64
51
|
it "should respond to persisted" do
|
65
52
|
@addr.should respond_to(:persisted?)
|
66
53
|
@addr.should_not be_persisted
|
67
54
|
end
|
68
|
-
|
55
|
+
|
69
56
|
it "should properly create embedded attributes for persistence" do
|
70
57
|
@addr = Address.new
|
71
58
|
@root.addresses << @addr
|
72
|
-
@root.attributes_for_persistence.should == {'_type' => 'User', 'addresses' => [{'_type' => 'Address', 'street' => nil}]}
|
59
|
+
@root.attributes_for_persistence.should == {'_type' => 'User', 'email' => nil, 'addresses' => [{'_type' => 'Address', 'street' => nil, 'kind' => nil}]}
|
60
|
+
end
|
61
|
+
|
62
|
+
it "includes undefined properties in the attributes for persistence" do
|
63
|
+
addr = Address.new
|
64
|
+
addr['some_undefined_prop'] = 17
|
65
|
+
@root.addresses << addr
|
66
|
+
@root.attributes_for_persistence['addresses'].first.should include('some_undefined_prop' => 17)
|
73
67
|
end
|
74
68
|
|
75
69
|
it "should modify its attributes and save" do
|
@@ -1,21 +1,8 @@
|
|
1
|
-
|
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__)
|
1
|
+
require 'spec_helper'
|
15
2
|
|
16
3
|
describe Ripple::EmbeddedDocument do
|
17
|
-
require 'support/models/address'
|
18
|
-
require 'support/models/user'
|
4
|
+
# require 'support/models/address'
|
5
|
+
# require 'support/models/user'
|
19
6
|
|
20
7
|
it "should have a model name when included" do
|
21
8
|
Address.should respond_to(:model_name)
|
@@ -26,9 +13,9 @@ describe Ripple::EmbeddedDocument do
|
|
26
13
|
Address.should be_embeddable
|
27
14
|
end
|
28
15
|
|
29
|
-
describe "
|
30
|
-
let(:user_1) { User.
|
31
|
-
let(:user_2) { User.
|
16
|
+
describe "equality" do
|
17
|
+
let(:user_1) { User.new {|u| u.key = "u1"} }
|
18
|
+
let(:user_2) { User.new {|u| u.key = "u2"} }
|
32
19
|
let(:street_1) { '123 Somewhere St' }
|
33
20
|
let(:street_2) { '123 Somewhere Ave' }
|
34
21
|
let(:address_1) { Address.new(:street => street_1) }
|
@@ -39,36 +26,59 @@ describe Ripple::EmbeddedDocument do
|
|
39
26
|
address_2._parent_document = user_1
|
40
27
|
end
|
41
28
|
|
42
|
-
|
29
|
+
def should_be_equal
|
43
30
|
(address_1 == address_2).should be_true
|
31
|
+
address_1.eql?(address_2).should be_true
|
32
|
+
|
44
33
|
(address_2 == address_1).should be_true
|
34
|
+
address_2.eql?(address_1).should be_true
|
35
|
+
|
36
|
+
address_1.hash.should == address_2.hash
|
45
37
|
end
|
46
38
|
|
47
|
-
|
48
|
-
|
49
|
-
address_1.
|
39
|
+
def should_not_be_equal(other_address = address_2)
|
40
|
+
(address_1 == other_address).should be_false
|
41
|
+
address_1.eql?(other_address).should be_false
|
50
42
|
|
51
|
-
(
|
52
|
-
(
|
43
|
+
(other_address == address_1).should be_false
|
44
|
+
address_1.eql?(other_address).should be_false
|
45
|
+
|
46
|
+
address_1.hash.should_not == other_address.hash
|
47
|
+
end
|
48
|
+
|
49
|
+
specify "two document are equal when they have the same classes, parents and attributes" do
|
50
|
+
should_be_equal
|
53
51
|
end
|
54
52
|
|
55
|
-
|
53
|
+
specify "two documents are not equal when the parents are different (even if the attributes and classes are the same)" do
|
56
54
|
address_2._parent_document = user_2
|
57
|
-
|
58
|
-
(address_2 == address_1).should be_false
|
55
|
+
should_not_be_equal
|
59
56
|
end
|
60
57
|
|
61
|
-
|
58
|
+
specify "two documents are not equal when the attributes are different (even if the parents and classes are the same)" do
|
62
59
|
address_2.street = street_2
|
63
|
-
|
64
|
-
(address_2 == address_1).should be_false
|
60
|
+
should_not_be_equal
|
65
61
|
end
|
66
62
|
|
67
|
-
|
63
|
+
specify "two documents are not equal when the classes are different (even if the parents and attributes are the same)" do
|
68
64
|
special_address = SpecialAddress.new(address_1.attributes)
|
69
65
|
special_address._parent_document = address_1._parent_document
|
70
|
-
|
71
|
-
(special_address
|
66
|
+
|
67
|
+
should_not_be_equal(special_address)
|
68
|
+
end
|
69
|
+
|
70
|
+
specify "two documents are not equal when their embedded documents are not equal (even if they are identical otherwise)" do
|
71
|
+
address_1.notes << Note.new(:text => 'Bob lives here')
|
72
|
+
address_2.notes << Note.new(:text => 'Jill lives here')
|
73
|
+
|
74
|
+
should_not_be_equal
|
75
|
+
end
|
76
|
+
|
77
|
+
specify "two documents can be equal when their embedded doc objects are different instances but are equal" do
|
78
|
+
address_1.notes << Note.new(:text => 'Bob lives here')
|
79
|
+
address_2.notes << Note.new(:text => 'Bob lives here')
|
80
|
+
|
81
|
+
should_be_equal
|
72
82
|
end
|
73
83
|
end
|
74
84
|
end
|
data/spec/ripple/finders_spec.rb
CHANGED
@@ -1,22 +1,9 @@
|
|
1
|
-
|
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__)
|
1
|
+
require 'spec_helper'
|
15
2
|
|
16
3
|
describe Ripple::Document::Finders do
|
17
|
-
require 'support/models/box'
|
18
|
-
require 'support/models/cardboard_box'
|
19
|
-
|
4
|
+
# require 'support/models/box'
|
5
|
+
# require 'support/models/cardboard_box'
|
6
|
+
|
20
7
|
before :each do
|
21
8
|
@backend = mock("Backend")
|
22
9
|
@client = Ripple.client
|
@@ -34,7 +21,7 @@ describe Ripple::Document::Finders do
|
|
34
21
|
Box.find(nil).should be_nil
|
35
22
|
Box.find("").should be_nil
|
36
23
|
end
|
37
|
-
|
24
|
+
|
38
25
|
it "should raise Ripple::DocumentNotFound if an empty array is passed to find!" do
|
39
26
|
lambda { Box.find!() }.should raise_error(Ripple::DocumentNotFound, "Couldn't find document without a key")
|
40
27
|
end
|
@@ -43,7 +30,7 @@ describe Ripple::Document::Finders do
|
|
43
30
|
before do
|
44
31
|
@bucket.stub!(:get).with("square", {}).and_return(@plain)
|
45
32
|
end
|
46
|
-
|
33
|
+
|
47
34
|
it "should find a single document by key and assign its attributes" do
|
48
35
|
@bucket.should_receive(:get).with("square", {}).and_return(@plain)
|
49
36
|
box = Box.find("square")
|
@@ -54,6 +41,11 @@ describe Ripple::Document::Finders do
|
|
54
41
|
box.should_not be_new_record
|
55
42
|
end
|
56
43
|
|
44
|
+
it "should have no changes after find" do
|
45
|
+
box = Box.find("square")
|
46
|
+
box.changes.should == {}
|
47
|
+
end
|
48
|
+
|
57
49
|
it "should find the first document using the first key with the bucket's keys" do
|
58
50
|
box = Box.new
|
59
51
|
keys = ['some_boxes_key']
|
@@ -110,9 +102,15 @@ describe Ripple::Document::Finders do
|
|
110
102
|
box.should be_kind_of(Box)
|
111
103
|
box.key.should == "square"
|
112
104
|
end
|
105
|
+
|
106
|
+
it 'initializes the document with no changed attributes' do
|
107
|
+
box = Box.find("square")
|
108
|
+
box.should_not be_changed
|
109
|
+
box.changes.should be_empty
|
110
|
+
end
|
113
111
|
end
|
114
112
|
|
115
|
-
describe "finding multiple documents" do
|
113
|
+
describe "finding multiple documents when given a splat of keys" do
|
116
114
|
it "should find multiple documents by the keys" do
|
117
115
|
@bucket.should_receive(:get).with("square", {}).and_return(@plain)
|
118
116
|
@bucket.should_receive(:get).with("rectangle", {}).and_return(@cb)
|
@@ -141,12 +139,48 @@ describe Ripple::Document::Finders do
|
|
141
139
|
end
|
142
140
|
end
|
143
141
|
|
144
|
-
describe "finding
|
142
|
+
describe "finding multiple documents when given an array" do
|
143
|
+
it "should find multiple documents by the keys" do
|
144
|
+
@bucket.should_receive(:get).with("square", {}).and_return(@plain)
|
145
|
+
@bucket.should_receive(:get).with("rectangle", {}).and_return(@cb)
|
146
|
+
boxes = Box.find(["square", "rectangle"])
|
147
|
+
boxes.should have(2).items
|
148
|
+
boxes.first.shape.should == "square"
|
149
|
+
boxes.last.shape.should == "rectangle"
|
150
|
+
end
|
151
|
+
|
152
|
+
it "should return an array of docs when given an array of one key" do
|
153
|
+
@bucket.should_receive(:get).with("square", {}).and_return(@plain)
|
154
|
+
boxes = Box.find(["square"])
|
155
|
+
boxes.should have(1).items
|
156
|
+
boxes.first.shape.should == "square"
|
157
|
+
end
|
158
|
+
|
159
|
+
it "should return an empty array when given an empty array" do
|
160
|
+
Box.find([ ]).should == []
|
161
|
+
end
|
162
|
+
|
163
|
+
describe "when using find with missing keys" do
|
164
|
+
before :each do
|
165
|
+
@bucket.should_receive(:get).with("square", {}).and_return(@plain)
|
166
|
+
@bucket.should_receive(:get).with("rectangle", {}).and_raise(Riak::HTTPFailedRequest.new(:get, 200, 404, {}, "404 not found"))
|
167
|
+
end
|
168
|
+
|
169
|
+
it "should return nil for documents that no longer exist" do
|
170
|
+
boxes = Box.find(["square", "rectangle"])
|
171
|
+
boxes.should have(2).items
|
172
|
+
boxes.first.shape.should == "square"
|
173
|
+
boxes.last.should be_nil
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
describe "listings all documents in the bucket" do
|
145
179
|
it "should load all objects in the bucket" do
|
146
180
|
@bucket.should_receive(:keys).and_return(["square", "rectangle"])
|
147
181
|
@bucket.should_receive(:get).with("square", {}).and_return(@plain)
|
148
182
|
@bucket.should_receive(:get).with("rectangle", {}).and_return(@cb)
|
149
|
-
boxes = Box.
|
183
|
+
boxes = Box.list
|
150
184
|
boxes.should have(2).items
|
151
185
|
boxes.first.shape.should == "square"
|
152
186
|
boxes.last.shape.should == "rectangle"
|
@@ -156,7 +190,7 @@ describe Ripple::Document::Finders do
|
|
156
190
|
@bucket.should_receive(:keys).and_return(["square", "rectangle"])
|
157
191
|
@bucket.should_receive(:get).with("square", {}).and_return(@plain)
|
158
192
|
@bucket.should_receive(:get).with("rectangle", {}).and_raise(Riak::HTTPFailedRequest.new(:get, 200, 404, {}, "404 not found"))
|
159
|
-
boxes = Box.
|
193
|
+
boxes = Box.list
|
160
194
|
boxes.should have(1).item
|
161
195
|
boxes.first.shape.should == "square"
|
162
196
|
end
|
@@ -167,16 +201,11 @@ describe Ripple::Document::Finders do
|
|
167
201
|
@bucket.should_receive(:get).with("rectangle", {}).and_raise(Riak::HTTPFailedRequest.new(:get, 200, 404, {}, "404 not found"))
|
168
202
|
@block = mock()
|
169
203
|
@block.should_receive(:ping).once
|
170
|
-
Box.
|
204
|
+
Box.list do |box|
|
171
205
|
@block.ping
|
172
206
|
["square", "rectangle"].should include(box.shape)
|
173
207
|
end.should == []
|
174
208
|
end
|
175
|
-
|
176
|
-
it "should pass any given options to the underlying Bucket#keys method" do
|
177
|
-
@bucket.should_receive(:keys).with(:reload => true).and_return([])
|
178
|
-
Box.all(:reload => true).should == []
|
179
|
-
end
|
180
209
|
end
|
181
210
|
|
182
211
|
describe "single-bucket inheritance" do
|
@@ -1,48 +1,51 @@
|
|
1
|
-
|
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__)
|
1
|
+
require 'spec_helper'
|
15
2
|
|
16
3
|
describe Ripple::Inspection do
|
17
|
-
require 'support/models/box'
|
18
|
-
require 'support/models/address'
|
4
|
+
# require 'support/models/box'
|
5
|
+
# require 'support/models/address'
|
6
|
+
|
7
|
+
shared_examples_for 'an inspected document' do |method|
|
8
|
+
|
9
|
+
it "should include the class name in the inspect string" do
|
10
|
+
@box.send(method).should be_starts_with("<Box")
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should include the key in the #{method} string for documents" do
|
14
|
+
@box.key = "square"
|
15
|
+
@box.send(method).should be_starts_with("<Box:square")
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should indicate a new document when no key is specified" do
|
19
|
+
@box.send(method).should be_starts_with("<Box:[new]")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should not display a key for embedded documents" do
|
23
|
+
@address.send(method).should_not include("[new]")
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
19
27
|
|
20
28
|
before :each do
|
21
29
|
@box = Box.new
|
22
30
|
@address = Address.new
|
23
31
|
end
|
24
|
-
|
25
|
-
it "should include the class name in the inspect string" do
|
26
|
-
@box.inspect.should be_starts_with("<Box")
|
27
|
-
end
|
28
|
-
|
29
|
-
it "should include the key in the inspect string for documents" do
|
30
|
-
@box.key = "square"
|
31
|
-
@box.inspect.should be_starts_with("<Box:square")
|
32
|
-
end
|
33
|
-
|
34
|
-
it "should indicate a new document when no key is specified" do
|
35
|
-
@box.inspect.should be_starts_with("<Box:[new]")
|
36
|
-
end
|
37
32
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
33
|
+
describe '#inspect' do
|
34
|
+
|
35
|
+
it_should_behave_like 'an inspected document', :inspect
|
36
|
+
|
37
|
+
it "should enumerate the document's properties and their values" do
|
38
|
+
@box.shape = "square"
|
39
|
+
@box.inspect.should include("shape=\"square\"")
|
40
|
+
@box.inspect.should include("created_at=")
|
41
|
+
@box.inspect.should include("updated_at=")
|
42
|
+
end
|
43
|
+
|
43
44
|
end
|
44
|
-
|
45
|
-
|
46
|
-
|
45
|
+
|
46
|
+
describe '#to_s' do
|
47
|
+
|
48
|
+
it_should_behave_like 'an inspected document', :to_s
|
49
|
+
|
47
50
|
end
|
48
51
|
end
|