fontist 1.7.3 → 1.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/release.yml +38 -0
  3. data/.github/workflows/rspec.yml +58 -0
  4. data/README.md +34 -4
  5. data/{bin → exe}/fontist +0 -0
  6. data/fontist.gemspec +3 -2
  7. data/lib/fontist.rb +5 -2
  8. data/lib/fontist/cli.rb +53 -38
  9. data/lib/fontist/errors.rb +14 -12
  10. data/lib/fontist/font.rb +25 -27
  11. data/lib/fontist/font_installer.rb +114 -0
  12. data/lib/fontist/fontist_font.rb +3 -49
  13. data/lib/fontist/formula.rb +101 -35
  14. data/lib/fontist/formula_paths.rb +43 -0
  15. data/lib/fontist/helpers.rb +7 -0
  16. data/lib/fontist/import/google_check.rb +1 -1
  17. data/lib/fontist/import/google_import.rb +3 -4
  18. data/lib/fontist/import/otfinfo_generate.rb +1 -1
  19. data/lib/fontist/import/recursive_extraction.rb +5 -1
  20. data/lib/fontist/index.rb +72 -0
  21. data/lib/fontist/index_formula.rb +30 -0
  22. data/lib/fontist/manifest/install.rb +4 -5
  23. data/lib/fontist/manifest/locations.rb +9 -1
  24. data/lib/fontist/system_font.rb +2 -29
  25. data/lib/fontist/system_index.rb +1 -1
  26. data/lib/fontist/utils/exe_extractor.rb +1 -1
  27. data/lib/fontist/utils/zip_extractor.rb +1 -1
  28. data/lib/fontist/version.rb +1 -1
  29. metadata +27 -19
  30. data/.github/workflows/macosx.yml +0 -33
  31. data/.github/workflows/ubuntu.yml +0 -30
  32. data/.github/workflows/windows.yml +0 -32
  33. data/bin/check_google +0 -8
  34. data/bin/console +0 -11
  35. data/bin/convert_formulas +0 -8
  36. data/bin/generate_otfinfo +0 -8
  37. data/bin/import_google +0 -8
  38. data/bin/rspec +0 -29
  39. data/bin/setup +0 -7
  40. data/lib/fontist/font_formula.rb +0 -169
  41. data/lib/fontist/formula_template.rb +0 -122
  42. data/lib/fontist/formulas.rb +0 -56
  43. data/lib/fontist/registry.rb +0 -43
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: bfbc7b0d13e8084d44fe41d69ff1719a203a375cd75970cf8efa0abd2cd711af
4
- data.tar.gz: 1a259f0e45ea264ca55c1e112cb25bd672f41532ae82c58989cf368f058d2374
2
+ SHA1:
3
+ metadata.gz: 0d083618f330800ccb94e30d93fa8b5bf65d5e0a
4
+ data.tar.gz: 133e64a85156c8fa5dcfc284ef57b3047fdbec0e
5
5
  SHA512:
6
- metadata.gz: 82a25bf83f43b02f1e8a77717d9d240ebd55910bc0c529ce0ff09d434cad829c862c8db9564597159a3214b6cffa9dce2ee8f64a6f841f5dc589e10571a94c44
7
- data.tar.gz: 91771cd423b516b6db27db7ef5e55cd24f01bea9fb368aa4331e0bc75a887e3df35d84a4fa08748e98bc41a16d8f80861cf584ff9cc6a61e938c3b7392ee94ee
6
+ metadata.gz: f5a33afe8b4157afadbaa8530e39de7a0b51222904101c396668e6e5d030fc51f6895f9f60478d9a32dc46af1bda7f1cef1aff0f27e2bc10bc3ae0e7b661d71f
7
+ data.tar.gz: 3b1d0e38e2b42cf5e24f568cec75a34666ff7b3a98b36b673969365a4ec87b4add38b5fe3dac79a16871596d19b9454eac9fd6ada0097764a26af364f7fd5fee
@@ -0,0 +1,38 @@
1
+ name: release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+
8
+ jobs:
9
+ release:
10
+ runs-on: ubuntu-18.04
11
+ steps:
12
+ - uses: actions/checkout@v1
13
+
14
+ - uses: ruby/setup-ruby@v1
15
+ with:
16
+ ruby-version: '2.6'
17
+
18
+ - run: bundle config set path 'vendor/bundle'
19
+
20
+ - run: bundle install --jobs 4 --retry 3
21
+
22
+ - run: bundle exec rspec --tag ~dev
23
+ env:
24
+ TEST_ENV: CI
25
+
26
+ - name: Publish to rubygems.org
27
+ env:
28
+ RUBYGEMS_API_KEY: ${{secrets.FONTIST_CI_RUBYGEMS_API_KEY}}
29
+ run: |
30
+ gem install gem-release
31
+ touch ~/.gem/credentials
32
+ cat > ~/.gem/credentials << EOF
33
+ ---
34
+ :rubygems_api_key: ${RUBYGEMS_API_KEY}
35
+ EOF
36
+ chmod 0600 ~/.gem/credentials
37
+ git status
38
+ gem release
@@ -0,0 +1,58 @@
1
+ name: rspec
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+
8
+ jobs:
9
+ build:
10
+ name: Test on Ruby ${{ matrix.ruby }} ${{ matrix.os }}
11
+ runs-on: ${{ matrix.os }}
12
+ continue-on-error: ${{ matrix.experimental }}
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ ruby: [ '2.6', '2.5', '2.4' ]
17
+ os: [ ubuntu-latest, windows-latest, macos-latest ]
18
+ experimental: [ false ]
19
+ include:
20
+ - ruby: '2.7'
21
+ os: 'ubuntu-latest'
22
+ experimental: true
23
+ - ruby: '2.7'
24
+ os: 'windows-latest'
25
+ experimental: true
26
+ - ruby: '2.7'
27
+ os: 'macos-latest'
28
+ experimental: true
29
+
30
+ steps:
31
+ - uses: actions/checkout@master
32
+
33
+ - uses: ruby/setup-ruby@v1
34
+ with:
35
+ ruby-version: ${{ matrix.ruby }}
36
+
37
+ - uses: actions/cache@v1
38
+ with:
39
+ path: vendor/bundle
40
+ key: bundle-${{ matrix.os }}-${{ matrix.ruby }}-${{ hashFiles('**/*.gemspec') }}
41
+ restore-keys: bundle-${{ matrix.os }}-${{ matrix.ruby }}
42
+
43
+ - if: matrix.os == 'macos-latest'
44
+ run: brew install lcdf-typetools
45
+
46
+ - run: bundle config set path 'vendor/bundle'
47
+
48
+ - run: bundle install --jobs 4 --retry 3
49
+
50
+ - if: matrix.os == 'macos-latest'
51
+ run: bundle exec rspec
52
+ env:
53
+ TEST_ENV: CI
54
+
55
+ - if: matrix.os != 'macos-latest'
56
+ run: bundle exec rspec --tag ~dev
57
+ env:
58
+ TEST_ENV: CI
data/README.md CHANGED
@@ -44,7 +44,7 @@ can we find a font in your system.
44
44
 
45
45
  #### Finding a font
46
46
 
47
- The `Fontist::Fontist.find` interface can be used a find a font in your system.
47
+ The `Fontist::Font.find` interface can be used a find a font in your system.
48
48
  It will look into the operating system specific font directories, and also the
49
49
  fontist specific `~/.fontist` directory.
50
50
 
@@ -249,7 +249,7 @@ Prints installed font paths grouped by formula and font.
249
249
 
250
250
  ```
251
251
  $ fontist status "segoe ui"
252
- Fontist::Formulas::SegoeUIFont
252
+ segoe_ui
253
253
  Segoe UI
254
254
  Regular (/Users/user/.fontist/fonts/SEGOEUI.TTF)
255
255
  Bold (/Users/user/.fontist/fonts/SEGOEUIB.TTF)
@@ -263,7 +263,7 @@ Lists installation status of fonts supported by Fontist.
263
263
 
264
264
  ```
265
265
  $ fontist list "segoe ui"
266
- Fontist::Formulas::SegoeUIFont
266
+ segoe_ui
267
267
  Segoe UI
268
268
  Regular (installed)
269
269
  Bold (installed)
@@ -273,7 +273,7 @@ Fontist::Formulas::SegoeUIFont
273
273
 
274
274
  ```
275
275
  $ fontist list "roboto mono"
276
- Fontist::Formulas::RobotoMonoFont
276
+ google/roboto_mono
277
277
  Roboto Mono
278
278
  Regular (uninstalled)
279
279
  Italic (uninstalled)
@@ -395,8 +395,22 @@ archive:
395
395
  ```sh
396
396
  fontist create-formula https://www.latofonts.com/download/lato2ofl-zip/
397
397
  cp lato.yml ~/.fontist/formulas/Formulas/
398
+ ```
399
+
400
+ A formula index should be rebuild, when a new formula is generated or an
401
+ existing one changed:
402
+
403
+ ```sh
404
+ fontist rebuild-index
405
+ ```
406
+
407
+ Then, both the formula and the updated index should be commited and pushed to
408
+ the formula repository:
409
+
410
+ ```sh
398
411
  cd ~/.fontist/formulas
399
412
  git add Formulas/lato.yml
413
+ git add index.yml
400
414
  git commit -m "Add Lato formula"
401
415
  ```
402
416
 
@@ -420,6 +434,22 @@ git commit -m "Google Fonts update"
420
434
  git push
421
435
  ```
422
436
 
437
+ ### Releasing
438
+
439
+ Releasing is done automatically with GitHub Action. Just bump and tag with `gem-release`.
440
+
441
+ For a patch release (0.0.x) use:
442
+
443
+ ```sh
444
+ gem bump --version patch --tag --push
445
+ ```
446
+
447
+ For a minor release (0.x.0) use:
448
+
449
+ ```sh
450
+ gem bump --version minor --tag --push
451
+ ```
452
+
423
453
  ## Contributing
424
454
 
425
455
  First, thank you for contributing! We love pull requests from everyone. By
File without changes
@@ -21,9 +21,9 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.require_paths = ["lib"]
23
23
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
24
- f.match(%r{^(test|spec|features)/})
24
+ f.match(%r{^(bin|test|spec|features)/})
25
25
  end
26
- spec.bindir = "bin"
26
+ spec.bindir = "exe"
27
27
  spec.executables = ["fontist"]
28
28
  spec.test_files = `git ls-files -- {spec}/*`.split("\n")
29
29
 
@@ -39,6 +39,7 @@ Gem::Specification.new do |spec|
39
39
  spec.add_development_dependency "extract_ttc", "~> 0.1"
40
40
  spec.add_development_dependency "pry"
41
41
  spec.add_development_dependency "bundler", "~> 2.0"
42
+ spec.add_development_dependency "gem-release"
42
43
  spec.add_development_dependency "rake", "~> 12.3.3"
43
44
  spec.add_development_dependency "rspec", "~> 3.0"
44
45
  spec.add_development_dependency "rubocop", "0.75.0"
@@ -8,12 +8,11 @@ require "fontist/errors"
8
8
  require "fontist/version"
9
9
 
10
10
  require "fontist/font"
11
- require "fontist/registry"
12
- require "fontist/formulas"
13
11
  require "fontist/formula"
14
12
  require "fontist/system_font"
15
13
  require "fontist/fontist_font"
16
14
  require "fontist/manifest"
15
+ require "fontist/helpers"
17
16
 
18
17
  module Fontist
19
18
  def self.ui
@@ -59,4 +58,8 @@ module Fontist
59
58
  def self.system_index_path
60
59
  Fontist.fontist_path.join("system_index.yml")
61
60
  end
61
+
62
+ def self.formula_index_path
63
+ Fontist.formulas_repo_path.join("index.yml")
64
+ end
62
65
  end
@@ -3,7 +3,22 @@ require "thor"
3
3
  module Fontist
4
4
  class CLI < Thor
5
5
  STATUS_SUCCESS = 0
6
- STATUS_ERROR = 1
6
+ STATUS_UNKNOWN_ERROR = 1
7
+ STATUS_NON_SUPPORTED_FONT_ERROR = 2
8
+ STATUS_MISSING_FONT_ERROR = 3
9
+ STATUS_LICENSING_ERROR = 4
10
+ STATUS_MANIFEST_COULD_NOT_BE_FOUND_ERROR = 5
11
+ STATUS_MANIFEST_COULD_NOT_BE_READ_ERROR = 6
12
+
13
+ ERROR_TO_STATUS = {
14
+ Fontist::Errors::NonSupportedFontError => [STATUS_NON_SUPPORTED_FONT_ERROR],
15
+ Fontist::Errors::MissingFontError => [STATUS_MISSING_FONT_ERROR],
16
+ Fontist::Errors::LicensingError => [STATUS_LICENSING_ERROR],
17
+ Fontist::Errors::ManifestCouldNotBeFoundError => [STATUS_MANIFEST_COULD_NOT_BE_FOUND_ERROR,
18
+ "Manifest could not be found."],
19
+ Fontist::Errors::ManifestCouldNotBeReadError => [STATUS_MANIFEST_COULD_NOT_BE_READ_ERROR,
20
+ "Manifest could not be read."],
21
+ }.freeze
7
22
 
8
23
  def self.exit_on_failure?
9
24
  false
@@ -19,9 +34,9 @@ module Fontist
19
34
  force: options[:force],
20
35
  confirmation: options[:confirm_license] ? "yes" : "no"
21
36
  )
22
- STATUS_SUCCESS
23
- rescue Fontist::Errors::NonSupportedFontError
24
- could_not_find_font(font)
37
+ success
38
+ rescue Fontist::Errors::GeneralError => e
39
+ handle_error(e)
25
40
  end
26
41
 
27
42
  desc "uninstall/remove FONT", "Uninstall font by font or formula"
@@ -29,26 +44,21 @@ module Fontist
29
44
  fonts_paths = Fontist::Font.uninstall(font)
30
45
  Fontist.ui.success("These fonts are removed:")
31
46
  Fontist.ui.success(fonts_paths.join("\n"))
32
- STATUS_SUCCESS
33
- rescue Fontist::Errors::MissingFontError => e
34
- Fontist.ui.error(e.message)
35
- STATUS_ERROR
36
- rescue Fontist::Errors::NonSupportedFontError
37
- could_not_find_font(font)
47
+ success
48
+ rescue Fontist::Errors::GeneralError => e
49
+ handle_error(e)
38
50
  end
39
51
  map remove: :uninstall
40
52
 
41
53
  desc "status [FONT]", "Show status of FONT or all fonts in fontist"
42
54
  def status(font = nil)
43
55
  formulas = Fontist::Font.status(font)
44
- return error("No font is installed.") if formulas.empty?
56
+ return error("No font is installed.", STATUS_MISSING_FONT_ERROR) if formulas.empty?
45
57
 
46
58
  print_formulas(formulas)
47
59
  success
48
- rescue Fontist::Errors::MissingFontError => e
49
- error(e.message)
50
- rescue Fontist::Errors::NonSupportedFontError
51
- could_not_find_font(font)
60
+ rescue Fontist::Errors::GeneralError => e
61
+ handle_error(e)
52
62
  end
53
63
 
54
64
  desc "list [FONT]", "List installation status of FONT or fonts in fontist"
@@ -56,15 +66,15 @@ module Fontist
56
66
  formulas = Fontist::Font.list(font)
57
67
  print_list(formulas)
58
68
  success
59
- rescue Fontist::Errors::NonSupportedFontError
60
- could_not_find_font(font)
69
+ rescue Fontist::Errors::GeneralError => e
70
+ handle_error(e)
61
71
  end
62
72
 
63
73
  desc "update", "Update formulas"
64
74
  def update
65
- Formulas.fetch_formulas
75
+ Formula.update_formulas_repo
66
76
  Fontist.ui.say("Formulas have been successfully updated")
67
- STATUS_SUCCESS
77
+ success
68
78
  end
69
79
 
70
80
  desc "manifest-locations MANIFEST",
@@ -73,10 +83,8 @@ module Fontist
73
83
  paths = Fontist::Manifest::Locations.from_file(manifest)
74
84
  print_yaml(paths)
75
85
  success
76
- rescue Fontist::Errors::ManifestCouldNotBeFoundError
77
- error("Manifest could not be found.")
78
- rescue Fontist::Errors::ManifestCouldNotBeReadError
79
- error("Manifest could not be read.")
86
+ rescue Fontist::Errors::GeneralError => e
87
+ handle_error(e)
80
88
  end
81
89
 
82
90
  desc "manifest-install MANIFEST", "Install fonts from MANIFEST (yaml)"
@@ -89,10 +97,8 @@ module Fontist
89
97
 
90
98
  print_yaml(paths)
91
99
  success
92
- rescue Fontist::Errors::ManifestCouldNotBeFoundError
93
- error("Manifest could not be found.")
94
- rescue Fontist::Errors::ManifestCouldNotBeReadError
95
- error("Manifest could not be read.")
100
+ rescue Fontist::Errors::GeneralError => e
101
+ handle_error(e)
96
102
  end
97
103
 
98
104
  desc "create-formula URL", "Create a new formula with fonts from URL"
@@ -104,6 +110,17 @@ module Fontist
104
110
  require "fontist/import/create_formula"
105
111
  name = Fontist::Import::CreateFormula.new(url, options).call
106
112
  Fontist.ui.say("#{name} formula has been successfully created")
113
+ success
114
+ end
115
+
116
+ desc "rebuild-index", "Rebuild formula index (used by formulas maintainers)"
117
+ long_desc <<-LONGDESC
118
+ This index is pre-built and served with formulas, so there is no need
119
+ update it unless something changes in the formulas repo.
120
+ LONGDESC
121
+ def rebuild_index
122
+ Fontist::Index.rebuild
123
+ Fontist.ui.say("Formula index has been rebuilt.")
107
124
  STATUS_SUCCESS
108
125
  end
109
126
 
@@ -113,18 +130,16 @@ module Fontist
113
130
  STATUS_SUCCESS
114
131
  end
115
132
 
116
- def could_not_find_font(font)
117
- error("Font '#{font}' not found locally nor available in the Fontist " \
118
- "formula repository.\n" \
119
- "Perhaps it is available at the latest Fontist formula " \
120
- "repository.\n" \
121
- "You can update the formula repository using the command " \
122
- "`fontist update` and try again.")
133
+ def handle_error(exception)
134
+ status, message = ERROR_TO_STATUS[exception.class]
135
+ raise exception unless status
136
+
137
+ error(message || exception.message, status)
123
138
  end
124
139
 
125
- def error(message)
140
+ def error(message, status)
126
141
  Fontist.ui.error(message)
127
- STATUS_ERROR
142
+ status
128
143
  end
129
144
 
130
145
  def print_yaml(object)
@@ -133,7 +148,7 @@ module Fontist
133
148
 
134
149
  def print_formulas(formulas)
135
150
  formulas.each do |formula, fonts|
136
- Fontist.ui.success(formula.installer)
151
+ Fontist.ui.success(formula.key)
137
152
 
138
153
  fonts.each do |font, styles|
139
154
  Fontist.ui.success(" #{font.name}")
@@ -148,7 +163,7 @@ module Fontist
148
163
  # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
149
164
  def print_list(formulas)
150
165
  formulas.each do |formula, fonts|
151
- Fontist.ui.say(formula.installer)
166
+ Fontist.ui.say(formula.key)
152
167
 
153
168
  fonts.each do |font, styles|
154
169
  Fontist.ui.say(" #{font.name}")
@@ -1,16 +1,18 @@
1
1
  module Fontist
2
2
  module Errors
3
- class LicensingError < StandardError; end
4
- class MissingFontError < StandardError; end
5
- class NonSupportedFontError < StandardError; end
6
- class TamperedFileError < StandardError; end
7
- class InvalidResourceError < StandardError; end
8
- class TimeoutError < StandardError; end
9
- class MissingAttributeError < StandardError; end
10
- class UnknownFontTypeError < StandardError; end
11
- class FontNotFoundError < StandardError; end
12
- class BinaryCallError < StandardError; end
13
- class ManifestCouldNotBeReadError < StandardError; end
14
- class ManifestCouldNotBeFoundError < StandardError; end
3
+ class GeneralError < StandardError; end
4
+ class BinaryCallError < GeneralError; end
5
+ class FontNotFoundError < GeneralError; end
6
+ class FormulaIndexNotFoundError < GeneralError; end
7
+ class InvalidResourceError < GeneralError; end
8
+ class LicensingError < GeneralError; end
9
+ class ManifestCouldNotBeFoundError < GeneralError; end
10
+ class ManifestCouldNotBeReadError < GeneralError; end
11
+ class MissingAttributeError < GeneralError; end
12
+ class MissingFontError < GeneralError; end
13
+ class NonSupportedFontError < GeneralError; end
14
+ class TamperedFileError < GeneralError; end
15
+ class TimeoutError < GeneralError; end
16
+ class UnknownFontTypeError < GeneralError; end
15
17
  end
16
18
  end
@@ -1,3 +1,5 @@
1
+ require "fontist/font_installer"
2
+
1
3
  module Fontist
2
4
  class Font
3
5
  def initialize(options = {})
@@ -20,10 +22,6 @@ module Fontist
20
22
  new(name: name, confirmation: confirmation, force: force).install
21
23
  end
22
24
 
23
- def self.try_install(name, confirmation: "no")
24
- new(name: name, confirmation: confirmation).try_install
25
- end
26
-
27
25
  def self.uninstall(name)
28
26
  new(name: name).uninstall
29
27
  end
@@ -37,43 +35,31 @@ module Fontist
37
35
  end
38
36
 
39
37
  def find
40
- find_system_font || downloadable_font || raise(
41
- Fontist::Errors::NonSupportedFontError
42
- )
38
+ find_system_font || downloadable_font || raise_non_supported_font
43
39
  end
44
40
 
45
41
  def install
46
- (find_system_font unless @force) || download_font || raise(
47
- Fontist::Errors::NonSupportedFontError
48
- )
49
- end
50
-
51
- def try_install
52
- download_font
42
+ (find_system_font unless @force) || download_font || raise_non_supported_font
53
43
  end
54
44
 
55
45
  def uninstall
56
- uninstall_font || downloadable_font || raise(
57
- Fontist::Errors::NonSupportedFontError
58
- )
46
+ uninstall_font || downloadable_font || raise_non_supported_font
59
47
  end
60
48
 
61
49
  def status
62
50
  return installed_statuses unless @name
63
51
 
64
- font_status || downloadable_font || raise(
65
- Fontist::Errors::NonSupportedFontError
66
- )
52
+ font_status || downloadable_font || raise_non_supported_font
67
53
  end
68
54
 
69
55
  def list
70
56
  return all_list unless @name
71
57
 
72
- font_list || raise(Fontist::Errors::NonSupportedFontError)
58
+ font_list || raise_non_supported_font
73
59
  end
74
60
 
75
61
  def all
76
- Fontist::Formula.all.to_h.map { |_name, formula| formula.fonts }.flatten
62
+ Fontist::Formula.all.map(&:fonts).flatten
77
63
  end
78
64
 
79
65
  private
@@ -101,7 +87,7 @@ module Fontist
101
87
  end
102
88
 
103
89
  def font_installer(formula)
104
- Object.const_get(formula.installer)
90
+ FontInstaller.new(formula)
105
91
  end
106
92
 
107
93
  def formula
@@ -122,8 +108,7 @@ module Fontist
122
108
  def download_font
123
109
  if formula
124
110
  check_and_confirm_required_license(formula)
125
- paths = font_installer(formula).fetch_font(name,
126
- confirmation: confirmation)
111
+ paths = font_installer(formula).install(confirmation: confirmation)
127
112
 
128
113
  Fontist.ui.say("Fonts installed at:")
129
114
  paths.each do |path|
@@ -186,7 +171,7 @@ module Fontist
186
171
  end
187
172
 
188
173
  def all_formulas
189
- Fontist::Formula.all.to_h.values
174
+ Fontist::Formula.all
190
175
  end
191
176
 
192
177
  def font_status
@@ -213,7 +198,9 @@ module Fontist
213
198
  end
214
199
 
215
200
  def path(style)
216
- font_paths.grep(/#{style.font}/i).first
201
+ font_paths.detect do |path|
202
+ File.basename(path) == style.font
203
+ end
217
204
  end
218
205
 
219
206
  def font_paths
@@ -247,5 +234,16 @@ module Fontist
247
234
  def installed(style)
248
235
  path(style) ? true : false
249
236
  end
237
+
238
+ def raise_non_supported_font
239
+ raise Fontist::Errors::NonSupportedFontError.new(
240
+ "Font '#{@name}' not found locally nor available in the Fontist " \
241
+ "formula repository.\n" \
242
+ "Perhaps it is available at the latest Fontist formula " \
243
+ "repository.\n" \
244
+ "You can update the formula repository using the command " \
245
+ "`fontist update` and try again."
246
+ )
247
+ end
250
248
  end
251
249
  end