Class: Browser::Platform

Inherits:
Object
  • Object
show all
Includes:
DetectVersion
Defined in:
lib/browser/platform.rb,
lib/browser/platform/ios.rb,
lib/browser/platform/mac.rb,
lib/browser/platform/base.rb,
lib/browser/platform/linux.rb,
lib/browser/platform/other.rb,
lib/browser/platform/android.rb,
lib/browser/platform/windows.rb,
lib/browser/platform/adobe_air.rb,
lib/browser/platform/chrome_os.rb,
lib/browser/platform/blackberry.rb,
lib/browser/platform/firefox_os.rb,
lib/browser/platform/windows_phone.rb,
lib/browser/platform/windows_mobile.rb

Defined Under Namespace

Classes: AdobeAir, Android, Base, BlackBerry, ChromeOS, FirefoxOS, IOS, Linux, Mac, Other, Windows, WindowsMobile, WindowsPhone

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(ua) ⇒ Platform

Returns a new instance of Platform.



42
43
44
# File 'lib/browser/platform.rb', line 42

def initialize(ua)
  @ua = ua
end

Instance Attribute Details

#uaObject (readonly)

Returns the value of attribute ua.



21
22
23
# File 'lib/browser/platform.rb', line 21

def ua
  @ua
end

Class Method Details

.matchersObject

Hold the list of platform matchers. Order is important.



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/browser/platform.rb', line 25

def self.matchers
  @matchers ||= [
    AdobeAir,
    ChromeOS,
    WindowsMobile,
    WindowsPhone,
    Android,
    BlackBerry,
    IOS,
    Mac,
    FirefoxOS,
    Windows,
    Linux,
    Other
  ]
end

Instance Method Details

#==(other) ⇒ Object



116
117
118
# File 'lib/browser/platform.rb', line 116

def ==(other)
  id == other
end

#adobe_air?(expected_version = nil) ⇒ Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/browser/platform.rb', line 52

def adobe_air?(expected_version = nil)
  id == :adobe_air && detect_version?(version, expected_version)
end

#android?(expected_version = nil) ⇒ Boolean

Returns:

  • (Boolean)


60
61
62
# File 'lib/browser/platform.rb', line 60

def android?(expected_version = nil)
  id == :android && detect_version?(version, expected_version)
end

#android_app?Boolean Also known as: android_webview?

Detect if in an Android app webview (Lollipop and newer) developer.chrome.com/multidevice/user-agent#webview_user_agent

Returns:

  • (Boolean)


132
133
134
# File 'lib/browser/platform.rb', line 132

def android_app?
  android? && ua =~ /\bwv\b/
end

#blackberry?(expected_version = nil) ⇒ Boolean

Returns:

  • (Boolean)


88
89
90
# File 'lib/browser/platform.rb', line 88

def blackberry?(expected_version = nil)
  id == :blackberry && detect_version?(version, expected_version)
end

#chrome_os?(expected_version = nil) ⇒ Boolean

Returns:

  • (Boolean)


56
57
58
# File 'lib/browser/platform.rb', line 56

def chrome_os?(expected_version = nil)
  id == :chrome_os && detect_version?(version, expected_version)
end

#firefox_os?Boolean

Returns:

  • (Boolean)


80
81
82
# File 'lib/browser/platform.rb', line 80

def firefox_os?
  id == :firefox_os
end

#idObject



100
101
102
# File 'lib/browser/platform.rb', line 100

def id
  subject.id
end

#ios?(expected_version = nil) ⇒ Boolean

Returns:

  • (Boolean)


84
85
86
# File 'lib/browser/platform.rb', line 84

def ios?(expected_version = nil)
  id == :ios && detect_version?(version, expected_version)
end

#ios_app?Boolean

Detect if running on iOS app webview.

Returns:

  • (Boolean)


121
122
123
# File 'lib/browser/platform.rb', line 121

def ios_app?
  ios? && !ua.include?("Safari")
end

#ios_webview?Boolean

Detect if is iOS webview.

Returns:

  • (Boolean)


126
127
128
# File 'lib/browser/platform.rb', line 126

def ios_webview?
  ios_app?
end

#linux?Boolean

Returns:

  • (Boolean)


68
69
70
# File 'lib/browser/platform.rb', line 68

def linux?
  id == :linux
end

#mac?(expected_version = nil) ⇒ Boolean

Returns:

  • (Boolean)


72
73
74
# File 'lib/browser/platform.rb', line 72

def mac?(expected_version = nil)
  id == :mac && detect_version?(version, expected_version)
end

#nameObject



108
109
110
# File 'lib/browser/platform.rb', line 108

def name
  subject.name
end

#other?Boolean

Returns:

  • (Boolean)


64
65
66
# File 'lib/browser/platform.rb', line 64

def other?
  id == :other
end

#subjectObject



46
47
48
49
50
# File 'lib/browser/platform.rb', line 46

def subject
  @subject ||= self.class.matchers
                   .map {|matcher| matcher.new(ua) }
                   .find(&:match?)
end

#to_sObject



112
113
114
# File 'lib/browser/platform.rb', line 112

def to_s
  id.to_s
end

#versionObject



104
105
106
# File 'lib/browser/platform.rb', line 104

def version
  subject.version
end

#windows10?Boolean

Returns:

  • (Boolean)


158
159
160
# File 'lib/browser/platform.rb', line 158

def windows10?
  windows? && ua =~ /Windows NT 10/
end

#windows7?Boolean

Returns:

  • (Boolean)


146
147
148
# File 'lib/browser/platform.rb', line 146

def windows7?
  windows? && ua =~ /Windows NT 6\.1/
end

#windows8?Boolean

Returns:

  • (Boolean)


150
151
152
# File 'lib/browser/platform.rb', line 150

def windows8?
  windows? && ua =~ /Windows NT 6\.[2-3]/
end

#windows8_1?Boolean

Returns:

  • (Boolean)


154
155
156
# File 'lib/browser/platform.rb', line 154

def windows8_1?
  windows? && ua =~ /Windows NT 6\.3/
end

#windows?(expected_version = nil) ⇒ Boolean

Returns:

  • (Boolean)


76
77
78
# File 'lib/browser/platform.rb', line 76

def windows?(expected_version = nil)
  id == :windows && detect_version?(version, expected_version)
end

#windows_mobile?(expected_version = nil) ⇒ Boolean

Returns:

  • (Boolean)


96
97
98
# File 'lib/browser/platform.rb', line 96

def windows_mobile?(expected_version = nil)
  id == :windows_mobile && detect_version?(version, expected_version)
end

#windows_phone?(expected_version = nil) ⇒ Boolean

Returns:

  • (Boolean)


92
93
94
# File 'lib/browser/platform.rb', line 92

def windows_phone?(expected_version = nil)
  id == :windows_phone && detect_version?(version, expected_version)
end

#windows_rt?Boolean

Returns:

  • (Boolean)


162
163
164
# File 'lib/browser/platform.rb', line 162

def windows_rt?
  windows8? && ua =~ /ARM/
end

#windows_touchscreen_desktop?Boolean

Returns:

  • (Boolean)


179
180
181
# File 'lib/browser/platform.rb', line 179

def windows_touchscreen_desktop?
  windows? && ua =~ /Touch/
end

#windows_vista?Boolean

Returns:

  • (Boolean)


142
143
144
# File 'lib/browser/platform.rb', line 142

def windows_vista?
  windows? && ua =~ /Windows NT 6\.0/
end

#windows_wow64?Boolean

Returns:

  • (Boolean)


171
172
173
# File 'lib/browser/platform.rb', line 171

def windows_wow64?
  windows? && ua =~ /WOW64/i
end

#windows_x64?Boolean

Detect if current platform is Windows in 64-bit architecture.

Returns:

  • (Boolean)


167
168
169
# File 'lib/browser/platform.rb', line 167

def windows_x64?
  windows? && ua =~ /(Win64|x64|Windows NT 5\.2)/
end

#windows_x64_inclusive?Boolean

Returns:

  • (Boolean)


175
176
177
# File 'lib/browser/platform.rb', line 175

def windows_x64_inclusive?
  windows_x64? || windows_wow64?
end

#windows_xp?Boolean

Returns:

  • (Boolean)


138
139
140
# File 'lib/browser/platform.rb', line 138

def windows_xp?
  windows? && ua =~ /Windows NT 5\.[12]/
end