class Apist::Selector
Attributes
result_method_chain[R]
selector[R]
Public Class Methods
new(selector)
click to toggle source
# File lib/apist/selector.rb, line 12 def initialize(selector) @selector = selector @result_method_chain = [] end
Public Instance Methods
get_value(method, root_node = nil)
click to toggle source
@param [Apist::Method] method
# File lib/apist/selector.rb, line 22 def get_value(method, root_node = nil) root_node = method.crawler if root_node.nil? if @selector == '*' result = root_node else result = root_node.css @selector end apply_result_callback_chain result, method end
method_missing(name, *arguments)
click to toggle source
# File lib/apist/selector.rb, line 17 def method_missing(name, *arguments) add_callback name, arguments end
Private Instance Methods
add_callback(name, arguments = [])
click to toggle source
# File lib/apist/selector.rb, line 50 def add_callback(name, arguments = []) @result_method_chain << Apist::ResultCallback.new(name, arguments) return self end
apply_result_callback_chain(node, method)
click to toggle source
# File lib/apist/selector.rb, line 34 def apply_result_callback_chain(node, method) add_callback 'text' if @result_method_chain.empty? trace_stack = [] @result_method_chain.each do |result_callback| begin trace_stack << result_callback node = result_callback.apply node, method rescue Apist::Error::Method => e return nil if method.resource.suppress_exceptions raise Apist::Error::Method, create_exception_message(e, trace_stack) end end return node end
create_exception_message(e, trace_stack)
click to toggle source
# File lib/apist/selector.rb, line 55 def create_exception_message(e, trace_stack) message = e.message + ": filter(#{@selector})" trace_stack.each do |callback| message += ".#{callback.name.to_s}" message += '(' + callback.arguments.join(', ') + ')' unless callback.arguments.empty? end return message end