1. Psych::
  2. Visitors::
  3. YAMLTree

class Psych::Visitors::YAMLTree

YAMLTree builds aYAML ast given a Ruby object. For example:

builder =Psych::Visitors::YAMLTree.newbuilder<< {:foo=>'bar' }builder.tree# => #<Psych::Nodes::Stream .. }

Attributes

finished[R]
finished?[R]
started[R]
started?[R]

Public Class Methods

Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 44defself.createoptions = {},emitter =nilemitter||=TreeBuilder.newclass_loader =ClassLoader.newss           =ScalarScanner.newclass_loadernew(emitter,ss,options)end
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 51definitializeemitter,ss,optionssuper()@started    =false@finished   =false@emitter    =emitter@st         =Registrar.new@ss         =ss@options    =options@line_width =options[:line_width]if@line_width&&@line_width<0if@line_width==-1# Treat -1 as unlimited line-width, same as libyaml does.@line_width =nilelsefail(ArgumentError,"Invalid line_width #{@line_width}, must be non-negative or -1 for unlimited.")endend@stringify_names =options[:stringify_names]@coders     = []@dispatch_cache =Hash.newdo|h,klass|method ="visit_#{(klass.name || '').split('::').join('_')}"method =respond_to?(method)?method:h[klass.superclass]raise(TypeError,"can't dump #{klass.name}")unlessmethodh[klass] =methodend.compare_by_identityend
Calls superclass methodBasicObject::new

Public Instance Methods

Alias for:push
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 119defaccepttarget# return any aliases we findif@st.key?targetoid         =@st.id_fortargetnode        =@st.node_fortargetanchor      =oid.to_snode.anchor =anchorreturn@emitter.aliasanchorendiftarget.respond_to?(:encode_with)dump_codertargetelsesend(@dispatch_cache[target.class],target)endend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 88deffinish@emitter.end_stream.tapdo@finished =trueendend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 99defpushobjectstartunlessstarted?version = []version = [1,1]if@options[:header]case@options[:version]whenArrayversion =@options[:version]whenStringversion =@options[:version].split('.').map {|x|x.to_i }elseversion = [1,1]endif@options.key?:version@emitter.start_documentversion, [],falseacceptobject@emitter.end_document!@emitter.streaming?end
Also aliased as:<<
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 82defstartencoding =Nodes::Stream::UTF8@emitter.start_stream(encoding).tapdo@started =trueendend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 94deftreefinishunlessfinished?@emitter.rootend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 386defvisit_Arrayoifo.class==::Arrayvisit_Enumeratoroelsevisit_array_subclassoendend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 412defvisit_BasicObjectotag =Psych.dump_tags[o.class]tag||="!ruby/marshalable:#{o.class.name}"map =@emitter.start_mapping(nil,tag,false,Nodes::Mapping::BLOCK)register(o,map)o.marshal_dump.each(&method(:accept))@emitter.end_mappingend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 286defvisit_BigDecimalo@emitter.scalaro._dump,nil,'!ruby/object:BigDecimal',false,false,Nodes::Scalar::ANYend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 349defvisit_ClassoraiseTypeError,"can't dump anonymous class: #{o}"unlesso.nameregistero,@emitter.scalar(o.name,nil,'!ruby/class',false,false,Nodes::Scalar::SINGLE_QUOTED)end
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 259defvisit_Complexoregistero,@emitter.start_mapping(nil,'!ruby/object:Complex',false,Nodes::Mapping::BLOCK)  ['real',o.real.to_s,'image',o.imag.to_s].eachdo|m|@emitter.scalarm,nil,nil,true,false,Nodes::Scalar::ANYend@emitter.end_mappingend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 165defvisit_Dataoivars =o.instance_variablesifivars.empty?tag = ['!ruby/data',o.class.name].compact.join(':')registero,@emitter.start_mapping(nil,tag,false,Nodes::Mapping::BLOCK)o.members.eachdo|member|@emitter.scalarmember.to_s,nil,nil,true,false,Nodes::Scalar::ANYaccepto.sendmemberend@emitter.end_mappingelsetag = ['!ruby/data-with-ivars',o.class.name].compact.join(':')node =@emitter.start_mapping(nil,tag,false,Psych::Nodes::Mapping::BLOCK)register(o,node)# Dump the membersaccept'members'@emitter.start_mappingnil,nil,true,Nodes::Mapping::BLOCKo.members.eachdo|member|@emitter.scalarmember.to_s,nil,nil,true,false,Nodes::Scalar::ANYaccepto.sendmemberend@emitter.end_mapping# Dump the ivarsaccept'ivars'@emitter.start_mappingnil,nil,true,Nodes::Mapping::BLOCKivars.eachdo|ivar|acceptivar.to_saccepto.instance_variable_getivarend@emitter.end_mapping@emitter.end_mappingendend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 229defvisit_Dateoformatted =format_dateoregistero,@emitter.scalar(formatted,nil,nil,true,false,Nodes::Scalar::ANY)end
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 234defvisit_DateTimeot =o.italyformatted =format_timet,t.offset.zero?tag ='!ruby/object:DateTime'registero,@emitter.scalar(formatted,nil,tag,false,false,Nodes::Scalar::ANY)end
Alias for:visit_Object
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 144defvisit_Encodingotag ="!ruby/encoding"@emitter.scalaro.name,nil,tag,false,false,Nodes::Scalar::ANYend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 394defvisit_Enumeratororegistero,@emitter.start_sequence(nil,nil,true,Nodes::Sequence::BLOCK)o.each {|c|acceptc }@emitter.end_sequenceend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 217defvisit_Exceptionodump_exceptiono,o.message.to_send
Alias for:visit_Integer
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 275defvisit_Floatoifo.nan?@emitter.scalar'.nan',nil,nil,true,false,Nodes::Scalar::ANYelsifo.infinite?@emitter.scalar((o.infinite?>0?'.inf':'-.inf'),nil,nil,true,false,Nodes::Scalar::ANY)else@emitter.scalaro.to_s,nil,nil,true,false,Nodes::Scalar::ANYendend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 362defvisit_Hashoifo.class==::Hashregister(o,@emitter.start_mapping(nil,nil,true,Psych::Nodes::Mapping::BLOCK))o.eachdo|k,v|accept(@stringify_names&&Symbol===k?k.to_s:k)acceptvend@emitter.end_mappingelsevisit_hash_subclassoendend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 269defvisit_Integero@emitter.scalaro.to_s,nil,nil,true,false,Nodes::Scalar::ANYend
Also aliased as:visit_TrueClass,visit_FalseClass
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 344defvisit_ModuleoraiseTypeError,"can't dump anonymous module: #{o}"unlesso.nameregistero,@emitter.scalar(o.name,nil,'!ruby/module',false,false,Nodes::Scalar::SINGLE_QUOTED)end
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 221defvisit_NameErrorodump_exceptiono,o.message.to_send
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 400defvisit_NilClasso@emitter.scalar('',nil,'tag:yaml.org,2002:null',true,false,Nodes::Scalar::ANY)end
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 149defvisit_Objectotag =Psych.dump_tags[o.class]unlesstagklass =o.class==Object?nil:o.class.nametag   = ['!ruby/object',klass].compact.join(':')endmap =@emitter.start_mapping(nil,tag,false,Nodes::Mapping::BLOCK)register(o,map)dump_ivarso@emitter.end_mappingend
Also aliased as:visit_Delegator
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 136defvisit_Psych_Omaposeq =@emitter.start_sequence(nil,'tag:yaml.org,2002:omap',false,Nodes::Sequence::BLOCK)register(o,seq)o.each {|k,v|visit_Hashk=>v }@emitter.end_sequenceend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 375defvisit_Psych_Setoregister(o,@emitter.start_mapping(nil,'!set',false,Psych::Nodes::Mapping::BLOCK))o.eachdo|k,v|accept(@stringify_names&&Symbol===k?k.to_s:k)acceptvend@emitter.end_mappingend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 354defvisit_Rangeoregistero,@emitter.start_mapping(nil,'!ruby/range',false,Nodes::Mapping::BLOCK)  ['begin',o.begin,'end',o.end,'excl',o.exclude_end?].eachdo|m|acceptmend@emitter.end_mappingend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 246defvisit_Rationaloregistero,@emitter.start_mapping(nil,'!ruby/object:Rational',false,Nodes::Mapping::BLOCK)  ['denominator',o.denominator.to_s,'numerator',o.numerator.to_s  ].eachdo|m|@emitter.scalarm,nil,nil,true,false,Nodes::Scalar::ANYend@emitter.end_mappingend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 225defvisit_Regexporegistero,@emitter.scalar(o.inspect,nil,'!ruby/regexp',false,false,Nodes::Scalar::ANY)end
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 290defvisit_Stringoplain =truequote =truestyle =Nodes::Scalar::PLAINtag   =nilifbinary?(o)o     = [o].pack('m0')tag   ='!binary'# FIXME: change to below when syck is removed#tag   = 'tag:yaml.org,2002:binary'style =Nodes::Scalar::LITERALplain =falsequote =falseelsifo.match?(/\n(?!\Z)/)# match \n except blank line at the end of stringstyle =Nodes::Scalar::LITERALelsifo=='<<'style =Nodes::Scalar::SINGLE_QUOTEDtag   ='tag:yaml.org,2002:str'plain =falsequote =falseelsifo=='y'||o=='Y'||o=='n'||o=='N'style =Nodes::Scalar::DOUBLE_QUOTEDelsif@line_width&&o.length>@line_widthstyle =Nodes::Scalar::FOLDEDelsifo.match?(/^[^[:word:]][^"]*$/)style =Nodes::Scalar::DOUBLE_QUOTEDelsifnotString===@ss.tokenize(o)or/\A0[0-7]*[89]/.match?(o)style =Nodes::Scalar::SINGLE_QUOTEDendis_primitive =o.class==::Stringivars =is_primitive? []:o.instance_variablesifivars.empty?unlessis_primitivetag ="!ruby/string:#{o.class}"plain =falsequote =falseend@emitter.scalaro,nil,tag,plain,quote,styleelsemaptag ='!ruby/string'.dupmaptag<<":#{o.class}"unlesso.class==::Stringregistero,@emitter.start_mapping(nil,maptag,false,Nodes::Mapping::BLOCK)@emitter.scalar'str',nil,nil,true,false,Nodes::Scalar::ANY@emitter.scalaro,nil,tag,plain,quote,styledump_ivarso@emitter.end_mappingendend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 203defvisit_Structotag = ['!ruby/struct',o.class.name].compact.join(':')registero,@emitter.start_mapping(nil,tag,false,Nodes::Mapping::BLOCK)o.members.eachdo|member|@emitter.scalarmember.to_s,nil,nil,true,false,Nodes::Scalar::ANYaccepto[member]enddump_ivarso@emitter.end_mappingend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 404defvisit_Symboloifo.empty?@emitter.scalar"",nil,'!ruby/symbol',false,false,Nodes::Scalar::ANYelse@emitter.scalar":#{o}",nil,nil,true,false,Nodes::Scalar::ANYendend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 241defvisit_Timeoformatted =format_timeoregistero,@emitter.scalar(formatted,nil,nil,true,false,Nodes::Scalar::ANY)end
Alias for:visit_Integer

Private Instance Methods

Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 426defbinary?stringstring.encoding==Encoding::ASCII_8BIT&&!string.ascii_only?end
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 537defdump_codero@coders<<otag =Psych.dump_tags[o.class]unlesstagklass =o.class==Object?nil:o.class.nametag   = ['!ruby/object',klass].compact.join(':')endc =Psych::Coder.new(tag)o.encode_with(c)emit_coderc,oend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 502defdump_exceptiono,msgtag = ['!ruby/exception',o.class.name].join':'@emitter.start_mappingnil,tag,false,Nodes::Mapping::BLOCKifmsg@emitter.scalar'message',nil,nil,true,false,Nodes::Scalar::ANYacceptmsgend@emitter.scalar'backtrace',nil,nil,true,false,Nodes::Scalar::ANYaccepto.backtracedump_ivarso@emitter.end_mappingend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 572defdump_ivarstargettarget.instance_variables.eachdo|iv|@emitter.scalar("#{iv.to_s.sub(/^@/, '')}",nil,nil,true,false,Nodes::Scalar::ANY)accepttarget.instance_variable_get(iv)endend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 499defdump_listoend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 550defemit_coderc,ocasec.typewhen:scalar@emitter.scalarc.scalar,nil,c.tag,c.tag.nil?,false,c.stylewhen:seq@emitter.start_sequencenil,c.tag,c.tag.nil?,c.stylec.seq.eachdo|thing|acceptthingend@emitter.end_sequencewhen:mapregistero,@emitter.start_mapping(nil,c.tag,c.implicit,c.style)c.map.eachdo|k,v|acceptkacceptvend@emitter.end_mappingwhen:objectacceptc.objectendend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 528defformat_datedatedate.strftime("%Y-%m-%d")end
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 520defformat_timetime,utc =time.utc?ifutctime.strftime("%Y-%m-%d %H:%M:%S.%9N Z")elsetime.strftime("%Y-%m-%d %H:%M:%S.%9N %:z")endend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 532defregistertarget,yaml_obj@st.registertarget,yaml_objyaml_objend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 430defvisit_array_subclassotag ="!ruby/array:#{o.class}"ivars =o.instance_variablesifivars.empty?node =@emitter.start_sequence(nil,tag,false,Nodes::Sequence::BLOCK)registero,nodeo.each {|c|acceptc }@emitter.end_sequenceelsenode =@emitter.start_mapping(nil,tag,false,Nodes::Sequence::BLOCK)registero,node# Dump the internal listaccept'internal'@emitter.start_sequence(nil,nil,true,Nodes::Sequence::BLOCK)o.each {|c|acceptc }@emitter.end_sequence# Dump the ivarsaccept'ivars'@emitter.start_mapping(nil,nil,true,Nodes::Sequence::BLOCK)ivars.eachdo|ivar|acceptivaraccepto.instance_variable_getivarend@emitter.end_mapping@emitter.end_mappingendend
Source
# File ext/psych/lib/psych/visitors/yaml_tree.rb, line 461defvisit_hash_subclassoivars =o.instance_variablesifivars.any?tag ="!ruby/hash-with-ivars:#{o.class}"node =@emitter.start_mapping(nil,tag,false,Psych::Nodes::Mapping::BLOCK)register(o,node)# Dump the ivarsaccept'ivars'@emitter.start_mappingnil,nil,true,Nodes::Mapping::BLOCKo.instance_variables.eachdo|ivar|acceptivaraccepto.instance_variable_getivarend@emitter.end_mapping# Dump the elementsaccept'elements'@emitter.start_mappingnil,nil,true,Nodes::Mapping::BLOCKo.eachdo|k,v|acceptkacceptvend@emitter.end_mapping@emitter.end_mappingelsetag ="!ruby/hash:#{o.class}"node =@emitter.start_mapping(nil,tag,false,Psych::Nodes::Mapping::BLOCK)register(o,node)o.eachdo|k,v|acceptkacceptvend@emitter.end_mappingendend