class Browser::Base
Attributes
Public Class Methods
# 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
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
# File lib/browser/base.rb, line 189 def alipay?(expected_version = nil) instance_of?(Alipay) && detect_version?(full_version, expected_version) end
Return the bot info.
# File lib/browser/base.rb, line 46 def bot @bot ||= Bot.new(ua) end
Detect if current user agent is from a bot.
# File lib/browser/base.rb, line 51 def bot? bot.bot? end
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
Detect if browser is Chromium-based.
# File lib/browser/base.rb, line 245 def chromium_based? false end
# File lib/browser/base.rb, line 71 def compatibility_view? false end
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
Return the device info.
# File lib/browser/base.rb, line 56 def device @device ||= Device.new(ua) end
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
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
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
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
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
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
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
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
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
# File lib/browser/base.rb, line 253 def known? !unknown? end
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
Return a meta info about this browser.
# File lib/browser/base.rb, line 17 def meta Meta.get(self) end
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
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
# File lib/browser/base.rb, line 75 def msie_full_version "0.0" end
# File lib/browser/base.rb, line 79 def msie_version "0" end
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
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
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
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
Return the platform.
# File lib/browser/base.rb, line 41 def platform @platform ||= Platform.new(ua) end
Detect if browser is a proxy browser.
# File lib/browser/base.rb, line 262 def proxy? nokia? || uc_browser? || opera_mini? end
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
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
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
# File lib/browser/base.rb, line 136 def safari_webapp_mode? (device.ipad? || device.iphone?) && ua.include?("AppleWebKit") end
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
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
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
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
Return meta representation as string.
# File lib/browser/base.rb, line 32 def to_s meta.to_a.join(" ") end
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
# File lib/browser/base.rb, line 257 def unknown? id == :unknown_browser end
# File lib/browser/base.rb, line 36 def version full_version.split(".").first end
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
# File lib/browser/base.rb, line 249 def webkit_full_version ua[%r{AppleWebKit/([\d.]+)}, 1] || "0.0" end
# File lib/browser/base.rb, line 185 def weibo?(expected_version = nil) instance_of?(Weibo) && detect_version?(full_version, expected_version) end
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
Private Instance Methods
# 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