module BitGirder::Core::BitGirderStructure

Public Class Methods

as_instance( val ) click to toggle source
# File lib/bitgirder/core.rb, line 889
def self.as_instance( val )
         
    return val if val.is_a?( self )

    BitGirderMethods.not_nil( val, :val )
        
    cd = self.get_class_def
        
    cd.instance_mappers.each do |im|
        ( res = im.processor.call( val ) ) && ( return res )
    end
        
    raise TypeError, 
          "Don't know how to convert #{val.class} to #{self}"
end
bg_abstract( meth ) click to toggle source
# File lib/bitgirder/core.rb, line 881
def self.bg_abstract( meth )
 
    define_method( meth ) do
        raise "Abstract method #{self.class}##{meth} " \
              "not implemented"
    end
end
bg_attr( id, opts = {} ) click to toggle source
# File lib/bitgirder/core.rb, line 854
def self.bg_attr( id, opts = {} )
        
    argh = { 
        :identifier => id, 
        :validation => :not_nil 
    }.
    merge( opts )
 
    self.get_class_def.add_attr( argh )
end
get_class_def() click to toggle source
# File lib/bitgirder/core.rb, line 850
def self.get_class_def
    BitGirderClassDefinition.for_class( self )        
end
included( cls ) click to toggle source
# File lib/bitgirder/core.rb, line 846
def self.included( cls )
    
    cls.class_eval do
    
        def self.get_class_def
            BitGirderClassDefinition.for_class( self )        
        end

        def self.bg_attr( id, opts = {} )
    
            argh = { 
                :identifier => id, 
                :validation => :not_nil 
            }.
            merge( opts )
 
            self.get_class_def.add_attr( argh )
        end
    
        def self.map_instances( opts )
            
            im = InstanceMapper.new( opts ) # Validation in InstanceMapper
            self.get_class_def.instance_mappers.unshift( im )
        end
    
        def self.map_instance_of( *classes, &blk )
    
            self.map_instances(
                :processor => lambda { |val| 
                    classes.find { |cls| val.is_a?( cls ) } && 
                        blk.call( val )
                }
            )
        end

        def self.bg_abstract( meth )
 
            define_method( meth ) do
                raise "Abstract method #{self.class}##{meth} " \
                      "not implemented"
            end
        end
    
        def self.as_instance( val )
     
            return val if val.is_a?( self )

            BitGirderMethods.not_nil( val, :val )
    
            cd = self.get_class_def
    
            cd.instance_mappers.each do |im|
                ( res = im.processor.call( val ) ) && ( return res )
            end
    
            raise TypeError, 
                  "Don't know how to convert #{val.class} to #{self}"
        end
    
        def self.install_hash

            cd = self.get_class_def
            define_method( :hash ) { cd.hash_instance( self ) }
        end
    end
end
install_hash() click to toggle source
# File lib/bitgirder/core.rb, line 905
def self.install_hash

    cd = self.get_class_def
    define_method( :hash ) { cd.hash_instance( self ) }
end
map_instance_of( *classes, &blk ) click to toggle source
# File lib/bitgirder/core.rb, line 871
def self.map_instance_of( *classes, &blk )
        
    self.map_instances(
        :processor => lambda { |val| 
            classes.find { |cls| val.is_a?( cls ) } && 
                blk.call( val )
        }
    )
end
map_instances( opts ) click to toggle source
# File lib/bitgirder/core.rb, line 865
def self.map_instances( opts )
    
    im = InstanceMapper.new( opts ) # Validation in InstanceMapper
    self.get_class_def.instance_mappers.unshift( im )
end
new( *argv ) click to toggle source
# File lib/bitgirder/core.rb, line 825
def initialize( *argv )
    BitGirderClassDefinition.init_instance( self, argv )
end

Public Instance Methods

==( other ) click to toggle source
# File lib/bitgirder/core.rb, line 830
def ==( other )
    
    return true if self.equal?( other )
    return false unless other.class == self.class

    ! self.class.get_class_def.attr_syms.find do |sym|

        other_val = other.instance_variable_get( sym )
        self_val = instance_variable_get( sym )

        other_val != self_val
    end
end
Also aliased as: eql?
eql?( other )
Alias for: ==

Private Instance Methods

impl_initialize() click to toggle source
# File lib/bitgirder/core.rb, line 823
def impl_initialize; end