lib/xpath/renderer.rb in xpath-1.0.0 vs lib/xpath/renderer.rb in xpath-2.0.0.beta1
- old
+ new
@@ -1,11 +1,15 @@
module XPath
class Renderer
- def self.render(node)
- new.render(node)
+ def self.render(node, type)
+ new(type).render(node)
end
+ def initialize(type)
+ @type = type
+ end
+
def render(node)
arguments = node.arguments.map { |argument| convert_argument(argument) }
send(node.expression, *arguments)
end
@@ -72,10 +76,18 @@
def equality(one, two)
"#{one} = #{two}"
end
+ def is(one, two)
+ if @type == :exact
+ equality(one, two)
+ else
+ contains(one, two)
+ end
+ end
+
def variable(name)
"%{#{name}}"
end
def text(current)
@@ -99,11 +111,17 @@
def union(*expressions)
expressions.join(' | ')
end
- def anywhere(tag_name)
- "//#{tag_name}"
+ def anywhere(element_names)
+ if element_names.length == 1
+ "//#{element_names.first}"
+ elsif element_names.length > 1
+ "//*[#{element_names.map { |e| "self::#{e}" }.join(" | ")}]"
+ else
+ "//*"
+ end
end
def contains(current, value)
"contains(#{current}, #{value})"
end