aua 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,20 @@
1
+ module Aua::Agents::Konqueror
2
+ def self.extend?(agent)
3
+ agent.products.include?("KHTML") &&
4
+ agent.app_comments[1] =~ PATTERN
5
+ end
6
+
7
+ PATTERN = /Konqueror\/([\d\.]+)/
8
+
9
+ def type
10
+ :Browser
11
+ end
12
+
13
+ def name
14
+ @name ||= :Konqueror
15
+ end
16
+
17
+ def version
18
+ @version ||= app_comments[1] =~ PATTERN && $1
19
+ end
20
+ end
@@ -0,0 +1,23 @@
1
+ module Aua::Agents::Msie
2
+
3
+ def self.extend?(agent)
4
+ agent.app_comments_string =~ PATTERN
5
+ end
6
+
7
+ PATTERN = /MSIE ([\d.]+)/
8
+
9
+ def type
10
+ :Browser
11
+ end
12
+
13
+ def name
14
+ :MSIE
15
+ end
16
+
17
+ def version
18
+ @version ||= begin
19
+ app_comments_string =~ PATTERN
20
+ $1
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,28 @@
1
+ module Aua::Agents::Opera
2
+ def self.extend?(agent)
3
+ agent.products.include?("Opera")
4
+ end
5
+
6
+ PATTERN = /Opera ([\d.]+)/
7
+ PATTERN_MINI = /Opera Mini\/([\d.]+)/
8
+ PATTERN_MOBILE = /Opera Mobi\//
9
+
10
+ def type
11
+ :Browser
12
+ end
13
+
14
+ def name
15
+ @name ||= begin
16
+ return :OperaMobile if app_comments_string =~ PATTERN_MOBILE
17
+ return :OperaMini if app_comments_string =~ PATTERN_MINI
18
+ :Opera
19
+ end
20
+ end
21
+
22
+ def version
23
+ @version ||= begin
24
+ return $1 if app_comments[1] =~ PATTERN_MINI
25
+ (raw =~ PATTERN && $1) || version_of("Version") || version_of("Opera")
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,33 @@
1
+ module Aua::Agents::Others
2
+ KNOWN_CLIENTS = %w(1PasswordThumbs)
3
+
4
+ def self.extend?(agent)
5
+ KNOWN_CLIENTS.include?(agent.app) ||
6
+ (agent.app == "Microsoft" && agent.products[1] == "Office") ||
7
+ agent.products[-1] == "Word"
8
+ end
9
+
10
+ def type
11
+ :Others
12
+ end
13
+
14
+ def name
15
+ @name ||= begin
16
+ if app == "Microsoft" && products[1] == "Office"
17
+ :MSOffice
18
+ elsif products[-1] == "Word"
19
+ :MSWord
20
+ else
21
+ app.to_sym
22
+ end
23
+ end
24
+ end
25
+
26
+ def version
27
+ @version ||= begin
28
+ return version_of("Word") if name == :MSWord
29
+ return version_of("Office") if name == :MSOffice
30
+ super
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,66 @@
1
+ module Aua::Agents::Safari
2
+ def self.extend?(agent)
3
+ agent.products[-1] == "Safari" ||
4
+ agent.products[0] == "Safari" ||
5
+ (agent.products == ["Mozilla", "AppleWebKit", "Mobile"] && Aua::OperatingSystems::IOS::PLATFORMS.include?(agent.platform_string)) ||
6
+ agent.products.include?("OmniWeb") ||
7
+ agent.products[0] == "MobileSafari"
8
+ end
9
+
10
+ BUILDS = {
11
+ '85' => '1.0',
12
+ '85.5'=>'1.0',
13
+ '85.7'=>'1.0.2',
14
+ '85.8'=>'1.0.3',
15
+ '85.8.1'=>'1.0.3',
16
+ '100'=>'1.1',
17
+ '100.1'=>'1.1.1',
18
+ '125.7'=>'1.2.2',
19
+ '125.8'=>'1.2.2',
20
+ '125.9'=>'1.2.3',
21
+ '125.11'=>'1.2.4',
22
+ '125.12'=>'1.2.4',
23
+ '312'=>'1.3',
24
+ '312.3'=>'1.3.1',
25
+ '312.3.1'=>'1.3.1',
26
+ '312.5'=>'1.3.2',
27
+ '312.6'=>'1.3.2',
28
+ '412'=>'2.0',
29
+ '412.2'=>'2.0',
30
+ '412.2.2'=>'2.0',
31
+ '412.5'=>'2.0.1',
32
+ '416.12'=>'2.0.2',
33
+ '416.13'=>'2.0.2',
34
+ '417.8'=>'2.0.3',
35
+ '417.9.2'=>'2.0.3',
36
+ '417.9.3'=>'2.0.3',
37
+ '419.3'=>'2.0.4',
38
+ '419' => '2.0.4',
39
+ '425.13' => '2.2'
40
+ }
41
+
42
+ def type
43
+ :Browser
44
+ end
45
+
46
+ def name
47
+ @name ||= begin
48
+ return :MobileSafari if products.include?("Mobile") || products[0] == "MobileSafari"
49
+ return :Fluid if products.include?("Fluid")
50
+ return :OmniWeb if products.include?("OmniWeb")
51
+ :Safari
52
+ end
53
+ end
54
+
55
+ def version
56
+ @version ||= begin
57
+ case name
58
+ when :Fluid, :OmniWeb
59
+ version_of(name)
60
+ else
61
+ version_of("Version") || BUILDS[version_of("Safari")] ||
62
+ version_of("Mobile") || version_of("MobileSafari") || version_of("Safari")
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,36 @@
1
+ module Aua::Agents::SearchBot
2
+ PATTERN_BING = /bingbot\/([\d\.]+)/
3
+ PATTERN_BAIDU = /Baiduspider\/?([\d\.]+)?/
4
+ PATTERN_GOOGLE = /Googlebot(-Mobile)?\/?([\d\.]+)?/
5
+
6
+ def self.extend?(agent)
7
+ agent.raw =~ PATTERN_BING ||
8
+ agent.app_comments[1] == "Yahoo! Slurp" ||
9
+ agent.raw =~ PATTERN_BAIDU ||
10
+ agent.raw =~ PATTERN_GOOGLE ||
11
+ agent.app == "msnbot"
12
+ end
13
+
14
+ def type
15
+ :SearchBot
16
+ end
17
+
18
+ def name
19
+ @name ||= begin
20
+ return :Bingbot if raw =~ PATTERN_BING
21
+ return :YahooSlurp if app_comments[1] == "Yahoo! Slurp"
22
+ return :Baiduspider if raw =~ PATTERN_BAIDU
23
+ return $1 ? :GooglebotMobile : :Googlebot if raw =~ PATTERN_GOOGLE
24
+ app.to_sym
25
+ end
26
+ end
27
+
28
+ def version
29
+ @version ||= begin
30
+ return $1 if raw =~ PATTERN_BING
31
+ return $1 if raw =~ PATTERN_BAIDU
32
+ return $2 if raw =~ PATTERN_GOOGLE
33
+ super
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,16 @@
1
+ require 'aua/stack_base'
2
+
3
+ class Aua
4
+ module OperatingSystems
5
+ extend StackBase
6
+ extend self
7
+
8
+ def default
9
+ [Mobiles, Windows, Mac, Android, Linux, IOS, Palm]
10
+ end
11
+ end
12
+ end
13
+
14
+ Dir["#{File.dirname(__FILE__)}/operating_systems/*.rb"].each do |os|
15
+ require(os)
16
+ end
@@ -0,0 +1,28 @@
1
+ module Aua::OperatingSystems::Android
2
+
3
+ def self.extend?(agent)
4
+ agent.platform_string == "Linux" && agent.comments.first && agent.comments.first[2] && agent.comments.first[2].match(PATTERN)
5
+ end
6
+
7
+ PATTERN = /^Android\s([\d\.]+)$/
8
+
9
+ def platform
10
+ @platform ||= :Android
11
+ end
12
+
13
+ def os_name
14
+ @os_name ||= :Android
15
+ end
16
+
17
+ def os_version
18
+ @os_version ||= comments.first[2] =~ PATTERN && $1
19
+ end
20
+
21
+ def name
22
+ @name ||= :AndroidWebkit
23
+ end
24
+
25
+ def version
26
+ @version ||= version_of("Version")
27
+ end
28
+ end
@@ -0,0 +1,20 @@
1
+ module Aua::OperatingSystems::IOS
2
+ PLATFORMS = %w(iPhone iPad iPod)
3
+ PATTERN = /CPU( iPhone)?( OS )?([\d\._]+)? like Mac OS X/
4
+
5
+ def self.extend?(agent)
6
+ PLATFORMS.include?(agent.platform_string) && agent.os_string =~ PATTERN
7
+ end
8
+
9
+ def platform
10
+ platform_string.to_sym
11
+ end
12
+
13
+ def os_name
14
+ :iOS
15
+ end
16
+
17
+ def os_version
18
+ os_string =~ PATTERN && $3 && $3.gsub(/_/, ".")
19
+ end
20
+ end
@@ -0,0 +1,42 @@
1
+ module Aua::OperatingSystems::Linux
2
+
3
+ def self.extend?(agent)
4
+ agent.platform_string == "X11" || agent.app_comments_string.match(PATTERN_LINUX)
5
+ end
6
+
7
+ PATTERN_LINUX = /(l|L)inux/
8
+
9
+ def platform
10
+ :X11
11
+ end
12
+
13
+ def os_name
14
+ :Linux
15
+ end
16
+
17
+ def os_version
18
+ @os_version ||= if app_comments_string =~ /OpenBSD/
19
+ "OpenBSD"
20
+ elsif products.include?("Ubuntu")
21
+ "Ubuntu"
22
+ elsif products.include?("Red") && products.include?("Hat")
23
+ "Red Hat"
24
+ elsif products.include?("CentOS")
25
+ "CentOS"
26
+ elsif products.include?("Gentoo")
27
+ "Gentoo"
28
+ elsif products.include?("SUSE")
29
+ "SUSE"
30
+ elsif products.include?("Fedora")
31
+ "Fedora"
32
+ elsif app_comments_string =~ /FreeBSD/
33
+ "FreeBSD"
34
+ elsif raw =~ /SunOS/
35
+ "Solaris"
36
+ elsif raw =~ /Debian/
37
+ "Debian"
38
+ elsif raw =~ /Maemo/
39
+ "Maemo"
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,74 @@
1
+ module Aua::OperatingSystems::Mac
2
+
3
+ def self.extend?(agent)
4
+ agent.platform_string == "Macintosh" ||
5
+ agent.os_string && agent.os_string =~ PATTERN_MACOS ||
6
+ agent.products.include?("Darwin")
7
+ end
8
+
9
+ PATTERN_OSX = /Mac OS X\s?([\d\._]+)?/
10
+ PATTERN_MACOS = /Mac_PowerPC/
11
+ DAWRWIN_2_OSX = {
12
+ '1.0.2' => 'DP2',
13
+ '1.1' => 'DP4',
14
+ '1.2.1' => 'Public Beta',
15
+ '1.3.1' => '10.0',
16
+ '1.4.1' => '10.1',
17
+ '6.0.1' => '10.2',
18
+ '6.0.2' => '10.2',
19
+ '7.0' => '10.3',
20
+ '8.0' => '10.4',
21
+ '9.0' => '10.5',
22
+ '9.1.0' => '10.5.1',
23
+ '9.2.0' => '10.5.2',
24
+ '9.3.0' => '10.5.3',
25
+ '9.4.0' => '10.5.4',
26
+ '9.5.0' => '10.5.5',
27
+ '9.6.0' => '10.5.6',
28
+ '9.7.0' => '10.5.7',
29
+ '9.8.0' => '10.5.8',
30
+ '10.0' => '10.6',
31
+ '10.1.0' => '10.6.1',
32
+ '10.2.0' => '10.6.2',
33
+ '10.3.0' => '10.6.3',
34
+ '10.4.0' => '10.6.4',
35
+ '10.5.0' => '10.6.5',
36
+ '10.6.0' => '10.6.6'
37
+ }
38
+
39
+ def platform
40
+ darwin? && !DAWRWIN_2_OSX[version_of(:Darwin)] ? :Darwin : :Macintosh
41
+ end
42
+
43
+ def os_name
44
+ @os_name ||= if osx?
45
+ :MacOSX
46
+ elsif darwin?
47
+ DAWRWIN_2_OSX[version_of(:Darwin)] ? :MacOSX : :Darwin
48
+ elsif macos?
49
+ :MacOS
50
+ end
51
+ end
52
+
53
+ def os_version
54
+ @os_version ||= if m = osx?
55
+ m[1] ? m[1].gsub(/_/, ".") : nil
56
+ elsif darwin?
57
+ DAWRWIN_2_OSX[version_of(:Darwin)] || version_of(:Darwin)
58
+ end
59
+ end
60
+
61
+ private
62
+
63
+ def osx?
64
+ app_comments_string.match PATTERN_OSX
65
+ end
66
+
67
+ def macos?
68
+ app_comments_string.match PATTERN_MACOS
69
+ end
70
+
71
+ def darwin?
72
+ products.include?("Darwin")
73
+ end
74
+ end
@@ -0,0 +1,35 @@
1
+ module Aua::OperatingSystems::Mobiles
2
+ def self.extend?(agent)
3
+ agent.platform_string == "BlackBerry" ||
4
+ agent.platform_string == "J2ME/MIDP" ||
5
+ agent.app_comments_string =~ PATTERN_SYMBIAN
6
+ end
7
+
8
+ PATTERN_SYMBIAN = /Symb(ian)?\s?OS\/?([\d\.]+)?/
9
+
10
+ def name
11
+ @name ||= begin
12
+ name = super
13
+ return :OperaMobile if name == :Opera && platform == :SymbianOS
14
+ name
15
+ end
16
+ end
17
+
18
+ def platform
19
+ @platform ||= begin
20
+ return :SymbianOS if app_comments_string =~ PATTERN_SYMBIAN
21
+ platform_string.to_sym
22
+ end
23
+ end
24
+
25
+ def os_name
26
+ @os_name ||= platform
27
+ end
28
+
29
+ def os_version
30
+ @os_version ||= begin
31
+ return $2 if app_comments_string =~ PATTERN_SYMBIAN
32
+ nil
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,33 @@
1
+ module Aua::OperatingSystems::Palm
2
+ #{ }"Mozilla/5.0 (webOS/1.3; U; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/1.0 Safari/525.27.1 Desktop/1.0"
3
+
4
+ def self.extend?(agent)
5
+ agent.platform_string =~ PATTERN && agent.products.include?("Safari")
6
+ end
7
+
8
+ PATTERN = /^webOS\/([\d\.]+)$/
9
+
10
+ def platform
11
+ @platform ||= :webOS
12
+ end
13
+
14
+ def os_name
15
+ @os_name ||= :webOS
16
+ end
17
+
18
+ def os_version
19
+ @os_version ||= platform_string =~ PATTERN && $1
20
+ end
21
+
22
+ def type
23
+ :Browser
24
+ end
25
+
26
+ def name
27
+ @name ||= :webOSWebkit
28
+ end
29
+
30
+ def version
31
+ @version ||= version_of("Version")
32
+ end
33
+ end