class Struct - syck-1.3.0 Documentation

# class Struct

### Public Class Methods

yaml_new( klass, tag, val ) click to toggle source

    # File lib/syck/rubytypes.rb, line 54
    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_type = Syck.read_type_class( tag, Struct ).last
            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 = Syck::object_maker( struct_type, {} )
            st.members.each do |m|
                st.send( "#{m}=", val[m.to_s] )
            end
            props.each do |k,v|
                st.instance_variable_set(k, v)
            end
            st
        else
            raise Syck::TypeError, "Invalid Ruby Struct: " + val.inspect
        end
    end

yaml_tag_class_name() click to toggle source

    # File lib/syck/rubytypes.rb, line 52
    def self.yaml_tag_class_name; self.name.gsub( "Struct::", "" ); end

yaml_tag_read_class( name ) click to toggle source

    # File lib/syck/rubytypes.rb, line 53
    def self.yaml_tag_read_class( name ); "Struct::#{ name }"; end

### Public Instance Methods

to_yaml( opts = {} ) click to toggle source
Calls superclass method Object#to_yaml

    # File lib/syck/rubytypes.rb, line 87
    def to_yaml( opts = {} )
    return super unless YAML == Syck
            Syck::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.to_s, self[m.to_s] )
            end
                            self.to_yaml_properties.each do |m|
                map.add( m, instance_variable_get( m ) )
            end
        end
    end
    end