ripple 0.7.0 → 0.7.1

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 (51) hide show
  1. data/lib/ripple.rb +17 -1
  2. data/lib/ripple/associations.rb +157 -0
  3. data/lib/ripple/associations/embedded.rb +42 -0
  4. data/lib/ripple/associations/instantiators.rb +39 -0
  5. data/lib/ripple/{document/associations → associations}/linked.rb +9 -11
  6. data/lib/ripple/{document/associations/one_embedded_proxy.rb → associations/many.rb} +30 -21
  7. data/lib/ripple/{document/associations/embedded.rb → associations/many_embedded_proxy.rb} +26 -23
  8. data/lib/ripple/{embedded_document/conversion.rb → associations/one.rb} +8 -13
  9. data/lib/ripple/{document/associations/instantiators.rb → associations/one_embedded_proxy.rb} +17 -19
  10. data/lib/ripple/associations/proxy.rb +123 -0
  11. data/lib/ripple/attribute_methods.rb +116 -0
  12. data/lib/ripple/{document/attribute_methods/write.rb → attribute_methods/dirty.rb} +26 -16
  13. data/lib/ripple/attribute_methods/query.rb +48 -0
  14. data/lib/ripple/{document/attribute_methods → attribute_methods}/read.rb +16 -18
  15. data/lib/ripple/attribute_methods/write.rb +38 -0
  16. data/lib/ripple/callbacks.rb +73 -0
  17. data/lib/ripple/{document/associations/one.rb → conversion.rb} +18 -13
  18. data/lib/ripple/document.rb +19 -9
  19. data/lib/ripple/embedded_document.rb +10 -10
  20. data/lib/ripple/embedded_document/persistence.rb +12 -53
  21. data/lib/ripple/properties.rb +83 -0
  22. data/lib/ripple/timestamps.rb +34 -0
  23. data/lib/ripple/{document/validations.rb → validations.rb} +31 -33
  24. data/lib/ripple/{document/validations → validations}/associated_validator.rb +9 -10
  25. data/spec/integration/ripple/associations_spec.rb +1 -2
  26. data/spec/integration/ripple/persistence_spec.rb +2 -3
  27. data/spec/ripple/associations/many_embedded_proxy_spec.rb +2 -2
  28. data/spec/ripple/associations/one_embedded_proxy_spec.rb +2 -2
  29. data/spec/ripple/associations/proxy_spec.rb +1 -1
  30. data/spec/ripple/associations_spec.rb +15 -20
  31. data/spec/ripple/attribute_methods_spec.rb +3 -6
  32. data/spec/ripple/callbacks_spec.rb +1 -1
  33. data/spec/ripple/{embedded_document/conversion_spec.rb → conversion_spec.rb} +4 -4
  34. data/spec/ripple/embedded_document/persistence_spec.rb +4 -16
  35. data/spec/ripple/properties_spec.rb +17 -18
  36. data/spec/ripple/timestamps_spec.rb +1 -1
  37. data/spec/ripple/validations_spec.rb +1 -1
  38. data/spec/spec_helper.rb +1 -1
  39. data/spec/support/associations/proxies.rb +4 -4
  40. metadata +27 -29
  41. data/lib/ripple/document/associations.rb +0 -154
  42. data/lib/ripple/document/associations/many.rb +0 -52
  43. data/lib/ripple/document/associations/many_embedded_proxy.rb +0 -49
  44. data/lib/ripple/document/associations/proxy.rb +0 -125
  45. data/lib/ripple/document/attribute_methods.rb +0 -118
  46. data/lib/ripple/document/attribute_methods/dirty.rb +0 -52
  47. data/lib/ripple/document/attribute_methods/query.rb +0 -49
  48. data/lib/ripple/document/callbacks.rb +0 -75
  49. data/lib/ripple/document/properties.rb +0 -85
  50. data/lib/ripple/document/timestamps.rb +0 -22
  51. data/spec/support/integration.rb +0 -4
@@ -1,6 +1,6 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
- describe Ripple::Document::Timestamps do
3
+ describe Ripple::Timestamps do
4
4
  require 'support/models/clock'
5
5
 
6
6
  before :each do
@@ -13,7 +13,7 @@
13
13
  # limitations under the License.
14
14
  require File.expand_path("../../spec_helper", __FILE__)
15
15
 
16
- describe Ripple::Document::Validations do
16
+ describe Ripple::Validations do
17
17
  require 'support/models/box'
18
18
 
19
19
  before :each do
data/spec/spec_helper.rb CHANGED
@@ -13,7 +13,7 @@
13
13
  # limitations under the License.
14
14
  $LOAD_PATH.unshift(File.dirname(__FILE__))
15
15
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
16
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', '..', 'riak','lib'))
16
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', '..', 'riak-client','lib'))
17
17
 
18
18
  require 'rubygems' # Use the gems path only for the spec suite
19
19
  require 'ripple'
@@ -1,16 +1,16 @@
1
1
  # yet another filch from mongo mapper
2
- class FakeNilProxy < Ripple::Document::Associations::Proxy
2
+ class FakeNilProxy < Ripple::Associations::Proxy
3
3
  def find_target; nil end
4
4
  end
5
5
 
6
- class FakeBlankProxy < Ripple::Document::Associations::Proxy
6
+ class FakeBlankProxy < Ripple::Associations::Proxy
7
7
  def find_target; '' end
8
8
  end
9
9
 
10
- class FakeNumberProxy < Ripple::Document::Associations::Proxy
10
+ class FakeNumberProxy < Ripple::Associations::Proxy
11
11
  def find_target; 17 end
12
12
  end
13
13
 
14
- class FakeProxy < Ripple::Document::Associations::Proxy
14
+ class FakeProxy < Ripple::Associations::Proxy
15
15
  def find_target; [1, 2] end
16
16
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 7
8
- - 0
9
- version: 0.7.0
8
+ - 1
9
+ version: 0.7.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Sean Cribbs
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-05-06 00:00:00 -05:00
17
+ date: 2010-06-08 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -43,8 +43,8 @@ dependencies:
43
43
  segments:
44
44
  - 0
45
45
  - 7
46
- - 0
47
- version: 0.7.0
46
+ - 1
47
+ version: 0.7.1
48
48
  type: :runtime
49
49
  version_requirements: *id002
50
50
  - !ruby/object:Gem::Dependency
@@ -86,39 +86,39 @@ extensions: []
86
86
  extra_rdoc_files: []
87
87
 
88
88
  files:
89
+ - lib/ripple/associations/embedded.rb
90
+ - lib/ripple/associations/instantiators.rb
91
+ - lib/ripple/associations/linked.rb
92
+ - lib/ripple/associations/many.rb
93
+ - lib/ripple/associations/many_embedded_proxy.rb
94
+ - lib/ripple/associations/one.rb
95
+ - lib/ripple/associations/one_embedded_proxy.rb
96
+ - lib/ripple/associations/proxy.rb
97
+ - lib/ripple/associations.rb
98
+ - lib/ripple/attribute_methods/dirty.rb
99
+ - lib/ripple/attribute_methods/query.rb
100
+ - lib/ripple/attribute_methods/read.rb
101
+ - lib/ripple/attribute_methods/write.rb
102
+ - lib/ripple/attribute_methods.rb
103
+ - lib/ripple/callbacks.rb
104
+ - lib/ripple/conversion.rb
89
105
  - lib/ripple/core_ext/casting.rb
90
- - lib/ripple/document/associations/embedded.rb
91
- - lib/ripple/document/associations/instantiators.rb
92
- - lib/ripple/document/associations/linked.rb
93
- - lib/ripple/document/associations/many.rb
94
- - lib/ripple/document/associations/many_embedded_proxy.rb
95
- - lib/ripple/document/associations/one.rb
96
- - lib/ripple/document/associations/one_embedded_proxy.rb
97
- - lib/ripple/document/associations/proxy.rb
98
- - lib/ripple/document/associations.rb
99
- - lib/ripple/document/attribute_methods/dirty.rb
100
- - lib/ripple/document/attribute_methods/query.rb
101
- - lib/ripple/document/attribute_methods/read.rb
102
- - lib/ripple/document/attribute_methods/write.rb
103
- - lib/ripple/document/attribute_methods.rb
104
106
  - lib/ripple/document/bucket_access.rb
105
- - lib/ripple/document/callbacks.rb
106
107
  - lib/ripple/document/finders.rb
107
108
  - lib/ripple/document/persistence.rb
108
- - lib/ripple/document/properties.rb
109
- - lib/ripple/document/timestamps.rb
110
- - lib/ripple/document/validations/associated_validator.rb
111
- - lib/ripple/document/validations.rb
112
109
  - lib/ripple/document.rb
113
- - lib/ripple/embedded_document/conversion.rb
114
110
  - lib/ripple/embedded_document/finders.rb
115
111
  - lib/ripple/embedded_document/persistence.rb
116
112
  - lib/ripple/embedded_document.rb
117
113
  - lib/ripple/i18n.rb
118
114
  - lib/ripple/locale/en.yml
115
+ - lib/ripple/properties.rb
119
116
  - lib/ripple/property_type_mismatch.rb
120
117
  - lib/ripple/railtie.rb
118
+ - lib/ripple/timestamps.rb
121
119
  - lib/ripple/translation.rb
120
+ - lib/ripple/validations/associated_validator.rb
121
+ - lib/ripple/validations.rb
122
122
  - lib/ripple.rb
123
123
  - Rakefile
124
124
  - spec/fixtures/config.yml
@@ -131,9 +131,9 @@ files:
131
131
  - spec/ripple/attribute_methods_spec.rb
132
132
  - spec/ripple/bucket_access_spec.rb
133
133
  - spec/ripple/callbacks_spec.rb
134
+ - spec/ripple/conversion_spec.rb
134
135
  - spec/ripple/core_ext_spec.rb
135
136
  - spec/ripple/document_spec.rb
136
- - spec/ripple/embedded_document/conversion_spec.rb
137
137
  - spec/ripple/embedded_document/finders_spec.rb
138
138
  - spec/ripple/embedded_document/persistence_spec.rb
139
139
  - spec/ripple/embedded_document_spec.rb
@@ -145,7 +145,6 @@ files:
145
145
  - spec/ripple/validations_spec.rb
146
146
  - spec/spec_helper.rb
147
147
  - spec/support/associations/proxies.rb
148
- - spec/support/integration.rb
149
148
  - spec/support/mocks.rb
150
149
  - spec/support/models/address.rb
151
150
  - spec/support/models/box.rb
@@ -203,9 +202,9 @@ test_files:
203
202
  - spec/ripple/attribute_methods_spec.rb
204
203
  - spec/ripple/bucket_access_spec.rb
205
204
  - spec/ripple/callbacks_spec.rb
205
+ - spec/ripple/conversion_spec.rb
206
206
  - spec/ripple/core_ext_spec.rb
207
207
  - spec/ripple/document_spec.rb
208
- - spec/ripple/embedded_document/conversion_spec.rb
209
208
  - spec/ripple/embedded_document/finders_spec.rb
210
209
  - spec/ripple/embedded_document/persistence_spec.rb
211
210
  - spec/ripple/embedded_document_spec.rb
@@ -217,7 +216,6 @@ test_files:
217
216
  - spec/ripple/validations_spec.rb
218
217
  - spec/spec_helper.rb
219
218
  - spec/support/associations/proxies.rb
220
- - spec/support/integration.rb
221
219
  - spec/support/mocks.rb
222
220
  - spec/support/models/address.rb
223
221
  - spec/support/models/box.rb
@@ -1,154 +0,0 @@
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
-
16
- module Ripple
17
- module Document
18
- module Associations
19
- extend ActiveSupport::Concern
20
- extend ActiveSupport::Autoload
21
-
22
- autoload :Proxy
23
- autoload :One
24
- autoload :Many
25
- autoload :Embedded
26
- autoload :Instantiators
27
- autoload :OneEmbeddedProxy
28
- autoload :ManyEmbeddedProxy
29
-
30
- module ClassMethods
31
- # @private
32
- def inherited(subclass)
33
- super
34
- subclass.associations.merge!(associations)
35
- end
36
-
37
- # Associations defined on the document
38
- def associations
39
- @associations ||= {}.with_indifferent_access
40
- end
41
-
42
- # Creates a singular association
43
- def one(name, options={})
44
- create_association(:one, name, options)
45
- end
46
-
47
- # Creates a plural association
48
- def many(name, options={})
49
- create_association(:many, name, options)
50
- end
51
-
52
- private
53
- def create_association(type, name, options={})
54
- association = associations[name] = Association.new(type, name, options)
55
-
56
- define_method(name) do
57
- get_proxy(association)
58
- end
59
-
60
- define_method("#{name}=") do |value|
61
- get_proxy(association).replace(value)
62
- value
63
- end
64
-
65
- if association.one?
66
- define_method("#{name}?") do
67
- get_proxy(association).present?
68
- end
69
- end
70
- end
71
- end
72
-
73
- module InstanceMethods
74
- def associations
75
- self.class.associations
76
- end
77
-
78
- def embedded_associations
79
- associations.map do |name, association|
80
- association if association.embeddable?
81
- end.compact
82
- end
83
-
84
- # @private
85
- def get_proxy(association)
86
- unless proxy = instance_variable_get(association.ivar)
87
- proxy = association.proxy_class.new(self, association)
88
- instance_variable_set(association.ivar, proxy)
89
- end
90
- proxy
91
- end
92
- end
93
- end
94
-
95
- class Association
96
- attr_reader :type, :name, :options
97
-
98
- # association options :using, :class_name, :class, :extend,
99
- # options that may be added :validate
100
-
101
- def initialize(type, name, options={})
102
- @type, @name, @options = type, name, options.to_options
103
- end
104
-
105
- def class_name
106
- @class_name ||= case
107
- when @options[:class_name]
108
- @options[:class_name]
109
- when @options[:class]
110
- @options[:class].to_s
111
- when many?
112
- @name.to_s.classify
113
- else
114
- @name.to_s.camelize
115
- end
116
- end
117
-
118
- def klass
119
- @klass ||= options[:class] || class_name.constantize
120
- end
121
-
122
- def many?
123
- @type == :many
124
- end
125
-
126
- def one?
127
- @type == :one
128
- end
129
-
130
- def embeddable?
131
- klass.embeddable?
132
- end
133
-
134
- def polymorphic?
135
- false
136
- end
137
-
138
- def ivar
139
- "@_#{name}"
140
- end
141
-
142
- def proxy_class
143
- return @proxy_class if defined?(@proxy_class)
144
- proxy_class_name.constantize
145
- end
146
-
147
- def proxy_class_name
148
- @using ||= options[:using] || (embeddable? ? :embedded : :link)
149
- klass_name = (many? ? 'Many' : 'One') + @using.to_s.camelize + ('Polymorphic' if polymorphic?).to_s + 'Proxy'
150
- "Ripple::Document::Associations::#{klass_name}"
151
- end
152
- end
153
- end
154
- end
@@ -1,52 +0,0 @@
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
-
16
- module Ripple
17
- module Document
18
- module Associations
19
- module Many
20
- include Instantiators
21
-
22
- def to_ary
23
- load_target
24
- Array === target ? target.to_ary : Array(target)
25
- end
26
-
27
- def count
28
- load_target
29
- target.size
30
- end
31
-
32
- def reset
33
- super
34
- @target = []
35
- end
36
-
37
- def <<
38
- raise NotImplementedError
39
- end
40
- alias_method :push, :<<
41
- alias_method :concat, :<<
42
-
43
- protected
44
- def instantiate_target(instantiator, attrs={})
45
- doc = klass.send(instantiator, attrs)
46
- self << doc
47
- doc
48
- end
49
- end
50
- end
51
- end
52
- end
@@ -1,49 +0,0 @@
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
-
16
- module Ripple
17
- module Document
18
- module Associations
19
- class ManyEmbeddedProxy < Proxy
20
- include Many
21
- include Embedded
22
-
23
- def <<(docs)
24
- load_target
25
- assign_references(docs)
26
- @target += Array(docs)
27
- self
28
- end
29
-
30
- def replace(docs)
31
- @_docs = docs.map { |doc| attrs = doc.respond_to?(:attributes_for_persistence) ? doc.attributes_for_persistence : doc }
32
- assign_references(docs)
33
- reset
34
- @_docs
35
- end
36
-
37
- protected
38
- def find_target
39
- (@_docs || []).map do |attrs|
40
- klass.instantiate(attrs).tap do |doc|
41
- assign_references(doc)
42
- end
43
- end
44
- end
45
-
46
- end
47
- end
48
- end
49
- end
@@ -1,125 +0,0 @@
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
-
16
- module Ripple
17
- module Document
18
- module Associations
19
- class Proxy
20
- alias :proxy_respond_to? :respond_to?
21
- alias :proxy_extend :extend
22
-
23
- instance_methods.each { |m| undef_method m unless m =~ /(^__|^nil\?$|^send$|proxy_|^object_id$)/ }
24
-
25
- attr_reader :owner, :reflection, :target
26
-
27
- alias :proxy_owner :owner
28
- alias :proxy_target :target
29
- alias :proxy_reflection :reflection
30
-
31
- delegate :klass, :to => :proxy_reflection
32
- delegate :options, :to => :proxy_reflection
33
- delegate :collection, :to => :klass
34
-
35
- def initialize(owner, reflection)
36
- @owner, @reflection = owner, reflection
37
- Array(reflection.options[:extend]).each { |ext| proxy_extend(ext) }
38
- reset
39
- end
40
-
41
- def inspect
42
- load_target
43
- target.inspect
44
- end
45
-
46
- def loaded?
47
- @loaded
48
- end
49
-
50
- def loaded
51
- @loaded = true
52
- end
53
-
54
- def nil?
55
- load_target
56
- target.nil?
57
- end
58
-
59
- def blank?
60
- load_target
61
- target.blank?
62
- end
63
-
64
- def present?
65
- load_target
66
- target.present?
67
- end
68
-
69
- def reload
70
- reset
71
- load_target
72
- self unless target.nil?
73
- end
74
-
75
- def replace(v)
76
- raise NotImplementedError
77
- end
78
-
79
- def reset
80
- @loaded = false
81
- @target = nil
82
- end
83
-
84
- def respond_to?(*args)
85
- proxy_respond_to?(*args) || (load_target && target.respond_to?(*args))
86
- end
87
-
88
- def send(method, *args, &block)
89
- if proxy_respond_to?(method)
90
- super
91
- else
92
- load_target
93
- target.send(method, *args, &block)
94
- end
95
- end
96
-
97
- def ===(other)
98
- load_target
99
- other === target
100
- end
101
-
102
- protected
103
- def method_missing(method, *args, &block)
104
- if load_target
105
- if block_given?
106
- target.send(method, *args) { |*block_args| block.call(*block_args) }
107
- else
108
- target.send(method, *args)
109
- end
110
- end
111
- end
112
-
113
- def load_target
114
- @target = find_target unless loaded?
115
- loaded
116
- @target
117
- end
118
-
119
- def find_target
120
- raise NotImplementedError
121
- end
122
- end
123
- end
124
- end
125
- end