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