can_i_use 0.0.3 → 0.0.4
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 +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