ripple 0.9.5 → 1.0.0.beta

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 (152) hide show
  1. data/.gitignore +32 -0
  2. data/Gemfile +10 -9
  3. data/Guardfile +15 -0
  4. data/Rakefile +11 -40
  5. data/lib/rails/generators/ripple/configuration/configuration_generator.rb +0 -13
  6. data/lib/rails/generators/ripple/configuration/templates/ripple.yml +4 -4
  7. data/lib/rails/generators/ripple/js/js_generator.rb +0 -13
  8. data/lib/rails/generators/ripple/js/templates/js/contrib.js +0 -17
  9. data/lib/rails/generators/ripple/js/templates/js/ripple.js +0 -13
  10. data/lib/rails/generators/ripple/model/model_generator.rb +0 -14
  11. data/lib/rails/generators/ripple/model/templates/model.rb +1 -1
  12. data/lib/rails/generators/ripple/observer/observer_generator.rb +0 -14
  13. data/lib/rails/generators/ripple/test/test_generator.rb +7 -19
  14. data/lib/rails/generators/ripple_generator.rb +1 -14
  15. data/lib/ripple.rb +7 -14
  16. data/lib/ripple/associations.rb +129 -26
  17. data/lib/ripple/associations/embedded.rb +1 -15
  18. data/lib/ripple/associations/instantiators.rb +0 -13
  19. data/lib/ripple/associations/linked.rb +41 -19
  20. data/lib/ripple/associations/many.rb +0 -14
  21. data/lib/ripple/associations/many_embedded_proxy.rb +0 -14
  22. data/lib/ripple/associations/many_linked_proxy.rb +39 -18
  23. data/lib/ripple/associations/many_reference_proxy.rb +93 -0
  24. data/lib/ripple/associations/many_stored_key_proxy.rb +76 -0
  25. data/lib/ripple/associations/one.rb +1 -15
  26. data/lib/ripple/associations/one_embedded_proxy.rb +0 -14
  27. data/lib/ripple/associations/one_key_proxy.rb +58 -0
  28. data/lib/ripple/associations/one_linked_proxy.rb +4 -14
  29. data/lib/ripple/associations/one_stored_key_proxy.rb +43 -0
  30. data/lib/ripple/associations/proxy.rb +8 -14
  31. data/lib/ripple/attribute_methods.rb +19 -17
  32. data/lib/ripple/attribute_methods/dirty.rb +19 -15
  33. data/lib/ripple/attribute_methods/query.rb +0 -14
  34. data/lib/ripple/attribute_methods/read.rb +0 -14
  35. data/lib/ripple/attribute_methods/write.rb +0 -14
  36. data/lib/ripple/callbacks.rb +10 -16
  37. data/lib/ripple/conflict/basic_resolver.rb +82 -0
  38. data/lib/ripple/conflict/document_hooks.rb +20 -0
  39. data/lib/ripple/conflict/resolver.rb +71 -0
  40. data/lib/ripple/conflict/test_helper.rb +33 -0
  41. data/lib/ripple/conversion.rb +0 -14
  42. data/lib/ripple/core_ext.rb +1 -14
  43. data/lib/ripple/core_ext/casting.rb +19 -19
  44. data/lib/ripple/core_ext/object.rb +8 -0
  45. data/lib/ripple/document.rb +21 -16
  46. data/lib/ripple/document/bucket_access.rb +0 -14
  47. data/lib/ripple/document/finders.rb +17 -23
  48. data/lib/ripple/document/key.rb +8 -28
  49. data/lib/ripple/document/link.rb +30 -0
  50. data/lib/ripple/document/persistence.rb +12 -20
  51. data/lib/ripple/embedded_document.rb +10 -15
  52. data/lib/ripple/embedded_document/around_callbacks.rb +18 -0
  53. data/lib/ripple/embedded_document/finders.rb +7 -18
  54. data/lib/ripple/embedded_document/persistence.rb +5 -17
  55. data/lib/ripple/i18n.rb +0 -14
  56. data/lib/ripple/inspection.rb +21 -15
  57. data/lib/ripple/locale/en.yml +9 -13
  58. data/lib/ripple/nested_attributes.rb +33 -39
  59. data/lib/ripple/observable.rb +0 -13
  60. data/lib/ripple/properties.rb +1 -14
  61. data/lib/ripple/property_type_mismatch.rb +0 -14
  62. data/lib/ripple/railtie.rb +4 -14
  63. data/lib/ripple/railties/ripple.rake +86 -0
  64. data/lib/ripple/serialization.rb +11 -11
  65. data/lib/ripple/test_server.rb +36 -0
  66. data/lib/ripple/timestamps.rb +0 -13
  67. data/lib/ripple/translation.rb +4 -14
  68. data/lib/ripple/validations.rb +1 -15
  69. data/lib/ripple/validations/associated_validator.rb +26 -17
  70. data/lib/ripple/version.rb +3 -0
  71. data/ripple.gemspec +24 -35
  72. data/spec/integration/ripple/associations_spec.rb +89 -58
  73. data/spec/integration/ripple/conflict_resolution_spec.rb +298 -0
  74. data/spec/integration/ripple/nested_attributes_spec.rb +19 -19
  75. data/spec/integration/ripple/persistence_spec.rb +15 -34
  76. data/spec/integration/ripple/search_associations_spec.rb +31 -0
  77. data/spec/ripple/associations/many_embedded_proxy_spec.rb +23 -36
  78. data/spec/ripple/associations/many_linked_proxy_spec.rb +133 -45
  79. data/spec/ripple/associations/many_reference_proxy_spec.rb +170 -0
  80. data/spec/ripple/associations/many_stored_key_proxy_spec.rb +158 -0
  81. data/spec/ripple/associations/one_embedded_proxy_spec.rb +24 -37
  82. data/spec/ripple/associations/one_key_proxy_spec.rb +82 -0
  83. data/spec/ripple/associations/one_linked_proxy_spec.rb +22 -23
  84. data/spec/ripple/associations/one_stored_key_proxy_spec.rb +72 -0
  85. data/spec/ripple/associations/proxy_spec.rb +21 -15
  86. data/spec/ripple/associations_spec.rb +54 -23
  87. data/spec/ripple/attribute_methods/dirty_spec.rb +56 -5
  88. data/spec/ripple/attribute_methods_spec.rb +47 -21
  89. data/spec/ripple/bucket_access_spec.rb +4 -17
  90. data/spec/ripple/callbacks_spec.rb +52 -15
  91. data/spec/ripple/conflict/resolver_spec.rb +42 -0
  92. data/spec/ripple/conversion_spec.rb +2 -15
  93. data/spec/ripple/core_ext_spec.rb +12 -15
  94. data/spec/ripple/document/link_spec.rb +67 -0
  95. data/spec/ripple/document_spec.rb +34 -19
  96. data/spec/ripple/embedded_document/finders_spec.rb +12 -19
  97. data/spec/ripple/embedded_document/persistence_spec.rb +20 -26
  98. data/spec/ripple/embedded_document_spec.rb +44 -34
  99. data/spec/ripple/finders_spec.rb +58 -29
  100. data/spec/ripple/inspection_spec.rb +40 -37
  101. data/spec/ripple/key_spec.rb +5 -17
  102. data/spec/ripple/observable_spec.rb +3 -16
  103. data/spec/ripple/persistence_spec.rb +134 -18
  104. data/spec/ripple/properties_spec.rb +21 -15
  105. data/spec/ripple/ripple_spec.rb +1 -14
  106. data/spec/ripple/serialization_spec.rb +16 -17
  107. data/spec/ripple/timestamps_spec.rb +73 -52
  108. data/spec/ripple/validations/associated_validator_spec.rb +69 -25
  109. data/spec/ripple/validations_spec.rb +3 -16
  110. data/spec/spec_helper.rb +17 -18
  111. data/spec/support/associations.rb +1 -1
  112. data/spec/support/associations/proxies.rb +0 -13
  113. data/spec/support/integration_setup.rb +11 -0
  114. data/spec/support/mocks.rb +0 -13
  115. data/spec/support/models.rb +33 -2
  116. data/spec/support/models/address.rb +1 -16
  117. data/spec/support/models/box.rb +7 -14
  118. data/spec/support/models/car.rb +27 -1
  119. data/spec/support/models/cardboard_box.rb +0 -14
  120. data/spec/support/models/clock.rb +6 -15
  121. data/spec/support/models/clock_observer.rb +0 -14
  122. data/spec/support/models/credit_card.rb +5 -0
  123. data/spec/support/models/customer.rb +0 -14
  124. data/spec/support/models/email.rb +0 -14
  125. data/spec/support/models/family.rb +1 -13
  126. data/spec/support/models/favorite.rb +0 -14
  127. data/spec/support/models/invoice.rb +0 -14
  128. data/spec/support/models/late_invoice.rb +0 -14
  129. data/spec/support/models/nested.rb +12 -0
  130. data/spec/support/models/ninja.rb +7 -0
  131. data/spec/support/models/note.rb +0 -14
  132. data/spec/support/models/page.rb +1 -15
  133. data/spec/support/models/paid_invoice.rb +0 -14
  134. data/spec/support/models/post.rb +12 -0
  135. data/spec/support/models/profile.rb +7 -0
  136. data/spec/support/models/subscription.rb +26 -0
  137. data/spec/support/models/tasks.rb +0 -18
  138. data/spec/support/models/team.rb +11 -0
  139. data/spec/support/models/transactions.rb +17 -0
  140. data/spec/support/models/tree.rb +2 -16
  141. data/spec/support/models/user.rb +14 -16
  142. data/spec/support/models/widget.rb +8 -14
  143. data/spec/support/search.rb +14 -0
  144. data/spec/support/test_server.rb +22 -12
  145. data/spec/support/test_server.yml.example +14 -2
  146. metadata +223 -59
  147. data/lib/rails/generators/ripple/test/templates/test_server.rb +0 -46
  148. data/spec/support/models/driver.rb +0 -5
  149. data/spec/support/models/engine.rb +0 -4
  150. data/spec/support/models/passenger.rb +0 -5
  151. data/spec/support/models/seat.rb +0 -4
  152. data/spec/support/models/wheel.rb +0 -5
@@ -1,33 +1,77 @@
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__)
1
+ require 'spec_helper'
15
2
 
16
3
  describe Ripple::Validations::AssociatedValidator do
17
- require 'support/models/family'
4
+ context 'for a one association' do
5
+ # require 'support/models/family'
18
6
 
19
- let(:child) { Child.new }
20
- let(:parent) { Parent.new }
21
- before(:each) { parent.child = child }
7
+ let(:child) { Child.new }
8
+ let(:parent) { Parent.new }
9
+ before(:each) { parent.child = child }
22
10
 
23
- it "is invalid when the associated record is invalid" do
24
- child.should_not be_valid
25
- parent.should_not be_valid
11
+ it "is invalid when the associated record is invalid" do
12
+ child.should_not be_valid
13
+ parent.should_not be_valid
14
+ end
15
+
16
+ it "includes the associated record's validation error messages in the error message" do
17
+ parent.valid?
18
+ parent.errors[:child].size.should == 1
19
+ parent.errors[:child].first.should =~ /is invalid \(Name can't be blank and Age can't be blank\)/
20
+ end
21
+
22
+ it "is valid when the associated record is valid" do
23
+ child.name = 'Coen'
24
+ child.age = 1
25
+ child.should be_valid
26
+ parent.should be_valid
27
+ end
26
28
  end
27
29
 
28
- it "is valid when the associated record is valid" do
29
- child.name = 'Coen'
30
- child.should be_valid
31
- parent.should be_valid
30
+ context 'for a many association' do
31
+ # require 'support/models/team'
32
+
33
+ let(:team) { Team.new }
34
+ let(:ichiro) { Player.new(:name => 'Ichiro', :position => 'Right Field') }
35
+ let(:satchel_paige) { Player.new(:position => 'Pitcher') }
36
+ let(:unknown) { Player.new }
37
+
38
+ before(:each) do
39
+ team.players << ichiro
40
+ team.players << satchel_paige
41
+ team.players << unknown
42
+ end
43
+
44
+ it 'is invalid when the associated records are invalid' do
45
+ satchel_paige.should_not be_valid
46
+ unknown.should_not be_valid
47
+ team.should_not be_valid
48
+ end
49
+
50
+ it "includes the associated records' validation error messages in the error message" do
51
+ team.valid?
52
+ team.errors[:players].size.should == 1
53
+
54
+ expected_errors = [
55
+ "for player 2: Name can't be blank",
56
+ "for player 3: Name can't be blank and Position can't be blank"
57
+ ]
58
+
59
+ expected_errors = expected_errors.join('; ')
60
+ team.errors[:players].first.should == "are invalid (#{expected_errors})"
61
+ end
62
+
63
+ it 'is valid when the associated records are all valid' do
64
+ ichiro.position = 'Right Field'
65
+ ichiro.should be_valid
66
+
67
+ satchel_paige.name = 'Satchel Paige'
68
+ satchel_paige.should be_valid
69
+
70
+ unknown.name = 'John Doe'
71
+ unknown.position = 'First Base'
72
+ unknown.should be_valid
73
+
74
+ team.should be_valid
75
+ end
32
76
  end
33
77
  end
@@ -1,20 +1,7 @@
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__)
1
+ require 'spec_helper'
15
2
 
16
3
  describe Ripple::Validations do
17
- require 'support/models/box'
4
+ # require 'support/models/box'
18
5
 
19
6
  before :each do
20
7
  @box = Box.new
@@ -77,7 +64,7 @@ describe Ripple::Validations do
77
64
  end
78
65
 
79
66
  it "should allow unexpected exceptions to be raised" do
80
- robject = mock("robject", :key => @box.key, "data=" => true)
67
+ robject = mock("robject", :key => @box.key, "data=" => true, "content_type=" => true)
81
68
  robject.should_receive(:store).and_raise(Riak::HTTPFailedRequest.new(:post, 200, 404, {}, "404 not found"))
82
69
  @box.stub!(:robject).and_return(robject)
83
70
  @box.stub!(:valid?).and_return(true)
@@ -1,33 +1,32 @@
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
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
15
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
16
3
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', '..', 'riak-client','lib'))
17
4
 
18
5
  require 'rubygems' # Use the gems path only for the spec suite
19
6
  require 'ripple'
7
+ require 'ripple/conflict/test_helper'
20
8
  require 'rspec'
21
9
 
22
- Dir[File.join(File.dirname(__FILE__), "support", "*.rb")].each {|f| require f }
10
+ # Only the tests should really get away with this.
11
+ Riak.disable_list_keys_warnings = true
12
+
13
+ %w[
14
+ integration_setup
15
+ mocks
16
+ test_server
17
+ search
18
+ models
19
+ associations
20
+ ].each do |file|
21
+ require File.join("support", file)
22
+ end
23
23
 
24
24
  RSpec.configure do |config|
25
25
  config.mock_with :rspec
26
- config.after(:each) do
27
- $test_server.recycle if $test_server
28
- end
29
26
 
30
- config.filter_run :focus => true
27
+ config.treat_symbols_as_metadata_keys_with_true_values = true
28
+ config.filter_run :focus
31
29
  config.run_all_when_everything_filtered = true
32
30
  config.debug = true
31
+ config.include Ripple::Conflict::TestHelper
33
32
  end
@@ -1 +1 @@
1
- require File.expand_path("../associations/proxies", __FILE__)
1
+ require 'support/associations/proxies'
@@ -1,16 +1,3 @@
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
1
 
15
2
 
16
3
  class FakeNilProxy < Ripple::Associations::Proxy
@@ -0,0 +1,11 @@
1
+ # auto-tag all integration specs with :integration => true
2
+ module IntegrationSpecs
3
+ def self.included(klass)
4
+ klass.metadata[:integration] = true
5
+ end
6
+ end
7
+
8
+ RSpec.configure do |config|
9
+ config.include IntegrationSpecs, :example_group => { :file_path => %r{spec/integration} }
10
+ end
11
+
@@ -1,16 +1,3 @@
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
1
 
15
2
  def mock_response(overrides={})
16
3
  {:headers => {"content-type" => ["application/json"]}, :body => '{}'}.merge(overrides)
@@ -1,3 +1,34 @@
1
- Dir[File.expand_path("../models/*.rb", __FILE__)].each do |file|
2
- require "support/models/#{File.basename(file)}"
1
+ # You MUST add models to this file, in the correct order by
2
+ # dependency (no deps at top). There is no auto-require.
3
+ %w[
4
+ note
5
+ page
6
+ box
7
+ car
8
+ clock
9
+ customer
10
+ email
11
+ family
12
+ favorite
13
+ subscription
14
+ team
15
+ transactions
16
+ tree
17
+ widget
18
+ address
19
+ cardboard_box
20
+ clock_observer
21
+ invoice
22
+ paid_invoice
23
+ late_invoice
24
+ company
25
+ profile
26
+ user
27
+ ninja
28
+ tasks
29
+ credit_card
30
+ post
31
+ nested
32
+ ].each do |file|
33
+ require File.join("support", "models", file)
3
34
  end
@@ -1,22 +1,7 @@
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 'support/models/note'
16
-
17
1
  class Address
18
2
  include Ripple::EmbeddedDocument
19
3
  property :street, String, :presence => true
4
+ property :kind, String, :presence => true
20
5
  many :notes
21
6
  embedded_in :user
22
7
  end
@@ -1,19 +1,12 @@
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
1
  class Box
16
2
  include Ripple::Document
17
3
  property :shape, String
4
+ many :sides, :class_name => 'BoxSide'
18
5
  timestamps!
19
6
  end
7
+
8
+ class BoxSide
9
+ include Ripple::EmbeddedDocument
10
+ embedded_in :box
11
+ property :material, String
12
+ end
@@ -1,6 +1,32 @@
1
+ class Driver
2
+ include Ripple::Document
3
+ property :name, String
4
+ key_on :name
5
+ end
6
+
7
+ class Passenger
8
+ include Ripple::Document
9
+ property :name, String
10
+ end
11
+
12
+ class Engine
13
+ include Ripple::EmbeddedDocument
14
+ property :displacement, String
15
+ end
16
+
17
+ class Wheel
18
+ include Ripple::Document
19
+ property :diameter, Integer
20
+ end
21
+
22
+ class Seat
23
+ include Ripple::EmbeddedDocument
24
+ property :color, String
25
+ end
26
+
1
27
  class Car
2
28
  include Ripple::Document
3
-
29
+
4
30
  property :make, String
5
31
  property :model, String
6
32
 
@@ -1,16 +1,2 @@
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
1
  class CardboardBox < Box
16
2
  end
@@ -1,19 +1,10 @@
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
-
16
1
  class Clock
17
2
  include Ripple::Document
18
3
  timestamps!
4
+ many :modes
5
+ end
6
+
7
+ class Mode
8
+ include Ripple::EmbeddedDocument
9
+ timestamps!
19
10
  end
@@ -1,16 +1,2 @@
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
1
  class ClockObserver < ActiveModel::Observer
16
2
  end
@@ -0,0 +1,5 @@
1
+ class CreditCard
2
+ include Ripple::Document
3
+ one :user, :using => :key
4
+ property :number, Integer
5
+ end
@@ -1,17 +1,3 @@
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
1
  class Customer
16
2
  include Ripple::Document
17
3
  end