diff --git a/lib/oga/xml/querying.rb b/lib/oga/xml/querying.rb index 6c2fb10..f94079e 100644 --- a/lib/oga/xml/querying.rb +++ b/lib/oga/xml/querying.rb @@ -27,6 +27,30 @@ module Oga return result.is_a?(XML::NodeSet) ? result.first : result end + + ## + # Evaluates the given CSS expression. + # + # @param [String] expression The CSS expression to run. + # @see [Oga::XPath::Evaluator#initialize] + # + def css(expression) + ast = CSS::Parser.new(expression).parse + + return XPath::Evaluator.new(self).evaluate_ast(ast) + end + + ## + # Evaluates the given CSS expression and returns the first node in the + # set. + # + # @see [#css] + # + def at_css(*args) + result = css(*args) + + return result.is_a?(XML::NodeSet) ? result.first : result + end end # Querying end # XML end # Oga diff --git a/spec/oga/xml/querying_spec.rb b/spec/oga/xml/querying_spec.rb index a50f38d..8e4f267 100644 --- a/spec/oga/xml/querying_spec.rb +++ b/spec/oga/xml/querying_spec.rb @@ -32,4 +32,16 @@ describe Oga::XML::Querying do @document.at_xpath('$number', 'number' => 10).should == 10 end end + + context '#css' do + example 'query a document' do + @document.css('a').should == @document.children + end + end + + context '#at_css' do + example 'query a document' do + @document.at_css('a').should == @document.children[0] + end + end end