Class: Sevgi::Derender::Node
- Inherits:
-
Object
- Object
- Sevgi::Derender::Node
- Defined in:
- lib/sevgi/derender/node.rb
Constant Summary collapse
- META_NAMESPACE =
"_:"
Instance Attribute Summary collapse
-
#node ⇒ Object
readonly
Returns the value of attribute node.
-
#pres ⇒ Object
readonly
Returns the value of attribute pres.
-
#type ⇒ Object
readonly
Returns the value of attribute type.
Instance Method Summary collapse
- #_ ⇒ Object (also: #meta)
- #attributes ⇒ Object
- #attributes! ⇒ Object
- #children ⇒ Object
- #content ⇒ Object
- #derender ⇒ Object
- #element ⇒ Object
- #evaluate(element, include_current = true) ⇒ Object
- #evaluate!(element) ⇒ Object
- #find(arg, by: "id") ⇒ Object
-
#initialize(node, pres = []) ⇒ Node
constructor
A new instance of Node.
- #name ⇒ Object
- #namespaces ⇒ Object
- #root? ⇒ Boolean
Constructor Details
#initialize(node, pres = []) ⇒ Node
Returns a new instance of Node.
8 9 10 11 12 |
# File 'lib/sevgi/derender/node.rb', line 8 def initialize(node, pres = []) @node = node @pres = pres @type = dispatch end |
Instance Attribute Details
#node ⇒ Object (readonly)
Returns the value of attribute node.
6 7 8 |
# File 'lib/sevgi/derender/node.rb', line 6 def node @node end |
#pres ⇒ Object (readonly)
Returns the value of attribute pres.
6 7 8 |
# File 'lib/sevgi/derender/node.rb', line 6 def pres @pres end |
#type ⇒ Object (readonly)
Returns the value of attribute type.
6 7 8 |
# File 'lib/sevgi/derender/node.rb', line 6 def type @type end |
Instance Method Details
#_ ⇒ Object Also known as: meta
16 17 18 19 20 21 22 |
# File 'lib/sevgi/derender/node.rb', line 16 def _ @_ ||= attributes .slice( *attributes.keys.select { |key| key.start_with?(META_NAMESPACE) } ) .transform_keys! { |key| key.delete_prefix(META_NAMESPACE) } end |
#attributes ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/sevgi/derender/node.rb', line 26 def attributes @attributes ||= node.attribute_nodes.to_h do |attr| name, value = attr.name, attr.value if attr.respond_to?(:namespace) && (namespace = attr.namespace) && (prefix = namespace.prefix) "#{prefix}:#{name}" else name end => key [key, value] end end |
#attributes! ⇒ Object
40 |
# File 'lib/sevgi/derender/node.rb', line 40 def attributes! = attributes |
#children ⇒ Object
42 43 44 45 46 |
# File 'lib/sevgi/derender/node.rb', line 42 def children @children ||= node.children.map { |child| self.class.new(child) }.reject do |child| (child.node.text? and child.node.text.strip.empty?) or child.type == :Junk end end |
#content ⇒ Object
48 |
# File 'lib/sevgi/derender/node.rb', line 48 def content = @content ||= node.content.strip |
#derender ⇒ Object
50 |
# File 'lib/sevgi/derender/node.rb', line 50 def derender = Ruby.format(decompile(pres).join("\n")) |
#element ⇒ Object
52 |
# File 'lib/sevgi/derender/node.rb', line 52 def element = name |
#evaluate(element, include_current = true) ⇒ Object
54 55 56 57 58 |
# File 'lib/sevgi/derender/node.rb', line 54 def evaluate(element, include_current = true) return element.instance_eval(derender) if include_current children.each { element.instance_eval(it.derender) } end |
#evaluate!(element) ⇒ Object
60 |
# File 'lib/sevgi/derender/node.rb', line 60 def evaluate!(element) = evaluate(element, false) |
#find(arg, by: "id") ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/sevgi/derender/node.rb', line 62 def find(arg, by: "id") return self if attributes[by] == arg children&.each do |child| found = child.find(arg, by:) return found if found end nil end |
#name ⇒ Object
74 |
# File 'lib/sevgi/derender/node.rb', line 74 def name = @name ||= node.name |
#namespaces ⇒ Object
76 |
# File 'lib/sevgi/derender/node.rb', line 76 def namespaces = (@namespaces ||= node.namespaces.to_h { |namespace, uri| [namespace, uri] }) |
#root? ⇒ Boolean
78 |
# File 'lib/sevgi/derender/node.rb', line 78 def root? = type == :Root |