Module: Persistence::Object::Autodetermine
- Included in:
- Persistence, Persistence::Object
- Defined in:
- lib/persistence/object/autodetermine.rb
Overview
Module used internally to extend Persistence and Persistence::Object to automatically determine what type of object
(of types: Complex, Flat, Hash, Array, File) module is being included in, and to include the appropriate
corresponding module branch.
Class Method Summary collapse
-
.extended(persistence_object_module) ⇒ Object
self.extended #.
Class Method Details
.extended(persistence_object_module) ⇒ Object
self.extended #
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/persistence/object/autodetermine.rb', line 15 def self.extended( persistence_object_module ) persistence_object_module.extend( ::Module::Cluster ) persistence_object_module.cluster( :persistence ).after_include do |class_or_module| # two types of objects: complex and flat # * complex objects persist ivars # * flat objects persist themselves (no ivars) # # if you want a different result, use the appropriate module directly # * ::Persistence::Complex # * ::Persistence::Flat # if we have a flat object, extend for flat object if class_or_module <= ::Array class_or_module.module_eval do include ::Persistence::Object::Complex::Array end elsif class_or_module <= ::Hash class_or_module.module_eval do include ::Persistence::Object::Complex::Hash end elsif class_or_module <= ::Bignum or class_or_module <= ::Fixnum or class_or_module <= ::Complex or class_or_module <= ::Rational or class_or_module <= ::TrueClass or class_or_module <= ::FalseClass or class_or_module <= ::String or class_or_module <= ::Symbol or class_or_module <= ::Regexp or class_or_module <= ::File or class_or_module <= ::NilClass class_or_module.module_eval do include ::Persistence::Object::Flat end # otherwise extend as a complex object else class_or_module.module_eval do include ::Persistence::Object::Complex end end end persistence_object_module.cluster( :persistence ).before_extend( :class, :module ) do raise 'Persistence does not expect to be used without class-level support.' end end |