Module: Dhall::XML
- Defined in:
- lib/dhall/xml.rb,
lib/dhall/xml/coder.rb,
lib/dhall/xml/as_dhall.rb
Defined Under Namespace
Modules: AsDhall
Classes: Coder
Constant Summary
collapse
- TYPE =
Forall.of_arguments(
Builtins[:Type],
RecordType.new(
record: {
"element" => Forall.of_arguments(
RecordType.new(
record: {
"attributes" => Builtins[:List].(RecordType.new(
record: {
"mapKey" => Builtins[:Text],
"mapValue" => Builtins[:Text]
}
)),
"content" => Builtins[:List].(Variable["_"]),
"name" => Builtins[:Text]
}
),
body: Variable["_", 1]
),
"text" => Forall.of_arguments(Builtins[:Text], body: Variable["_", 1])
}
),
body: Variable["_", 1]
).freeze
Class Method Summary
collapse
Class Method Details
.from_dhall(expr, doc = Nokogiri::XML::Document.new) ⇒ Object
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/dhall/xml.rb', line 36
def self.from_dhall(expr, doc=Nokogiri::XML::Document.new)
return expr.unwrap if expr.is_a?(RubyObjectRaw)
TypeChecker.annotate(
TypeAnnotation.new(value: expr, type: TYPE)
).value.(
TYPE, element: FunctionProxyRaw.new(->(record) { from_element(record, doc) }),
text: FunctionProxyRaw.new(doc.method(:create_text_node))
).unwrap
end
|
.from_element(record, doc = Nokogiri::XML::Document.new) ⇒ Object
48
49
50
51
52
53
54
55
56
57
58
|
# File 'lib/dhall/xml.rb', line 48
def self.from_element(record, doc=Nokogiri::XML::Document.new)
doc.create_element(
record.fetch(:name).to_s,
Coder.new.decode(record.fetch(:attributes))
) do |el|
el.add_child(Nokogiri::XML::NodeSet.new(
doc,
record.fetch(:content).to_a.map { |xml| from_dhall(xml, doc) }
))
end
end
|