fontist 0.2.0 → 1.2.0
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/.github/workflows/macosx.yml +1 -1
- data/.github/workflows/ubuntu.yml +1 -1
- data/.gitignore +4 -3
- data/README.md +91 -5
- data/fontist.gemspec +1 -0
- data/lib/fontist.rb +26 -8
- data/lib/fontist/errors.rb +3 -0
- data/lib/fontist/font.rb +78 -0
- data/lib/fontist/font_formula.rb +123 -0
- data/lib/fontist/formula.rb +90 -0
- data/lib/fontist/formulas.rb +15 -0
- data/lib/fontist/formulas/andale_font.rb +79 -0
- data/lib/fontist/formulas/arial_black_font.rb +78 -0
- data/lib/fontist/formulas/cleartype_fonts.rb +226 -0
- data/lib/fontist/formulas/comic_font.rb +77 -0
- data/lib/fontist/formulas/courier_font.rb +80 -0
- data/lib/fontist/formulas/euphemia_font.rb +85 -0
- data/lib/fontist/formulas/georgia_font.rb +79 -0
- data/lib/fontist/formulas/impact_font.rb +77 -0
- data/lib/fontist/formulas/montserrat_font.rb +132 -0
- data/lib/fontist/formulas/ms_truetype_fonts.rb +124 -0
- data/lib/fontist/formulas/open_sans_fonts.rb +263 -0
- data/lib/fontist/formulas/overpass_font.rb +73 -0
- data/lib/fontist/formulas/source_fonts.rb +109 -0
- data/lib/fontist/formulas/stix_fonts.rb +108 -0
- data/lib/fontist/formulas/tahoma_font.rb +146 -0
- data/lib/fontist/formulas/webding_font.rb +77 -0
- data/lib/fontist/registry.rb +42 -0
- data/lib/fontist/system.yml +17 -0
- data/lib/fontist/system_font.rb +19 -12
- data/lib/fontist/utils.rb +9 -0
- data/lib/fontist/utils/downloader.rb +74 -0
- data/lib/fontist/utils/dsl.rb +77 -0
- data/lib/fontist/utils/exe_extractor.rb +72 -0
- data/lib/fontist/utils/zip_extractor.rb +38 -0
- data/lib/fontist/version.rb +1 -1
- data/spec/fontist/font_formula_spec.rb +67 -0
- data/spec/fontist/font_spec.rb +87 -0
- data/spec/fontist/formula_spec.rb +67 -0
- data/spec/fontist/formulas/andale_font_spec.rb +29 -0
- data/spec/fontist/formulas/arial_black_font_spec.rb +29 -0
- data/spec/fontist/formulas/cleartype_fonts_spec.rb +38 -0
- data/spec/fontist/formulas/comic_font_spec.rb +29 -0
- data/spec/fontist/formulas/courier_font_spec.rb +29 -0
- data/spec/fontist/formulas/euphemia_font_spec.rb +29 -0
- data/spec/fontist/formulas/georgia_font_spec.rb +29 -0
- data/spec/fontist/formulas/impact_font_spec.rb +29 -0
- data/spec/fontist/formulas/montserrat_font_spec.rb +29 -0
- data/spec/fontist/formulas/ms_truetype_fonts_spec.rb +29 -0
- data/spec/fontist/formulas/open_sans_fonts_spec.rb +29 -0
- data/spec/fontist/formulas/overpass_font_spec.rb +29 -0
- data/spec/fontist/formulas/source_fonts_spec.rb +31 -0
- data/spec/fontist/formulas/stix_fonts_spec.rb +29 -0
- data/spec/fontist/formulas/tahoma_font_spec.rb +29 -0
- data/spec/fontist/formulas/webding_font_spec.rb +29 -0
- data/spec/fontist/registry_spec.rb +47 -0
- data/spec/fontist/system_font_spec.rb +16 -0
- data/spec/fontist/{downloader_spec.rb → utils/downloader_spec.rb} +8 -8
- data/spec/spec_helper.rb +7 -2
- data/spec/support/fontist_helper.rb +10 -0
- metadata +65 -14
- data/assets/source.yml +0 -54
- data/lib/fontist/downloader.rb +0 -69
- data/lib/fontist/finder.rb +0 -47
- data/lib/fontist/installer.rb +0 -44
- data/lib/fontist/ms_vista_font.rb +0 -83
- data/lib/fontist/source.rb +0 -31
- data/spec/fontist/finder_spec.rb +0 -41
- data/spec/fontist/installer_spec.rb +0 -48
- data/spec/fontist/ms_vista_font_spec.rb +0 -27
- data/spec/fontist/source_spec.rb +0 -13
data/lib/fontist/finder.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
module Fontist
|
2
|
-
class Finder
|
3
|
-
def initialize(name)
|
4
|
-
@name = name
|
5
|
-
end
|
6
|
-
|
7
|
-
def self.find(name)
|
8
|
-
new(name).find
|
9
|
-
end
|
10
|
-
|
11
|
-
def find
|
12
|
-
find_system_font || downloadable_font || raise_invalid_error
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
attr_reader :name
|
18
|
-
|
19
|
-
def find_system_font
|
20
|
-
Fontist::SystemFont.find(name)
|
21
|
-
end
|
22
|
-
|
23
|
-
def remote_source
|
24
|
-
Fontist::Source.all.remote.to_h.select do |key, value|
|
25
|
-
!value.fonts.grep(/#{name}/i).empty?
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def downloadable_font
|
30
|
-
unless remote_source.empty?
|
31
|
-
raise(
|
32
|
-
Fontist::Errors::MissingFontError,
|
33
|
-
"Fonts are missing, please run" \
|
34
|
-
"Fontist::Installer.download(name, confirmation: 'yes') to " \
|
35
|
-
"download these fonts"
|
36
|
-
)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def raise_invalid_error
|
41
|
-
raise(
|
42
|
-
Fontist::Errors::NonSupportedFontError,
|
43
|
-
"Could not find the #{name} font in any of the supported downlodable"
|
44
|
-
)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
data/lib/fontist/installer.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
module Fontist
|
2
|
-
class Installer
|
3
|
-
def initialize(font_name:, confirmation:, **options)
|
4
|
-
@font_name = font_name
|
5
|
-
@confirmation = confirmation.downcase
|
6
|
-
@options = options
|
7
|
-
end
|
8
|
-
|
9
|
-
def download
|
10
|
-
find_system_font || download_font || raise(
|
11
|
-
Fontist::Errors::NonSupportedFontError
|
12
|
-
)
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.download(font_name, confirmation:)
|
16
|
-
new(font_name: font_name, confirmation: confirmation).download
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
attr_reader :font_name, :confirmation, :options
|
22
|
-
|
23
|
-
def downloaders
|
24
|
-
{ msvista: Fontist::MsVistaFont }
|
25
|
-
end
|
26
|
-
|
27
|
-
def find_system_font
|
28
|
-
Fontist::SystemFont.find(font_name)
|
29
|
-
end
|
30
|
-
|
31
|
-
def download_font
|
32
|
-
if font_source
|
33
|
-
downloader = downloaders[font_source.first]
|
34
|
-
downloader.fetch_font(font_name, confirmation: confirmation)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def font_source
|
39
|
-
@font_source ||= Fontist::Source.all.remote.to_h.select do |key, value|
|
40
|
-
!value.fonts.grep(/#{font_name}/i).empty?
|
41
|
-
end.first
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1,83 +0,0 @@
|
|
1
|
-
require "fontist/downloader"
|
2
|
-
|
3
|
-
module Fontist
|
4
|
-
class MsVistaFont
|
5
|
-
def initialize(font_name, confirmation:, fonts_path: nil, **options)
|
6
|
-
@font_name = font_name
|
7
|
-
@confirmation = confirmation || "no"
|
8
|
-
@fonts_path = fonts_path || Fontist.fonts_path
|
9
|
-
@force_download = options.fetch(:force_download, false)
|
10
|
-
|
11
|
-
unless source.agreement === confirmation
|
12
|
-
raise(Fontist::Errors::LicensingError)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.fetch_font(font_name, confirmation:, **options)
|
17
|
-
new(font_name, options.merge(confirmation: confirmation)).fetch
|
18
|
-
end
|
19
|
-
|
20
|
-
def fetch
|
21
|
-
fonts = extract_ppviewer_fonts
|
22
|
-
paths = fonts.grep(/#{font_name}/i)
|
23
|
-
paths.empty? ? nil : paths
|
24
|
-
end
|
25
|
-
|
26
|
-
private
|
27
|
-
|
28
|
-
attr_reader :font_name, :fonts_path, :force_download
|
29
|
-
|
30
|
-
def decompressor
|
31
|
-
@decompressor ||= (
|
32
|
-
require "libmspack"
|
33
|
-
LibMsPack::CabDecompressor.new
|
34
|
-
)
|
35
|
-
end
|
36
|
-
|
37
|
-
def extract_ppviewer_fonts
|
38
|
-
Array.new.tap do |fonts|
|
39
|
-
cabbed_fonts.each do |font|
|
40
|
-
font_path = fonts_path.join(font.filename).to_s
|
41
|
-
decompressor.extract(font, font_path)
|
42
|
-
|
43
|
-
fonts.push(font_path)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def extract_ppviewer_cab_file
|
49
|
-
if !File.exists?(ppviewer_cab) || force_download
|
50
|
-
exe_file = decompressor.search(download_exe_file.path)
|
51
|
-
decompressor.extract(exe_file.files.next, ppviewer_cab)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def cabbed_fonts
|
56
|
-
extract_ppviewer_cab_file
|
57
|
-
grep_cabbed_fonts(decompressor.search(ppviewer_cab).files) || []
|
58
|
-
end
|
59
|
-
|
60
|
-
def grep_cabbed_fonts(file)
|
61
|
-
Array.new.tap do |fonts|
|
62
|
-
while file
|
63
|
-
fonts.push(file) if file.filename.match(/.tt|.TT/)
|
64
|
-
file = file.next
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
def source
|
70
|
-
@source ||= Fontist::Source.all.remote.msvista
|
71
|
-
end
|
72
|
-
|
73
|
-
def download_exe_file
|
74
|
-
Fontist::Downloader.download(
|
75
|
-
source.urls.first, file_size: source.file_size.to_i, sha: source.sha
|
76
|
-
)
|
77
|
-
end
|
78
|
-
|
79
|
-
def ppviewer_cab
|
80
|
-
@ppviewer_cab ||= Fontist.assets_path.join("ppviewer.cab").to_s
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
data/lib/fontist/source.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
require "yaml"
|
2
|
-
require "json"
|
3
|
-
require "ostruct"
|
4
|
-
|
5
|
-
module Fontist
|
6
|
-
class Source
|
7
|
-
def self.all
|
8
|
-
new.all
|
9
|
-
end
|
10
|
-
|
11
|
-
def all
|
12
|
-
source_data
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
def source_data
|
18
|
-
@source_data ||= JSON.parse(
|
19
|
-
yaml_data.to_json, object_class: OpenStruct
|
20
|
-
)
|
21
|
-
end
|
22
|
-
|
23
|
-
def yaml_data
|
24
|
-
YAML.load(File.open(yaml_file))
|
25
|
-
end
|
26
|
-
|
27
|
-
def yaml_file
|
28
|
-
Fontist.assets_path.join("source.yml")
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
data/spec/fontist/finder_spec.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
RSpec.describe Fontist::Finder do
|
4
|
-
describe ".find" do
|
5
|
-
context "with valid font name" do
|
6
|
-
it "returns the fonts path" do
|
7
|
-
name = "DejaVuSerif.ttf"
|
8
|
-
stub_system_font_finder_to_fixture(name)
|
9
|
-
dejavu_ttf = Fontist::Finder.find(name)
|
10
|
-
|
11
|
-
expect(dejavu_ttf.first).to include(name)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
context "with downloadable ms vista font" do
|
16
|
-
it "returns missing font error" do
|
17
|
-
name = "CALIBRI.TTF"
|
18
|
-
allow(Fontist::SystemFont).to receive(:find).and_return(nil)
|
19
|
-
|
20
|
-
expect {
|
21
|
-
Fontist::Finder.find(name)
|
22
|
-
}.to raise_error(Fontist::Errors::MissingFontError)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
context "with invalid font name" do
|
27
|
-
it "raise an missing font error" do
|
28
|
-
font_name = "InvalidFont.ttf"
|
29
|
-
|
30
|
-
expect {
|
31
|
-
Fontist::Finder.find(font_name)
|
32
|
-
}.to raise_error(Fontist::Errors::NonSupportedFontError)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def stub_system_font_finder_to_fixture(name)
|
38
|
-
allow(Fontist::SystemFont).to receive(:find).
|
39
|
-
and_return(["spec/fixtures/fonts/#{name}"])
|
40
|
-
end
|
41
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
RSpec.describe Fontist::Installer do
|
4
|
-
describe ".download" do
|
5
|
-
context "with already downloaded fonts", skip_in_windows: true do
|
6
|
-
it "returns the font path" do
|
7
|
-
name = "CALIBRI.TTF"
|
8
|
-
Fontist::MsVistaFont.fetch_font(name, confirmation: "yes")
|
9
|
-
|
10
|
-
allow(Fontist::MsVistaFont).to receive(:fetch_font).and_return(nil)
|
11
|
-
paths = Fontist::Installer.download(name, confirmation: "yes")
|
12
|
-
|
13
|
-
expect(paths.first).to include("fonts/#{name}")
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context "with missing but downloadable fonts" do
|
18
|
-
it "downloads and install the fonts", skip_in_windows: true do
|
19
|
-
name = "CALIBRI.TTF"
|
20
|
-
confirmation = "yes"
|
21
|
-
allow(Fontist::SystemFont).to receive(:find).and_return(nil)
|
22
|
-
|
23
|
-
paths = Fontist::Installer.download(name, confirmation: confirmation)
|
24
|
-
|
25
|
-
expect(paths.first).to include("fonts/#{name}")
|
26
|
-
end
|
27
|
-
|
28
|
-
it "do not download if user didn't agree" do
|
29
|
-
name = "CALIBRI.TTF"
|
30
|
-
allow(Fontist::SystemFont).to receive(:find).and_return(nil)
|
31
|
-
|
32
|
-
expect {
|
33
|
-
Fontist::Installer.download(name, confirmation: "no")
|
34
|
-
}.to raise_error(Fontist::Errors::LicensingError)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
context "with unsupported fonts" do
|
39
|
-
it "raise an unsupported error" do
|
40
|
-
name = "InvalidFont.ttf"
|
41
|
-
|
42
|
-
expect {
|
43
|
-
Fontist::Installer.download(name, confirmation: "yes")
|
44
|
-
}.to raise_error(Fontist::Errors::NonSupportedFontError)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
RSpec.describe Fontist::MsVistaFont do
|
4
|
-
describe ".fetch_font" do
|
5
|
-
context "with valid licence", api_call: true do
|
6
|
-
it "downloads and returns font paths" do
|
7
|
-
name = "CANDARAI.TTF"
|
8
|
-
fonts = Fontist::MsVistaFont.fetch_font(
|
9
|
-
name, confirmation: "yes", force_download: true
|
10
|
-
)
|
11
|
-
|
12
|
-
expect(fonts.count).to eq(1)
|
13
|
-
expect(fonts.first).to include("CANDARAI.TTF")
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context "with invalid licence agreement" do
|
18
|
-
it "raise an licensing error" do
|
19
|
-
font_name = "CANDARAI.TTF"
|
20
|
-
|
21
|
-
expect {
|
22
|
-
Fontist::MsVistaFont.fetch_font(font_name, confirmation: "no")
|
23
|
-
}.to raise_error(Fontist::Errors::LicensingError)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
data/spec/fontist/source_spec.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
RSpec.describe Fontist::Source do
|
4
|
-
describe ".all" do
|
5
|
-
it "returns all of the dataset" do
|
6
|
-
sources = Fontist::Source.all
|
7
|
-
|
8
|
-
expect(sources.system.linux.paths).not_to be_nil
|
9
|
-
expect(sources.remote.msvista.file_size).to eq("62914560")
|
10
|
-
expect(sources.remote.msvista.fonts).to include("CALIBRI.TTF")
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|