module Browser
def self.[](key)
def self.[](key) user_agents.fetch(key) end
def self.bot_user_agents
def self.bot_user_agents @bot_user_agents ||= YAML.load_file(Browser.root.join("test/ua_bots.yml")) end
def self.browser_user_agents
def self.browser_user_agents @browser_user_agents ||= YAML.load_file(Browser.root.join("test/ua.yml")) end
def self.matchers
Hold the list of browser matchers.
def self.matchers @matchers ||= [ Nokia, UCBrowser, PhantomJS, BlackBerry, Opera, Edge, InternetExplorer, Firefox, Otter, Epiphany, Facebook, Instagram, Snapchat, Weibo, MicroMessenger, # must be placed before QQ QQ, Alipay, Electron, Yandex, Sputnik, DuckDuckGo, SamsungBrowser, HuaweiBrowser, MiuiBrowser, Maxthon, SougouBrowser, GoogleSearchApp, # Must be last Chrome, Safari, Unknown ] end
def self.new(user_agent, **kwargs)
def self.new(user_agent, **kwargs) matchers.each do |matcher_class| matcher = matcher_class.new(user_agent || EMPTY_STRING, **kwargs) return matcher if matcher.match? end end
def self.root
def self.root @root ||= Pathname.new(File.expand_path("../..", __dir__)) end
def self.search_engine_user_agents
def self.search_engine_user_agents @search_engine_user_agents ||= YAML.load_file( Browser.root.join("test/ua_search_engines.yml") ) end
def self.user_agents
def self.user_agents @user_agents ||= browser_user_agents .merge(bot_user_agents) .merge(search_engine_user_agents) end