Line | |
---|
1 | #
|
---|
2 | # YAML::YamlNode class
|
---|
3 | #
|
---|
4 | require 'yaml/basenode'
|
---|
5 |
|
---|
6 | module YAML
|
---|
7 |
|
---|
8 | #
|
---|
9 | # YAML Generic Model container
|
---|
10 | #
|
---|
11 | class YamlNode
|
---|
12 | include BaseNode
|
---|
13 | attr_accessor :kind, :type_id, :value, :anchor
|
---|
14 | def initialize( t, v )
|
---|
15 | @type_id = t
|
---|
16 | if Hash === v
|
---|
17 | @kind = 'map'
|
---|
18 | @value = {}
|
---|
19 | v.each { |k,v|
|
---|
20 | @value[ k.transform ] = [ k, v ]
|
---|
21 | }
|
---|
22 | elsif Array === v
|
---|
23 | @kind = 'seq'
|
---|
24 | @value = v
|
---|
25 | elsif String === v
|
---|
26 | @kind = 'scalar'
|
---|
27 | @value = v
|
---|
28 | end
|
---|
29 | end
|
---|
30 |
|
---|
31 | #
|
---|
32 | # Transform this node fully into a native type
|
---|
33 | #
|
---|
34 | def transform
|
---|
35 | t = nil
|
---|
36 | if @value.is_a? Hash
|
---|
37 | t = {}
|
---|
38 | @value.each { |k,v|
|
---|
39 | t[ k ] = v[1].transform
|
---|
40 | }
|
---|
41 | elsif @value.is_a? Array
|
---|
42 | t = []
|
---|
43 | @value.each { |v|
|
---|
44 | t.push v.transform
|
---|
45 | }
|
---|
46 | else
|
---|
47 | t = @value
|
---|
48 | end
|
---|
49 | YAML.transfer_method( @type_id, t )
|
---|
50 | end
|
---|
51 |
|
---|
52 | end
|
---|
53 |
|
---|
54 | end
|
---|
Note:
See
TracBrowser
for help on using the repository browser.