Feature #12960 » 0004-feat-psych-add-hook-points-for-mapping-like-object.patch
| ext/psych/lib/psych/visitors/to_ruby.rb | ||
|---|---|---|
|
when '!omap', 'tag:yaml.org,2002:omap'
|
||
|
map = register(o, Psych::Omap.new)
|
||
|
o.children.each { |a|
|
||
|
map[accept(a.children.first)] = accept a.children.last
|
||
|
map[accept_key(a.children.first)] = accept_value a.children.last
|
||
|
}
|
||
|
map
|
||
|
when /^!(?:seq|ruby\/array):(.*)$/
|
||
| ... | ... | |
|
members = {}
|
||
|
struct_members = s.members.map { |x| class_loader.symbolize x }
|
||
|
o.children.each_slice(2) do |k,v|
|
||
|
member = accept(k)
|
||
|
value = accept(v)
|
||
|
member = accept_key(k)
|
||
|
value = accept_value(v)
|
||
|
if struct_members.include?(class_loader.symbolize(member))
|
||
|
s.send("#{member}=", value)
|
||
|
else
|
||
| ... | ... | |
|
string = nil
|
||
|
o.children.each_slice(2) do |k,v|
|
||
|
key = accept k
|
||
|
value = accept v
|
||
|
key = accept_key k
|
||
|
value = accept_value v
|
||
|
if key == 'str'
|
||
|
if klass
|
||
| ... | ... | |
|
set = class_loader.psych_set.new
|
||
|
@st[o.anchor] = set if o.anchor
|
||
|
o.children.each_slice(2) do |k,v|
|
||
|
set[accept(k)] = accept(v)
|
||
|
set[accept_key(k)] = accept_value(v)
|
||
|
end
|
||
|
set
|
||
| ... | ... | |
|
revive_hash hash, value
|
||
|
when 'ivars'
|
||
|
value.children.each_slice(2) do |k,v|
|
||
|
hash.instance_variable_set accept(k), accept(v)
|
||
|
hash.instance_variable_set accept_key(k), accept_value(v)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
| ... | ... | |
|
when '!omap', 'tag:yaml.org,2002:omap'
|
||
|
map = register(o, class_loader.psych_omap.new)
|
||
|
o.children.each_slice(2) do |l,r|
|
||
|
map[accept(l)] = accept r
|
||
|
map[accept_key(l)] = accept_value r
|
||
|
end
|
||
|
map
|
||