fontist 0.2.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) 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 -3
  5. data/README.md +91 -5
  6. data/fontist.gemspec +1 -0
  7. data/lib/fontist.rb +26 -8
  8. data/lib/fontist/errors.rb +3 -0
  9. data/lib/fontist/font.rb +78 -0
  10. data/lib/fontist/font_formula.rb +123 -0
  11. data/lib/fontist/formula.rb +90 -0
  12. data/lib/fontist/formulas.rb +15 -0
  13. data/lib/fontist/formulas/andale_font.rb +79 -0
  14. data/lib/fontist/formulas/arial_black_font.rb +78 -0
  15. data/lib/fontist/formulas/cleartype_fonts.rb +226 -0
  16. data/lib/fontist/formulas/comic_font.rb +77 -0
  17. data/lib/fontist/formulas/courier_font.rb +80 -0
  18. data/lib/fontist/formulas/euphemia_font.rb +85 -0
  19. data/lib/fontist/formulas/georgia_font.rb +79 -0
  20. data/lib/fontist/formulas/impact_font.rb +77 -0
  21. data/lib/fontist/formulas/montserrat_font.rb +132 -0
  22. data/lib/fontist/formulas/ms_truetype_fonts.rb +124 -0
  23. data/lib/fontist/formulas/open_sans_fonts.rb +263 -0
  24. data/lib/fontist/formulas/overpass_font.rb +73 -0
  25. data/lib/fontist/formulas/source_fonts.rb +109 -0
  26. data/lib/fontist/formulas/stix_fonts.rb +108 -0
  27. data/lib/fontist/formulas/tahoma_font.rb +146 -0
  28. data/lib/fontist/formulas/webding_font.rb +77 -0
  29. data/lib/fontist/registry.rb +42 -0
  30. data/lib/fontist/system.yml +17 -0
  31. data/lib/fontist/system_font.rb +19 -12
  32. data/lib/fontist/utils.rb +9 -0
  33. data/lib/fontist/utils/downloader.rb +74 -0
  34. data/lib/fontist/utils/dsl.rb +77 -0
  35. data/lib/fontist/utils/exe_extractor.rb +72 -0
  36. data/lib/fontist/utils/zip_extractor.rb +38 -0
  37. data/lib/fontist/version.rb +1 -1
  38. data/spec/fontist/font_formula_spec.rb +67 -0
  39. data/spec/fontist/font_spec.rb +87 -0
  40. data/spec/fontist/formula_spec.rb +67 -0
  41. data/spec/fontist/formulas/andale_font_spec.rb +29 -0
  42. data/spec/fontist/formulas/arial_black_font_spec.rb +29 -0
  43. data/spec/fontist/formulas/cleartype_fonts_spec.rb +38 -0
  44. data/spec/fontist/formulas/comic_font_spec.rb +29 -0
  45. data/spec/fontist/formulas/courier_font_spec.rb +29 -0
  46. data/spec/fontist/formulas/euphemia_font_spec.rb +29 -0
  47. data/spec/fontist/formulas/georgia_font_spec.rb +29 -0
  48. data/spec/fontist/formulas/impact_font_spec.rb +29 -0
  49. data/spec/fontist/formulas/montserrat_font_spec.rb +29 -0
  50. data/spec/fontist/formulas/ms_truetype_fonts_spec.rb +29 -0
  51. data/spec/fontist/formulas/open_sans_fonts_spec.rb +29 -0
  52. data/spec/fontist/formulas/overpass_font_spec.rb +29 -0
  53. data/spec/fontist/formulas/source_fonts_spec.rb +31 -0
  54. data/spec/fontist/formulas/stix_fonts_spec.rb +29 -0
  55. data/spec/fontist/formulas/tahoma_font_spec.rb +29 -0
  56. data/spec/fontist/formulas/webding_font_spec.rb +29 -0
  57. data/spec/fontist/registry_spec.rb +47 -0
  58. data/spec/fontist/system_font_spec.rb +16 -0
  59. data/spec/fontist/{downloader_spec.rb → utils/downloader_spec.rb} +8 -8
  60. data/spec/spec_helper.rb +7 -2
  61. data/spec/support/fontist_helper.rb +10 -0
  62. metadata +65 -14
  63. data/assets/source.yml +0 -54
  64. data/lib/fontist/downloader.rb +0 -69
  65. data/lib/fontist/finder.rb +0 -47
  66. data/lib/fontist/installer.rb +0 -44
  67. data/lib/fontist/ms_vista_font.rb +0 -83
  68. data/lib/fontist/source.rb +0 -31
  69. data/spec/fontist/finder_spec.rb +0 -41
  70. data/spec/fontist/installer_spec.rb +0 -48
  71. data/spec/fontist/ms_vista_font_spec.rb +0 -27
  72. data/spec/fontist/source_spec.rb +0 -13
@@ -0,0 +1,29 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Fontist::Formulas::StixFont do
4
+ describe "initializing" do
5
+ it "builds the data dictionary" do
6
+ formula = Fontist::Formulas::StixFont.instance
7
+
8
+ expect(formula.fonts.count).to eq(2)
9
+ expect(formula.fonts.first[:name]).to eq("STIX Two Math")
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 = "STIX Two Math"
17
+ confirmation = "yes"
18
+
19
+ stub_fontist_path_to_temp_path
20
+ paths = Fontist::Formulas::StixFont.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/STIX2Math.otf")
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Fontist::Formulas::TahomaFont do
4
+ describe "initializing" do
5
+ it "builds the data dictionary" do
6
+ formula = Fontist::Formulas::TahomaFont.instance
7
+
8
+ expect(formula.fonts.count).to eq(1)
9
+ expect(formula.fonts.first[:name]).to eq("Tahoma")
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 = "Tahoma"
17
+ confirmation = "yes"
18
+
19
+ stub_fontist_path_to_temp_path
20
+ paths = Fontist::Formulas::TahomaFont.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.downcase}.ttf")
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Fontist::Formulas::WebdingFont do
4
+ describe "initializing" do
5
+ it "builds the data dictionary" do
6
+ formula = Fontist::Formulas::WebdingFont.instance
7
+
8
+ expect(formula.fonts.count).to eq(1)
9
+ expect(formula.fonts.first[:name]).to eq("Webdings")
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 = "Webdings"
17
+ confirmation = "yes"
18
+
19
+ stub_fontist_path_to_temp_path
20
+ paths = Fontist::Formulas::WebdingFont.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,47 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Fontist::Registry do
4
+ describe ".register" do
5
+ context "with no key provided" do
6
+ it "registers a fontist formula with default key" do
7
+ Fontist::Registry.register(Fontist::Formulas::DemoFormula)
8
+ demo_formula = Fontist::Registry.formulas.demo_formula
9
+
10
+ expect(demo_formula.license).to eq("Vendor specific font licences")
11
+ expect(demo_formula.fonts.first.styles.first.type).to eq("Regular")
12
+ expect(demo_formula.installer).to eq("Fontist::Formulas::DemoFormula")
13
+ expect(demo_formula.homepage).to eq("https://github.com/fontist/fontist")
14
+ end
15
+ end
16
+
17
+ context "with custom key provided" do
18
+ it "registers the formula with this custom key" do
19
+ Fontist::Registry.register(Fontist::Formulas::DemoFormula, :custom_key)
20
+
21
+ expect(Fontist::Registry.formulas.custom_key).not_to be_nil
22
+ end
23
+ end
24
+ end
25
+
26
+ module Fontist
27
+ module Formulas
28
+ class DemoFormula < FontFormula
29
+ key :demo_formula
30
+ desc "Demo font formula"
31
+ homepage "https://github.com/fontist/fontist"
32
+ requires_license_agreement "Vendor specific font licences"
33
+
34
+ resource "demo-formula" do
35
+ urls [ "https://github.com/fontist/fontist" ]
36
+ sha256 "594e0f42e6581add4dead70c1dfb9"
37
+ file_size "1234567890"
38
+ end
39
+
40
+ provides_font "Demo font", match_styles_from_file: {
41
+ "Regular" => "demo-font.ttf",
42
+ "Italic" => "demo-fonti.ttf"
43
+ }
44
+ end
45
+ end
46
+ end
47
+ end
@@ -12,7 +12,23 @@ RSpec.describe Fontist::SystemFont do
12
12
  end
13
13
  end
14
14
 
15
+ context "with valid font name" do
16
+ it "returns the complete font path", slow: true do
17
+ name = "Calibri"
18
+ stub_fontist_path_to_temp_path
19
+ Fontist::Formulas::ClearTypeFonts.fetch_font(name, confirmation: "yes")
20
+
21
+ calbiri = Fontist::SystemFont.find(name, sources: [font_sources])
22
+ expect(calbiri.join("|").downcase).to include("#{name.downcase}.ttf")
23
+ end
24
+ end
25
+
15
26
  context "with invalid font" do
27
+ it "returns nil for partial-not match" do
28
+ name = "Deje"
29
+ expect(Fontist::SystemFont.find(name)).to be_nil
30
+ end
31
+
16
32
  it "returns nill to the caller" do
17
33
  name = "invalid-font.ttf"
18
34
  invalid_font = Fontist::SystemFont.find(name, sources: [font_sources])
@@ -1,9 +1,9 @@
1
1
  require "spec_helper"
2
2
 
3
- RSpec.describe Fontist::Downloader do
4
- describe ".download", api_call: true do
3
+ RSpec.describe Fontist::Utils::Downloader do
4
+ describe ".download" do
5
5
  it "return the valid downloaded file" do
6
- tempfile = Fontist::Downloader.download(
6
+ tempfile = Fontist::Utils::Downloader.download(
7
7
  sample_file[:file],
8
8
  sha: sample_file[:sha],
9
9
  file_size: sample_file[:file_size],
@@ -15,20 +15,20 @@ RSpec.describe Fontist::Downloader do
15
15
 
16
16
  it "raises an error for tempared file" do
17
17
  expect{
18
- Fontist::Downloader.download(
18
+ Fontist::Utils::Downloader.download(
19
19
  sample_file[:file],
20
20
  sha: sample_file[:sha] + "mm",
21
21
  file_size: sample_file[:file_size]
22
22
  )
23
- }.to raise_error(Fontist::Error, "Invalid / Tempared file")
23
+ }.to raise_error(Fontist::Errors::TemparedFileError)
24
24
  end
25
25
  end
26
26
 
27
27
  def sample_file
28
28
  @sample_file ||= {
29
- file_size: 10132625,
30
- file: "https://unsplash.com/photos/ZXHgEIWELYA/download?force=true",
31
- sha: "b701889c51802f6f382206e6d0aa3509c8f98e10f26bd0725ae91d93e148fe7a"
29
+ file_size: 150899,
30
+ file: "https://drive.google.com/u/0/uc?id=1Kk-rpLyQk98ubgxhTRKD2ZkMoY9KqKXk&export=download",
31
+ sha: "5e513e4bfdada0ff10dd5b96414fcaeade84e235ce043865416ad7673cb6f3d8"
32
32
  }
33
33
  end
34
34
  end
@@ -1,15 +1,20 @@
1
1
  require "bundler/setup"
2
2
  require "fontist"
3
3
 
4
+ Dir["./spec/support/**/*.rb"].sort.each { |file| require file }
5
+
4
6
  RSpec.configure do |config|
5
7
  # Enable flags like --only-failures and --next-failure
6
8
  config.example_status_persistence_file_path = ".rspec_status"
9
+ config.include Fontist::Helper
7
10
 
8
11
  # Disable RSpec exposing methods globally on `Module` and `main`
9
12
  config.disable_monkey_patching!
10
13
 
11
- # Skip the actual API calls by default
12
- config.filter_run_excluding api_call: true
14
+ # Skip the slow tests locally
15
+ unless ENV.fetch("TEST_ENV", "local").upcase === "CI"
16
+ config.filter_run_excluding slow: true
17
+ end
13
18
 
14
19
  config.expect_with :rspec do |c|
15
20
  c.syntax = :expect
@@ -0,0 +1,10 @@
1
+ module Fontist
2
+ module Helper
3
+ def stub_fontist_path_to_temp_path
4
+ allow(Fontist).to receive(:fontist_path).and_return(
5
+ Fontist.root_path.join("spec", "fixtures")
6
+ )
7
+ end
8
+ end
9
+ end
10
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fontist
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-05-03 00:00:00.000000000 Z
12
+ date: 2020-07-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: down
@@ -39,6 +39,20 @@ dependencies:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
41
  version: 0.1.0
42
+ - !ruby/object:Gem::Dependency
43
+ name: rubyzip
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: 2.3.0
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: 2.3.0
42
56
  - !ruby/object:Gem::Dependency
43
57
  name: pry
44
58
  requirement: !ruby/object:Gem::Requirement
@@ -112,30 +126,67 @@ files:
112
126
  - LICENSE.txt
113
127
  - README.md
114
128
  - Rakefile
115
- - assets/fonts/.keep
116
- - assets/source.yml
117
129
  - bin/console
118
130
  - bin/rspec
119
131
  - bin/setup
120
132
  - fontist.gemspec
121
133
  - lib/fontist.rb
122
- - lib/fontist/downloader.rb
123
134
  - lib/fontist/errors.rb
124
- - lib/fontist/finder.rb
125
- - lib/fontist/installer.rb
126
- - lib/fontist/ms_vista_font.rb
127
- - lib/fontist/source.rb
135
+ - lib/fontist/font.rb
136
+ - lib/fontist/font_formula.rb
137
+ - lib/fontist/formula.rb
138
+ - lib/fontist/formulas.rb
139
+ - lib/fontist/formulas/andale_font.rb
140
+ - lib/fontist/formulas/arial_black_font.rb
141
+ - lib/fontist/formulas/cleartype_fonts.rb
142
+ - lib/fontist/formulas/comic_font.rb
143
+ - lib/fontist/formulas/courier_font.rb
144
+ - lib/fontist/formulas/euphemia_font.rb
145
+ - lib/fontist/formulas/georgia_font.rb
146
+ - lib/fontist/formulas/impact_font.rb
147
+ - lib/fontist/formulas/montserrat_font.rb
148
+ - lib/fontist/formulas/ms_truetype_fonts.rb
149
+ - lib/fontist/formulas/open_sans_fonts.rb
150
+ - lib/fontist/formulas/overpass_font.rb
151
+ - lib/fontist/formulas/source_fonts.rb
152
+ - lib/fontist/formulas/stix_fonts.rb
153
+ - lib/fontist/formulas/tahoma_font.rb
154
+ - lib/fontist/formulas/webding_font.rb
155
+ - lib/fontist/registry.rb
156
+ - lib/fontist/system.yml
128
157
  - lib/fontist/system_font.rb
158
+ - lib/fontist/utils.rb
159
+ - lib/fontist/utils/downloader.rb
160
+ - lib/fontist/utils/dsl.rb
161
+ - lib/fontist/utils/exe_extractor.rb
162
+ - lib/fontist/utils/zip_extractor.rb
129
163
  - lib/fontist/version.rb
130
164
  - spec/fixtures/fonts/DejaVuSerif.ttf
131
- - spec/fontist/downloader_spec.rb
132
- - spec/fontist/finder_spec.rb
133
- - spec/fontist/installer_spec.rb
134
- - spec/fontist/ms_vista_font_spec.rb
135
- - spec/fontist/source_spec.rb
165
+ - spec/fontist/font_formula_spec.rb
166
+ - spec/fontist/font_spec.rb
167
+ - spec/fontist/formula_spec.rb
168
+ - spec/fontist/formulas/andale_font_spec.rb
169
+ - spec/fontist/formulas/arial_black_font_spec.rb
170
+ - spec/fontist/formulas/cleartype_fonts_spec.rb
171
+ - spec/fontist/formulas/comic_font_spec.rb
172
+ - spec/fontist/formulas/courier_font_spec.rb
173
+ - spec/fontist/formulas/euphemia_font_spec.rb
174
+ - spec/fontist/formulas/georgia_font_spec.rb
175
+ - spec/fontist/formulas/impact_font_spec.rb
176
+ - spec/fontist/formulas/montserrat_font_spec.rb
177
+ - spec/fontist/formulas/ms_truetype_fonts_spec.rb
178
+ - spec/fontist/formulas/open_sans_fonts_spec.rb
179
+ - spec/fontist/formulas/overpass_font_spec.rb
180
+ - spec/fontist/formulas/source_fonts_spec.rb
181
+ - spec/fontist/formulas/stix_fonts_spec.rb
182
+ - spec/fontist/formulas/tahoma_font_spec.rb
183
+ - spec/fontist/formulas/webding_font_spec.rb
184
+ - spec/fontist/registry_spec.rb
136
185
  - spec/fontist/system_font_spec.rb
186
+ - spec/fontist/utils/downloader_spec.rb
137
187
  - spec/fontist_spec.rb
138
188
  - spec/spec_helper.rb
189
+ - spec/support/fontist_helper.rb
139
190
  homepage: https://github.com/fontist/fontist
140
191
  licenses:
141
192
  - BSD-2-Clause
@@ -1,54 +0,0 @@
1
- system:
2
- linux:
3
- paths:
4
- - /usr/share/fonts/**/**.{ttf,ttc}
5
-
6
- windows:
7
- paths:
8
- - C:/Windows/Fonts/**/**.{ttc,ttf}
9
-
10
- macosx:
11
- paths:
12
- - /System/Library/Fonts/**/**.{ttf,ttc}
13
-
14
- unix:
15
- paths:
16
- - /usr/share/fonts/**/**.{ttf,ttc}
17
-
18
- remote:
19
- msvista:
20
- agreement: "yes"
21
-
22
- fonts:
23
- - CALIBRI.TTF
24
- - CALIBRII.TTF
25
- - CAMBRIA.TTC
26
- - CAMBRIAI.TTF
27
- - CANDARA.TTF
28
- - CANDARAI.TTF
29
- - CONSOLA.TTF
30
- - CONSOLAI.TTF
31
- - CONSTAN.TTF
32
- - CONSTANI.TTF
33
- - CORBEL.TTF
34
- - CORBELI.TTF
35
- - MEIRYO.TTC
36
- - CALIBRIB.TTF
37
- - CALIBRIZ.TTF
38
- - CAMBRIAB.TTF
39
- - CAMBRIAZ.TTF
40
- - CANDARAB.TTF
41
- - CANDARAZ.TTF
42
- - CONSOLAB.TTF
43
- - CONSOLAZ.TTF
44
- - CONSTANB.TTF
45
- - CONSTANZ.TTF
46
- - CORBELB.TTF
47
- - CORBELZ.TTF
48
- - MEIRYOB.TTC
49
-
50
- file_size: "62914560"
51
- sha: "249473568eba7a1e4f95498acba594e0f42e6581add4dead70c1dfb908a09423"
52
- urls:
53
- - "https://www.dropbox.com/s/dl/6lclhxpydwgkjzh/PowerPointViewer.exe?dl=1"
54
- - "https://web.archive.org/web/20171225132744/http://download.microsoft.com/download/E/6/7/E675FFFC-2A6D-4AB0-B3EB-27C9F8C8F696/PowerPointViewer.exe"
@@ -1,69 +0,0 @@
1
- require "down"
2
- require "digest"
3
-
4
- module Fontist
5
- class Downloader
6
- def initialize(file, file_size: nil, sha: nil)
7
- @sha = sha
8
- @file = file
9
- @file_size = file_size || default_file_size
10
- end
11
-
12
- def download
13
- file = download_file
14
- verify_file_checksum(file) || raise_invalid_file
15
- end
16
-
17
- def verify_file_checksum(file)
18
- file if Digest::SHA256.file(file) === sha
19
- end
20
-
21
- def raise_invalid_file
22
- raise(Fontist::Error, "Invalid / Tempared file")
23
- end
24
-
25
- def self.download(file, options = {})
26
- new(file, options).download
27
- end
28
-
29
- private
30
-
31
- attr_reader :file, :sha, :file_size
32
-
33
- def default_file_size
34
- 5 * byte_to_megabyte
35
- end
36
-
37
- def byte_to_megabyte
38
- @byte_to_megabyte ||= 1024 * 1024
39
- end
40
-
41
- def download_path
42
- options[:download_path] || Fontist.root_path.join("tmp")
43
- end
44
-
45
- def download_file
46
- bar = ProgressBar.new(file_size / byte_to_megabyte)
47
-
48
- Down.download(
49
- @file,
50
- progress_proc: -> (progress) {
51
- bar.increment(progress / byte_to_megabyte)
52
- }
53
- )
54
- end
55
- end
56
-
57
- class ProgressBar
58
- def initialize(total)
59
- @counter = 1
60
- @total = total
61
- end
62
-
63
- def increment(progress)
64
- complete = sprintf("%#.2f%%", ((@counter.to_f / @total.to_f) * 100))
65
- print "\r\e[0KDownloads: #{@counter}MB/#{@total}MB (#{complete})"
66
- @counter = progress
67
- end
68
- end
69
- end