mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Initial checkin of YAML substances.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3772 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
605adb86e2
commit
55f4dc4c9a
25 changed files with 7962 additions and 0 deletions
54
lib/yaml/yamlnode.rb
Normal file
54
lib/yaml/yamlnode.rb
Normal file
|
@ -0,0 +1,54 @@
|
|||
#
|
||||
# YAML::YamlNode class
|
||||
#
|
||||
require 'yaml/basenode'
|
||||
|
||||
module YAML
|
||||
|
||||
#
|
||||
# YAML Generic Model container
|
||||
#
|
||||
class YamlNode
|
||||
include BaseNode
|
||||
attr_accessor :kind, :type_id, :value, :anchor
|
||||
def initialize( t, v )
|
||||
@type_id = t
|
||||
if Hash === v
|
||||
@kind = 'map'
|
||||
@value = {}
|
||||
v.each { |k,v|
|
||||
@value[ k.transform ] = [ k, v ]
|
||||
}
|
||||
elsif Array === v
|
||||
@kind = 'seq'
|
||||
@value = v
|
||||
elsif String === v
|
||||
@kind = 'scalar'
|
||||
@value = v
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# Transform this node fully into a native type
|
||||
#
|
||||
def transform
|
||||
t = nil
|
||||
if @value.is_a? Hash
|
||||
t = {}
|
||||
@value.each { |k,v|
|
||||
t[ k ] = v[1].transform
|
||||
}
|
||||
elsif @value.is_a? Array
|
||||
t = []
|
||||
@value.each { |v|
|
||||
t.push v.transform
|
||||
}
|
||||
else
|
||||
t = @value
|
||||
end
|
||||
YAML.transfer_method( @type_id, t )
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue