mirror of
https://github.com/theniceboy/.config.git
synced 2025-12-26 14:44:57 +08:00
77 lines
2.1 KiB
Ruby
Executable file
77 lines
2.1 KiB
Ruby
Executable file
#!/usr/bin/env ruby
|
|
# frozen_string_literal: true
|
|
|
|
require 'colorize'
|
|
require 'json'
|
|
|
|
# Ciu, short for CanIUse
|
|
# A shell script that downloads JSON data and displays results
|
|
# in table form with colors
|
|
module Ciu
|
|
MAX_AGE = 86_400 # 1 day in seconds
|
|
STATUSSES = { 'rec' => 'rc', 'unoff' => 'un', 'other' => 'ot' }.freeze
|
|
COL = ' '.freeze
|
|
VER_BACK = 2
|
|
FETCH_URL = 'https://raw.githubusercontent.com/Fyrd/caniuse/master/data.json'.freeze
|
|
STAT_SYMS = { 'n' => '-', 'y' => '+', 'p' => '~' }.freeze
|
|
LIST = %w[ie edge safari ios_saf opera
|
|
op_mob firefox chrome android bb].freeze
|
|
NAMES = { 'firefox' => 'ff', 'chrome' => 'chr', 'safari' => 'saf',
|
|
'ios_saf' => 'saf_ios', 'opera' => 'opr', 'op_mob' => 'opr_mob',
|
|
'android' => 'andr' }.freeze
|
|
|
|
def self.features
|
|
data
|
|
end
|
|
|
|
def self.row(ft)
|
|
[
|
|
status(ft['status']).green,
|
|
support(ft['usage_perc_y']).light_black,
|
|
title(ft['title']),
|
|
stats(ft['stats']).light_black
|
|
].join(COL).bold
|
|
end
|
|
|
|
def self.title(str, maxw = 30, fill = '...')
|
|
return str[0..(maxw - fill.size - 1)] + fill if str.size >= maxw
|
|
str + (' ' * (maxw - str.size))
|
|
end
|
|
|
|
def self.status(status)
|
|
'[' + (STATUSSES[status] || status) + ']'
|
|
end
|
|
|
|
def self.support(percentage)
|
|
(percentage.to_s + '%').ljust(6)
|
|
end
|
|
|
|
def self.stats(stats)
|
|
LIST.map do |browser|
|
|
stats[browser].values.last(VER_BACK)
|
|
.map { |ypn| STAT_SYMS.fetch ypn, '-' }
|
|
.join + (NAMES[browser] || browser)
|
|
end.join COL
|
|
end
|
|
|
|
def self.data
|
|
@data ||= begin
|
|
path = File.expand_path '~/.caniuse-fzf-data'
|
|
exists = File.exist? path
|
|
update = exists && File.mtime(path).to_i < Time.now.to_i - MAX_AGE
|
|
|
|
exists && !update ? File.read(path) : download!
|
|
end
|
|
end
|
|
|
|
def self.download!
|
|
path = File.expand_path '~/.caniuse-fzf-data'
|
|
json = JSON.parse `curl --silent #{FETCH_URL}`
|
|
data = json['data'].values.map(&method(:row)).join "\n"
|
|
|
|
File.open(path, 'w') { |f| f.write data }
|
|
data
|
|
end
|
|
end
|
|
|
|
puts Ciu.features
|