persistence 0.0.1.alpha → 0.0.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 (138) hide show
  1. data/CHANGELOG.md +4 -0
  2. data/README.md +260 -17
  3. data/lib/namespaces.rb +55 -0
  4. data/lib/persistence.rb +38 -3
  5. data/lib/persistence/adapter/abstract.rb +22 -0
  6. data/lib/persistence/adapter/abstract/enable_disable.rb +107 -0
  7. data/lib/persistence/adapter/abstract/primary_key/id_property_string.rb +33 -0
  8. data/lib/persistence/adapter/abstract/primary_key/simple.rb +29 -0
  9. data/lib/persistence/adapter/mock.rb +9 -0
  10. data/lib/persistence/adapter/mock/adapter_interface.rb +102 -0
  11. data/lib/persistence/adapter/mock/bucket.rb +9 -0
  12. data/lib/persistence/adapter/mock/bucket/bucket_interface.rb +260 -0
  13. data/lib/persistence/adapter/mock/bucket/index.rb +9 -0
  14. data/lib/persistence/adapter/mock/bucket/index/index_interface.rb +155 -0
  15. data/lib/persistence/adapter/mock/cursor.rb +9 -0
  16. data/lib/persistence/adapter/mock/cursor/cursor_interface.rb +238 -0
  17. data/lib/persistence/cursor.rb +11 -0
  18. data/lib/persistence/cursor/atomic.rb +110 -0
  19. data/lib/persistence/cursor/cursor_interface.rb +337 -0
  20. data/lib/persistence/exception/block_required.rb +7 -0
  21. data/lib/persistence/exception/conflicting_index_already_declared.rb +7 -0
  22. data/lib/persistence/exception/duplicate_violates_unique_index.rb +7 -0
  23. data/lib/persistence/exception/explicit_index_required.rb +7 -0
  24. data/lib/persistence/exception/indexing_block_failed_to_generate_keys.rb +7 -0
  25. data/lib/persistence/exception/indexing_object_requires_keys.rb +7 -0
  26. data/lib/persistence/exception/key_value_required.rb +7 -0
  27. data/lib/persistence/exception/no_port_enabled.rb +7 -0
  28. data/lib/persistence/object.rb +21 -0
  29. data/lib/persistence/object/autodetermine.rb +74 -0
  30. data/lib/persistence/object/class_instance.rb +1884 -0
  31. data/lib/persistence/object/complex.rb +17 -0
  32. data/lib/persistence/object/complex/array.rb +14 -0
  33. data/lib/persistence/object/complex/array/class_instance.rb +37 -0
  34. data/lib/persistence/object/complex/array/object_instance.rb +54 -0
  35. data/lib/persistence/object/complex/attributes.rb +1808 -0
  36. data/lib/persistence/object/complex/attributes/attributes_array.rb +32 -0
  37. data/lib/persistence/object/complex/attributes/attributes_hash.rb +187 -0
  38. data/lib/persistence/object/complex/attributes/default_atomic_non_atomic.rb +102 -0
  39. data/lib/persistence/object/complex/attributes/hash_to_port.rb +40 -0
  40. data/lib/persistence/object/complex/class_and_object_instance.rb +132 -0
  41. data/lib/persistence/object/complex/class_instance.rb +267 -0
  42. data/lib/persistence/object/complex/complex_object.rb +111 -0
  43. data/lib/persistence/object/complex/hash.rb +14 -0
  44. data/lib/persistence/object/complex/hash/class_instance.rb +40 -0
  45. data/lib/persistence/object/complex/hash/object_instance.rb +63 -0
  46. data/lib/persistence/object/complex/index/attribute_index.rb +10 -0
  47. data/lib/persistence/object/complex/index/attribute_index/attribute_index_interface.rb +43 -0
  48. data/lib/persistence/object/complex/object_instance.rb +469 -0
  49. data/lib/persistence/object/flat.rb +17 -0
  50. data/lib/persistence/object/flat/class_instance.rb +34 -0
  51. data/lib/persistence/object/flat/file.rb +14 -0
  52. data/lib/persistence/object/flat/file/class_instance.rb +122 -0
  53. data/lib/persistence/object/flat/file/contents.rb +7 -0
  54. data/lib/persistence/object/flat/file/file_persistence.rb +147 -0
  55. data/lib/persistence/object/flat/file/object_instance.rb +116 -0
  56. data/lib/persistence/object/flat/file/path.rb +9 -0
  57. data/lib/persistence/object/flat/object_instance.rb +24 -0
  58. data/lib/persistence/object/index.rb +479 -0
  59. data/lib/persistence/object/index/block_index.rb +10 -0
  60. data/lib/persistence/object/index/block_index/block_index_interface.rb +110 -0
  61. data/lib/persistence/object/index/explicit_index.rb +10 -0
  62. data/lib/persistence/object/index/explicit_index/explicit_index_interface.rb +57 -0
  63. data/lib/persistence/object/index_hash.rb +40 -0
  64. data/lib/persistence/object/object_instance.rb +322 -0
  65. data/lib/persistence/object/parse_persistence_args.rb +145 -0
  66. data/lib/persistence/port.rb +9 -0
  67. data/lib/persistence/port/bucket.rb +9 -0
  68. data/lib/persistence/port/bucket/bucket_index.rb +9 -0
  69. data/lib/persistence/port/bucket/bucket_interface.rb +685 -0
  70. data/lib/persistence/port/controller.rb +263 -0
  71. data/lib/persistence/port/port_interface.rb +417 -0
  72. data/lib/requires.rb +146 -0
  73. data/spec/Integration_spec.rb +53 -0
  74. data/spec/Persistence_spec.rb +175 -0
  75. data/spec/example_objects.rb +6 -0
  76. data/spec/example_objects/complex_object.rb +7 -0
  77. data/spec/example_objects/complex_object/array_object.rb +7 -0
  78. data/spec/example_objects/complex_object/hash_object.rb +7 -0
  79. data/spec/example_objects/flat_object.rb +7 -0
  80. data/spec/example_objects/flat_object/file_object.rb +7 -0
  81. data/spec/persistence/adapter/enable_disable_spec.rb +29 -0
  82. data/spec/persistence/adapter/mock/cursor_spec.rb +64 -0
  83. data/spec/persistence/adapter/mock_helpers.rb +27 -0
  84. data/spec/persistence/adapter/mock_helpers/bucket.rb +10 -0
  85. data/spec/persistence/adapter/mock_helpers/integration/dictionary_hash.rb +4 -0
  86. data/spec/persistence/adapter/mock_helpers/integration/note.rb +18 -0
  87. data/spec/persistence/adapter/mock_helpers/integration/notes_array.rb +4 -0
  88. data/spec/persistence/adapter/mock_helpers/integration/user.rb +44 -0
  89. data/spec/persistence/adapter/mock_helpers/integration/user/address.rb +18 -0
  90. data/spec/persistence/adapter/mock_helpers/integration/user/dictionary_entry.rb +12 -0
  91. data/spec/persistence/adapter/mock_helpers/integration/user/sub_account.rb +15 -0
  92. data/spec/persistence/adapter/mock_helpers/object.rb +87 -0
  93. data/spec/persistence/adapter/mock_helpers/port.rb +21 -0
  94. data/spec/persistence/adapter/mock_spec.rb +211 -0
  95. data/spec/persistence/adapter/primary_key/id_property_string_spec.rb +27 -0
  96. data/spec/persistence/adapter/primary_key/simple_spec.rb +19 -0
  97. data/spec/persistence/adapter/spec_abstract/adapter_spec.rb +223 -0
  98. data/spec/persistence/adapter/spec_abstract/cursor_spec.rb +116 -0
  99. data/spec/persistence/cursor/atomic_spec.rb +86 -0
  100. data/spec/persistence/cursor/object_and_class_instance_spec.rb +73 -0
  101. data/spec/persistence/cursor_spec.rb +128 -0
  102. data/spec/persistence/object/complex/attributes/persistence_hash/array_instance_spec.rb +51 -0
  103. data/spec/persistence/object/complex/attributes/persistence_hash/hash_instance_spec.rb +56 -0
  104. data/spec/persistence/object/complex/attributes_spec.rb +1717 -0
  105. data/spec/persistence/object/complex/complex_spec.rb +922 -0
  106. data/spec/persistence/object/complex/index/attribute_index_spec.rb +76 -0
  107. data/spec/persistence/object/flat/bignum_spec.rb +33 -0
  108. data/spec/persistence/object/flat/class_instance_spec.rb +30 -0
  109. data/spec/persistence/object/flat/class_spec.rb +38 -0
  110. data/spec/persistence/object/flat/complex_spec.rb +36 -0
  111. data/spec/persistence/object/flat/false_class_spec.rb +34 -0
  112. data/spec/persistence/object/flat/file/class_instance_spec.rb +54 -0
  113. data/spec/persistence/object/flat/file/object_instance_spec.rb +143 -0
  114. data/spec/persistence/object/flat/file_spec.rb +64 -0
  115. data/spec/persistence/object/flat/fixnum_spec.rb +32 -0
  116. data/spec/persistence/object/flat/float_spec.rb +32 -0
  117. data/spec/persistence/object/flat/indexing_spec.rb +38 -0
  118. data/spec/persistence/object/flat/rational_spec.rb +33 -0
  119. data/spec/persistence/object/flat/regexp_spec.rb +32 -0
  120. data/spec/persistence/object/flat/string_spec.rb +34 -0
  121. data/spec/persistence/object/flat/symbol_spec.rb +32 -0
  122. data/spec/persistence/object/flat/true_class_spec.rb +32 -0
  123. data/spec/persistence/object/indexes/block_index_spec.rb +119 -0
  124. data/spec/persistence/object/indexes/explicit_index_spec.rb +112 -0
  125. data/spec/persistence/object/parse_persistence_args_spec.rb +65 -0
  126. data/spec/persistence/object_spec.rb +310 -0
  127. data/spec/persistence/port/bucket/bucket_interface_spec.rb +146 -0
  128. data/spec/persistence/port/bucket/index/bucket_index_spec.rb +67 -0
  129. data/spec/persistence/port/bucket_spec.rb +20 -0
  130. data/spec/persistence/port/controller_spec.rb +60 -0
  131. data/spec/persistence/port/port_interface_spec.rb +105 -0
  132. metadata +178 -21
  133. data/.gitignore +0 -17
  134. data/Gemfile +0 -4
  135. data/LICENSE +0 -22
  136. data/Rakefile +0 -2
  137. data/lib/persistence/version.rb +0 -3
  138. data/persistence.gemspec +0 -17
@@ -0,0 +1,263 @@
1
+
2
+ ###
3
+ # Controller methods for Persistence singleton.
4
+ #
5
+ module ::Persistence::Port::Controller
6
+
7
+ ###################
8
+ # self.extended #
9
+ ###################
10
+
11
+ ###
12
+ # Initializes singleton when extended.
13
+ #
14
+ def self.extended( instance )
15
+
16
+ instance.module_eval do
17
+ @ports = { }
18
+ @pending_buckets = { }
19
+ end
20
+
21
+ end
22
+
23
+ ###########
24
+ # ports #
25
+ ###########
26
+
27
+ ###
28
+ # Tracks persistence ports.
29
+ #
30
+ # @return [Hash{Symbol,String=>Persistence::Port}] Hash of ports.
31
+ def ports
32
+
33
+ return @ports
34
+
35
+ end
36
+
37
+ #####################
38
+ # pending_buckets #
39
+ #####################
40
+
41
+ ###
42
+ # @private
43
+ #
44
+ # Tracks pending persistence buckets created before a port is enabled.
45
+ #
46
+ # @return [Hash{Symbol,String=>Persistence::Port::Bucket}]
47
+ #
48
+ def pending_buckets
49
+
50
+ return @pending_buckets
51
+
52
+ end
53
+
54
+ #################
55
+ # enable_port #
56
+ #################
57
+
58
+ ###
59
+ # Enable a port. If no port is already enabled, port will be set as current port.
60
+ #
61
+ # @param port_name Name of port to create or enable.
62
+ #
63
+ # @param adapter_instance Adapter instance to use to create port. If not provided attempt will be made to
64
+ # enable existing port by name.
65
+ #
66
+ # @return [Persistence::Port] Port instance.
67
+ #
68
+ def enable_port( port_name, adapter_instance = nil )
69
+
70
+ port_instance = nil
71
+
72
+ if adapter_instance
73
+
74
+ port_instance = ::Persistence::Port.new( port_name, adapter_instance )
75
+
76
+ prior_port_by_name = @ports[ port_name.to_sym ]
77
+
78
+ @ports[ port_name.to_sym ] = port_instance
79
+
80
+ port_instance.enable
81
+
82
+ if prior_port_by_name
83
+ buckets_around_from_prior_port = prior_port_by_name.buckets
84
+ buckets_around_from_prior_port.each do |this_bucket_name, this_bucket|
85
+ port_instance.initialize_persistence_bucket_from_instance( this_bucket )
86
+ end
87
+ end
88
+
89
+ else
90
+
91
+ unless port_instance = port( port_name )
92
+ raise 'Port must first be enabled with adapter instance before it can be re-enabled by name.'
93
+ end
94
+
95
+ port_instance.enable
96
+
97
+ end
98
+
99
+ unless current_port
100
+ set_current_port( port_instance )
101
+ end
102
+
103
+ create_pending_buckets( port_instance )
104
+
105
+ return port_instance
106
+
107
+ end
108
+
109
+ ##################
110
+ # disable_port #
111
+ ##################
112
+
113
+ ###
114
+ # Disable port.
115
+ #
116
+ # @param port_name Port name to disable.
117
+ #
118
+ # @return self
119
+ #
120
+ def disable_port( port_name )
121
+
122
+ if port_instance = port( port_name )
123
+
124
+ if current_port == port_instance
125
+ set_current_port( nil )
126
+ end
127
+
128
+ port_instance.disable
129
+
130
+ end
131
+
132
+ return self
133
+
134
+ end
135
+
136
+ ##################
137
+ # current_port #
138
+ ##################
139
+
140
+ ###
141
+ # Get current port
142
+ #
143
+ # @return [Persistence::Port,nil] Current port.
144
+ #
145
+ def current_port
146
+ return @current_port
147
+ end
148
+
149
+ ######################
150
+ # set_current_port #
151
+ ######################
152
+
153
+ ###
154
+ # Set current port
155
+ #
156
+ # @param persistence_port_or_name Port instance or name to set current port to.
157
+ #
158
+ # @return self
159
+ #
160
+ def set_current_port( persistence_port_or_name )
161
+ @current_port = port_for_name_or_port( persistence_port_or_name )
162
+ return self
163
+ end
164
+
165
+ ##########
166
+ # port #
167
+ ##########
168
+
169
+ ###
170
+ # Get port for name.
171
+ #
172
+ # @param port_name Port name.
173
+ #
174
+ # @return [Persistence::Port] Port instance.
175
+ #
176
+ def port( port_name )
177
+ return @ports[ port_name.to_sym ]
178
+ end
179
+
180
+ ###########################
181
+ # port_for_name_or_port #
182
+ ###########################
183
+
184
+ ###
185
+ # Get port for name.
186
+ #
187
+ # @param persistence_port_or_name Port name or instance.
188
+ # @param ensure_exists Whether exception should be thrown is port does not exist.
189
+ #
190
+ # @return [Persistence::Port] Port instance.
191
+ #
192
+ def port_for_name_or_port( persistence_port_or_name, ensure_exists = false )
193
+
194
+ port_instance = nil
195
+
196
+ case persistence_port_or_name
197
+ when ::Symbol, ::String
198
+ port_instance = port( persistence_port_or_name )
199
+ else
200
+ port_instance = persistence_port_or_name
201
+ end
202
+
203
+ unless port_instance
204
+ if ensure_exists
205
+ raise ::ArgumentError, 'No port found by name ' << persistence_port_or_name.to_s
206
+ end
207
+ end
208
+
209
+ return port_instance
210
+
211
+ end
212
+
213
+ ############################
214
+ # create_pending_buckets #
215
+ ############################
216
+
217
+ ###
218
+ # @private
219
+ #
220
+ # Creates pending buckets when port is enabled.
221
+ #
222
+ # @param port Port to create pending buckets with.
223
+ #
224
+ # @return self
225
+ #
226
+ def create_pending_buckets( port )
227
+
228
+ @pending_buckets.delete_if do |this_class, this_bucket|
229
+ this_bucket.initialize_for_port( port )
230
+ true
231
+ end
232
+
233
+ return self
234
+
235
+ end
236
+
237
+ ####################
238
+ # pending_bucket #
239
+ ####################
240
+
241
+ ###
242
+ # @private
243
+ #
244
+ # Create pending bucket to be enabled with port is enabled.
245
+ #
246
+ # @param klass Class bucket is being created for.
247
+ # @param bucket_name Name to use for bucket.
248
+ #
249
+ # @return [Persistence::Port::Bucket]
250
+ #
251
+ def pending_bucket( klass, bucket_name )
252
+
253
+ bucket_instance = nil
254
+
255
+ unless bucket_instance = @pending_buckets[ klass ] and bucket_instance.name == bucket_name
256
+ @pending_buckets[ klass ] = bucket_instance = ::Persistence::Port::Bucket.new( nil, bucket_name )
257
+ end
258
+
259
+ return bucket_instance
260
+
261
+ end
262
+
263
+ end
@@ -0,0 +1,417 @@
1
+
2
+ ###
3
+ # Interface for Port implementation. Provided separately for easy overriding.
4
+ #
5
+ module ::Persistence::Port::PortInterface
6
+
7
+ include ::Persistence::Object::Flat::File::FilePersistence
8
+
9
+ ################
10
+ # initialize #
11
+ ################
12
+
13
+ ###
14
+ #
15
+ # @param port_name Name to use to identify port instance.
16
+ #
17
+ # @param adapter_instance Adapter instance for which port instance will be operative.
18
+ #
19
+ def initialize( port_name, adapter_instance )
20
+
21
+ super() if defined?( super )
22
+
23
+ @buckets = { }
24
+
25
+ @instances = ::UniqueArray.new
26
+
27
+ @name = port_name
28
+ @adapter = adapter_instance
29
+
30
+ @enabled = false
31
+
32
+ end
33
+
34
+ #############
35
+ # adapter #
36
+ #############
37
+
38
+ ###
39
+ # Retrieve parallel adapter instance.
40
+ #
41
+ # @return [Object] Adapter instance.
42
+ #
43
+ def adapter
44
+
45
+ unless @adapter
46
+ raise 'Persistence port must be enabled first.'
47
+ end
48
+
49
+ return @adapter
50
+
51
+ end
52
+
53
+ ##########
54
+ # name #
55
+ ##########
56
+
57
+ ###
58
+ # @!attribute [reader] Name of bucket
59
+ #
60
+ # @return [Symbol,String] Name.
61
+ #
62
+ attr_reader :name
63
+
64
+ ############
65
+ # enable #
66
+ ############
67
+
68
+ ###
69
+ # Enable port.
70
+ #
71
+ # @return self
72
+ #
73
+ def enable
74
+ @enabled = true
75
+ @adapter.enable
76
+ @buckets.each do |this_bucket_name, this_bucket|
77
+ this_bucket.initialize_for_port( self )
78
+ end
79
+ return self
80
+ end
81
+
82
+ #############
83
+ # disable #
84
+ #############
85
+
86
+ ###
87
+ # Disable port.
88
+ #
89
+ # @return self
90
+ #
91
+ def disable
92
+
93
+ @enabled = false
94
+
95
+ @instances.delete_if do |this_instance|
96
+ this_instance.instance_persistence_port = nil
97
+ true
98
+ end
99
+
100
+ @buckets.each do |this_bucket_name, this_bucket|
101
+ this_bucket.disable
102
+ end
103
+
104
+ @adapter.disable
105
+
106
+ return self
107
+
108
+ end
109
+
110
+ ##############
111
+ # enabled? #
112
+ ##############
113
+
114
+ ###
115
+ # Query whether port is enabled.
116
+ #
117
+ # @return [true,false] Whether port is enabled.
118
+ #
119
+ def enabled?
120
+ return @enabled
121
+ end
122
+
123
+ ###############
124
+ # disabled? #
125
+ ###############
126
+
127
+ ###
128
+ # Query whether port is disabled.
129
+ #
130
+ # @return [true,false] Whether port is disabled.
131
+ #
132
+ def disabled?
133
+
134
+ return ! @enabled
135
+ end
136
+
137
+ #############
138
+ # buckets #
139
+ #############
140
+
141
+ ###
142
+ # @!attribute [reader] Hash of buckets.
143
+ #
144
+ # @return [Hash{Symbol,String=>Persistence::Port::Bucket] Bucket Hash.
145
+ #
146
+ attr_reader :buckets
147
+
148
+ #######################
149
+ # register_instance #
150
+ #######################
151
+
152
+ ###
153
+ # @private
154
+ #
155
+ # Register an instance as using this port. This is used to disable references to port when port is disabled.
156
+ #
157
+ def register_instance( instance )
158
+
159
+ @instances.push( instance )
160
+
161
+ return self
162
+
163
+ end
164
+
165
+ #################################################
166
+ # initialize_persistence_bucket_from_instance #
167
+ #################################################
168
+
169
+ ###
170
+ # @private
171
+ #
172
+ # Use a bucket instance that has already been created with this port.
173
+ #
174
+ def initialize_persistence_bucket_from_instance( bucket_instance )
175
+
176
+ @buckets[ bucket_instance.name.to_sym ] = bucket_instance
177
+
178
+ bucket_instance.initialize_for_port( self )
179
+
180
+ return bucket_instance
181
+
182
+ end
183
+
184
+ ########################
185
+ # persistence_bucket #
186
+ ########################
187
+
188
+ ###
189
+ # Get persistence bucket configured for this port.
190
+ #
191
+ # @param bucket_name Name of bucket.
192
+ #
193
+ # @return [Persistence::Port::Bucket] Bucket instance.
194
+ #
195
+ def persistence_bucket( bucket_name )
196
+
197
+ bucket_instance = nil
198
+
199
+ bucket_name = bucket_name.to_sym
200
+
201
+ unless bucket_instance = @buckets[ bucket_name ]
202
+ @buckets[ bucket_name ] = bucket_instance = ::Persistence::Port::Bucket.new( self, bucket_name )
203
+ end
204
+
205
+ return bucket_instance
206
+
207
+ end
208
+
209
+ ###################################
210
+ # get_bucket_name_for_object_id #
211
+ ###################################
212
+
213
+ ###
214
+ # @private
215
+ #
216
+ # Use Object persistence ID to retrieve the name of the bucket in which object is currently being stored.
217
+ #
218
+ # @param global_id Object persistence ID that owns indexed entries.
219
+ #
220
+ # @return [String] Name of bucket.
221
+ #
222
+ def get_bucket_name_for_object_id( global_id )
223
+
224
+ return adapter.get_bucket_name_for_object_id( global_id )
225
+
226
+ end
227
+
228
+ #############################
229
+ # get_class_for_object_id #
230
+ #############################
231
+
232
+ ###
233
+ # @private
234
+ #
235
+ # Use Object persistence ID to retrieve the class of the object.
236
+ #
237
+ # @param global_id Object persistence ID that owns indexed entries.
238
+ #
239
+ # @return [String] Name of bucket.
240
+ #
241
+ def get_class_for_object_id( global_id )
242
+
243
+ return adapter.get_class_for_object_id( global_id )
244
+
245
+ end
246
+
247
+ #################
248
+ # put_object! #
249
+ #################
250
+
251
+ ###
252
+ # @private
253
+ #
254
+ # Persist object in persistence port. Object configuration will be used to determine where and how.
255
+ #
256
+ # @return [Object] Object persistence ID
257
+ #
258
+ def put_object!( object )
259
+
260
+ return object.persistence_bucket.put_object!( object )
261
+
262
+ end
263
+
264
+ ####################
265
+ # delete_object! #
266
+ ####################
267
+
268
+ ###
269
+ # @private
270
+ #
271
+ # Delete object in persistence port.
272
+ #
273
+ # @param global_id Object persistence ID.
274
+ #
275
+ # @return [String] Name of bucket.
276
+ #
277
+ def delete_object!( global_id )
278
+
279
+ persistence_hash_from_port = nil
280
+
281
+ bucket = get_bucket_name_for_object_id( global_id )
282
+
283
+ if bucket
284
+ persistence_hash_from_port = persistence_bucket( bucket ).delete_object!( global_id )
285
+ end
286
+
287
+ return persistence_hash_from_port
288
+
289
+ end
290
+
291
+ ################
292
+ # get_object #
293
+ ################
294
+
295
+ ###
296
+ # @private
297
+ #
298
+ # Get object from persistence port.
299
+ #
300
+ # @param global_id Object persistence ID.
301
+ #
302
+ # @return [Object] Persisted object instance.
303
+ #
304
+ def get_object( global_id )
305
+
306
+ object = nil
307
+
308
+ bucket = get_bucket_name_for_object_id( global_id )
309
+
310
+ if bucket
311
+ object = persistence_bucket( bucket ).get_object( global_id )
312
+ end
313
+
314
+ return object
315
+
316
+ end
317
+
318
+ #####################
319
+ # get_flat_object #
320
+ #####################
321
+
322
+ ###
323
+ # @private
324
+ #
325
+ # Get flat object from persistence port.
326
+ #
327
+ # @param global_id Object persistence ID to persist from port.
328
+ #
329
+ # @return [Object] Persisted object instance.
330
+ #
331
+ def get_flat_object( global_id )
332
+
333
+ flat_object = nil
334
+
335
+ bucket = get_bucket_name_for_object_id( global_id )
336
+
337
+ if bucket
338
+ flat_object = persistence_bucket( bucket ).get_flat_object( global_id )
339
+ end
340
+
341
+ return flat_object
342
+
343
+ end
344
+
345
+ ################################
346
+ # persists_files_by_content? #
347
+ ################################
348
+
349
+ def persists_files_by_content?
350
+
351
+ persists_files_by_content = nil
352
+
353
+ persists_files_by_content = super
354
+
355
+ if persists_files_by_content.nil?
356
+ persists_files_by_content = ::Persistence.persists_files_by_content?
357
+ end
358
+
359
+ return persists_files_by_content
360
+
361
+ end
362
+
363
+ #############################
364
+ # persists_files_by_path? #
365
+ #############################
366
+
367
+ def persists_files_by_path?
368
+
369
+ persists_files_by_path = nil
370
+
371
+ persists_files_by_path = super
372
+
373
+ if persists_files_by_path.nil?
374
+ persists_files_by_path = ::Persistence.persists_files_by_path?
375
+ end
376
+
377
+ return persists_files_by_path
378
+
379
+ end
380
+
381
+ #####################################
382
+ # persists_file_paths_as_objects? #
383
+ #####################################
384
+
385
+ def persists_file_paths_as_objects?
386
+
387
+ persists_file_paths_as_objects = nil
388
+
389
+ persists_file_paths_as_objects = super
390
+
391
+ if persists_file_paths_as_objects.nil?
392
+ persists_file_paths_as_objects = ::Persistence.persists_file_paths_as_objects?
393
+ end
394
+
395
+ return persists_file_paths_as_objects
396
+
397
+ end
398
+
399
+ #####################################
400
+ # persists_file_paths_as_strings? #
401
+ #####################################
402
+
403
+ def persists_file_paths_as_strings?
404
+
405
+ persists_file_paths_as_strings = nil
406
+
407
+ persists_file_paths_as_strings = super
408
+
409
+ if persists_file_paths_as_strings.nil?
410
+ persists_file_paths_as_strings = ::Persistence.persists_file_paths_as_strings?
411
+ end
412
+
413
+ return persists_file_paths_as_strings
414
+
415
+ end
416
+
417
+ end