can_i_use 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/can_i_use.rb +3 -5
- data/lib/can_i_use/browser.rb +20 -22
- data/lib/can_i_use/browser_version.rb +12 -14
- data/lib/can_i_use/feature.rb +6 -8
- data/lib/can_i_use/user_agent.rb +7 -9
- data/lib/can_i_use/version.rb +1 -1
- data/test/can_i_use/browser_test.rb +17 -19
- data/test/can_i_use/browser_version_test.rb +2 -4
- data/test/can_i_use/feature_test.rb +1 -3
- data/test/can_i_use/user_agent_test.rb +8 -3
- data/test/can_i_use_test.rb +0 -2
- data/test/test_helper.rb +3 -3
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f6ffc19e85a11069fef862c4b7725c4623c07ec
|
4
|
+
data.tar.gz: 5200b4644f2cb7bbf5fd2e98d021605f8e070414
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ddaad6300c2b8e68529810ea4ccaa076ad041803c60cbba1496a5d306c38200d3f8af044ed9eb1679097e7d579c41a4cf1b5da21e73ea5babd12b00cfd971a6
|
7
|
+
data.tar.gz: ecf44f7687c861b367becde1c22f4373473354c4de5bae40c0db9e69739a2cc2ab52fb162616981b35701b7630ed8d25b5c0d3b0fbe7c644827cf2c941efd4d2
|
data/Gemfile.lock
CHANGED
data/lib/can_i_use.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'can_i_use/version'
|
2
2
|
|
3
3
|
require 'can_i_use/browser'
|
4
4
|
require 'can_i_use/browser_version'
|
@@ -6,19 +6,17 @@ require 'can_i_use/feature'
|
|
6
6
|
require 'can_i_use/user_agent'
|
7
7
|
|
8
8
|
class CanIUse
|
9
|
-
|
10
9
|
CANIUSE_DATA = JSON.parse(
|
11
10
|
File.read(
|
12
11
|
File.join(
|
13
|
-
[
|
12
|
+
[File.dirname(__FILE__), '..', 'vendor/caniuse/data.json']
|
14
13
|
)
|
15
14
|
)
|
16
15
|
)
|
17
16
|
|
18
17
|
# =====================================================================
|
19
|
-
|
18
|
+
|
20
19
|
def self.updated_at
|
21
20
|
Time.at(CANIUSE_DATA['updated'].to_i).utc
|
22
21
|
end
|
23
|
-
|
24
22
|
end
|
data/lib/can_i_use/browser.rb
CHANGED
@@ -2,48 +2,46 @@ require_relative 'version'
|
|
2
2
|
|
3
3
|
class CanIUse
|
4
4
|
class Browser
|
5
|
-
|
6
5
|
attr_accessor :name
|
7
6
|
attr_accessor :versions_hash
|
8
7
|
|
9
8
|
# =====================================================================
|
10
|
-
|
11
|
-
def initialize
|
9
|
+
|
10
|
+
def initialize(name, versions_hash)
|
12
11
|
@name = name
|
13
12
|
@versions_hash = versions_hash
|
14
13
|
end
|
15
14
|
|
16
15
|
# ---------------------------------------------------------------------
|
17
|
-
|
16
|
+
|
18
17
|
def versions
|
19
|
-
@versions_hash.select{ |k,
|
18
|
+
@versions_hash.select { |k, _v| k =~ /[\d\.]/ }.inject([]) do |res, h|
|
20
19
|
res << BrowserVersion.new(*h)
|
21
20
|
end
|
22
21
|
end
|
23
22
|
|
24
|
-
def version
|
25
|
-
versions.detect{ |v| v.to_s == version_number }
|
23
|
+
def version(version_number)
|
24
|
+
versions.detect { |v| v.to_s == version_number }
|
26
25
|
end
|
27
26
|
|
28
|
-
def supported_from_version
|
29
|
-
versions.detect{ |v| v.support_type == support_type }
|
27
|
+
def supported_from_version(support_type = :yes)
|
28
|
+
versions.detect { |v| v.support_type == support_type }
|
30
29
|
end
|
31
30
|
|
32
31
|
# ---------------------------------------------------------------------
|
33
|
-
|
34
|
-
def is?
|
32
|
+
|
33
|
+
def is?(str)
|
35
34
|
!!case name
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
35
|
+
when 'ios_saf' then str =~ /mobile/i && str =~ /safari/i
|
36
|
+
when 'op_mini' then str =~ /opera/i && str =~ /mini/i
|
37
|
+
when 'bb' then str =~ /BlackBerry/i
|
38
|
+
when 'op_mob' then str =~ /Opera/i && str =~ /Mobi/i
|
39
|
+
when 'and_chr' then str =~ /Android/i && str =~ /Chrome/i
|
40
|
+
when 'and_ff' then str =~ /Android/i && str =~ /Firefox/i
|
41
|
+
when 'ie_mob' then str =~ /IE/i && str =~ /Mobile/i
|
42
|
+
when 'and_uc' then str =~ /(Android)?UC\s?(Browser)?/i
|
43
|
+
else str =~ /#{name}/i
|
45
44
|
end
|
46
45
|
end
|
47
|
-
|
48
46
|
end
|
49
|
-
end
|
47
|
+
end
|
@@ -1,50 +1,49 @@
|
|
1
1
|
class CanIUse
|
2
2
|
class BrowserVersion
|
3
|
-
|
4
3
|
attr_accessor :version_string
|
5
4
|
attr_accessor :support_string
|
6
5
|
|
7
6
|
# =====================================================================
|
8
|
-
|
9
|
-
def initialize
|
7
|
+
|
8
|
+
def initialize(version_string, support_string)
|
10
9
|
@version_string = version_string
|
11
10
|
@support_string = support_string
|
12
11
|
end
|
13
12
|
|
14
13
|
# ---------------------------------------------------------------------
|
15
|
-
|
16
|
-
def <=>
|
14
|
+
|
15
|
+
def <=>(other)
|
17
16
|
Gem::Version.new(to_s.dup) <=> Gem::Version.new(other.to_s.dup)
|
18
17
|
end
|
19
18
|
|
20
|
-
def >
|
19
|
+
def >(other)
|
21
20
|
Gem::Version.new(to_s.dup) > Gem::Version.new(other.to_s.dup)
|
22
21
|
end
|
23
22
|
|
24
|
-
def >=
|
23
|
+
def >=(other)
|
25
24
|
Gem::Version.new(to_s.dup) >= Gem::Version.new(other.to_s.dup)
|
26
25
|
end
|
27
26
|
|
28
|
-
def <
|
27
|
+
def <(other)
|
29
28
|
Gem::Version.new(to_s.dup) < Gem::Version.new(other.to_s.dup)
|
30
29
|
end
|
31
30
|
|
32
|
-
def <=
|
31
|
+
def <=(other)
|
33
32
|
Gem::Version.new(to_s.dup) <= Gem::Version.new(other.to_s.dup)
|
34
33
|
end
|
35
34
|
|
36
|
-
def ==
|
35
|
+
def ==(other)
|
37
36
|
Gem::Version.new(to_s.dup) == Gem::Version.new(other.to_s.dup)
|
38
37
|
end
|
39
38
|
|
40
39
|
# ---------------------------------------------------------------------
|
41
|
-
|
40
|
+
|
42
41
|
def to_s
|
43
42
|
@version_string
|
44
43
|
end
|
45
44
|
|
46
45
|
# ---------------------------------------------------------------------
|
47
|
-
|
46
|
+
|
48
47
|
# y - (Y)es, supported by default
|
49
48
|
# a - (A)lmost supported (aka Partial support)
|
50
49
|
# n - (N)o support, or disabled by default
|
@@ -66,6 +65,5 @@ class CanIUse
|
|
66
65
|
when support_string =~ /d/i then :disabled
|
67
66
|
end
|
68
67
|
end
|
69
|
-
|
70
68
|
end
|
71
|
-
end
|
69
|
+
end
|
data/lib/can_i_use/feature.rb
CHANGED
@@ -4,27 +4,25 @@ require_relative 'browser'
|
|
4
4
|
|
5
5
|
class CanIUse
|
6
6
|
class Feature
|
7
|
-
|
8
|
-
def initialize name
|
7
|
+
def initialize(name)
|
9
8
|
@name = name
|
10
9
|
end
|
11
10
|
|
12
11
|
# ---------------------------------------------------------------------
|
13
|
-
|
12
|
+
|
14
13
|
def browsers
|
15
14
|
return [] unless feature_data
|
16
15
|
feature_data.fetch('stats', {}).inject([]) { |res, h| res << Browser.new(*h) }
|
17
16
|
end
|
18
17
|
|
19
|
-
def for_browser
|
20
|
-
browsers.detect{ |b| b.is?(name) }
|
18
|
+
def for_browser(name)
|
19
|
+
browsers.detect { |b| b.is?(name) }
|
21
20
|
end
|
22
21
|
|
23
22
|
private # =============================================================
|
24
|
-
|
23
|
+
|
25
24
|
def feature_data
|
26
25
|
@feature_data ||= CANIUSE_DATA['data'][@name]
|
27
26
|
end
|
28
|
-
|
29
27
|
end
|
30
|
-
end
|
28
|
+
end
|
data/lib/can_i_use/user_agent.rb
CHANGED
@@ -2,29 +2,27 @@ require 'user_agent_parser'
|
|
2
2
|
|
3
3
|
class CanIUse
|
4
4
|
class UserAgent
|
5
|
-
|
6
5
|
attr_accessor :user_agent_string
|
7
6
|
|
8
7
|
# =====================================================================
|
9
|
-
|
10
|
-
def initialize
|
8
|
+
|
9
|
+
def initialize(user_agent_string)
|
11
10
|
@user_agent_string = user_agent_string
|
12
11
|
end
|
13
12
|
|
14
13
|
# ---------------------------------------------------------------------
|
15
|
-
|
16
|
-
def supports?
|
14
|
+
|
15
|
+
def supports?(feature_name, support_type = :yes)
|
17
16
|
feature = Feature.new(feature_name)
|
18
17
|
browser = feature.for_browser(user_agent.family)
|
19
|
-
supported_from_version = browser.supported_from_version(support_type)
|
18
|
+
return false unless supported_from_version = browser.supported_from_version(support_type)
|
20
19
|
Gem::Version.new(user_agent.version.to_s.dup) >= Gem::Version.new(supported_from_version.to_s.dup)
|
21
20
|
end
|
22
21
|
|
23
22
|
private # =============================================================
|
24
|
-
|
23
|
+
|
25
24
|
def user_agent
|
26
25
|
UserAgentParser.parse(@user_agent_string)
|
27
26
|
end
|
28
|
-
|
29
27
|
end
|
30
|
-
end
|
28
|
+
end
|
data/lib/can_i_use/version.rb
CHANGED
@@ -2,8 +2,7 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class CanIUse
|
4
4
|
describe Browser do
|
5
|
-
|
6
|
-
subject { CanIUse::Browser.new("ie", { "5.5"=>"n", "6"=>"p", "7"=>"p", "8"=>"p", "9"=>"y", "10"=>"y", "11"=>"y", "TP"=>"y" }) }
|
5
|
+
subject { CanIUse::Browser.new('ie', '5.5' => 'n', '6' => 'p', '7' => 'p', '8' => 'p', '9' => 'y', '10' => 'y', '11' => 'y', 'TP' => 'y') }
|
7
6
|
|
8
7
|
describe '#versions' do
|
9
8
|
it 'returns an array of versions' do
|
@@ -31,85 +30,84 @@ class CanIUse
|
|
31
30
|
end
|
32
31
|
|
33
32
|
# ---------------------------------------------------------------------
|
34
|
-
|
33
|
+
|
35
34
|
describe '#is?' do
|
36
35
|
describe 'chrome' do
|
37
|
-
let(:browser) { CanIUse::Browser.new(
|
36
|
+
let(:browser) { CanIUse::Browser.new('chrome', {}) }
|
38
37
|
it { browser.is?('Chrome').must_equal true }
|
39
38
|
end
|
40
39
|
|
41
40
|
describe 'ie' do
|
42
|
-
let(:browser) { CanIUse::Browser.new(
|
41
|
+
let(:browser) { CanIUse::Browser.new('ie', {}) }
|
43
42
|
it { browser.is?('IE').must_equal true }
|
44
43
|
it { browser.is?('MSIE').must_equal true }
|
45
44
|
end
|
46
45
|
|
47
46
|
describe 'safari' do
|
48
|
-
let(:browser) { CanIUse::Browser.new(
|
47
|
+
let(:browser) { CanIUse::Browser.new('safari', {}) }
|
49
48
|
it { browser.is?('Safari').must_equal true }
|
50
49
|
end
|
51
50
|
|
52
51
|
describe 'ios_saf' do
|
53
|
-
let(:browser) { CanIUse::Browser.new(
|
52
|
+
let(:browser) { CanIUse::Browser.new('ios_saf', {}) }
|
54
53
|
it { browser.is?('Safari Mobile').must_equal true }
|
55
54
|
it { browser.is?('Mobile Safari').must_equal true }
|
56
55
|
end
|
57
56
|
|
58
57
|
describe 'firefox' do
|
59
|
-
let(:browser) { CanIUse::Browser.new(
|
58
|
+
let(:browser) { CanIUse::Browser.new('firefox', {}) }
|
60
59
|
it { browser.is?('Firefox').must_equal true }
|
61
60
|
end
|
62
61
|
|
63
62
|
describe 'opera' do
|
64
|
-
let(:browser) { CanIUse::Browser.new(
|
63
|
+
let(:browser) { CanIUse::Browser.new('opera', {}) }
|
65
64
|
it { browser.is?('Opera').must_equal true }
|
66
65
|
end
|
67
66
|
|
68
67
|
describe 'op_mini' do
|
69
|
-
let(:browser) { CanIUse::Browser.new(
|
68
|
+
let(:browser) { CanIUse::Browser.new('op_mini', {}) }
|
70
69
|
it { browser.is?('Opera Mini').must_equal true }
|
71
70
|
end
|
72
71
|
|
73
72
|
describe 'android' do
|
74
|
-
let(:browser) { CanIUse::Browser.new(
|
73
|
+
let(:browser) { CanIUse::Browser.new('android', {}) }
|
75
74
|
it { browser.is?('Android').must_equal true }
|
76
75
|
end
|
77
76
|
|
78
77
|
describe 'bb' do
|
79
|
-
let(:browser) { CanIUse::Browser.new(
|
78
|
+
let(:browser) { CanIUse::Browser.new('bb', {}) }
|
80
79
|
it { browser.is?('BlackBerry').must_equal true }
|
81
80
|
end
|
82
81
|
|
83
82
|
describe 'op_mob' do
|
84
|
-
let(:browser) { CanIUse::Browser.new(
|
83
|
+
let(:browser) { CanIUse::Browser.new('op_mob', {}) }
|
85
84
|
it { browser.is?('Opera Mobi').must_equal true }
|
86
85
|
end
|
87
86
|
|
88
87
|
describe 'and_chr' do
|
89
|
-
let(:browser) { CanIUse::Browser.new(
|
88
|
+
let(:browser) { CanIUse::Browser.new('and_chr', {}) }
|
90
89
|
it { browser.is?('Android Chrome').must_equal true }
|
91
90
|
end
|
92
91
|
|
93
92
|
describe 'and_ff' do
|
94
|
-
let(:browser) { CanIUse::Browser.new(
|
93
|
+
let(:browser) { CanIUse::Browser.new('and_ff', {}) }
|
95
94
|
it { browser.is?('Android Firefox').must_equal true }
|
96
95
|
end
|
97
96
|
|
98
97
|
describe 'ie_mob' do
|
99
|
-
let(:browser) { CanIUse::Browser.new(
|
98
|
+
let(:browser) { CanIUse::Browser.new('ie_mob', {}) }
|
100
99
|
it { browser.is?('IEMobile').must_equal true }
|
101
100
|
it { browser.is?('MSIE Mobile').must_equal true }
|
102
101
|
it { browser.is?('IE Mobile').must_equal true }
|
103
102
|
end
|
104
103
|
|
105
104
|
describe 'and_uc' do
|
106
|
-
let(:browser) { CanIUse::Browser.new(
|
105
|
+
let(:browser) { CanIUse::Browser.new('and_uc', {}) }
|
107
106
|
it { browser.is?('UCBrowser').must_equal true }
|
108
107
|
it { browser.is?('Android UC').must_equal true }
|
109
108
|
it { browser.is?('UC Browser').must_equal true }
|
110
109
|
it { browser.is?('Android UC Browser').must_equal true }
|
111
110
|
end
|
112
111
|
end
|
113
|
-
|
114
112
|
end
|
115
|
-
end
|
113
|
+
end
|
@@ -2,7 +2,6 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class CanIUse
|
4
4
|
describe BrowserVersion do
|
5
|
-
|
6
5
|
describe 'support' do
|
7
6
|
it { CanIUse::BrowserVersion.new('0', 'y').support_type.must_equal :yes }
|
8
7
|
it { CanIUse::BrowserVersion.new('0', 'a').support_type.must_equal :almost }
|
@@ -14,7 +13,7 @@ class CanIUse
|
|
14
13
|
end
|
15
14
|
|
16
15
|
describe 'sorting' do
|
17
|
-
let(:versions)
|
16
|
+
let(:versions) do
|
18
17
|
[
|
19
18
|
CanIUse::BrowserVersion.new('1', 'n'),
|
20
19
|
CanIUse::BrowserVersion.new('1.1', 'n'),
|
@@ -24,7 +23,7 @@ class CanIUse
|
|
24
23
|
CanIUse::BrowserVersion.new('6.5.4', 'n'),
|
25
24
|
CanIUse::BrowserVersion.new('3.1', 'n')
|
26
25
|
]
|
27
|
-
|
26
|
+
end
|
28
27
|
it 'sorts the versions' do
|
29
28
|
versions.sort.map(&:to_s).must_equal %w(1 1.0.5 1.1 1.10 3.1 6.5.4 10)
|
30
29
|
end
|
@@ -42,6 +41,5 @@ class CanIUse
|
|
42
41
|
(v1 == v2).must_equal false
|
43
42
|
end
|
44
43
|
end
|
45
|
-
|
46
44
|
end
|
47
45
|
end
|
@@ -2,12 +2,12 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class CanIUse
|
4
4
|
describe UserAgent do
|
5
|
-
|
6
5
|
let(:safari_8_user_agent_string) { 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/600.5.6 (KHTML, like Gecko) Version/8.0.5 Safari/600.5.6' }
|
7
6
|
let(:ie_6_user_agent_string) { 'Mozilla/5.0 (Windows; U; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)' }
|
7
|
+
let(:ie_10) { 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)' }
|
8
8
|
|
9
9
|
# ---------------------------------------------------------------------
|
10
|
-
|
10
|
+
|
11
11
|
describe 'Safari 8' do
|
12
12
|
it 'supports "canvas"' do
|
13
13
|
CanIUse::UserAgent.new(safari_8_user_agent_string).supports?('canvas').must_equal true
|
@@ -20,5 +20,10 @@ class CanIUse
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
+
describe 'not supported at all' do
|
24
|
+
it 'does not support "woff2"' do
|
25
|
+
CanIUse::UserAgent.new(ie_10).supports?('woff2').must_equal false
|
26
|
+
end
|
27
|
+
end
|
23
28
|
end
|
24
|
-
end
|
29
|
+
end
|
data/test/can_i_use_test.rb
CHANGED
data/test/test_helper.rb
CHANGED