fontist 0.3.0 → 1.2.1

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.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/macosx.yml +1 -1
  3. data/.github/workflows/ubuntu.yml +1 -1
  4. data/.gitignore +4 -2
  5. data/README.md +91 -5
  6. data/lib/fontist.rb +26 -12
  7. data/lib/fontist/errors.rb +3 -1
  8. data/lib/fontist/font.rb +78 -0
  9. data/lib/fontist/font_formula.rb +123 -0
  10. data/lib/fontist/formula.rb +90 -0
  11. data/lib/fontist/formulas.rb +10 -3
  12. data/lib/fontist/formulas/andale_font.rb +80 -0
  13. data/lib/fontist/formulas/arial_black_font.rb +79 -0
  14. data/lib/fontist/formulas/cleartype_fonts.rb +227 -0
  15. data/lib/fontist/formulas/comic_font.rb +78 -0
  16. data/lib/fontist/formulas/courier_font.rb +81 -0
  17. data/lib/fontist/formulas/euphemia_font.rb +85 -0
  18. data/lib/fontist/formulas/georgia_font.rb +80 -0
  19. data/lib/fontist/formulas/impact_font.rb +78 -0
  20. data/lib/fontist/formulas/montserrat_font.rb +132 -0
  21. data/lib/fontist/formulas/ms_truetype_fonts.rb +125 -0
  22. data/lib/fontist/formulas/open_sans_fonts.rb +263 -0
  23. data/lib/fontist/formulas/overpass_font.rb +73 -0
  24. data/lib/fontist/formulas/source_fonts.rb +109 -0
  25. data/lib/fontist/formulas/stix_fonts.rb +108 -0
  26. data/lib/fontist/formulas/tahoma_font.rb +147 -0
  27. data/lib/fontist/formulas/webding_font.rb +78 -0
  28. data/lib/fontist/registry.rb +42 -0
  29. data/lib/fontist/{data/source.yml → system.yml} +5 -6
  30. data/lib/fontist/system_font.rb +27 -11
  31. data/lib/fontist/utils.rb +9 -0
  32. data/lib/fontist/utils/downloader.rb +75 -0
  33. data/lib/fontist/utils/dsl.rb +77 -0
  34. data/lib/fontist/utils/exe_extractor.rb +72 -0
  35. data/lib/fontist/utils/zip_extractor.rb +38 -0
  36. data/lib/fontist/version.rb +1 -1
  37. data/spec/fontist/font_formula_spec.rb +67 -0
  38. data/spec/fontist/font_spec.rb +87 -0
  39. data/spec/fontist/formula_spec.rb +67 -0
  40. data/spec/fontist/formulas/andale_font_spec.rb +29 -0
  41. data/spec/fontist/formulas/arial_black_font_spec.rb +29 -0
  42. data/spec/fontist/formulas/cleartype_fonts_spec.rb +38 -0
  43. data/spec/fontist/formulas/comic_font_spec.rb +29 -0
  44. data/spec/fontist/formulas/courier_font_spec.rb +29 -0
  45. data/spec/fontist/formulas/euphemia_font_spec.rb +29 -0
  46. data/spec/fontist/formulas/georgia_font_spec.rb +29 -0
  47. data/spec/fontist/formulas/impact_font_spec.rb +29 -0
  48. data/spec/fontist/formulas/montserrat_font_spec.rb +29 -0
  49. data/spec/fontist/formulas/ms_truetype_fonts_spec.rb +29 -0
  50. data/spec/fontist/formulas/open_sans_fonts_spec.rb +29 -0
  51. data/spec/fontist/formulas/overpass_font_spec.rb +29 -0
  52. data/spec/fontist/formulas/source_fonts_spec.rb +31 -0
  53. data/spec/fontist/formulas/stix_fonts_spec.rb +29 -0
  54. data/spec/fontist/formulas/tahoma_font_spec.rb +29 -0
  55. data/spec/fontist/formulas/webding_font_spec.rb +29 -0
  56. data/spec/fontist/registry_spec.rb +47 -0
  57. data/spec/fontist/system_font_spec.rb +17 -1
  58. data/spec/fontist/{downloader_spec.rb → utils/downloader_spec.rb} +6 -5
  59. data/spec/spec_helper.rb +4 -2
  60. data/spec/support/fontist_helper.rb +4 -2
  61. metadata +50 -20
  62. data/lib/fontist/data/formulas/ms_vista.yml +0 -39
  63. data/lib/fontist/data/formulas/source_font.yml +0 -51
  64. data/lib/fontist/downloader.rb +0 -70
  65. data/lib/fontist/finder.rb +0 -47
  66. data/lib/fontist/formulas/base.rb +0 -25
  67. data/lib/fontist/formulas/ms_vista.rb +0 -74
  68. data/lib/fontist/formulas/source_font.rb +0 -48
  69. data/lib/fontist/installer.rb +0 -47
  70. data/lib/fontist/source.rb +0 -58
  71. data/spec/fontist/finder_spec.rb +0 -41
  72. data/spec/fontist/formulas/ms_vista_spec.rb +0 -27
  73. data/spec/fontist/formulas/source_font_spec.rb +0 -18
  74. data/spec/fontist/installer_spec.rb +0 -48
  75. data/spec/fontist/source_spec.rb +0 -24
@@ -0,0 +1,87 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Fontist::Font do
4
+ describe ".all" do
5
+ it "list all supported fonts" do
6
+ fonts = Fontist::Font.all
7
+
8
+ expect(fonts.count).to be > 10
9
+ expect(fonts.first.name).not_to be_nil
10
+ expect(fonts.first.styles).not_to be_nil
11
+ end
12
+ end
13
+
14
+ describe ".find" do
15
+ context "with valid font name" do
16
+ it "returns the fonts path" do
17
+ name = "DejaVuSerif.ttf"
18
+ stub_system_font_finder_to_fixture(name)
19
+ dejavu_ttf = Fontist::Font.find(name)
20
+
21
+ expect(dejavu_ttf.first).to include(name)
22
+ end
23
+ end
24
+
25
+ context "with downloadable font name" do
26
+ it "raises font missing error" do
27
+ name = "Courier"
28
+
29
+ allow(Fontist::SystemFont).to receive(:find).and_return(nil)
30
+ expect {
31
+ Fontist::Font.find(name)
32
+ }.to raise_error(Fontist::Errors::MissingFontError)
33
+ end
34
+ end
35
+
36
+ context "with invalid font name" do
37
+ it "raises font unsupported error" do
38
+ font_name = "InvalidFont.ttf"
39
+
40
+ expect {
41
+ Fontist::Font.find(font_name)
42
+ }.to raise_error(Fontist::Errors::NonSupportedFontError)
43
+ end
44
+ end
45
+ end
46
+
47
+ describe ".install" do
48
+ context "with valid font name" do
49
+ it "installs the font and return the paths" do
50
+ name = "Calibri"
51
+
52
+ stub_fontist_path_to_temp_path
53
+ font_paths = Fontist::Font.install(name, confirmation: "yes")
54
+
55
+ expect(font_paths.join("|").downcase).to include("#{name.downcase}.ttf")
56
+ end
57
+ end
58
+
59
+ context "with existing font name" do
60
+ it "returns the existing font paths" do
61
+ name = "Courier"
62
+ stub_fontist_path_to_temp_path
63
+ Fontist::Font.install(name, confirmation: "yes")
64
+
65
+ font_paths = Fontist::Font.install(name, confirmation: "yes")
66
+
67
+ expect(font_paths.count).to be > 3
68
+ expect(Fontist::Formulas::CourierFont).not_to receive(:fetch_font)
69
+ end
70
+ end
71
+
72
+ context "with unsupported fonts" do
73
+ it "raises an unsupported error" do
74
+ name = "Invalid font name"
75
+
76
+ expect {
77
+ Fontist::Font.install(name, confirmation: "yes")
78
+ }.to raise_error(Fontist::Errors::NonSupportedFontError)
79
+ end
80
+ end
81
+ end
82
+
83
+ def stub_system_font_finder_to_fixture(name)
84
+ allow(Fontist::SystemFont).to receive(:find).
85
+ and_return(["spec/fixtures/fonts/#{name}"])
86
+ end
87
+ end
@@ -0,0 +1,67 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Fontist::Formula do
4
+ describe ".find" do
5
+ context "by font name" do
6
+ it "returns the font formulas" do
7
+ name = "Calibri"
8
+
9
+ clear_type = Fontist::Formula.find(name)
10
+
11
+ expect(clear_type.fonts.map(&:name)).to include(name)
12
+ expect(clear_type.installer).to eq("Fontist::Formulas::ClearTypeFonts")
13
+ expect(clear_type.description).to include("Microsoft ClearType Fonts")
14
+ end
15
+ end
16
+
17
+ context "by exact font" do
18
+ it "returns the font formulas" do
19
+ name = "CAMBRIAI.TTF"
20
+
21
+ clear_type = Fontist::Formula.find(name)
22
+ font_files = clear_type.fonts.map { |font| font.styles.map(&:font) }
23
+
24
+ expect(font_files.flatten).to include(name)
25
+ expect(clear_type.installer).to eq("Fontist::Formulas::ClearTypeFonts")
26
+ expect(clear_type.description).to include("Microsoft ClearType Fonts")
27
+ end
28
+ end
29
+
30
+ context "for invalid font" do
31
+ it "returns nil to the caller" do
32
+ name = "Calibri Made Up Name"
33
+ formulas = Fontist::Formula.find(name)
34
+
35
+ expect(formulas).to be_nil
36
+ end
37
+ end
38
+ end
39
+
40
+ describe ".find_fonts" do
41
+ it "returns the exact font font names" do
42
+ name = "Calibri"
43
+ font = Fontist::Formula.find_fonts(name).last
44
+
45
+ expect(font.styles.map(&:font)).to include("CALIBRI.TTF")
46
+ expect(font.styles.map(&:font)).to include("CALIBRIB.TTF")
47
+ expect(font.styles.map(&:font)).to include("CALIBRII.TTF")
48
+ end
49
+
50
+ it "returns nil if invalid name provided" do
51
+ name = "Calibri Invlaid"
52
+ fonts = Fontist::Formula.find_fonts(name)
53
+
54
+ expect(fonts).to be_nil
55
+ end
56
+ end
57
+
58
+ describe ".all" do
59
+ it "returns all registered formulas" do
60
+ formulas = Fontist::Formula.all
61
+
62
+ expect(formulas.cleartype.fonts.count).to be > 10
63
+ expect(formulas.cleartype.homepage).to eq("https://www.microsoft.com")
64
+ expect(formulas.cleartype.description).to eq("Microsoft ClearType Fonts")
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,29 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Fontist::Formulas::AndaleFont do
4
+ describe "initializing" do
5
+ it "builds the data dictionary" do
6
+ formula = Fontist::Formulas::AndaleFont.instance
7
+
8
+ expect(formula.fonts.count).to eq(1)
9
+ expect(formula.fonts.first[:name]).to eq("Andale Mono")
10
+ end
11
+ end
12
+
13
+ describe "installation" do
14
+ context "with valid licence agreement", slow: true do
15
+ it "installs the valid fonts", skip_in_windows: true do
16
+ name = "Andale Mono"
17
+ confirmation = "yes"
18
+
19
+ stub_fontist_path_to_temp_path
20
+ paths = Fontist::Formulas::AndaleFont.fetch_font(
21
+ name, confirmation: confirmation
22
+ )
23
+
24
+ expect(Fontist::Font.find(name)).not_to be_empty
25
+ expect(paths.first).to include("fonts/AndaleMo.TTF")
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Fontist::Formulas::ArialBlackFont do
4
+ describe "initializing" do
5
+ it "builds the data dictionary" do
6
+ formula = Fontist::Formulas::ArialBlackFont.instance
7
+
8
+ expect(formula.fonts.count).to eq(1)
9
+ expect(formula.fonts.first[:name]).to eq("Arial Black")
10
+ end
11
+ end
12
+
13
+ describe "installation" do
14
+ context "with valid licence agreement", slow: true do
15
+ it "installs the valid fonts", skip_in_windows: true do
16
+ name = "Arial Black"
17
+ confirmation = "yes"
18
+
19
+ stub_fontist_path_to_temp_path
20
+ paths = Fontist::Formulas::ArialBlackFont.fetch_font(
21
+ name, confirmation: confirmation
22
+ )
23
+
24
+ expect(Fontist::Font.find(name)).not_to be_empty
25
+ expect(paths.first).to include("fonts/AriBlk.TTF")
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,38 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Fontist::Formulas::ClearTypeFonts do
4
+ describe "initializing" do
5
+ it "builds the data dictionary" do
6
+ formula = Fontist::Formulas::ClearTypeFonts.instance
7
+
8
+ expect(formula.fonts.count).to eq(12)
9
+ expect(formula.fonts[1][:name]).to eq("Cambria Math")
10
+ expect(formula.fonts.first[:name]).to eq("Cambria")
11
+ end
12
+ end
13
+
14
+ describe "installation" do
15
+ context "with valid licence agreement", slow: true do
16
+ it "installs the valid fonts", skip_in_windows: true do
17
+ name = "Calibri"
18
+ confirmation = "yes"
19
+
20
+ paths = Fontist::Formulas::ClearTypeFonts.fetch_font(
21
+ name, confirmation: confirmation
22
+ )
23
+
24
+ expect(paths.first).to include("fonts/#{name.upcase}.TTF")
25
+ end
26
+ end
27
+
28
+ context "with missing licence agreement" do
29
+ it "raises an Fontist::Errors::LicensingError" do
30
+ name = "Calibri"
31
+
32
+ expect {
33
+ Fontist::Formulas::ClearTypeFonts.fetch_font(name, confirmation: "no")
34
+ }.to raise_error(Fontist::Errors::LicensingError)
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,29 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Fontist::Formulas::ComicFont do
4
+ describe "initializing" do
5
+ it "builds the data dictionary" do
6
+ formula = Fontist::Formulas::ComicFont.instance
7
+
8
+ expect(formula.fonts.count).to eq(1)
9
+ expect(formula.fonts.first[:name]).to eq("Comic Sans")
10
+ end
11
+ end
12
+
13
+ describe "installation" do
14
+ context "with valid licence agreement", slow: true do
15
+ it "installs the valid fonts", skip_in_windows: true do
16
+ name = "Comic Sans"
17
+ confirmation = "yes"
18
+
19
+ stub_fontist_path_to_temp_path
20
+ paths = Fontist::Formulas::ComicFont.fetch_font(
21
+ name, confirmation: confirmation
22
+ )
23
+
24
+ expect(Fontist::Font.find(name)).not_to be_empty
25
+ expect(paths.first).to include("fonts/Comicbd.TTF")
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Fontist::Formulas::CourierFont do
4
+ describe "initializing" do
5
+ it "builds the data dictionary" do
6
+ formula = Fontist::Formulas::CourierFont.instance
7
+
8
+ expect(formula.fonts.count).to eq(1)
9
+ expect(formula.fonts.first[:name]).to eq("Courier")
10
+ end
11
+ end
12
+
13
+ describe "installation" do
14
+ context "with valid licence agreement", slow: true do
15
+ it "installs the valid fonts", skip_in_windows: true do
16
+ name = "Courier"
17
+ confirmation = "yes"
18
+
19
+ stub_fontist_path_to_temp_path
20
+ paths = Fontist::Formulas::CourierFont.fetch_font(
21
+ name, confirmation: confirmation
22
+ )
23
+
24
+ expect(Fontist::Font.find(name)).not_to be_empty
25
+ expect(paths.first).to include("fonts/cour.ttf")
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Fontist::Formulas::EuphemiaFont do
4
+ describe "initializing" do
5
+ it "builds the data dictionary" do
6
+ formula = Fontist::Formulas::EuphemiaFont.instance
7
+
8
+ expect(formula.fonts.count).to eq(1)
9
+ expect(formula.fonts.first[:name]).to eq("Euphemia UCAS")
10
+ end
11
+ end
12
+
13
+ describe "installation" do
14
+ context "with valid licence agreement" do
15
+ it "installs the valid fonts" do
16
+ name = "Euphemia UCAS"
17
+ confirmation = "yes"
18
+
19
+ stub_fontist_path_to_temp_path
20
+ paths = Fontist::Formulas::EuphemiaFont.fetch_font(
21
+ name, confirmation: confirmation
22
+ )
23
+
24
+ expect(Fontist::Font.find(name)).not_to be_empty
25
+ expect(paths.first).to include("fonts/#{name} Italic 2.6.6.ttf")
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Fontist::Formulas::GeorgiaFont do
4
+ describe "initializing" do
5
+ it "builds the data dictionary" do
6
+ formula = Fontist::Formulas::GeorgiaFont.instance
7
+
8
+ expect(formula.fonts.count).to eq(1)
9
+ expect(formula.fonts.first[:name]).to eq("Georgia")
10
+ end
11
+ end
12
+
13
+ describe "installation" do
14
+ context "with valid licence agreement", slow: true do
15
+ it "installs the valid fonts", skip_in_windows: true do
16
+ name = "Georgia"
17
+ confirmation = "yes"
18
+
19
+ stub_fontist_path_to_temp_path
20
+ paths = Fontist::Formulas::GeorgiaFont.fetch_font(
21
+ name, confirmation: confirmation
22
+ )
23
+
24
+ expect(Fontist::Font.find(name)).not_to be_empty
25
+ expect(paths.first).to include("fonts/Georgiaz.TTF")
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Fontist::Formulas::ImpactFont do
4
+ describe "initializing" do
5
+ it "builds the data dictionary" do
6
+ formula = Fontist::Formulas::ImpactFont.instance
7
+
8
+ expect(formula.fonts.count).to eq(1)
9
+ expect(formula.fonts.first[:name]).to eq("Impact")
10
+ end
11
+ end
12
+
13
+ describe "installation" do
14
+ context "with valid licence agreement", slow: true do
15
+ it "installs the valid fonts", skip_in_windows: true do
16
+ name = "Impact"
17
+ confirmation = "yes"
18
+
19
+ stub_fontist_path_to_temp_path
20
+ paths = Fontist::Formulas::ImpactFont.fetch_font(
21
+ name, confirmation: confirmation
22
+ )
23
+
24
+ expect(Fontist::Font.find(name)).not_to be_empty
25
+ expect(paths.first).to include("fonts/#{name}.TTF")
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Fontist::Formulas::MontserratFont do
4
+ describe "initializing" do
5
+ it "builds the data dictionary" do
6
+ formula = Fontist::Formulas::MontserratFont.instance
7
+
8
+ expect(formula.fonts.count).to eq(2)
9
+ expect(formula.fonts.first[:name]).to eq("Montserrat")
10
+ end
11
+ end
12
+
13
+ describe "installation" do
14
+ context "with valid licence agreement", slow: true do
15
+ it "installs the valid fonts" do
16
+ name = "Montserrat"
17
+ confirmation = "yes"
18
+
19
+ stub_fontist_path_to_temp_path
20
+ paths = Fontist::Formulas::MontserratFont.fetch_font(
21
+ name, confirmation: confirmation
22
+ )
23
+
24
+ expect(Fontist::Font.find(name)).not_to be_empty
25
+ expect(paths.first).to include("fonts/#{name}-Thin.otf")
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Fontist::Formulas::MsTruetypeFonts do
4
+ describe "initializing" do
5
+ it "builds the data dictionary" do
6
+ formula = Fontist::Formulas::MsTruetypeFonts.instance
7
+
8
+ expect(formula.fonts.count).to eq(4)
9
+ expect(formula.fonts.first[:name]).to eq("Arial")
10
+ end
11
+ end
12
+
13
+ describe "installation" do
14
+ context "with valid licence agreement" do
15
+ it "installs the valid fonts", skip_in_windows: true do
16
+ name = "Arial"
17
+ confirmation = "yes"
18
+
19
+ stub_fontist_path_to_temp_path
20
+ paths = Fontist::Formulas::MsTruetypeFonts.fetch_font(
21
+ name, confirmation: confirmation
22
+ )
23
+
24
+ expect(Fontist::Font.find(name)).not_to be_empty
25
+ expect(paths.first).to include("fonts/#{name}.ttf")
26
+ end
27
+ end
28
+ end
29
+ end