Class: Cani::Api
- Inherits:
-
Object
show all
- Defined in:
- lib/cani/api.rb,
lib/cani/api/browser.rb,
lib/cani/api/feature.rb,
lib/cani/api/feature/viewer.rb
Defined Under Namespace
Classes: Browser, Feature
Instance Method Summary
collapse
Constructor Details
#initialize ⇒ Api
Returns a new instance of Api.
9
10
11
|
# File 'lib/cani/api.rb', line 9
def initialize
@data = load_data
end
|
Instance Method Details
#browsers ⇒ Object
83
84
85
86
87
|
# File 'lib/cani/api.rb', line 83
def browsers
@browsers ||= @data['agents'].map do |(name, info)|
Browser.new info.merge(name: name)
end
end
|
#features ⇒ Object
89
90
91
|
# File 'lib/cani/api.rb', line 89
def features
@features ||= @data['data'].map { |(name, info)| Feature.new info.merge(name: name) }
end
|
#find_browser(name) ⇒ Object
74
75
76
77
78
79
80
81
|
# File 'lib/cani/api.rb', line 74
def find_browser(name)
name = name.to_s.downcase
idx = browsers.find_index do |bwsr|
[bwsr.title, bwsr.name, bwsr.abbr].map(&:downcase).include? name
end
browsers[idx] if idx
end
|
#find_feature(name) ⇒ Object
56
57
58
59
60
61
62
63
|
# File 'lib/cani/api.rb', line 56
def find_feature(name)
name = Regexp.new name.to_s.downcase.gsub(/(\W)/, '.*'), :i
idx = features.find_index do |ft|
ft.title.downcase.match(name) || ft.name.downcase.match(name)
end
features[idx] if idx
end
|
#find_features(name) ⇒ Object
65
66
67
68
69
70
71
72
|
# File 'lib/cani/api.rb', line 65
def find_features(name)
name = Regexp.new name.to_s.downcase.gsub(/(\W)/, '.*'), :i
features.select do |ft|
ft.title.downcase.match(name) ||
ft.name.downcase.match(name) ||
ft.description.downcase.match(name)
end
end
|
#load_data(fetch: false) ⇒ Object
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/cani/api.rb', line 13
def load_data(fetch: false)
@upd = false
data_file = File.join Cani.config.directory, 'caniuse.json'
data_exists = File.exist? data_file
data_up_to_date = data_exists ? (Time.now.to_i - File.mtime(data_file).to_i < Cani.config.expire.to_i)
: false
if !fetch && data_exists && data_up_to_date
JSON.parse File.read(data_file)
elsif (data = raw)
@upd = true
FileUtils.mkdir_p File.dirname(data_file)
File.open(data_file, 'w') { |f| f << data }
JSON.parse data
elsif data_exists
JSON.parse File.read(data_file)
else
puts 'Cani fatal: no data available for display'
exit 1
end
end
|
#raw ⇒ Object
93
94
95
96
97
98
99
|
# File 'lib/cani/api.rb', line 93
def raw
begin
Net::HTTP.get URI(Cani.config.source)
rescue
nil
end
end
|
#remove! ⇒ Object
42
43
44
45
46
|
# File 'lib/cani/api.rb', line 42
def remove!
data_file = File.join Cani.config.directory, 'caniuse.json'
File.unlink data_file if File.exist? data_file
end
|
#update! ⇒ Object
48
49
50
|
# File 'lib/cani/api.rb', line 48
def update!
@data = load_data fetch: true
end
|
#updated? ⇒ Boolean
52
53
54
|
# File 'lib/cani/api.rb', line 52
def updated?
@upd
end
|