browserino 1.0.2 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 09967128c9c89bc6bb97b7cd455ddf0a91f8947e
4
- data.tar.gz: 57fff14bb77564131996b23d066764746692f8bf
3
+ metadata.gz: 829974a6744a8e99a66ca28dd8a73298e647bb09
4
+ data.tar.gz: f8930fa43ae37894a805e84747b8f3aaf4a89386
5
5
  SHA512:
6
- metadata.gz: d55c9c93837fcfce61caf28ac2c845313b05c8aa6378b25ca0217fab37c919754a5d23972dfa947ade7b4a3b6fac71f5906b5bd77a805157883319b452c60ade
7
- data.tar.gz: 0756df1c2c34208293f74aba43e670312e4a6ced67f03eb4bab2b78479e6096315736365a3f803617d7717c2856c1eefb240b2690dc3a861c29eb22a7174ffb7
6
+ metadata.gz: 58351ed9e54ffb8e1a5889780a6dfeca4ee8deea880253c26b9a39cc6c4f922d2e4b314f06a78d694b13db4c1efae4437ee8f851b1bb96afdfba5e381ec253fa
7
+ data.tar.gz: 897d7f2b7e3d3460b147883919e3f872ccb311256e8811c79e2ce02b11c7111c639e15d1b4ed9ed7213a41321b7a73444f2b541b36bc03fce0210605077b6545
@@ -2,47 +2,60 @@ module Browserino
2
2
  class Agent
3
3
  attr_accessor :info
4
4
 
5
- def initialize(hash)
5
+ def initialize(hash, unknown = Browserino::UNKNOWN)
6
6
  @info = hash
7
+ @unknown = unknown
7
8
  end
8
9
 
9
10
  def browser_name
10
- @info[:browser_name].downcase || Browserino::UNKNOWN
11
+ with_valid(@info[:browser_name]) { |v| v.to_s.downcase }
11
12
  end
12
13
 
13
14
  def browser_version
14
- @info[:browser_version].gsub('_', '.').downcase || Browserino::UNKNOWN
15
+ with_valid(@info[:browser_version]) { |v| v.to_s.downcase.gsub('_', '.') }
15
16
  end
16
17
 
17
18
  def engine_name
18
- @info[:engine_name].downcase || Browserino::UNKNOWN
19
+ with_valid(@info[:engine_name]) { |v| v.to_s.downcase }
20
+
19
21
  end
20
22
 
21
23
  def engine_version
22
- @info[:engine_version].gsub('_', '.').downcase || Browserino::UNKNOWN
24
+ with_valid(@info[:engine_version]) { |v| v.to_s.downcase.gsub('_', '.') }
23
25
  end
24
26
 
25
27
  def system_name(opts = {})
26
28
  opts = {full: true}.merge(opts)
27
- name = @info[:system_name].downcase
29
+ name = with_valid(@info[:system_name]) { |v| v.to_s.downcase }
28
30
  if opts[:full]
29
- [name, fetch_system_version_name(name).downcase]
31
+ [name, fetch_system_version_name(name)]
30
32
  else
31
- name || Browserino::UNKNOWN
33
+ name
32
34
  end
33
35
  end
34
36
 
35
37
  def system_version
36
- @info[:system_version].gsub('_', '.').downcase || Browserino::UNKNOWN
38
+ with_valid(@info[:system_version]) { |v| v.to_s.downcase.gsub('_', '.') }
37
39
  end
38
40
 
39
41
  def system_architecture
40
- @info[:system_architecture].downcase || Browserino::UNKNOWN
42
+ with_valid(@info[:system_architecture]) { |v| v.to_s.downcase }
41
43
  end
42
44
 
43
45
  private
44
46
 
47
+ def with_valid(val)
48
+ if val && (val != '' || val != false) && block_given?
49
+ res = yield(val)
50
+ return @unknown if res == ''
51
+ res
52
+ else
53
+ @unknown
54
+ end
55
+ end
56
+
45
57
  def fetch_system_version_name(name)
58
+ return @unknown if name.nil? || name == '' || !name
46
59
  const = name.upcase
47
60
  name.downcase!
48
61
  if name.match(/mac|ios/i)
@@ -53,7 +66,7 @@ module Browserino
53
66
  if version && defined? const
54
67
  Browserino::Mapping.const_get(const).select { |name, versions| true if versions.include?(version) }.keys.first
55
68
  else
56
- Browserino::UNKNOWN
69
+ @unknown
57
70
  end
58
71
  end
59
72
  end
@@ -3,43 +3,43 @@ module Browserino
3
3
  browser: {
4
4
  opera: {
5
5
  name: /(?<name>ope?ra?)/i,
6
- version: /(ope?ra?|version)(\/|\s)(?<version>[\d\.]+)/i
6
+ version: /(?:ope?ra?|version)(\/|\s)(?<version>[\d\.]+)/i
7
7
  },
8
8
 
9
9
  maxthon: {
10
10
  name: /(?<name>maxthon)/i,
11
- version: /maxthon(\s|\/)(?<version>[\d\.]+)/i
11
+ version: /maxthon(?:\s|\/)(?<version>[\d\.]+)/i
12
12
  },
13
13
 
14
14
  ie: {
15
15
  name: /(?<name>msie|trident)/i,
16
- version: /((ms)?ie\s|rv\:)(?<version>[\d\.b]+)/i
16
+ version: /(?:(?:ms)?ie\s|rv\:)(?<version>[\d\.b]+)/i
17
17
  },
18
18
 
19
19
  firefox: {
20
- name: /(?<name>(fire|water)(fox|bird)|ice(weasel|cat)|netscape)/i,
21
- version: /((fire|water)(fox|bird)|ice(weasel|cat)|netscape)[\/]?(?<version>[\d\.]+)/i
20
+ name: /(?<name>(?:fire|water)(?:fox|bird)|ice(?:weasel|cat)|netscape)/i,
21
+ version: /(?:(?:fire|water)(?:fox|bird)|ice(?:weasel|cat)|netscape)[\/]?(?<version>[\d\.]+)/i
22
22
  },
23
23
 
24
24
  chrome: {
25
25
  name: /(?<name>chrome?(ium|plus)?)/i,
26
- version: /chrome?(ium|plus)?\/(?<version>[\d\.]+)/i
26
+ version: /chrome?(?:ium|plus)?\/(?<version>[\d\.]+)/i
27
27
  },
28
28
 
29
29
  safari: {
30
30
  name: /(?<name>safari)/i,
31
- version: /(version|safari)\/(?<version>[\d\.]+)/i
31
+ version: /(?:version|safari)\/(?<version>[\d\.]+)/i
32
32
  }
33
33
  },
34
34
 
35
35
  engine: {
36
36
  name: /(?<name>((apple)?webkit|gecko|trident|presto))/i,
37
- version: /((apple)?webkit|rv:|trident|presto)[\/\s]?(?<version>[\d\.]+)/i
37
+ version: /(?:(?:apple)?webkit|rv:|trident|presto)[\/\s]?(?<version>[\d\.]+)/i
38
38
  },
39
39
 
40
40
  operating_system: {
41
- name: /(?<name>windows|macintosh|android|ios)/i,
42
- version: /(nt|mac\sos\sx|android|(cpu\s|i)os)\s(?<version>[\d\._]+)/i,
41
+ name: /(?<name>windows|macintosh|android|ios|linux)/i,
42
+ version: /(?:nt|mac\sos\sx|android|(cpu\s|i)os)\s(?<version>[\d\._]+)/i,
43
43
  architecture: /(?<architecture>(x?(86_)?64)|i(3|6)86)/i
44
44
  }
45
45
  }
@@ -1,3 +1,3 @@
1
1
  module Browserino
2
- UNKNOWN = 'unknown'
2
+ UNKNOWN = nil
3
3
  end
@@ -1,3 +1,3 @@
1
1
  module Browserino
2
- VERSION = "1.0.2"
2
+ VERSION = "1.1.2"
3
3
  end
data/lib/browserino.rb CHANGED
@@ -16,7 +16,7 @@ require "browserino/engine"
16
16
  require "browserino/operating_system"
17
17
 
18
18
  module Browserino
19
- def self.parse ua
19
+ def self.parse(ua, unknown_alt = Browserino::UNKNOWN)
20
20
  ua = AgentManipulator.new(ua).ua
21
21
  name = find_browser_name(ua)
22
22
  Agent.new(check_for_aliases({
@@ -27,7 +27,7 @@ module Browserino
27
27
  system_name: OperatingSystem::name(ua),
28
28
  system_version: OperatingSystem::version(ua),
29
29
  system_architecture: OperatingSystem::architecture(ua)
30
- }))
30
+ }), unknown_alt)
31
31
  end
32
32
 
33
33
  private
@@ -47,6 +47,6 @@ module Browserino
47
47
  tmp = browsers.shift
48
48
  name = tmp if (ua.match(PATTERNS[:browser][tmp][:name]))
49
49
  end
50
- name ||= :unknown
50
+ name ||= Browserino::UNKNOWN
51
51
  end
52
52
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: browserino
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sidney Liebrand
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-09-30 00:00:00.000000000 Z
11
+ date: 2015-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler