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,10 @@
1
+
2
+ ###
3
+ # Index on object attributes, which calls attribute method to retrieve value for persistence, and which
4
+ # will load value from persistence port back into same attribute through setter method.
5
+ #
6
+ class ::Persistence::Object::Complex::Index::AttributeIndex
7
+
8
+ include ::Persistence::Object::Complex::Index::AttributeIndex::AttributeIndexInterface
9
+
10
+ end
@@ -0,0 +1,43 @@
1
+
2
+ ###
3
+ # Interface for index on object attributes, which calls attribute method to retrieve value for persistence,
4
+ # and which will load value from persistence port back into same attribute through setter method.
5
+ #
6
+ module ::Persistence::Object::Complex::Index::AttributeIndex::AttributeIndexInterface
7
+
8
+ include ::Persistence::Object::Index
9
+
10
+ include ::CascadingConfiguration::Setting
11
+
12
+ ####################
13
+ # attribute_name #
14
+ ####################
15
+
16
+ ###
17
+ # @method attribute_name
18
+ #
19
+ # @return [Symbol,String] Name of attribute index indexes.
20
+ #
21
+
22
+ # @method attribute_name=( attribute_name )
23
+ #
24
+ # @param attribute_name Name of attribute to index
25
+ #
26
+
27
+ attr_setting :attribute_name
28
+
29
+ ##################
30
+ # index_object #
31
+ ##################
32
+
33
+ def index_object( object )
34
+
35
+ # get attribute value
36
+ attribute_value = object.__send__( attribute_name )
37
+
38
+ # store in super - key/value index
39
+ return super( object, attribute_value )
40
+
41
+ end
42
+
43
+ end
@@ -0,0 +1,469 @@
1
+
2
+ ###
3
+ # Methods applied to object instances of complex objects enabled with persistence capabilities.
4
+ #
5
+ module ::Persistence::Object::Complex::ObjectInstance
6
+
7
+ include ::Persistence::Object::Complex::Attributes
8
+
9
+ include ::Persistence::Object::Complex::ClassAndObjectInstance
10
+
11
+ include ::CascadingConfiguration::Hash
12
+
13
+ #######################
14
+ # attribute_indexes #
15
+ #######################
16
+
17
+ ###
18
+ #
19
+ # @method attribute_indexes
20
+ #
21
+ # Hash holding attribute indexes: index_name => index.
22
+ #
23
+ # @return [CompositingHash{Symbol,String=>Persistence::Object::Complex::Index::AttributeIndex}]
24
+ #
25
+ attr_hash :attribute_indexes, ::Persistence::Object::IndexHash
26
+
27
+ ########
28
+ # == #
29
+ ########
30
+
31
+ ###
32
+ # Objects are equivalent if they are identical in standard Ruby terms or if their persistence state is equivalent.
33
+ #
34
+ # @param other_object Object comparing self to
35
+ #
36
+ # @return [true,false] Whether self is equal to other object.
37
+ #
38
+ def ==( other_object )
39
+
40
+ return super( other_object ) || persistence_state_equal?( other_object )
41
+
42
+ end
43
+
44
+ ##############################
45
+ # persistence_state_equal? #
46
+ ##############################
47
+
48
+ ###
49
+ # Reports whether objects are equivalent from a persistence perspective.
50
+ #
51
+ # @param other_object Object comparing self to
52
+ #
53
+ # @return [true,false] Whether self is equal to other object in terms of persisted state.
54
+ #
55
+ def persistence_state_equal?( other_object )
56
+
57
+ objects_are_equal = false
58
+
59
+ if other_object.is_a?( ::Persistence::Object::Complex::ObjectInstance ) and
60
+ self.class.equal?( other_object.class ) and
61
+ other_object.respond_to?( :persistence_id ) and
62
+ persistence_id == other_object.persistence_id
63
+
64
+ # test non-atomic attributes for equality
65
+ if objects_are_equal = non_atomic_attribute_readers.empty? or
66
+ objects_are_equal = ( persistence_hash_to_port == other_object.persistence_hash_to_port )
67
+
68
+ # test atomic attributes for equality
69
+ unless atomic_attribute_readers.empty?
70
+
71
+ atomic_attribute_readers.each do |this_attribute|
72
+ this_value = __send__( this_attribute )
73
+ this_other_value = other_object.__send__( this_attribute )
74
+ break unless objects_are_equal = ( this_value == this_other_value )
75
+ end
76
+
77
+ end
78
+
79
+ end
80
+
81
+ end
82
+
83
+ return objects_are_equal
84
+
85
+ end
86
+
87
+ ##############
88
+ # persist! #
89
+ ##############
90
+
91
+ def persist!( *args )
92
+
93
+ this_call_generates_id = ( persistence_id ? false : true )
94
+
95
+ super
96
+
97
+ if this_call_generates_id
98
+ remove_atomic_attribute_values
99
+ end
100
+
101
+ # index object attributes
102
+ index_attributes
103
+
104
+ return self
105
+
106
+ end
107
+
108
+ ######################
109
+ # index_attributes #
110
+ ######################
111
+
112
+ ###
113
+ # @private
114
+ #
115
+ # Perform indexing on attributes with indexes.
116
+ #
117
+ # @return self
118
+ #
119
+ def index_attributes
120
+
121
+ attribute_indexes.each do |this_attribute_name, this_attribute_index|
122
+ this_attribute_index.index_object( self )
123
+ end
124
+
125
+ return self
126
+
127
+ end
128
+
129
+ #############
130
+ # persist #
131
+ #############
132
+
133
+ def persist( *args )
134
+
135
+ index_instance, key, no_key = parse_args_for_index_value_no_value( args )
136
+
137
+ unless persistence_id
138
+ if no_key
139
+ raise ::Persistence::Exception::KeyValueRequired,
140
+ 'Key value required if persistence ID does not already exist for self. : ' + args.to_s
141
+ end
142
+ unless self.persistence_id = index_instance.get_object_id( key )
143
+ # if we got no persistence id, return nil
144
+ return nil
145
+ end
146
+ end
147
+
148
+ persistence_hash_from_port = persistence_bucket.get_object_hash( persistence_id )
149
+ load_persistence_hash( persistence_port, persistence_hash_from_port )
150
+
151
+ return self
152
+
153
+ end
154
+
155
+ ############
156
+ # cease! #
157
+ ############
158
+
159
+ def cease!
160
+
161
+ global_id = persistence_id
162
+
163
+ if persistence_hash_in_port = super
164
+
165
+ persistence_hash_in_port.each do |this_attribute, this_value|
166
+
167
+ if this_value.is_a?( ::Persistence::Object::Complex::ComplexObject ) and
168
+ this_value.delete_cascades?
169
+
170
+ this_value.cease!
171
+
172
+ end
173
+
174
+ end
175
+
176
+ end
177
+
178
+ self.persistence_id = nil
179
+
180
+ return self
181
+
182
+ end
183
+
184
+ ###################
185
+ # get_attribute #
186
+ ###################
187
+
188
+ ####
189
+ # @private
190
+ #
191
+ # Method used when defining implicit getter for attr_atomic/attr_non_atomic.
192
+ #
193
+ def get_attribute( attribute )
194
+
195
+ value = nil
196
+
197
+ variable_name = attribute.variable_name
198
+
199
+ # if we're atomic and have an ID, get from persistence port (call accessor read method)
200
+ if persistence_id and atomic_attribute_reader?( attribute )
201
+
202
+ # the first time we load the attribute we load the object corresponding to the ID
203
+ # once our object has been loaded we don't need to get it again
204
+ # so we can check to see if the object-local variable is already set to a value,
205
+ # in which case we do not load it from the persistence port
206
+ if instance_variable_defined?( variable_name )
207
+
208
+ value = instance_variable_get( variable_name )
209
+
210
+ else
211
+
212
+ value = persistence_bucket.get_attribute( self, attribute )
213
+
214
+ if value.is_a?( ::Persistence::Object::Complex::ComplexObject )
215
+
216
+ value.persistence_port = persistence_port
217
+
218
+ value = value.persist
219
+
220
+ # we only want to store atomic attributes that are complex objects
221
+ instance_variable_set( variable_name, value )
222
+
223
+ end
224
+
225
+ end
226
+
227
+ # otherwise get from object (not yet persisted)
228
+ else
229
+
230
+ value = instance_variable_get( variable_name )
231
+
232
+ end
233
+
234
+ return value
235
+
236
+ end
237
+
238
+ ###################
239
+ # set_attribute #
240
+ ###################
241
+
242
+ ####
243
+ # @private
244
+ #
245
+ # Method used when defining implicit setter for attr_atomic/attr_non_atomic.
246
+ #
247
+ def set_attribute( attribute, value )
248
+
249
+ variable_name = attribute.variable_name
250
+
251
+ # if we're atomic and have an ID, put to persistence port
252
+ if persistence_id and atomic_attribute?( attribute )
253
+
254
+ if is_complex_object?( value )
255
+ instance_variable_set( variable_name, value )
256
+ end
257
+
258
+ value = persist_as_sub_object_or_attribute_and_return_id_or_value( value )
259
+
260
+ persistence_bucket.put_attribute!( self, attribute, value )
261
+
262
+ if self.class.has_attribute_index?( attribute )
263
+ attribute_indexes[ attribute ].index_object( self )
264
+ end
265
+
266
+ # otherwise get from object
267
+ else
268
+
269
+ instance_variable_set( variable_name, value )
270
+
271
+ end
272
+
273
+ return value
274
+
275
+ end
276
+
277
+ #######################
278
+ # load_atomic_state #
279
+ #######################
280
+
281
+ ###
282
+ # Helper method to load atomic state into object so that it can be inspected.
283
+ #
284
+ # @return self
285
+ #
286
+ def load_atomic_state
287
+
288
+ atomic_attribute_readers.each do |this_attribute|
289
+ instance_variable_set( this_attribute.variable_name, __send__( this_attribute ) )
290
+ end
291
+
292
+ return self
293
+
294
+ end
295
+
296
+ ###############################################################
297
+ # persist_as_sub_object_or_attribute_and_return_id_or_value #
298
+ ###############################################################
299
+
300
+ ###
301
+ # @private
302
+ #
303
+ # Helper method for persistence for nested objects.
304
+ #
305
+ def persist_as_sub_object_or_attribute_and_return_id_or_value( value )
306
+
307
+ if is_complex_object?( value ) and ! self.class.persists_flat?( value )
308
+
309
+ value.persist!
310
+
311
+ sub_id_or_attribute_value = ::Persistence::Object::Complex::ComplexObject.new( value )
312
+
313
+ else
314
+
315
+ sub_id_or_attribute_value = value
316
+
317
+ end
318
+
319
+ return sub_id_or_attribute_value
320
+
321
+ end
322
+
323
+ ##############################
324
+ # persistence_hash_to_port #
325
+ ##############################
326
+
327
+ ###
328
+ # @private
329
+ #
330
+ # Generate hash representing object.
331
+ #
332
+ # @return [Hash] Hash representing information to reproduce object instance.
333
+ #
334
+ def persistence_hash_to_port
335
+
336
+ persistence_hash = ::Persistence::Object::Complex::Attributes::HashToPort.new
337
+ persistence_hash.persistence_object = self
338
+
339
+ persistent_attribute_writers.each do |this_attribute|
340
+ persistence_hash[ this_attribute ] = __send__( this_attribute )
341
+ end
342
+
343
+ return persistence_hash
344
+
345
+ end
346
+
347
+ ###########################
348
+ # load_persistence_hash #
349
+ ###########################
350
+
351
+ ###
352
+ # @private
353
+ #
354
+ # Helper method for creating object when persisting from storage port.
355
+ #
356
+ # @param port Storage port object is being loaded from.
357
+ #
358
+ # @param persistence_ivar_hash Hash of data from storage port.
359
+ #
360
+ # @return self
361
+ #
362
+ def load_persistence_hash( port, persistence_ivar_hash )
363
+
364
+ self.persistence_port = port
365
+
366
+ persistence_ivar_hash.each do |this_attribute_name, this_attribute_value|
367
+
368
+ if this_attribute_value.is_a?( ::Persistence::Object::Complex::ComplexObject )
369
+ this_attribute_value = this_attribute_value.persist
370
+ end
371
+
372
+ load_persistence_value( this_attribute_name, this_attribute_value )
373
+
374
+ end
375
+
376
+ return self
377
+
378
+ end
379
+
380
+ ############################
381
+ # load_persistence_value #
382
+ ############################
383
+
384
+ ###
385
+ # @private
386
+ #
387
+ # Helper method for loading data from persistence hash from storage port.
388
+ #
389
+ # @param attribute_name Attribute being loaded.
390
+ #
391
+ # @param attribute_value Attribute value to load.
392
+ #
393
+ # @return self
394
+ #
395
+ def load_persistence_value( attribute_name, attribute_value )
396
+
397
+ __send__( attribute_name.write_accessor_name, attribute_value )
398
+
399
+ return self
400
+
401
+ end
402
+
403
+ ##################################################################################################
404
+ private ######################################################################################
405
+ ##################################################################################################
406
+
407
+ ####################################
408
+ # remove_atomic_attribute_values #
409
+ ####################################
410
+
411
+ ###
412
+ # Helper method for initial persistence to storage port to remove atomic variables once persistence ID
413
+ # has been created.
414
+ #
415
+ def remove_atomic_attribute_values
416
+
417
+ encapsulation = ::CascadingConfiguration::Core::Encapsulation.encapsulation( :default )
418
+
419
+ atomic_attribute_readers.each do |this_atomic_accessor|
420
+
421
+ if encapsulation.has_configuration_value?( self, this_atomic_accessor ) and
422
+ ! is_complex_object?( encapsulation.get_configuration_variable( self, this_atomic_accessor ) )
423
+
424
+ encapsulation.remove_configuration_variable( self, this_atomic_accessor )
425
+
426
+ end
427
+
428
+ end
429
+
430
+ end
431
+
432
+ ########################
433
+ # is_complex_object? #
434
+ ########################
435
+
436
+ ###
437
+ # Helper method to query whether object should be treated as a complex object.
438
+ #
439
+ # @param object Object to test
440
+ #
441
+ # @return [true,false] Whether object should be treated as a complex object.
442
+ #
443
+ def is_complex_object?( object )
444
+
445
+ is_complex = true
446
+
447
+ if object.is_a?( Bignum ) or
448
+ object.is_a?( Fixnum ) or
449
+ object.is_a?( Complex ) or
450
+ object.is_a?( Rational ) or
451
+ object.is_a?( TrueClass ) or
452
+ object.is_a?( FalseClass ) or
453
+ object.is_a?( String ) or
454
+ object.is_a?( Symbol ) or
455
+ object.is_a?( Regexp ) or
456
+ object.is_a?( File ) or
457
+ object.is_a?( ::Persistence::Object::Flat::File::Contents ) or
458
+ object.is_a?( ::Persistence::Object::Flat::File::Path ) or
459
+ object.is_a?( NilClass )
460
+
461
+ is_complex = false
462
+
463
+ end
464
+
465
+ return is_complex
466
+
467
+ end
468
+
469
+ end