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