class Browser::Base

Attributes

ua[R]

Public Class Methods

new(ua, accept_language: nil) click to toggle source
# File lib/browser/base.rb, line 9
def initialize(ua, accept_language: nil)
  validate_size(:user_agent, ua.to_s)

  @ua = ua
  @accept_language_raw = accept_language.to_s
end

Public Instance Methods

accept_language() click to toggle source

Return an array with all preferred languages that this browser accepts.

# File lib/browser/base.rb, line 22
def accept_language
  @accept_language ||= begin
    validate_size(:accept_language, @accept_language_raw)
    AcceptLanguage.parse(@accept_language_raw)
  end
end
alipay?(expected_version = nil) click to toggle source
# File lib/browser/base.rb, line 189
def alipay?(expected_version = nil)
  instance_of?(Alipay) && detect_version?(full_version, expected_version)
end
bot() click to toggle source

Return the bot info.

# File lib/browser/base.rb, line 46
def bot
  @bot ||= Bot.new(ua)
end
bot?() click to toggle source

Detect if current user agent is from a bot.

# File lib/browser/base.rb, line 51
def bot?
  bot.bot?
end
chrome?(expected_version = nil) click to toggle source

Detect if browser is Chrome.

# File lib/browser/base.rb, line 146
def chrome?(expected_version = nil)
  instance_of?(Chrome) && detect_version?(full_version, expected_version)
end
chromium_based?() click to toggle source

Detect if browser is Chromium-based.

# File lib/browser/base.rb, line 245
def chromium_based?
  false
end
compatibility_view?() click to toggle source
# File lib/browser/base.rb, line 71
def compatibility_view?
  false
end
core_media?(expected_version = nil) click to toggle source

Detect if browser is Apple CoreMedia.

# File lib/browser/base.rb, line 120
def core_media?(expected_version = nil)
  ua.include?("CoreMedia") && detect_version?(full_version,
                                              expected_version)
end
device() click to toggle source

Return the device info.

# File lib/browser/base.rb, line 56
def device
  @device ||= Device.new(ua)
end
duck_duck_go?(expected_version = nil) click to toggle source

Detect if browser is DuckDuckGo.

# File lib/browser/base.rb, line 200
def duck_duck_go?(expected_version = nil)
  ua.include?("DuckDuckGo") && detect_version?(full_version,
                                               expected_version)
end
edge?(expected_version = nil) click to toggle source

Detect if browser is Microsoft Edge.

# File lib/browser/base.rb, line 67
def edge?(expected_version = nil)
  instance_of?(Edge) && detect_version?(full_version, expected_version)
end
electron?(expected_version = nil) click to toggle source

Detect if the browser is Electron.

# File lib/browser/base.rb, line 267
def electron?(expected_version = nil)
  instance_of?(Electron) && detect_version?(full_version, expected_version)
end
facebook?(expected_version = nil) click to toggle source

Detect if browser if Facebook.

# File lib/browser/base.rb, line 96
def facebook?(expected_version = nil)
  instance_of?(Facebook) &&
    detect_version?(full_version, expected_version)
end
firefox?(expected_version = nil) click to toggle source

Detect if browser is Firefox.

# File lib/browser/base.rb, line 141
def firefox?(expected_version = nil)
  instance_of?(Firefox) && detect_version?(full_version, expected_version)
end
google_search_app?(expected_version = nil) click to toggle source

Detect if browser is Google Search App

# File lib/browser/base.rb, line 240
def google_search_app?(expected_version = nil)
  ua.include?("GSA") && detect_version?(full_version, expected_version)
end
huawei_browser?(expected_version = nil) click to toggle source

Detect if browser is Huawei.

# File lib/browser/base.rb, line 212
def huawei_browser?(expected_version = nil)
  instance_of?(HuaweiBrowser) &&
    detect_version?(full_version, expected_version)
end
ie?(expected_version = nil) click to toggle source

Detect if browser is Microsoft Internet Explorer.

# File lib/browser/base.rb, line 61
def ie?(expected_version = nil)
  instance_of?(InternetExplorer) &&
    detect_version?(full_version, expected_version)
end
instagram?(expected_version = nil) click to toggle source

Detect if browser is Instagram.

# File lib/browser/base.rb, line 84
def instagram?(expected_version = nil)
  instance_of?(Instagram) &&
    detect_version?(full_version, expected_version)
end
known?() click to toggle source
# File lib/browser/base.rb, line 253
def known?
  !unknown?
end
maxthon?(expected_version = nil) click to toggle source

Detect if browser is Maxthon.

# File lib/browser/base.rb, line 224
def maxthon?(expected_version = nil)
  instance_of?(Maxthon) && detect_version?(full_version, expected_version)
end
meta() click to toggle source

Return a meta info about this browser.

# File lib/browser/base.rb, line 17
def meta
  Meta.get(self)
end
Also aliased as: to_a
micro_messenger?(expected_version = nil) click to toggle source

Detect if browser is MicroMessenger.

# File lib/browser/base.rb, line 178
def micro_messenger?(expected_version = nil)
  instance_of?(MicroMessenger) &&
    detect_version?(full_version, expected_version)
end
Also aliased as: wechat?
miui_browser?(expected_version = nil) click to toggle source

Detect if browser is Xiaomi Miui.

# File lib/browser/base.rb, line 218
def miui_browser?(expected_version = nil)
  instance_of?(MiuiBrowser) &&
    detect_version?(full_version, expected_version)
end
msie_full_version() click to toggle source
# File lib/browser/base.rb, line 75
def msie_full_version
  "0.0"
end
msie_version() click to toggle source
# File lib/browser/base.rb, line 79
def msie_version
  "0"
end
nokia?(expected_version = nil) click to toggle source

Detect if browser is Nokia S40 Ovi Browser.

# File lib/browser/base.rb, line 173
def nokia?(expected_version = nil)
  instance_of?(Nokia) && detect_version?(full_version, expected_version)
end
opera?(expected_version = nil) click to toggle source

Detect if browser is Opera.

# File lib/browser/base.rb, line 151
def opera?(expected_version = nil)
  instance_of?(Opera) && detect_version?(full_version, expected_version)
end
opera_mini?(expected_version = nil) click to toggle source

Detect if browser is Opera Mini.

# File lib/browser/base.rb, line 194
def opera_mini?(expected_version = nil)
  ua.include?("Opera Mini") && detect_version?(full_version,
                                               expected_version)
end
otter?(expected_version = nil) click to toggle source

Detect if browser is Otter.

# File lib/browser/base.rb, line 102
def otter?(expected_version = nil)
  instance_of?(Otter) &&
    detect_version?(full_version, expected_version)
end
phantom_js?(expected_version = nil) click to toggle source

Detect if browser is PhantomJS

# File lib/browser/base.rb, line 126
def phantom_js?(expected_version = nil)
  instance_of?(PhantomJS) &&
    detect_version?(full_version, expected_version)
end
platform() click to toggle source

Return the platform.

# File lib/browser/base.rb, line 41
def platform
  @platform ||= Platform.new(ua)
end
proxy?() click to toggle source

Detect if browser is a proxy browser.

# File lib/browser/base.rb, line 262
def proxy?
  nokia? || uc_browser? || opera_mini?
end
qq?(expected_version = nil) click to toggle source

Detect if browser is QQ.

# File lib/browser/base.rb, line 229
def qq?(expected_version = nil)
  instance_of?(QQ) && detect_version?(full_version, expected_version)
end
quicktime?(expected_version = nil) click to toggle source

Detect if browser is QuickTime

# File lib/browser/base.rb, line 115
def quicktime?(expected_version = nil)
  ua.match?(/QuickTime/i) && detect_version?(full_version, expected_version)
end
safari?(expected_version = nil) click to toggle source

Detect if browser is Safari.

# File lib/browser/base.rb, line 132
def safari?(expected_version = nil)
  instance_of?(Safari) && detect_version?(full_version, expected_version)
end
safari_webapp_mode?() click to toggle source
# File lib/browser/base.rb, line 136
def safari_webapp_mode?
  (device.ipad? || device.iphone?) && ua.include?("AppleWebKit")
end
samsung_browser?(expected_version = nil) click to toggle source

Detect if browser is Samsung.

# File lib/browser/base.rb, line 206
def samsung_browser?(expected_version = nil)
  ua.include?("SamsungBrowser") && detect_version?(full_version,
                                                   expected_version)
end
snapchat?(expected_version = nil) click to toggle source

Detect if browser is Snapchat.

# File lib/browser/base.rb, line 90
def snapchat?(expected_version = nil)
  instance_of?(Snapchat) &&
    detect_version?(full_version, expected_version)
end
sougou_browser?(expected_version = nil) click to toggle source

Detect if browser is Sougou.

# File lib/browser/base.rb, line 234
def sougou_browser?(expected_version = nil)
  instance_of?(SougouBrowser) &&
    detect_version?(full_version, expected_version)
end
sputnik?(expected_version = nil) click to toggle source

Detect if browser is Sputnik.

# File lib/browser/base.rb, line 156
def sputnik?(expected_version = nil)
  instance_of?(Sputnik) && detect_version?(full_version, expected_version)
end
to_a()
Alias for: meta
to_s() click to toggle source

Return meta representation as string.

# File lib/browser/base.rb, line 32
def to_s
  meta.to_a.join(" ")
end
uc_browser?(expected_version = nil) click to toggle source

Detect if browser is UCBrowser.

# File lib/browser/base.rb, line 167
def uc_browser?(expected_version = nil)
  instance_of?(UCBrowser) &&
    detect_version?(full_version, expected_version)
end
unknown?() click to toggle source
# File lib/browser/base.rb, line 257
def unknown?
  id == :unknown_browser
end
version() click to toggle source
# File lib/browser/base.rb, line 36
def version
  full_version.split(".").first
end
webkit?(expected_version = nil) click to toggle source

Detect if browser is WebKit-based.

# File lib/browser/base.rb, line 108
def webkit?(expected_version = nil)
  ua.match?(/AppleWebKit/i) &&
    (!edge? || chromium_based?) &&
    detect_version?(webkit_full_version, expected_version)
end
webkit_full_version() click to toggle source
# File lib/browser/base.rb, line 249
def webkit_full_version
  ua[%r{AppleWebKit/([\d.]+)}, 1] || "0.0"
end
wechat?(expected_version = nil)
Alias for: micro_messenger?
weibo?(expected_version = nil) click to toggle source
# File lib/browser/base.rb, line 185
def weibo?(expected_version = nil)
  instance_of?(Weibo) && detect_version?(full_version, expected_version)
end
yandex?(expected_version = nil) click to toggle source

Detect if browser is Yandex.

# File lib/browser/base.rb, line 161
def yandex?(expected_version = nil)
  instance_of?(Yandex) && detect_version?(full_version, expected_version)
end
Also aliased as: yandex_browser?
yandex_browser?(expected_version = nil)
Alias for: yandex?

Private Instance Methods

validate_size(subject, input) click to toggle source
# File lib/browser/base.rb, line 271
        def validate_size(subject, input)
  actual_bytesize = input.bytesize
  size_limit = Browser.public_send(:"#{subject}_size_limit")

  return if actual_bytesize < size_limit

  raise Error,
        "#{subject} cannot be larger than #{size_limit} bytes; " \
        "actual size is #{actual_bytesize} bytes"
end