Class Struct
In: yaml/rubytypes.rb
Parent: Object

Methods

Public Class methods

[Source]

# File yaml/rubytypes.rb, line 52
    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

[Source]

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

[Source]

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

Public Instance methods

[Source]

# File yaml/rubytypes.rb, line 85
        def to_yaml( opts = {} )
                YAML::quick_emit( object_id, 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

[Validate]