fontist 0.4.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/macosx.yml +1 -1
- data/.github/workflows/ubuntu.yml +1 -1
- data/.gitignore +4 -2
- data/README.md +87 -25
- data/lib/fontist.rb +28 -13
- data/lib/fontist/downloader.rb +11 -11
- data/lib/fontist/errors.rb +1 -0
- data/lib/fontist/font.rb +78 -0
- data/lib/fontist/font_formula.rb +116 -0
- data/lib/fontist/formula.rb +90 -0
- data/lib/fontist/formulas.rb +10 -5
- 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 +225 -0
- data/lib/fontist/formulas/comic_font.rb +77 -0
- data/lib/fontist/formulas/courier_font.rb +67 -12
- 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 +147 -0
- data/lib/fontist/formulas/webding_font.rb +77 -0
- data/lib/fontist/registry.rb +42 -0
- data/lib/fontist/{data/source.yml → system.yml} +0 -7
- data/lib/fontist/system_font.rb +9 -13
- data/lib/fontist/utils.rb +8 -0
- data/lib/fontist/utils/dsl.rb +73 -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/downloader_spec.rb +2 -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 +18 -19
- 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 +6 -6
- data/spec/spec_helper.rb +4 -2
- data/spec/support/fontist_helper.rb +4 -2
- metadata +45 -25
- data/lib/fontist/data/formulas/courier.yml +0 -26
- data/lib/fontist/data/formulas/ms_system.yml +0 -68
- data/lib/fontist/data/formulas/ms_vista.yml +0 -118
- data/lib/fontist/data/formulas/source_font.yml +0 -163
- data/lib/fontist/finder.rb +0 -45
- data/lib/fontist/formula_finder.rb +0 -94
- data/lib/fontist/formulas/base.rb +0 -72
- data/lib/fontist/formulas/helpers/exe_extractor.rb +0 -45
- data/lib/fontist/formulas/helpers/zip_extractor.rb +0 -36
- data/lib/fontist/formulas/ms_system.rb +0 -29
- data/lib/fontist/formulas/ms_vista.rb +0 -42
- data/lib/fontist/formulas/source_font.rb +0 -25
- data/lib/fontist/installer.rb +0 -42
- data/lib/fontist/source.rb +0 -58
- data/spec/fontist/finder_spec.rb +0 -41
- data/spec/fontist/formula_finder_spec.rb +0 -54
- data/spec/fontist/formulas/ms_system_spec.rb +0 -31
- data/spec/fontist/formulas/ms_vista_spec.rb +0 -27
- data/spec/fontist/formulas/source_font_spec.rb +0 -18
- data/spec/fontist/installer_spec.rb +0 -48
- data/spec/fontist/source_spec.rb +0 -24
@@ -1,29 +0,0 @@
|
|
1
|
-
module Fontist
|
2
|
-
module Formulas
|
3
|
-
class MsSystem < Base
|
4
|
-
include Formulas::Helpers::ExeExtractor
|
5
|
-
|
6
|
-
private
|
7
|
-
|
8
|
-
def data_node
|
9
|
-
@data_node ||= "ms_system"
|
10
|
-
end
|
11
|
-
|
12
|
-
def check_user_license_agreement
|
13
|
-
unless resources(data_node).agreement === confirmation
|
14
|
-
raise(Fontist::Errors::LicensingError)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def extract_fonts(font_names)
|
19
|
-
resources(data_node) do |resource|
|
20
|
-
cab_extract(resource) do |fonts_dir|
|
21
|
-
font_names.each do |font_name|
|
22
|
-
match_fonts(fonts_dir, font_name)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
module Fontist
|
2
|
-
module Formulas
|
3
|
-
class MsVista < Base
|
4
|
-
include Formulas::Helpers::ExeExtractor
|
5
|
-
|
6
|
-
private
|
7
|
-
|
8
|
-
def data_node
|
9
|
-
@data_node ||= "msvista"
|
10
|
-
end
|
11
|
-
|
12
|
-
def check_user_license_agreement
|
13
|
-
unless resources(data_node).agreement === confirmation
|
14
|
-
raise(Fontist::Errors::LicensingError)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def extract_fonts(font_names)
|
19
|
-
resources(data_node) do |resource|
|
20
|
-
exe_extract(resource) do |cab_file|
|
21
|
-
cab_extract(cab_file, download: false) do |fonts_dir|
|
22
|
-
font_names.each do |font_name|
|
23
|
-
match_fonts(fonts_dir, font_name)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def exe_extract(source)
|
31
|
-
cab_files = decompressor.search(download_file(source).path)
|
32
|
-
decompressor.extract(cab_files.files.next, ppviewer_cab)
|
33
|
-
|
34
|
-
yield(ppviewer_cab) if block_given?
|
35
|
-
end
|
36
|
-
|
37
|
-
def ppviewer_cab
|
38
|
-
@ppviewer_cab ||= Fontist.assets_path.join("ppviewer.cab").to_s
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require "zip"
|
2
|
-
|
3
|
-
module Fontist
|
4
|
-
module Formulas
|
5
|
-
class SourceFont < Formulas::Base
|
6
|
-
include Formulas::Helpers::ZipExtractor
|
7
|
-
|
8
|
-
private
|
9
|
-
|
10
|
-
def data_node
|
11
|
-
@data_node ||= "source_font"
|
12
|
-
end
|
13
|
-
|
14
|
-
def extract_fonts(font_names)
|
15
|
-
resources(data_node) do |resource|
|
16
|
-
zip_extract(resource, fonts_sub_dir: "fonts/") do |fonts_paths|
|
17
|
-
font_names.each do |font_name|
|
18
|
-
match_fonts(fonts_paths, font_name)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
data/lib/fontist/installer.rb
DELETED
@@ -1,42 +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 find_system_font
|
24
|
-
Fontist::SystemFont.find(font_name)
|
25
|
-
end
|
26
|
-
|
27
|
-
def font_formulas
|
28
|
-
Fontist::FormulaFinder.find(font_name)
|
29
|
-
end
|
30
|
-
|
31
|
-
def download_font
|
32
|
-
if font_formulas
|
33
|
-
font_formulas.map do |formula|
|
34
|
-
formula[:installer].fetch_font(
|
35
|
-
font_name,
|
36
|
-
confirmation: confirmation,
|
37
|
-
)
|
38
|
-
end.flatten
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
data/lib/fontist/source.rb
DELETED
@@ -1,58 +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 self.formulas
|
12
|
-
new.formulas
|
13
|
-
end
|
14
|
-
|
15
|
-
def all
|
16
|
-
source_data
|
17
|
-
end
|
18
|
-
|
19
|
-
def formulas
|
20
|
-
formulas_data
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def source_data
|
26
|
-
@source_data ||= parse_to_object(yaml_data)
|
27
|
-
end
|
28
|
-
|
29
|
-
def parse_to_object(data)
|
30
|
-
JSON.parse(data.to_json, object_class: OpenStruct)
|
31
|
-
end
|
32
|
-
|
33
|
-
def formulas_data
|
34
|
-
@formulas_data ||= parse_to_object(load_formulas)
|
35
|
-
end
|
36
|
-
|
37
|
-
def load_formulas
|
38
|
-
Hash.new.tap do |formulas|
|
39
|
-
source_data.remote.formulas.map do |formula_file|
|
40
|
-
formula_data = yaml_data(formula_file)
|
41
|
-
|
42
|
-
if formula_data
|
43
|
-
key = formula_data.keys.first
|
44
|
-
formulas[key] = formula_data[key]
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def yaml_file(file)
|
51
|
-
Fontist.data_path.join(file)
|
52
|
-
end
|
53
|
-
|
54
|
-
def yaml_data(file_name = "source.yml")
|
55
|
-
YAML.load(File.open(yaml_file(file_name)))
|
56
|
-
end
|
57
|
-
end
|
58
|
-
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"
|
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,54 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
RSpec.describe Fontist::FormulaFinder do
|
4
|
-
describe ".find" do
|
5
|
-
context "by font name" do
|
6
|
-
it "returns the font formulas" do
|
7
|
-
name = "Calibri"
|
8
|
-
formulas = Fontist::FormulaFinder.find(name)
|
9
|
-
|
10
|
-
expect(formulas.count).to eq(1)
|
11
|
-
expect(formulas.first[:key]).to eq("msvista")
|
12
|
-
expect(formulas.first[:installer]).to eq(Fontist::Formulas::MsVista)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
context "by exact font" do
|
17
|
-
it "returns the font formulas" do
|
18
|
-
name = "CAMBRIAI.TTF"
|
19
|
-
formulas = Fontist::FormulaFinder.find(name)
|
20
|
-
|
21
|
-
expect(formulas.count).to eq(1)
|
22
|
-
expect(formulas.first[:key]).to eq("msvista")
|
23
|
-
expect(formulas.first[:installer]).to eq(Fontist::Formulas::MsVista)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
context "for invalid font" do
|
28
|
-
it "returns nil to the caller" do
|
29
|
-
name = "Calibri Made Up Name"
|
30
|
-
formulas = Fontist::FormulaFinder.find(name)
|
31
|
-
|
32
|
-
expect(formulas).to be_nil
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe ".find_fonts" do
|
38
|
-
it "returns the exact font font names" do
|
39
|
-
name = "Calibri"
|
40
|
-
font = Fontist::FormulaFinder.find_fonts(name).first
|
41
|
-
|
42
|
-
expect(font.styles.map(&:font)).to include("CALIBRI.TTF")
|
43
|
-
expect(font.styles.map(&:font)).to include("CALIBRIB.TTF")
|
44
|
-
expect(font.styles.map(&:font)).to include("CALIBRII.TTF")
|
45
|
-
end
|
46
|
-
|
47
|
-
it "returns nil if invalid name provided" do
|
48
|
-
name = "Calibri Invlaid"
|
49
|
-
fonts = Fontist::FormulaFinder.find_fonts(name)
|
50
|
-
|
51
|
-
expect(fonts).to be_nil
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
RSpec.describe Fontist::Formulas::MsSystem do
|
4
|
-
describe ".fetch_font" do
|
5
|
-
context "with valid licence", skip_in_windows: false do
|
6
|
-
it "downloads and returns font paths", file_download: true do
|
7
|
-
name = "Times"
|
8
|
-
stub_fontist_path_to_assets
|
9
|
-
|
10
|
-
fonts = Fontist::Formulas::MsSystem.fetch_font(
|
11
|
-
name, confirmation: "yes"
|
12
|
-
)
|
13
|
-
|
14
|
-
expect(fonts).not_to be_empty
|
15
|
-
expect(fonts.first).to include(name)
|
16
|
-
expect(Fontist::Finder.find(name)).not_to be_empty
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
context "with invalid licence agreement" do
|
21
|
-
it "raise an licensing error" do
|
22
|
-
font_name = "Times"
|
23
|
-
stub_fontist_path_to_assets
|
24
|
-
|
25
|
-
expect {
|
26
|
-
Fontist::Formulas::MsSystem.fetch_font(font_name, confirmation: "no")
|
27
|
-
}.to raise_error(Fontist::Errors::LicensingError)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
RSpec.describe Fontist::Formulas::MsVista do
|
4
|
-
describe ".fetch_font" do
|
5
|
-
context "with valid licence" do
|
6
|
-
it "downloads and returns font paths", file_download: true do
|
7
|
-
name = "CANDARAI.TTF"
|
8
|
-
fonts = Fontist::Formulas::MsVista.fetch_font(
|
9
|
-
name, confirmation: "yes"
|
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::Formulas::MsVista.fetch_font(font_name, confirmation: "no")
|
23
|
-
}.to raise_error(Fontist::Errors::LicensingError)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
RSpec.describe Fontist::Formulas::SourceFont do
|
4
|
-
describe ".fetch_font" do
|
5
|
-
it "downloads and extract out fonts", file_download: true do
|
6
|
-
name = "SourceCodePro"
|
7
|
-
stub_fontist_path_to_assets
|
8
|
-
|
9
|
-
fonts = Fontist::Formulas::SourceFont.fetch_font(
|
10
|
-
name, confirmation: "yes", force_download: true,
|
11
|
-
)
|
12
|
-
|
13
|
-
expect(fonts).not_to be_empty
|
14
|
-
expect(fonts.first).to include(name)
|
15
|
-
expect(Fontist::Finder.find(name)).not_to be_empty
|
16
|
-
end
|
17
|
-
end
|
18
|
-
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", file_download: true do
|
7
|
-
name = "Arial"
|
8
|
-
Fontist::Formulas::MsVista.fetch_font(name, confirmation: "yes")
|
9
|
-
|
10
|
-
allow(Fontist::Formulas::MsVista).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 = "Arial"
|
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"
|
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
|
data/spec/fontist/source_spec.rb
DELETED
@@ -1,24 +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.system.macosx.paths).not_to be_nil
|
10
|
-
expect(sources.system.windows.paths).not_to be_nil
|
11
|
-
expect(sources.remote.formulas.first).to include("./formulas")
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe ".formulas" do
|
16
|
-
it "returns all available dataset" do
|
17
|
-
formulas = Fontist::Source.formulas
|
18
|
-
|
19
|
-
expect(formulas.msvista.license).not_to be_nil
|
20
|
-
expect(formulas.msvista.file_size).to eq("62914560")
|
21
|
-
expect(formulas.msvista.fonts.map(&:name)).to include("Calibri")
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|