ripple 0.9.0.beta2 → 0.9.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.
- data/Gemfile +8 -0
- data/Rakefile +11 -116
- data/lib/rails/generators/ripple/configuration/templates/ripple.yml +6 -3
- data/lib/ripple.rb +2 -1
- data/lib/ripple/associations.rb +7 -1
- data/lib/ripple/associations/many_linked_proxy.rb +7 -0
- data/lib/ripple/associations/one_embedded_proxy.rb +8 -1
- data/lib/ripple/associations/one_linked_proxy.rb +5 -1
- data/lib/ripple/associations/proxy.rb +6 -6
- data/lib/ripple/document.rb +1 -0
- data/lib/ripple/embedded_document.rb +9 -0
- data/lib/ripple/serialization.rb +84 -0
- data/lib/ripple/validations.rb +4 -0
- data/lib/ripple/validations/associated_validator.rb +0 -6
- data/ripple.gemspec +8 -8
- data/spec/fixtures/config.yml +3 -3
- data/spec/integration/ripple/associations_spec.rb +30 -0
- data/spec/ripple/associations/one_embedded_proxy_spec.rb +5 -2
- data/spec/ripple/associations_spec.rb +7 -0
- data/spec/ripple/embedded_document_spec.rb +47 -0
- data/spec/ripple/ripple_spec.rb +5 -5
- data/spec/ripple/serialization_spec.rb +52 -0
- data/spec/ripple/validations/associated_validator_spec.rb +33 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/support/models/address.rb +3 -0
- data/spec/support/models/clock_observer.rb +16 -0
- data/spec/support/models/family.rb +1 -0
- data/spec/support/models/invoice.rb +1 -0
- data/spec/support/models/note.rb +1 -0
- data/spec/support/test_server.rb +1 -1
- metadata +12 -6
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -16,122 +16,17 @@ gemspec = Gem::Specification.new do |gem|
|
|
16
16
|
gem.add_dependency "activesupport", "~>3.0.0"
|
17
17
|
gem.add_dependency "activemodel", "~>3.0.0"
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
lib/rails/generators/ripple/observer/observer_generator.rb
|
31
|
-
lib/rails/generators/ripple/observer/templates/observer.rb
|
32
|
-
lib/rails/generators/ripple/test/templates/test_server.rb
|
33
|
-
lib/rails/generators/ripple/test/test_generator.rb
|
34
|
-
lib/rails/generators/ripple_generator.rb
|
35
|
-
lib/ripple/associations/embedded.rb
|
36
|
-
lib/ripple/associations/instantiators.rb
|
37
|
-
lib/ripple/associations/linked.rb
|
38
|
-
lib/ripple/associations/many.rb
|
39
|
-
lib/ripple/associations/many_embedded_proxy.rb
|
40
|
-
lib/ripple/associations/many_linked_proxy.rb
|
41
|
-
lib/ripple/associations/one.rb
|
42
|
-
lib/ripple/associations/one_embedded_proxy.rb
|
43
|
-
lib/ripple/associations/one_linked_proxy.rb
|
44
|
-
lib/ripple/associations/proxy.rb
|
45
|
-
lib/ripple/associations.rb
|
46
|
-
lib/ripple/attribute_methods/dirty.rb
|
47
|
-
lib/ripple/attribute_methods/query.rb
|
48
|
-
lib/ripple/attribute_methods/read.rb
|
49
|
-
lib/ripple/attribute_methods/write.rb
|
50
|
-
lib/ripple/attribute_methods.rb
|
51
|
-
lib/ripple/callbacks.rb
|
52
|
-
lib/ripple/conversion.rb
|
53
|
-
lib/ripple/core_ext/casting.rb
|
54
|
-
lib/ripple/core_ext.rb
|
55
|
-
lib/ripple/document/bucket_access.rb
|
56
|
-
lib/ripple/document/finders.rb
|
57
|
-
lib/ripple/document/key.rb
|
58
|
-
lib/ripple/document/persistence.rb
|
59
|
-
lib/ripple/document.rb
|
60
|
-
lib/ripple/embedded_document/finders.rb
|
61
|
-
lib/ripple/embedded_document/persistence.rb
|
62
|
-
lib/ripple/embedded_document.rb
|
63
|
-
lib/ripple/i18n.rb
|
64
|
-
lib/ripple/inspection.rb
|
65
|
-
lib/ripple/locale/en.yml
|
66
|
-
lib/ripple/nested_attributes.rb
|
67
|
-
lib/ripple/observable.rb
|
68
|
-
lib/ripple/properties.rb
|
69
|
-
lib/ripple/property_type_mismatch.rb
|
70
|
-
lib/ripple/railtie.rb
|
71
|
-
lib/ripple/timestamps.rb
|
72
|
-
lib/ripple/translation.rb
|
73
|
-
lib/ripple/validations/associated_validator.rb
|
74
|
-
lib/ripple/validations.rb
|
75
|
-
lib/ripple.rb
|
76
|
-
Rakefile
|
77
|
-
ripple.gemspec
|
78
|
-
spec/fixtures/config.yml
|
79
|
-
spec/integration/ripple/associations_spec.rb
|
80
|
-
spec/integration/ripple/nested_attributes_spec.rb
|
81
|
-
spec/integration/ripple/persistence_spec.rb
|
82
|
-
spec/ripple/associations/many_embedded_proxy_spec.rb
|
83
|
-
spec/ripple/associations/many_linked_proxy_spec.rb
|
84
|
-
spec/ripple/associations/one_embedded_proxy_spec.rb
|
85
|
-
spec/ripple/associations/one_linked_proxy_spec.rb
|
86
|
-
spec/ripple/associations/proxy_spec.rb
|
87
|
-
spec/ripple/associations_spec.rb
|
88
|
-
spec/ripple/attribute_methods_spec.rb
|
89
|
-
spec/ripple/bucket_access_spec.rb
|
90
|
-
spec/ripple/callbacks_spec.rb
|
91
|
-
spec/ripple/conversion_spec.rb
|
92
|
-
spec/ripple/core_ext_spec.rb
|
93
|
-
spec/ripple/document_spec.rb
|
94
|
-
spec/ripple/embedded_document/finders_spec.rb
|
95
|
-
spec/ripple/embedded_document/persistence_spec.rb
|
96
|
-
spec/ripple/embedded_document_spec.rb
|
97
|
-
spec/ripple/finders_spec.rb
|
98
|
-
spec/ripple/inspection_spec.rb
|
99
|
-
spec/ripple/key_spec.rb
|
100
|
-
spec/ripple/observable_spec.rb
|
101
|
-
spec/ripple/persistence_spec.rb
|
102
|
-
spec/ripple/properties_spec.rb
|
103
|
-
spec/ripple/ripple_spec.rb
|
104
|
-
spec/ripple/timestamps_spec.rb
|
105
|
-
spec/ripple/validations_spec.rb
|
106
|
-
spec/spec_helper.rb
|
107
|
-
spec/support/associations/proxies.rb
|
108
|
-
spec/support/mocks.rb
|
109
|
-
spec/support/models/address.rb
|
110
|
-
spec/support/models/box.rb
|
111
|
-
spec/support/models/car.rb
|
112
|
-
spec/support/models/cardboard_box.rb
|
113
|
-
spec/support/models/clock.rb
|
114
|
-
spec/support/models/customer.rb
|
115
|
-
spec/support/models/driver.rb
|
116
|
-
spec/support/models/email.rb
|
117
|
-
spec/support/models/engine.rb
|
118
|
-
spec/support/models/family.rb
|
119
|
-
spec/support/models/favorite.rb
|
120
|
-
spec/support/models/invoice.rb
|
121
|
-
spec/support/models/late_invoice.rb
|
122
|
-
spec/support/models/note.rb
|
123
|
-
spec/support/models/page.rb
|
124
|
-
spec/support/models/paid_invoice.rb
|
125
|
-
spec/support/models/passenger.rb
|
126
|
-
spec/support/models/seat.rb
|
127
|
-
spec/support/models/tasks.rb
|
128
|
-
spec/support/models/tree.rb
|
129
|
-
spec/support/models/user.rb
|
130
|
-
spec/support/models/wheel.rb
|
131
|
-
spec/support/models/widget.rb
|
132
|
-
spec/support/test_server.rb
|
133
|
-
spec/support/test_server.yml.example
|
134
|
-
}
|
19
|
+
files = FileList["**/*"]
|
20
|
+
# Editor and O/S files
|
21
|
+
files.exclude ".DS_Store", "*~", "\#*", ".\#*", "*.swp", "*.tmproj", "tmtags"
|
22
|
+
# Generated artifacts
|
23
|
+
files.exclude "coverage", "rdoc", "pkg", ".bundle", "*.rbc", ".rvmrc", ".watchr", ".rspec"
|
24
|
+
# Project-specific
|
25
|
+
files.exclude "Gemfile.lock", %r{spec/support/test_server.yml$}, "bin"
|
26
|
+
# Remove directories
|
27
|
+
files.exclude {|d| File.directory?(d) }
|
28
|
+
|
29
|
+
gem.files = files.to_a
|
135
30
|
|
136
31
|
gem.test_files = gem.files.grep(/_spec\.rb$/)
|
137
32
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# Configure Riak connections for the Ripple library.
|
2
2
|
development:
|
3
|
-
|
3
|
+
http_port: 8098
|
4
|
+
pb_port: 8087
|
4
5
|
host: localhost
|
5
6
|
|
6
7
|
# The test environment has additional keys for configuring the
|
@@ -11,11 +12,13 @@ development:
|
|
11
12
|
# * js_source_dir specifies where your custom Javascript functions for
|
12
13
|
# MapReduce should be loaded from. Usually app/mapreduce.
|
13
14
|
test:
|
14
|
-
|
15
|
+
http_port: 9000
|
16
|
+
pb_port: 9002
|
15
17
|
host: localhost
|
16
18
|
bin_dir: /usr/local/bin # Default for Homebrew.
|
17
19
|
js_source_dir: <%%= Rails.root + "app/mapreduce" %>
|
18
20
|
|
19
21
|
production:
|
20
|
-
|
22
|
+
http_port: 8098
|
23
|
+
pb_port: 8087
|
21
24
|
host: localhost
|
data/lib/ripple.rb
CHANGED
@@ -41,6 +41,7 @@ module Ripple
|
|
41
41
|
autoload :Validations
|
42
42
|
autoload :NestedAttributes
|
43
43
|
autoload :Observable
|
44
|
+
autoload :Serialization
|
44
45
|
|
45
46
|
# Exceptions
|
46
47
|
autoload :PropertyTypeMismatch
|
@@ -100,7 +101,7 @@ module Ripple
|
|
100
101
|
|
101
102
|
private
|
102
103
|
def client_config
|
103
|
-
config.slice(
|
104
|
+
config.slice(*Riak::Client::VALID_OPTIONS)
|
104
105
|
end
|
105
106
|
end
|
106
107
|
|
data/lib/ripple/associations.rb
CHANGED
@@ -123,7 +123,13 @@ module Ripple
|
|
123
123
|
# @private
|
124
124
|
def attributes_for_persistence
|
125
125
|
self.class.embedded_associations.inject(super) do |attrs, association|
|
126
|
-
|
126
|
+
documents = instance_variable_get(association.ivar)
|
127
|
+
# We must explicitly check #nil? (rather than just saying `if documents`)
|
128
|
+
# because documents can be an association proxy that is proxying nil.
|
129
|
+
# In this case ruby treats documents as true because it is not _really_ nil,
|
130
|
+
# but #nil? will tell us if it is proxying nil.
|
131
|
+
|
132
|
+
unless documents.nil?
|
127
133
|
attrs[association.name] = documents.is_a?(Array) ? documents.map(&:attributes_for_persistence) : documents.attributes_for_persistence
|
128
134
|
end
|
129
135
|
attrs
|
@@ -23,7 +23,14 @@ module Ripple
|
|
23
23
|
@reflection.verify_type!(doc, @owner)
|
24
24
|
@_doc = doc.respond_to?(:attributes_for_persistence) ? doc.attributes_for_persistence : doc
|
25
25
|
assign_references(doc)
|
26
|
-
|
26
|
+
|
27
|
+
if doc.is_a?(@reflection.klass)
|
28
|
+
loaded
|
29
|
+
@target = doc
|
30
|
+
else
|
31
|
+
reset
|
32
|
+
end
|
33
|
+
|
27
34
|
@_doc
|
28
35
|
end
|
29
36
|
|
@@ -100,12 +100,12 @@ module Ripple
|
|
100
100
|
|
101
101
|
protected
|
102
102
|
def method_missing(method, *args, &block)
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
103
|
+
load_target
|
104
|
+
|
105
|
+
if block_given?
|
106
|
+
target.send(method, *args) { |*block_args| block.call(*block_args) }
|
107
|
+
else
|
108
|
+
target.send(method, *args)
|
109
109
|
end
|
110
110
|
end
|
111
111
|
|
data/lib/ripple/document.rb
CHANGED
@@ -38,6 +38,7 @@ module Ripple
|
|
38
38
|
include Finders
|
39
39
|
include Ripple::Inspection
|
40
40
|
include Ripple::NestedAttributes
|
41
|
+
include Ripple::Serialization
|
41
42
|
end
|
42
43
|
|
43
44
|
module ClassMethods
|
@@ -45,5 +46,13 @@ module Ripple
|
|
45
46
|
true
|
46
47
|
end
|
47
48
|
end
|
49
|
+
|
50
|
+
module InstanceMethods
|
51
|
+
def ==(other)
|
52
|
+
self.class == other.class &&
|
53
|
+
_parent_document == other._parent_document &&
|
54
|
+
attributes.except('_type') == other.attributes.except('_type')
|
55
|
+
end
|
56
|
+
end
|
48
57
|
end
|
49
58
|
end
|
@@ -0,0 +1,84 @@
|
|
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 'ripple'
|
15
|
+
require 'active_model/serialization'
|
16
|
+
require 'active_model/serializers/json'
|
17
|
+
require 'active_model/serializers/xml'
|
18
|
+
|
19
|
+
module Ripple
|
20
|
+
# Provides methods for serializing Ripple documents to external
|
21
|
+
# formats (e.g. JSON). By default, embedded documents will be
|
22
|
+
# included in the resulting format.
|
23
|
+
module Serialization
|
24
|
+
extend ActiveSupport::Concern
|
25
|
+
include ::ActiveModel::Serializers::JSON
|
26
|
+
|
27
|
+
module InstanceMethods
|
28
|
+
# Creates a Hash suitable for conversion to an external format.
|
29
|
+
# @param [Hash] options (nil) serialization options
|
30
|
+
# @option options [Array<Symbol>] :only emit only the specified attributes
|
31
|
+
# @option options [Array<Symbol>] :except omit the specified attributes
|
32
|
+
# @option options [Array<Symbol>, Hash] :include include the
|
33
|
+
# specified associations (with or without extra
|
34
|
+
# options). This defaults to all embedded associations.
|
35
|
+
# @return [Hash] a hash of attributes and embedded documents
|
36
|
+
def serializable_hash(options=nil)
|
37
|
+
options = options.try(:clone) || {}
|
38
|
+
|
39
|
+
unless options.has_key?(:include)
|
40
|
+
options[:include] = self.class.embedded_associations.map(&:name)
|
41
|
+
end
|
42
|
+
|
43
|
+
hash = super(options)
|
44
|
+
|
45
|
+
hash['key'] = key if respond_to?(:key) and key.present?
|
46
|
+
|
47
|
+
serializable_add_includes(options) do |association, records, opts|
|
48
|
+
hash[association.to_s] = records.is_a?(Enumerable) ? records.map {|r| r.serializable_hash(opts) } : records.serializable_hash(opts)
|
49
|
+
end
|
50
|
+
hash
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
def serializable_add_includes(options={})
|
55
|
+
return unless include_associations = options.delete(:include)
|
56
|
+
|
57
|
+
base_only_or_except = {
|
58
|
+
:except => options[:except],
|
59
|
+
:only => options[:only]
|
60
|
+
}
|
61
|
+
|
62
|
+
include_has_options = include_associations.is_a?(Hash)
|
63
|
+
associations = include_has_options ? include_associations.keys : Array.wrap(include_associations)
|
64
|
+
|
65
|
+
for association in associations
|
66
|
+
records = case self.class.associations[association.to_sym].type
|
67
|
+
when :many
|
68
|
+
send(association).to_a
|
69
|
+
when :one
|
70
|
+
send(association)
|
71
|
+
end
|
72
|
+
|
73
|
+
unless records.nil?
|
74
|
+
association_options = include_has_options ? include_associations[association] : base_only_or_except
|
75
|
+
opts = options.merge(association_options)
|
76
|
+
yield(association, records, opts)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
options[:include] = include_associations
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
data/lib/ripple/validations.rb
CHANGED
@@ -53,6 +53,10 @@ module Ripple
|
|
53
53
|
obj = create(attrs, &block)
|
54
54
|
(raise Ripple::DocumentInvalid.new(obj) if obj.new?) || obj
|
55
55
|
end
|
56
|
+
|
57
|
+
def validates_associated(*attr_names)
|
58
|
+
validates_with AssociatedValidator, _merge_attributes(attr_names)
|
59
|
+
end
|
56
60
|
end
|
57
61
|
|
58
62
|
module InstanceMethods
|
@@ -24,11 +24,5 @@ module Ripple
|
|
24
24
|
record.errors.add(attribute, :invalid, options.merge(:value => value))
|
25
25
|
end
|
26
26
|
end
|
27
|
-
|
28
|
-
module ClassMethods
|
29
|
-
def validates_associated(*attr_names)
|
30
|
-
validates_with AssociatedValidator, _merge_attributes(attr_names)
|
31
|
-
end
|
32
|
-
end
|
33
27
|
end
|
34
28
|
end
|
data/ripple.gemspec
CHANGED
@@ -2,37 +2,37 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{ripple}
|
5
|
-
s.version = "0.9.0
|
5
|
+
s.version = "0.9.0"
|
6
6
|
|
7
|
-
s.required_rubygems_version = Gem::Requirement.new("
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Sean Cribbs"]
|
9
|
-
s.date = %q{2011-03
|
9
|
+
s.date = %q{2011-04-03}
|
10
10
|
s.description = %q{ripple is an object-mapper library for Riak, the distributed database by Basho. It uses ActiveModel to provide an experience that integrates well with Rails 3 applications.}
|
11
11
|
s.email = %q{sean@basho.com}
|
12
|
-
s.files = ["Gemfile", "lib/rails/generators/ripple/configuration/configuration_generator.rb", "lib/rails/generators/ripple/configuration/templates/ripple.yml", "lib/rails/generators/ripple/js/js_generator.rb", "lib/rails/generators/ripple/js/templates/js/contrib.js", "lib/rails/generators/ripple/js/templates/js/iso8601.js", "lib/rails/generators/ripple/js/templates/js/ripple.js", "lib/rails/generators/ripple/model/model_generator.rb", "lib/rails/generators/ripple/model/templates/model.rb", "lib/rails/generators/ripple/observer/observer_generator.rb", "lib/rails/generators/ripple/observer/templates/observer.rb", "lib/rails/generators/ripple/test/templates/test_server.rb", "lib/rails/generators/ripple/test/test_generator.rb", "lib/rails/generators/ripple_generator.rb", "lib/ripple/associations/embedded.rb", "lib/ripple/associations/instantiators.rb", "lib/ripple/associations/linked.rb", "lib/ripple/associations/many.rb", "lib/ripple/associations/many_embedded_proxy.rb", "lib/ripple/associations/many_linked_proxy.rb", "lib/ripple/associations/one.rb", "lib/ripple/associations/one_embedded_proxy.rb", "lib/ripple/associations/one_linked_proxy.rb", "lib/ripple/associations/proxy.rb", "lib/ripple/associations.rb", "lib/ripple/attribute_methods/dirty.rb", "lib/ripple/attribute_methods/query.rb", "lib/ripple/attribute_methods/read.rb", "lib/ripple/attribute_methods/write.rb", "lib/ripple/attribute_methods.rb", "lib/ripple/callbacks.rb", "lib/ripple/conversion.rb", "lib/ripple/core_ext/casting.rb", "lib/ripple/core_ext.rb", "lib/ripple/document/bucket_access.rb", "lib/ripple/document/finders.rb", "lib/ripple/document/key.rb", "lib/ripple/document/persistence.rb", "lib/ripple/document.rb", "lib/ripple/embedded_document/finders.rb", "lib/ripple/embedded_document/persistence.rb", "lib/ripple/embedded_document.rb", "lib/ripple/i18n.rb", "lib/ripple/inspection.rb", "lib/ripple/locale/en.yml", "lib/ripple/nested_attributes.rb", "lib/ripple/observable.rb", "lib/ripple/properties.rb", "lib/ripple/property_type_mismatch.rb", "lib/ripple/railtie.rb", "lib/ripple/timestamps.rb", "lib/ripple/translation.rb", "lib/ripple/validations/associated_validator.rb", "lib/ripple/validations.rb", "lib/ripple.rb", "Rakefile", "ripple.gemspec", "spec/fixtures/config.yml", "spec/integration/ripple/associations_spec.rb", "spec/integration/ripple/nested_attributes_spec.rb", "spec/integration/ripple/persistence_spec.rb", "spec/ripple/associations/many_embedded_proxy_spec.rb", "spec/ripple/associations/many_linked_proxy_spec.rb", "spec/ripple/associations/one_embedded_proxy_spec.rb", "spec/ripple/associations/one_linked_proxy_spec.rb", "spec/ripple/associations/proxy_spec.rb", "spec/ripple/associations_spec.rb", "spec/ripple/attribute_methods_spec.rb", "spec/ripple/bucket_access_spec.rb", "spec/ripple/callbacks_spec.rb", "spec/ripple/conversion_spec.rb", "spec/ripple/core_ext_spec.rb", "spec/ripple/document_spec.rb", "spec/ripple/embedded_document/finders_spec.rb", "spec/ripple/embedded_document/persistence_spec.rb", "spec/ripple/embedded_document_spec.rb", "spec/ripple/finders_spec.rb", "spec/ripple/inspection_spec.rb", "spec/ripple/key_spec.rb", "spec/ripple/observable_spec.rb", "spec/ripple/persistence_spec.rb", "spec/ripple/properties_spec.rb", "spec/ripple/ripple_spec.rb", "spec/ripple/timestamps_spec.rb", "spec/ripple/validations_spec.rb", "spec/spec_helper.rb", "spec/support/associations/proxies.rb", "spec/support/mocks.rb", "spec/support/models/address.rb", "spec/support/models/box.rb", "spec/support/models/car.rb", "spec/support/models/cardboard_box.rb", "spec/support/models/clock.rb", "spec/support/models/customer.rb", "spec/support/models/driver.rb", "spec/support/models/email.rb", "spec/support/models/engine.rb", "spec/support/models/family.rb", "spec/support/models/favorite.rb", "spec/support/models/invoice.rb", "spec/support/models/late_invoice.rb", "spec/support/models/note.rb", "spec/support/models/page.rb", "spec/support/models/paid_invoice.rb", "spec/support/models/passenger.rb", "spec/support/models/seat.rb", "spec/support/models/tasks.rb", "spec/support/models/tree.rb", "spec/support/models/user.rb", "spec/support/models/wheel.rb", "spec/support/models/widget.rb", "spec/support/test_server.rb", "spec/support/test_server.yml.example"]
|
12
|
+
s.files = ["Gemfile", "lib/rails/generators/ripple/configuration/configuration_generator.rb", "lib/rails/generators/ripple/configuration/templates/ripple.yml", "lib/rails/generators/ripple/js/js_generator.rb", "lib/rails/generators/ripple/js/templates/js/contrib.js", "lib/rails/generators/ripple/js/templates/js/iso8601.js", "lib/rails/generators/ripple/js/templates/js/ripple.js", "lib/rails/generators/ripple/model/model_generator.rb", "lib/rails/generators/ripple/model/templates/model.rb", "lib/rails/generators/ripple/observer/observer_generator.rb", "lib/rails/generators/ripple/observer/templates/observer.rb", "lib/rails/generators/ripple/test/templates/test_server.rb", "lib/rails/generators/ripple/test/test_generator.rb", "lib/rails/generators/ripple_generator.rb", "lib/ripple/associations/embedded.rb", "lib/ripple/associations/instantiators.rb", "lib/ripple/associations/linked.rb", "lib/ripple/associations/many.rb", "lib/ripple/associations/many_embedded_proxy.rb", "lib/ripple/associations/many_linked_proxy.rb", "lib/ripple/associations/one.rb", "lib/ripple/associations/one_embedded_proxy.rb", "lib/ripple/associations/one_linked_proxy.rb", "lib/ripple/associations/proxy.rb", "lib/ripple/associations.rb", "lib/ripple/attribute_methods/dirty.rb", "lib/ripple/attribute_methods/query.rb", "lib/ripple/attribute_methods/read.rb", "lib/ripple/attribute_methods/write.rb", "lib/ripple/attribute_methods.rb", "lib/ripple/callbacks.rb", "lib/ripple/conversion.rb", "lib/ripple/core_ext/casting.rb", "lib/ripple/core_ext.rb", "lib/ripple/document/bucket_access.rb", "lib/ripple/document/finders.rb", "lib/ripple/document/key.rb", "lib/ripple/document/persistence.rb", "lib/ripple/document.rb", "lib/ripple/embedded_document/finders.rb", "lib/ripple/embedded_document/persistence.rb", "lib/ripple/embedded_document.rb", "lib/ripple/i18n.rb", "lib/ripple/inspection.rb", "lib/ripple/locale/en.yml", "lib/ripple/nested_attributes.rb", "lib/ripple/observable.rb", "lib/ripple/properties.rb", "lib/ripple/property_type_mismatch.rb", "lib/ripple/railtie.rb", "lib/ripple/serialization.rb", "lib/ripple/timestamps.rb", "lib/ripple/translation.rb", "lib/ripple/validations/associated_validator.rb", "lib/ripple/validations.rb", "lib/ripple.rb", "Rakefile", "ripple.gemspec", "spec/fixtures/config.yml", "spec/integration/ripple/associations_spec.rb", "spec/integration/ripple/nested_attributes_spec.rb", "spec/integration/ripple/persistence_spec.rb", "spec/ripple/associations/many_embedded_proxy_spec.rb", "spec/ripple/associations/many_linked_proxy_spec.rb", "spec/ripple/associations/one_embedded_proxy_spec.rb", "spec/ripple/associations/one_linked_proxy_spec.rb", "spec/ripple/associations/proxy_spec.rb", "spec/ripple/associations_spec.rb", "spec/ripple/attribute_methods_spec.rb", "spec/ripple/bucket_access_spec.rb", "spec/ripple/callbacks_spec.rb", "spec/ripple/conversion_spec.rb", "spec/ripple/core_ext_spec.rb", "spec/ripple/document_spec.rb", "spec/ripple/embedded_document/finders_spec.rb", "spec/ripple/embedded_document/persistence_spec.rb", "spec/ripple/embedded_document_spec.rb", "spec/ripple/finders_spec.rb", "spec/ripple/inspection_spec.rb", "spec/ripple/key_spec.rb", "spec/ripple/observable_spec.rb", "spec/ripple/persistence_spec.rb", "spec/ripple/properties_spec.rb", "spec/ripple/ripple_spec.rb", "spec/ripple/serialization_spec.rb", "spec/ripple/timestamps_spec.rb", "spec/ripple/validations/associated_validator_spec.rb", "spec/ripple/validations_spec.rb", "spec/spec_helper.rb", "spec/support/associations/proxies.rb", "spec/support/mocks.rb", "spec/support/models/address.rb", "spec/support/models/box.rb", "spec/support/models/car.rb", "spec/support/models/cardboard_box.rb", "spec/support/models/clock.rb", "spec/support/models/clock_observer.rb", "spec/support/models/customer.rb", "spec/support/models/driver.rb", "spec/support/models/email.rb", "spec/support/models/engine.rb", "spec/support/models/family.rb", "spec/support/models/favorite.rb", "spec/support/models/invoice.rb", "spec/support/models/late_invoice.rb", "spec/support/models/note.rb", "spec/support/models/page.rb", "spec/support/models/paid_invoice.rb", "spec/support/models/passenger.rb", "spec/support/models/seat.rb", "spec/support/models/tasks.rb", "spec/support/models/tree.rb", "spec/support/models/user.rb", "spec/support/models/wheel.rb", "spec/support/models/widget.rb", "spec/support/test_server.rb", "spec/support/test_server.yml.example"]
|
13
13
|
s.homepage = %q{http://seancribbs.github.com/ripple}
|
14
14
|
s.require_paths = ["lib"]
|
15
15
|
s.rubygems_version = %q{1.6.1}
|
16
16
|
s.summary = %q{ripple is an object-mapper library for Riak, the distributed database by Basho.}
|
17
|
-
s.test_files = ["spec/integration/ripple/associations_spec.rb", "spec/integration/ripple/nested_attributes_spec.rb", "spec/integration/ripple/persistence_spec.rb", "spec/ripple/associations/many_embedded_proxy_spec.rb", "spec/ripple/associations/many_linked_proxy_spec.rb", "spec/ripple/associations/one_embedded_proxy_spec.rb", "spec/ripple/associations/one_linked_proxy_spec.rb", "spec/ripple/associations/proxy_spec.rb", "spec/ripple/associations_spec.rb", "spec/ripple/attribute_methods_spec.rb", "spec/ripple/bucket_access_spec.rb", "spec/ripple/callbacks_spec.rb", "spec/ripple/conversion_spec.rb", "spec/ripple/core_ext_spec.rb", "spec/ripple/document_spec.rb", "spec/ripple/embedded_document/finders_spec.rb", "spec/ripple/embedded_document/persistence_spec.rb", "spec/ripple/embedded_document_spec.rb", "spec/ripple/finders_spec.rb", "spec/ripple/inspection_spec.rb", "spec/ripple/key_spec.rb", "spec/ripple/observable_spec.rb", "spec/ripple/persistence_spec.rb", "spec/ripple/properties_spec.rb", "spec/ripple/ripple_spec.rb", "spec/ripple/timestamps_spec.rb", "spec/ripple/validations_spec.rb"]
|
17
|
+
s.test_files = ["spec/integration/ripple/associations_spec.rb", "spec/integration/ripple/nested_attributes_spec.rb", "spec/integration/ripple/persistence_spec.rb", "spec/ripple/associations/many_embedded_proxy_spec.rb", "spec/ripple/associations/many_linked_proxy_spec.rb", "spec/ripple/associations/one_embedded_proxy_spec.rb", "spec/ripple/associations/one_linked_proxy_spec.rb", "spec/ripple/associations/proxy_spec.rb", "spec/ripple/associations_spec.rb", "spec/ripple/attribute_methods_spec.rb", "spec/ripple/bucket_access_spec.rb", "spec/ripple/callbacks_spec.rb", "spec/ripple/conversion_spec.rb", "spec/ripple/core_ext_spec.rb", "spec/ripple/document_spec.rb", "spec/ripple/embedded_document/finders_spec.rb", "spec/ripple/embedded_document/persistence_spec.rb", "spec/ripple/embedded_document_spec.rb", "spec/ripple/finders_spec.rb", "spec/ripple/inspection_spec.rb", "spec/ripple/key_spec.rb", "spec/ripple/observable_spec.rb", "spec/ripple/persistence_spec.rb", "spec/ripple/properties_spec.rb", "spec/ripple/ripple_spec.rb", "spec/ripple/serialization_spec.rb", "spec/ripple/timestamps_spec.rb", "spec/ripple/validations/associated_validator_spec.rb", "spec/ripple/validations_spec.rb"]
|
18
18
|
|
19
19
|
if s.respond_to? :specification_version then
|
20
20
|
s.specification_version = 3
|
21
21
|
|
22
22
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
23
23
|
s.add_development_dependency(%q<rspec>, ["~> 2.4.0"])
|
24
|
-
s.add_runtime_dependency(%q<riak-client>, ["~> 0.9.0
|
24
|
+
s.add_runtime_dependency(%q<riak-client>, ["~> 0.9.0"])
|
25
25
|
s.add_runtime_dependency(%q<activesupport>, ["~> 3.0.0"])
|
26
26
|
s.add_runtime_dependency(%q<activemodel>, ["~> 3.0.0"])
|
27
27
|
else
|
28
28
|
s.add_dependency(%q<rspec>, ["~> 2.4.0"])
|
29
|
-
s.add_dependency(%q<riak-client>, ["~> 0.9.0
|
29
|
+
s.add_dependency(%q<riak-client>, ["~> 0.9.0"])
|
30
30
|
s.add_dependency(%q<activesupport>, ["~> 3.0.0"])
|
31
31
|
s.add_dependency(%q<activemodel>, ["~> 3.0.0"])
|
32
32
|
end
|
33
33
|
else
|
34
34
|
s.add_dependency(%q<rspec>, ["~> 2.4.0"])
|
35
|
-
s.add_dependency(%q<riak-client>, ["~> 0.9.0
|
35
|
+
s.add_dependency(%q<riak-client>, ["~> 0.9.0"])
|
36
36
|
s.add_dependency(%q<activesupport>, ["~> 3.0.0"])
|
37
37
|
s.add_dependency(%q<activemodel>, ["~> 3.0.0"])
|
38
38
|
end
|
data/spec/fixtures/config.yml
CHANGED
@@ -58,6 +58,36 @@ describe "Ripple Associations" do
|
|
58
58
|
@found.profile.user.should == @found
|
59
59
|
end
|
60
60
|
|
61
|
+
it "should not raise an error when a one linked associated record has been deleted" do
|
62
|
+
@user.emergency_contact = @friend1
|
63
|
+
@user.save
|
64
|
+
|
65
|
+
@friend1.destroy
|
66
|
+
@found = User.find(@user.key)
|
67
|
+
@found.emergency_contact.should be_nil
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should allow a many linked record to be deleted from the association but kept in the datastore" do
|
71
|
+
@user.friends << @friend1
|
72
|
+
@user.save!
|
73
|
+
|
74
|
+
@user.friends.delete(@friend1)
|
75
|
+
@user.save!
|
76
|
+
|
77
|
+
found_user = User.find(@user.key)
|
78
|
+
found_user.friends.should be_empty
|
79
|
+
User.find(@friend1.key).should be
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should allow a many embedded record to be deleted from the association" do
|
83
|
+
@user.addresses << @billing << @shipping
|
84
|
+
@user.save!
|
85
|
+
|
86
|
+
@user.addresses.delete(@billing)
|
87
|
+
@user.save!
|
88
|
+
User.find(@user.key).addresses.should == [@shipping]
|
89
|
+
end
|
90
|
+
|
61
91
|
it "should save many embedded associations" do
|
62
92
|
@user.addresses << @billing << @shipping
|
63
93
|
@user.save
|
@@ -27,11 +27,14 @@ describe Ripple::Associations::OneEmbeddedProxy do
|
|
27
27
|
it "should not have a child before one is set" do
|
28
28
|
@parent.child.should be_nil
|
29
29
|
end
|
30
|
+
|
31
|
+
it "should raise NoMethodError when an undefined method is called on the unset child" do
|
32
|
+
expect { @parent.child.some_undefined_method }.to raise_error(NoMethodError)
|
33
|
+
end
|
30
34
|
|
31
35
|
it "should be able to set and get its child" do
|
32
|
-
Child.stub!(:instantiate).and_return(@child)
|
33
36
|
@parent.child = @child
|
34
|
-
@parent.child.should
|
37
|
+
@parent.child.should equal(@child)
|
35
38
|
end
|
36
39
|
|
37
40
|
it "should set the parent document on the child when assigning" do
|
@@ -49,6 +49,13 @@ describe Ripple::Associations do
|
|
49
49
|
Invoice.instance_methods.map(&:to_sym).should include(:payee?)
|
50
50
|
end
|
51
51
|
end
|
52
|
+
|
53
|
+
after do
|
54
|
+
Invoice.associations.delete(:foo)
|
55
|
+
Invoice.associations.delete(:items)
|
56
|
+
SubInvoice.associations.delete(:foo) if defined?(SubInvoice)
|
57
|
+
Invoice.associations.delete(:payee)
|
58
|
+
end
|
52
59
|
end
|
53
60
|
|
54
61
|
describe Ripple::Association do
|
@@ -15,6 +15,7 @@ require File.expand_path("../../spec_helper", __FILE__)
|
|
15
15
|
|
16
16
|
describe Ripple::EmbeddedDocument do
|
17
17
|
require 'support/models/address'
|
18
|
+
require 'support/models/user'
|
18
19
|
|
19
20
|
it "should have a model name when included" do
|
20
21
|
Address.should respond_to(:model_name)
|
@@ -24,4 +25,50 @@ describe Ripple::EmbeddedDocument do
|
|
24
25
|
it "should be embeddable" do
|
25
26
|
Address.should be_embeddable
|
26
27
|
end
|
28
|
+
|
29
|
+
describe "#==" do
|
30
|
+
let(:user_1) { User.create! }
|
31
|
+
let(:user_2) { User.create! }
|
32
|
+
let(:street_1) { '123 Somewhere St' }
|
33
|
+
let(:street_2) { '123 Somewhere Ave' }
|
34
|
+
let(:address_1) { Address.new(:street => street_1) }
|
35
|
+
let(:address_2) { Address.new(:street => street_1) }
|
36
|
+
|
37
|
+
before(:each) do
|
38
|
+
address_1._parent_document = user_1
|
39
|
+
address_2._parent_document = user_1
|
40
|
+
end
|
41
|
+
|
42
|
+
it "returns true when the documents have the same classes, parents and attributes" do
|
43
|
+
(address_1 == address_2).should be_true
|
44
|
+
(address_2 == address_1).should be_true
|
45
|
+
end
|
46
|
+
|
47
|
+
it "returns true when the documents match and only one of them includes the _type attribute" do
|
48
|
+
attrs = address_1.attributes
|
49
|
+
address_1.stub(:attributes => attrs.merge('_type' => 'Address'))
|
50
|
+
|
51
|
+
(address_1 == address_2).should be_true
|
52
|
+
(address_2 == address_1).should be_true
|
53
|
+
end
|
54
|
+
|
55
|
+
it "returns false when the parents are different (even if the attributes and classes are the same)" do
|
56
|
+
address_2._parent_document = user_2
|
57
|
+
(address_1 == address_2).should be_false
|
58
|
+
(address_2 == address_1).should be_false
|
59
|
+
end
|
60
|
+
|
61
|
+
it "returns false when the attributes are different (even if the parents and classes are the same)" do
|
62
|
+
address_2.street = street_2
|
63
|
+
(address_1 == address_2).should be_false
|
64
|
+
(address_2 == address_1).should be_false
|
65
|
+
end
|
66
|
+
|
67
|
+
it "returns false then the classes are different (even if the parents and attributes are the same)" do
|
68
|
+
special_address = SpecialAddress.new(address_1.attributes)
|
69
|
+
special_address._parent_document = address_1._parent_document
|
70
|
+
(address_1 == special_address).should be_false
|
71
|
+
(special_address == address_1).should be_false
|
72
|
+
end
|
73
|
+
end
|
27
74
|
end
|
data/spec/ripple/ripple_spec.rb
CHANGED
@@ -30,16 +30,16 @@ describe Ripple do
|
|
30
30
|
|
31
31
|
it "should allow setting the client manually" do
|
32
32
|
Ripple.should respond_to(:client=)
|
33
|
-
client = Riak::Client.new(:
|
33
|
+
client = Riak::Client.new(:http_port => 9000)
|
34
34
|
Ripple.client = client
|
35
35
|
Ripple.client.should == client
|
36
36
|
end
|
37
37
|
|
38
38
|
it "should reset the client when the configuration changes" do
|
39
39
|
c = Ripple.client
|
40
|
-
Ripple.config = {:
|
40
|
+
Ripple.config = {:http_port => 9000}
|
41
41
|
Ripple.client.should_not == c
|
42
|
-
Ripple.client.
|
42
|
+
Ripple.client.http_port.should == 9000
|
43
43
|
end
|
44
44
|
|
45
45
|
it "should raise No Such File or Directory when given a bad configuration file" do
|
@@ -53,13 +53,13 @@ describe Ripple do
|
|
53
53
|
|
54
54
|
it "should select the configuration hash from the config keys provided" do
|
55
55
|
Ripple.load_config(File.join(File.dirname(__FILE__), '..', 'fixtures', 'config.yml'), ['ripple_rails', 'development'])
|
56
|
-
Ripple.client.
|
56
|
+
Ripple.client.http_port.should == 9001
|
57
57
|
Ripple.client.host.should == '127.0.0.1'
|
58
58
|
end
|
59
59
|
|
60
60
|
it "should apply the configuration under the ripple key" do
|
61
61
|
Ripple.load_config(File.join(File.dirname(__FILE__), '..', 'fixtures', 'config.yml'))
|
62
|
-
Ripple.client.
|
62
|
+
Ripple.client.http_port.should == 9000
|
63
63
|
Ripple.client.host.should == 'localhost'
|
64
64
|
end
|
65
65
|
|
@@ -0,0 +1,52 @@
|
|
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__)
|
15
|
+
|
16
|
+
describe Ripple::Serialization do
|
17
|
+
require 'support/models/invoice'
|
18
|
+
require 'support/models/note'
|
19
|
+
require 'support/models/customer'
|
20
|
+
|
21
|
+
it "should provide JSON serialization" do
|
22
|
+
Invoice.new.should respond_to(:to_json)
|
23
|
+
end
|
24
|
+
|
25
|
+
context "when serializing" do
|
26
|
+
it "should include attributes" do
|
27
|
+
Note.new(:text => "Dear Jane,...").serializable_hash.should include('text')
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should include the document key" do
|
31
|
+
doc = Invoice.new
|
32
|
+
doc.key = "1"
|
33
|
+
doc.serializable_hash['key'].should == "1"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should include embedded documents by default" do
|
37
|
+
doc = Invoice.new(:note => {:text => "Dear customer,..."}).serializable_hash
|
38
|
+
doc['note'].should eql({'text' => "Dear customer,..."})
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should exclude specified attributes" do
|
42
|
+
hash = Invoice.new.serializable_hash(:except => [:created_at])
|
43
|
+
hash.should_not include('created_at')
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should limit to specified attributes" do
|
47
|
+
hash = Invoice.new.serializable_hash(:only => [:created_at])
|
48
|
+
hash.should include('created_at')
|
49
|
+
hash.should_not include('updated_at')
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,33 @@
|
|
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__)
|
15
|
+
|
16
|
+
describe Ripple::Validations::AssociatedValidator do
|
17
|
+
require 'support/models/family'
|
18
|
+
|
19
|
+
let(:child) { Child.new }
|
20
|
+
let(:parent) { Parent.new }
|
21
|
+
before(:each) { parent.child = child }
|
22
|
+
|
23
|
+
it "is invalid when the associated record is invalid" do
|
24
|
+
child.should_not be_valid
|
25
|
+
parent.should_not be_valid
|
26
|
+
end
|
27
|
+
|
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
|
32
|
+
end
|
33
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
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
|
+
class ClockObserver < ActiveModel::Observer
|
16
|
+
end
|
data/spec/support/models/note.rb
CHANGED
data/spec/support/test_server.rb
CHANGED
@@ -7,7 +7,7 @@ unless $test_server
|
|
7
7
|
$test_server = Riak::TestServer.new(config.symbolize_keys)
|
8
8
|
$test_server.prepare!
|
9
9
|
$test_server.start
|
10
|
-
Ripple.config = {:
|
10
|
+
Ripple.config = {:http_port => 9000 }
|
11
11
|
at_exit { $test_server.cleanup }
|
12
12
|
rescue => e
|
13
13
|
warn "Can't run Riak::TestServer specs. Specify the location of your Riak installation in spec/support/test_server.yml. See Riak::TestServer docs for more info."
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ripple
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
version: 0.9.0
|
4
|
+
prerelease:
|
5
|
+
version: 0.9.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Sean Cribbs
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-03
|
13
|
+
date: 2011-04-03 00:00:00 -04:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
requirements:
|
33
33
|
- - ~>
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version: 0.9.0
|
35
|
+
version: 0.9.0
|
36
36
|
type: :runtime
|
37
37
|
version_requirements: *id002
|
38
38
|
- !ruby/object:Gem::Dependency
|
@@ -116,6 +116,7 @@ files:
|
|
116
116
|
- lib/ripple/properties.rb
|
117
117
|
- lib/ripple/property_type_mismatch.rb
|
118
118
|
- lib/ripple/railtie.rb
|
119
|
+
- lib/ripple/serialization.rb
|
119
120
|
- lib/ripple/timestamps.rb
|
120
121
|
- lib/ripple/translation.rb
|
121
122
|
- lib/ripple/validations/associated_validator.rb
|
@@ -149,7 +150,9 @@ files:
|
|
149
150
|
- spec/ripple/persistence_spec.rb
|
150
151
|
- spec/ripple/properties_spec.rb
|
151
152
|
- spec/ripple/ripple_spec.rb
|
153
|
+
- spec/ripple/serialization_spec.rb
|
152
154
|
- spec/ripple/timestamps_spec.rb
|
155
|
+
- spec/ripple/validations/associated_validator_spec.rb
|
153
156
|
- spec/ripple/validations_spec.rb
|
154
157
|
- spec/spec_helper.rb
|
155
158
|
- spec/support/associations/proxies.rb
|
@@ -159,6 +162,7 @@ files:
|
|
159
162
|
- spec/support/models/car.rb
|
160
163
|
- spec/support/models/cardboard_box.rb
|
161
164
|
- spec/support/models/clock.rb
|
165
|
+
- spec/support/models/clock_observer.rb
|
162
166
|
- spec/support/models/customer.rb
|
163
167
|
- spec/support/models/driver.rb
|
164
168
|
- spec/support/models/email.rb
|
@@ -197,9 +201,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
197
201
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
198
202
|
none: false
|
199
203
|
requirements:
|
200
|
-
- - "
|
204
|
+
- - ">="
|
201
205
|
- !ruby/object:Gem::Version
|
202
|
-
version:
|
206
|
+
version: "0"
|
203
207
|
requirements: []
|
204
208
|
|
205
209
|
rubyforge_project:
|
@@ -233,5 +237,7 @@ test_files:
|
|
233
237
|
- spec/ripple/persistence_spec.rb
|
234
238
|
- spec/ripple/properties_spec.rb
|
235
239
|
- spec/ripple/ripple_spec.rb
|
240
|
+
- spec/ripple/serialization_spec.rb
|
236
241
|
- spec/ripple/timestamps_spec.rb
|
242
|
+
- spec/ripple/validations/associated_validator_spec.rb
|
237
243
|
- spec/ripple/validations_spec.rb
|