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
+ # Class used for block index instances, which index keys provided by running a Proc on an object instance.
4
+ # Interface provided in module so interface can be easily overridden.
5
+ #
6
+ class ::Persistence::Object::Index::BlockIndex
7
+
8
+ include ::Persistence::Object::Index::BlockIndex::BlockIndexInterface
9
+
10
+ end
@@ -0,0 +1,110 @@
1
+
2
+ ###
3
+ # Interface for block index instances, which index keys provided by running a Proc on an object instance.
4
+ #
5
+ module ::Persistence::Object::Index::BlockIndex::BlockIndexInterface
6
+
7
+ include ::Persistence::Object::Index
8
+
9
+ include ::CascadingConfiguration::Setting
10
+ include ::CascadingConfiguration::Array
11
+
12
+ ###
13
+ #
14
+ # @yield [object] Block to create index keys on object.
15
+ # @yieldparam object [Object] Object to index.
16
+ #
17
+ def initialize( index_name,
18
+ parent_bucket,
19
+ permits_duplicates = nil,
20
+ sorting_proc_or_sort_names = nil,
21
+ duplicates_sorting_proc_or_sort_names = nil,
22
+ ancestor_index_instance = nil,
23
+ & indexing_block )
24
+
25
+ super
26
+
27
+ if block_given?
28
+ indexing_procs.push( indexing_block )
29
+ elsif indexing_procs.empty?
30
+ raise ::Persistence::Exception::BlockRequired, 'Block required for index.'
31
+ end
32
+
33
+
34
+ end
35
+
36
+ ###################
37
+ # requires_keys #
38
+ ###################
39
+
40
+ ###
41
+ # Whether index requires keys be generated when block is run.
42
+ #
43
+ # @return [true,false] Whether keys must be generated.
44
+ #
45
+ attr_setting :requires_keys
46
+
47
+ #######################
48
+ # permits_nil_keys? #
49
+ #######################
50
+
51
+ ###
52
+ # Whether index permits nil keys be generated when block is run.
53
+ #
54
+ # @return [true,false] Whether keys must be non-nil.
55
+ #
56
+ attr_setting :permits_nil_keys?
57
+
58
+ ####################
59
+ # indexing_procs #
60
+ ####################
61
+
62
+ ###
63
+ # Procs used to generate keys.
64
+ #
65
+ # @return [CompositingArray<Proc>] Procs for key generation.
66
+ #
67
+ attr_array :indexing_procs
68
+
69
+ ##################
70
+ # index_object #
71
+ ##################
72
+
73
+ ###
74
+ # Index keys for object instance.
75
+ #
76
+ # @param object [Object] Object to index.
77
+ #
78
+ def index_object( object )
79
+
80
+ # get key(s) from block(s)
81
+ keys = [ ]
82
+ indexing_procs.each do |this_indexing_proc|
83
+
84
+ if block_return = object.instance_eval( & this_indexing_proc ) or
85
+ permits_nil_keys?
86
+
87
+ keys.push( block_return )
88
+
89
+ end
90
+
91
+ end
92
+
93
+ if keys.empty?
94
+
95
+ if requires_keys
96
+ raise ::Persistence::Exception::IndexingBlockFailedToGenerateKeys.new,
97
+ 'Index block failed to generate keys, which were required.'
98
+ end
99
+
100
+ else
101
+
102
+ super( object, *keys )
103
+
104
+ end
105
+
106
+ return self
107
+
108
+ end
109
+
110
+ end
@@ -0,0 +1,10 @@
1
+
2
+ ###
3
+ # Class used for explicit index instances, which index keys that are explicitly provided.
4
+ # Interface provided in module so interface can be easily overridden.
5
+ #
6
+ class ::Persistence::Object::Index::ExplicitIndex
7
+
8
+ include ::Persistence::Object::Index::ExplicitIndex::ExplicitIndexInterface
9
+
10
+ end
@@ -0,0 +1,57 @@
1
+
2
+ ###
3
+ # Interface for explicit index instances, which index keys that are explicitly provided.
4
+ #
5
+ module ::Persistence::Object::Index::ExplicitIndex::ExplicitIndexInterface
6
+
7
+ include ::Persistence::Object::Index
8
+
9
+ ###
10
+ #
11
+ # @method index_existing_objects
12
+ #
13
+ # We undefine :index_existing_objects because it makes no sense on an index requiring explicit keys.
14
+ #
15
+ undef_method( :index_existing_objects )
16
+
17
+ ##################
18
+ # index_object #
19
+ ##################
20
+
21
+ ###
22
+ # Index keys for object instance.
23
+ #
24
+ # @param object [Object] Object to index.
25
+ #
26
+ # @param keys [Array<Object>] Keys to use for index entries.
27
+ #
28
+ def index_object( object, *keys )
29
+
30
+ if keys.empty?
31
+ raise ::Persistence::Exception::IndexingObjectRequiresKeys.new,
32
+ 'No keys provided for index.'
33
+ end
34
+
35
+ # check for existing index on keys if we don't permit duplicates
36
+ unless permits_duplicates?
37
+
38
+ keys.each do |this_key|
39
+ if global_id = adapter_index.get_object_id( this_key ) and
40
+ global_id != object.persistence_id
41
+ raise ::Persistence::Exception::DuplicateViolatesUniqueIndex.new,
42
+ 'Attempt to create index for key ' + this_key.to_s +
43
+ ' would create duplicates in unique index :' + @name.to_s + '.'
44
+ end
45
+ end
46
+
47
+ end
48
+
49
+ keys.each do |this_key|
50
+ adapter_index.index_object_id( object.persistence_id, this_key )
51
+ end
52
+
53
+ return self
54
+
55
+ end
56
+
57
+ end
@@ -0,0 +1,40 @@
1
+
2
+ ###
3
+ # @private
4
+ #
5
+ # Internal helper module with common features for hashes that store indexes.
6
+ #
7
+ module ::Persistence::Object::IndexHash
8
+
9
+ ###################
10
+ # post_set_hook #
11
+ ###################
12
+
13
+ def post_set_hook( index_name, index_instance )
14
+
15
+ configuration_instance.indexes[ index_name ] = index_instance
16
+
17
+ end
18
+
19
+ ########################
20
+ # child_pre_set_hook #
21
+ ########################
22
+
23
+ def child_pre_set_hook( index_name, index_instance )
24
+
25
+ parent_bucket = nil
26
+
27
+ case configuration_instance
28
+ when ::Module
29
+ parent_bucket = configuration_instance.instance_persistence_bucket
30
+ else
31
+ parent_bucket = configuration_instance.persistence_bucket
32
+ end
33
+
34
+ child_index_instance = index_instance.class.new( nil, parent_bucket, nil, nil, nil, index_instance )
35
+
36
+ return child_index_instance
37
+
38
+ end
39
+
40
+ end
@@ -0,0 +1,322 @@
1
+
2
+ ###
3
+ # Instance methods for any objects enabled with persistence capabilities.
4
+ #
5
+ module ::Persistence::Object::ObjectInstance
6
+
7
+ include ::Persistence::Object::ParsePersistenceArgs
8
+
9
+ include ::CascadingConfiguration::Setting
10
+ include ::CascadingConfiguration::Hash
11
+
12
+ #######################
13
+ # persistence_port= #
14
+ #######################
15
+
16
+ attr_local_configuration :persistence_port
17
+
18
+ ###
19
+ # Assign a persistence port to be used with this object.
20
+ #
21
+ # @overload persistence_port=( port_name )
22
+ #
23
+ # @param port_name Name of port to be used. Expects port by name to be available in Persistence controller.
24
+ #
25
+ # @overload persistence_port=( port_instance )
26
+ #
27
+ # @param port_instance Port instance to use.
28
+ #
29
+ def persistence_port=( persistence_port_class_or_name )
30
+
31
+ case persistence_port_class_or_name
32
+
33
+ when ::Symbol, ::String
34
+
35
+ super( ::Persistence.port_for_name_or_port( persistence_port_class_or_name, true ) )
36
+
37
+ else
38
+
39
+ if persistence_port_class_or_name.respond_to?( :persistence_port )
40
+ super( persistence_port_class_or_name.persistence_port )
41
+ end
42
+
43
+ end
44
+
45
+
46
+ return self
47
+
48
+ end
49
+
50
+ ######################
51
+ # persistence_port #
52
+ ######################
53
+
54
+ ###
55
+ # Get persistence port that will be used with this object. Will use instance persistence port if no port is assigned,
56
+ # which will result in using the current port if no instance persistence port is specified.
57
+ #
58
+ # @return [Persistence::Port,nil] Persistence port instance.
59
+ #
60
+ def persistence_port
61
+
62
+ # if specified at instance level, use specified value
63
+ # otherwise, use value stored in class
64
+ return super || self.class.instance_persistence_port
65
+
66
+ end
67
+
68
+ #########################
69
+ # persistence_bucket= #
70
+ #########################
71
+
72
+ attr_instance_setting :persistence_bucket
73
+
74
+ ###
75
+ # Assign a persistence bucket to be used with this object.
76
+ #
77
+ # @overload instance_persistence_bucket=( bucket_name )
78
+ #
79
+ # @param port_name [Symbol,String] Name of port to be used. Expects port by name to be available
80
+ # in Persistence controller.
81
+ #
82
+ # @overload instance_persistence_bucket=( bucket_instance )
83
+ #
84
+ # @param port_instance [Persistence::Port::Bucket,nil] Persistence::Port::Bucket instance to use.
85
+ #
86
+ def persistence_bucket=( persistence_bucket_class_or_name )
87
+
88
+ if persistence_bucket_class_or_name.nil?
89
+
90
+ super( nil )
91
+
92
+ elsif persistence_bucket_class_or_name.is_a?( ::Persistence::Port::Bucket )
93
+
94
+ super( persistence_bucket_class_or_name )
95
+
96
+ elsif persistence_bucket_class_or_name.respond_to?( :instance_persistence_bucket )
97
+
98
+ # if arg responds to :instance_persistence_bucket we use arg's bucket
99
+ super( persistence_bucket_class_or_name.instance_persistence_bucket )
100
+
101
+ elsif ! ( persistence_bucket_class_or_name.is_a?( String ) or
102
+ persistence_bucket_class_or_name.is_a?( Symbol ) ) and
103
+ persistence_bucket_class_or_name.respond_to?( :persistence_bucket )
104
+
105
+ # if arg responds to :persistence_bucket we use arg's bucket
106
+ super( persistence_bucket_class_or_name.persistence_bucket )
107
+
108
+ else
109
+
110
+ # otherwise we use arg as a symbol
111
+ # this means classnames are ok (which are default)
112
+ self.persistence_bucket = persistence_port.persistence_bucket( persistence_bucket_class_or_name.to_sym )
113
+
114
+ end
115
+
116
+ return self
117
+
118
+ end
119
+
120
+ ########################
121
+ # persistence_bucket #
122
+ ########################
123
+
124
+ ###
125
+ # Get persistence bucket that will be used with this object. Will use name of class if bucket
126
+ # does not already exist.
127
+ #
128
+ # @return [Persistence::Port,nil] Persistence port instance.
129
+ #
130
+ def persistence_bucket
131
+
132
+ # if specified at instance level, use specified value
133
+ # otherwise, use value stored in class
134
+ return super || self.class.instance_persistence_bucket
135
+
136
+ end
137
+
138
+ ####################
139
+ # persistence_id #
140
+ ####################
141
+
142
+ ###
143
+ # Get persistence ID, used to identify unique objects.
144
+ #
145
+ attr_instance_setting :persistence_id
146
+
147
+ ##############
148
+ # persist! #
149
+ ##############
150
+
151
+ ###
152
+ # Store object to persistence port. Will cause all non-atomic properties to be updated if object has already
153
+ # been persisted.
154
+ #
155
+ # @overload persist!
156
+ #
157
+ # @overload persist!( index_name, key )
158
+ #
159
+ # @param index_name [Symbol,String] Name of index for explicit key-based indexing.
160
+ # @param key [Object] Key for explicit indexing.
161
+ #
162
+ # @overload persist!( index_name_key_hash )
163
+ #
164
+ # @param index_name_key_hash [Hash{Symbol,String=>Object}] Name of index for explicit key-based indexing,
165
+ # pointing to index value.
166
+ #
167
+ # @overload persist!( index_instance, key )
168
+ #
169
+ # @param index_instance [Symbol,String] Name of index for explicit key-based indexing.
170
+ # @param key [Object] Key for explicit indexing.
171
+ #
172
+ # @overload persist!( index_instance_key_hash )
173
+ #
174
+ # @param index_instance_key_hash [Hash{Persistence::Object::Index=>Object}] Name of index
175
+ # for explicit key-based indexing, pointing to index value.
176
+ #
177
+ # @return self
178
+ #
179
+ def persist!( *args )
180
+
181
+ index_instance, key, no_key = parse_args_for_index_value_no_value( args, false )
182
+
183
+ # call super to ensure object is persisted
184
+ unless persistence_port
185
+ raise ::Persistence::Exception::NoPortEnabled, 'No persistence port currently enabled.'
186
+ end
187
+
188
+ self.persistence_id = persistence_bucket.put_object!( self )
189
+
190
+ if index_instance
191
+
192
+ # if we have an index make sure that we have a key
193
+ if no_key
194
+ raise ::Persistence::Exception::KeyValueRequired,
195
+ 'Key required when specifying index for :persist!'
196
+ end
197
+
198
+ # and make sure we have an index that permits arbitrary keys
199
+ unless explicit_indexes[ index_instance.name ] == index_instance
200
+ raise ::Persistence::Exception::ExplicitIndexRequired,
201
+ 'Index ' + index_instance.name.to_s + ' was not declared as an explicit index '
202
+ 'and thus does not permit arbitrary keys.'
203
+ end
204
+
205
+ index_instance.index_object( self, key )
206
+
207
+ end
208
+
209
+ unless block_indexes.empty?
210
+ block_indexes.each do |this_index_name, this_block_index|
211
+ this_block_index.index_object( self )
212
+ end
213
+ end
214
+
215
+ return self
216
+
217
+ end
218
+
219
+ ################
220
+ # persisted? #
221
+ ################
222
+
223
+ ###
224
+ # Query whether object is persisted in port.
225
+ #
226
+ # @return [true,false] Whether object is persisted.
227
+ #
228
+ def persisted?
229
+
230
+ bucket_name = persistence_port.get_bucket_name_for_object_id( persistence_id )
231
+
232
+ return bucket_name ? true : false
233
+
234
+ end
235
+
236
+ ############
237
+ # cease! #
238
+ ############
239
+
240
+ ###
241
+ # Remove object properties stored for object from persistence bucket and indexes.
242
+ #
243
+ def cease!
244
+
245
+ indexes.each do |this_index_name, this_index|
246
+ this_index.delete_keys_for_object_id!( persistence_id )
247
+ end
248
+
249
+ persistence_hash_from_port = persistence_bucket.delete_object!( persistence_id )
250
+
251
+ self.persistence_id = nil
252
+
253
+ return persistence_hash_from_port
254
+
255
+ end
256
+
257
+ ######################
258
+ # explicit_indexes #
259
+ ######################
260
+
261
+ ###
262
+ #
263
+ # @method explicit_indexes
264
+ #
265
+ # Hash holding explicit indexes: index_name => index.
266
+ #
267
+ # @return [CompositingHash{Symbol,String=>Persistence::Object::Index::ExplicitIndex}]
268
+ #
269
+ attr_hash :explicit_indexes, ::Persistence::Object::IndexHash
270
+
271
+ ###################
272
+ # block_indexes #
273
+ ###################
274
+
275
+ ###
276
+ #
277
+ # @method block_indexes
278
+ #
279
+ # Hash holding block indexes: index_name => index.
280
+ #
281
+ # @return [CompositingHash{Symbol,String=>Persistence::Object::Index::BlockIndex}]
282
+ #
283
+ attr_hash :block_indexes, ::Persistence::Object::IndexHash
284
+
285
+ #############
286
+ # indexes #
287
+ #############
288
+
289
+ ###
290
+ #
291
+ # @method indexes
292
+ #
293
+ # Hash holding indexes: index_name => index.
294
+ #
295
+ # @return [CompositingHash{Symbol,String=>Persistence::Object::Index}]
296
+ #
297
+ attr_hash :indexes do
298
+
299
+ #======================#
300
+ # child_pre_set_hook #
301
+ #======================#
302
+
303
+ def child_pre_set_hook( index_name, index_instance )
304
+
305
+ child_instance = nil
306
+
307
+ case index_instance
308
+ when ::Persistence::Object::Index::ExplicitIndex
309
+ child_instance = configuration_instance.explicit_indexes[ index_name ]
310
+ when ::Persistence::Object::Index::BlockIndex
311
+ child_instance = configuration_instance.block_indexes[ index_name ]
312
+ when ::Persistence::Object::Complex::Index::AttributeIndex
313
+ child_instance = configuration_instance.attribute_indexes[ index_name ]
314
+ end
315
+
316
+ return child_instance
317
+
318
+ end
319
+
320
+ end
321
+
322
+ end