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

Order is important.
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