fontist 1.20.0 → 1.21.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -16,7 +16,15 @@ module Fontist
16
16
  end
17
17
 
18
18
  def self.level
19
- @level || default_level
19
+ @level ||= env_level || default_level
20
+ end
21
+
22
+ def self.env_level
23
+ ENV["FONTIST_LOG"]&.to_sym
24
+ end
25
+
26
+ def self.debug?
27
+ log_levels.include?(:debug)
20
28
  end
21
29
 
22
30
  def self.default_level
@@ -50,7 +58,7 @@ module Fontist
50
58
  end
51
59
 
52
60
  def self.debug(message)
53
- new.say(message) if log_levels.include?(:debug)
61
+ new.say(message) if debug?
54
62
  end
55
63
 
56
64
  def self.log_levels
@@ -1,3 +1,3 @@
1
1
  module Fontist
2
- VERSION = "1.20.0".freeze
2
+ VERSION = "1.21.2".freeze
3
3
  end
data/lib/fontist.rb CHANGED
@@ -49,7 +49,7 @@ module Fontist
49
49
  end
50
50
 
51
51
  def self.formulas_version
52
- "v3"
52
+ "v4"
53
53
  end
54
54
 
55
55
  def self.formulas_repo_url
@@ -159,4 +159,8 @@ module Fontist
159
159
  def self.interactive=(bool)
160
160
  @interactive = bool
161
161
  end
162
+
163
+ def self.google_fonts_key
164
+ ENV["GOOGLE_FONTS_API_KEY"] || config[:google_fonts_key]
165
+ end
162
166
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fontist
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.20.0
4
+ version: 1.21.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-03-05 00:00:00.000000000 Z
11
+ date: 2024-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: down
@@ -113,6 +113,9 @@ dependencies:
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.2'
118
+ - - ">="
116
119
  - !ruby/object:Gem::Version
117
120
  version: 1.2.1
118
121
  type: :runtime
@@ -120,6 +123,9 @@ dependencies:
120
123
  version_requirements: !ruby/object:Gem::Requirement
121
124
  requirements:
122
125
  - - "~>"
126
+ - !ruby/object:Gem::Version
127
+ version: '1.2'
128
+ - - ">="
123
129
  - !ruby/object:Gem::Version
124
130
  version: 1.2.1
125
131
  - !ruby/object:Gem::Dependency
@@ -347,6 +353,7 @@ extensions: []
347
353
  extra_rdoc_files: []
348
354
  files:
349
355
  - ".github/workflows/deploy-pages.yml"
356
+ - ".github/workflows/release.yml"
350
357
  - ".github/workflows/tebako-pack.yml"
351
358
  - ".github/workflows/test-and-release.yml"
352
359
  - ".gitignore"
@@ -377,6 +384,7 @@ files:
377
384
  - lib/fontist/cache_cli.rb
378
385
  - lib/fontist/cli.rb
379
386
  - lib/fontist/cli/class_options.rb
387
+ - lib/fontist/cli/thor_ext.rb
380
388
  - lib/fontist/collection_file.rb
381
389
  - lib/fontist/config.rb
382
390
  - lib/fontist/config_cli.rb
@@ -401,9 +409,8 @@ files:
401
409
  - lib/fontist/import/formula_builder.rb
402
410
  - lib/fontist/import/formula_serializer.rb
403
411
  - lib/fontist/import/google.rb
404
- - lib/fontist/import/google/new_fonts_fetcher.rb
405
- - lib/fontist/import/google/skiplist.yml
406
- - lib/fontist/import/google_check.rb
412
+ - lib/fontist/import/google/api.rb
413
+ - lib/fontist/import/google/create_google_formula.rb
407
414
  - lib/fontist/import/google_import.rb
408
415
  - lib/fontist/import/helpers/hash_helper.rb
409
416
  - lib/fontist/import/helpers/system_helper.rb
@@ -433,6 +440,8 @@ files:
433
440
  - lib/fontist/manifest/locations.rb
434
441
  - lib/fontist/repo.rb
435
442
  - lib/fontist/repo_cli.rb
443
+ - lib/fontist/resources/archive_resource.rb
444
+ - lib/fontist/resources/google_resource.rb
436
445
  - lib/fontist/style_version.rb
437
446
  - lib/fontist/system.yml
438
447
  - lib/fontist/system_font.rb
@@ -468,7 +477,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
468
477
  - !ruby/object:Gem::Version
469
478
  version: '0'
470
479
  requirements: []
471
- rubygems_version: 3.3.26
480
+ rubygems_version: 3.3.27
472
481
  signing_key:
473
482
  specification_version: 4
474
483
  summary: Install openly-licensed fonts on Windows, Linux and Mac!
@@ -1,146 +0,0 @@
1
- require_relative "../google"
2
- require_relative "../otf_parser"
3
-
4
- module Fontist
5
- module Import
6
- module Google
7
- class NewFontsFetcher
8
- REPO_PATH = Fontist.fontist_path.join("google", "fonts")
9
- REPO_URL = "https://github.com/google/fonts.git".freeze
10
- SKIPLIST_PATH = File.expand_path("skiplist.yml", __dir__)
11
-
12
- def initialize(logging: false, limit: nil)
13
- @logging = logging
14
- @limit = limit
15
- end
16
-
17
- def call
18
- update_repo
19
- fetch_new_paths
20
- end
21
-
22
- private
23
-
24
- def update_repo
25
- if Dir.exist?(REPO_PATH)
26
- `cd #{REPO_PATH} && git pull`
27
- else
28
- FileUtils.mkdir_p(File.dirname(REPO_PATH))
29
- `git clone --depth 1 #{REPO_URL} #{REPO_PATH}`
30
- end
31
- end
32
-
33
- def fetch_new_paths
34
- new_paths = []
35
-
36
- fetch_fonts_paths.each do |path|
37
- new = log_font(path) do
38
- new?(path)
39
- end
40
-
41
- next unless new
42
-
43
- new_paths << path
44
- return new_paths if @limit && new_paths.size >= @limit
45
- end
46
-
47
- new_paths
48
- end
49
-
50
- def fetch_fonts_paths
51
- Dir[File.join(REPO_PATH, "apache", "*"),
52
- File.join(REPO_PATH, "ofl", "*"),
53
- File.join(REPO_PATH, "ufl", "*")].sort
54
- end
55
-
56
- def log_font(path)
57
- return yield unless @logging
58
-
59
- print "#{path}, "
60
- new = yield
61
- puts(new ? "new" : "skipped")
62
- new
63
- end
64
-
65
- def new?(path)
66
- metadata_name = Google.metadata_name(path)
67
- return unless metadata_name
68
- return if in_skiplist?(metadata_name)
69
- return if up_to_date?(metadata_name, path)
70
- return unless downloadable?(metadata_name)
71
-
72
- true
73
- end
74
-
75
- def in_skiplist?(name)
76
- @skiplist ||= YAML.safe_load(File.open(SKIPLIST_PATH))
77
- @skiplist.include?(name)
78
- end
79
-
80
- def up_to_date?(metadata_name, path)
81
- formula = formula(metadata_name)
82
- return false unless formula
83
-
84
- repo_digest_up_to_date?(formula, path) ||
85
- fonts_up_to_date?(formula, path)
86
- end
87
-
88
- def repo_digest_up_to_date?(formula, path)
89
- return unless formula.digest
90
-
91
- formula.digest == Google.digest(path)
92
- end
93
-
94
- def fonts_up_to_date?(formula, path)
95
- styles = formula_styles(formula)
96
- repo_fonts(path).all? do |font|
97
- style = styles.find { |s| s.font == repo_to_archive_name(font) }
98
- return false unless style
99
-
100
- otfinfo_version(font) == style.version
101
- end
102
- end
103
-
104
- def formula_styles(formula)
105
- formula.fonts.map(&:styles).flatten
106
- end
107
-
108
- def repo_fonts(path)
109
- Dir.glob(File.join(path, "*.{ttf,otf}"))
110
- end
111
-
112
- def repo_to_archive_name(font_path)
113
- File.basename(font_path)
114
- .sub("[wght]", "-VariableFont_wght")
115
- .sub("[opsz]", "-Regular-VariableFont_opsz")
116
- end
117
-
118
- def formula(font_name)
119
- path = Fontist::Import::Google.formula_path(font_name)
120
- Formula.new_from_file(path) if File.exist?(path)
121
- end
122
-
123
- def otfinfo_version(path)
124
- info = OtfParser.new(path).call
125
- Fontist::Import::Google.style_version(info["Version"])
126
- end
127
-
128
- def downloadable?(name)
129
- retries ||= 0
130
- retries += 1
131
- Down.open("https://fonts.google.com/download?family=#{name}")
132
- true
133
- rescue Down::NotFound
134
- false
135
- rescue Down::ClientError => e
136
- raise unless e.message == "403 Forbidden"
137
-
138
- false
139
- rescue Down::TimeoutError
140
- retry unless retries >= 3
141
- false
142
- end
143
- end
144
- end
145
- end
146
- end
@@ -1,12 +0,0 @@
1
- - Montserrat
2
- - Montserrat Alternates
3
- - Overpass
4
- - Overpass Mono
5
- - Lato
6
- - Open Sans
7
- - Work Sans
8
- - Fira Code
9
- - Andika
10
- - Harmattan
11
- - Padauk
12
- - STIX Two Math
@@ -1,27 +0,0 @@
1
- require_relative "google/new_fonts_fetcher"
2
-
3
- module Fontist
4
- module Import
5
- class GoogleCheck
6
- def call
7
- fonts = new_fonts
8
- indicate(fonts)
9
- end
10
-
11
- private
12
-
13
- def new_fonts
14
- Fontist::Import::Google::NewFontsFetcher.new(logging: true).call
15
- end
16
-
17
- def indicate(new_paths)
18
- return if new_paths.empty?
19
-
20
- puts "New fonts are available in:"
21
- new_paths.each do |path|
22
- puts path
23
- end
24
- end
25
- end
26
- end
27
- end