Class: Puppeteer::QueryHandlerManager
- Inherits:
-
Object
- Object
- Puppeteer::QueryHandlerManager
- Includes:
- Singleton
- Defined in:
- lib/puppeteer/query_handler_manager.rb
Defined Under Namespace
Classes: Result
Constant Summary collapse
- DEFAULT_QUERY_HANDLER_NAMES =
%i[aria xpath text].freeze
Instance Method Summary collapse
- #clear_custom_query_handlers ⇒ Object
- #custom_query_handler_names ⇒ Object
- #detect_query_handler(selector) ⇒ Object
- #query_handlers ⇒ Object
- #unregister_custom_query_handler(name) ⇒ Object
Instance Method Details
#clear_custom_query_handlers ⇒ Object
32 33 34 35 36 37 38 |
# File 'lib/puppeteer/query_handler_manager.rb', line 32 def clear_custom_query_handlers query_handlers.each_key do |name| next if DEFAULT_QUERY_HANDLER_NAMES.include?(name) query_handlers.delete(name) end end |
#custom_query_handler_names ⇒ Object
16 17 18 |
# File 'lib/puppeteer/query_handler_manager.rb', line 16 def custom_query_handler_names query_handlers.keys.reject { |name| DEFAULT_QUERY_HANDLER_NAMES.include?(name) }.map(&:to_s) end |
#detect_query_handler(selector) ⇒ Object
266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 |
# File 'lib/puppeteer/query_handler_manager.rb', line 266 def detect_query_handler(selector) query_handler = nil updated_selector = selector polling = selector.include?(':') ? 'raf' : 'mutation' if (match = selector.match(/^([a-zA-Z][\w-]*)([=\/])(.*)$/)) name = match[1] updated_selector = match[3] query_handler = query_handlers[name.to_sym] unless query_handler raise ArgumentError.new("Query set to use \"#{name}\", but no query handler of that name was found") end polling = name == 'aria' ? 'raf' : 'mutation' else begin _selectors, is_pure_css, has_pseudo_classes, has_aria = Puppeteer::PSelectorParser.parse(selector) if is_pure_css polling = has_pseudo_classes ? 'raf' : 'mutation' query_handler = default_handler else polling = has_aria ? 'raf' : 'mutation' query_handler = p_query_handler end rescue StandardError query_handler = default_handler end end Result.new( query_handler: query_handler, selector: updated_selector, polling: polling, ) end |
#query_handlers ⇒ Object
8 9 10 11 12 13 14 |
# File 'lib/puppeteer/query_handler_manager.rb', line 8 def query_handlers @query_handlers ||= { aria: Puppeteer::AriaQueryHandler.new, xpath: xpath_handler, text: text_query_handler, } end |
#unregister_custom_query_handler(name) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/puppeteer/query_handler_manager.rb', line 20 def unregister_custom_query_handler(name) handler_name = name.to_sym if DEFAULT_QUERY_HANDLER_NAMES.include?(handler_name) raise ArgumentError.new("Cannot unregister built-in query handler: #{name}") end unless query_handlers.key?(handler_name) raise ArgumentError.new("Cannot unregister unknown handler: #{name}") end query_handlers.delete(handler_name) end |