In Files

  • yaml/rubytypes.rb

Struct

Public Class Methods

yaml_new( klass, tag, val ) click to toggle source
 
               # File yaml/rubytypes.rb, line 51
def self.yaml_new( klass, tag, val )
    if Hash === val
        struct_type = nil

        #
        # Use existing Struct if it exists
        #
        props = {}
        val.delete_if { |k,v| props[k] = v if k =~ /^@/ }
        begin
            struct_name, struct_type = YAML.read_type_class( tag, Struct )
        rescue NameError
        end
        if not struct_type
            struct_def = [ tag.split( ':', 4 ).last ]
            struct_type = Struct.new( *struct_def.concat( val.keys.collect { |k| k.intern } ) ) 
        end

        #
        # Set the Struct properties
        #
        st = YAML::object_maker( struct_type, {} )
        st.members.each do |m|
            st.send( "#{m}=", val[m] )
        end
        props.each do |k,v|
            st.instance_variable_set(k, v)
        end
        st
    else
        raise YAML::TypeError, "Invalid Ruby Struct: " + val.inspect
    end
end
            
yaml_tag_class_name() click to toggle source
 
               # File yaml/rubytypes.rb, line 49
def self.yaml_tag_class_name; self.name.gsub( "Struct::", "" ); end
            
yaml_tag_read_class( name ) click to toggle source
 
               # File yaml/rubytypes.rb, line 50
def self.yaml_tag_read_class( name ); "Struct::#{ name }"; end
            

Public Instance Methods

to_yaml( opts = {} ) click to toggle source
 
               # File yaml/rubytypes.rb, line 84
def to_yaml( opts = {} )
        YAML::quick_emit( self, opts ) do |out|
                #
                # Basic struct is passed as a YAML map
                #
    out.map( taguri, to_yaml_style ) do |map|
                        self.members.each do |m|
            map.add( m, self[m] )
        end
                        self.to_yaml_properties.each do |m|
            map.add( m, instance_variable_get( m ) )
        end
    end
end
end