metanorma-cli 1.3.8.1pre → 1.4.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 93a7bec949aa815fdeceb45ee6bbcb4e2f0d15590801122a45c27965295f7add
4
- data.tar.gz: 9e878d05171e287f968b0276f817c447db831fda158c48d8d9f47a21fc7c36b9
3
+ metadata.gz: 612b4c15af1376248ef7a54ff2b9391644359954d06d998079955ef691946aeb
4
+ data.tar.gz: dd83cfa8bbeab98dd8699c90f0d7bbd65923afa6548436cfc87f5352e1df0133
5
5
  SHA512:
6
- metadata.gz: bb8131a26ec352775675ec11a8672f5eed4781fbb2f61953de654e87e1d902446aac690da849de73a5ebe44074991389811118ef794bd4fc1428b58e40f745ea
7
- data.tar.gz: fd06fc9bf029476d4c7ce552bbfae6a9c9ae618b8fd59ae9692f136994044660e0a930de6f303d5cf4251d3b1423f9f73cf9de7c72dff5c13b56b6f7f9399f43
6
+ metadata.gz: 1ce6b2cf16551c745b456fee569ee4a58aed0c66142ee4c7b6a37cc6e57199ebf89a9fe2b725317dfd8e69e865e43e2985c87d2151fe6cd8a8fe23a85daa23b5
7
+ data.tar.gz: 7133934960cc61e6f41364b6001d77ff28f1f798cf558d606fbdcc17fe7755e960a82b084f929e5f0d1daf1bcefc858920ed7b55e05b20083470766ec1754383
data/Gemfile CHANGED
@@ -4,6 +4,7 @@ Encoding.default_internal = Encoding::UTF_8
4
4
  source "https://rubygems.org"
5
5
  git_source(:github) { |repo| "https://github.com/#{repo}" }
6
6
 
7
+
7
8
  gemspec
8
9
 
9
10
  if File.exist? 'Gemfile.devel'
@@ -285,6 +285,21 @@ repository.
285
285
  metanorma template-repo add my-iso https://github.com/you/my-iso-template
286
286
  ----
287
287
 
288
+ === Generate metanorma minisite
289
+
290
+ The `site` interface allows you to manage mini site generation using the CLI.
291
+ To generate a mini site you need to provide the `SOURCE_PATH` and the CLI will
292
+ take care of compiling each of those files and generate deployable site in the
293
+ provided output directory.
294
+
295
+ This interface also supports a YAML manifest file that can be used to customize
296
+ the site generation process. You can check more details here: link:./spec/fixtures/metanorma.yml[metanorma.yml]
297
+
298
+ [source, sh]
299
+ ----
300
+ metanorma site generate SOURCE_PATH -o OUTPUT_PATH -c metanorma.yml
301
+ ----
302
+
288
303
  == Credits
289
304
 
290
305
  This gem is developed, maintained and funded by https://www.metanorma.com/docs/getting-started/[Ribose Inc.]
@@ -9,7 +9,8 @@ module Metanorma
9
9
  "metanorma-iso",
10
10
  "metanorma-iec",
11
11
  "metanorma-ietf",
12
- "metanorma-gb",
12
+ #"metanorma-gb",
13
+ "metanorma-bipm",
13
14
  "metanorma-cc",
14
15
  "metanorma-csa",
15
16
  "metanorma-iho",
@@ -81,14 +82,6 @@ module Metanorma
81
82
  Pathname.new(Dir.home).join(".metanorma")
82
83
  end
83
84
 
84
- def self.fonts_directory
85
- Metanorma::Cli.home_directory.join("fonts")
86
- end
87
-
88
- def self.fonts
89
- Dir.glob(Metanorma::Cli.fonts_directory.join("**"))
90
- end
91
-
92
85
  def self.writable_templates_path?
93
86
  parent_directory = templates_path.join("..", "..")
94
87
 
@@ -1,9 +1,9 @@
1
1
  require "thor"
2
- require "metanorma/cli/setup"
3
2
  require "metanorma/cli/compiler"
4
3
  require "metanorma/cli/generator"
5
4
  require "metanorma/cli/git_template"
6
5
  require "metanorma/cli/commands/template_repo"
6
+ require "metanorma/cli/commands/site"
7
7
  require "metanorma"
8
8
 
9
9
  module Metanorma
@@ -32,6 +32,10 @@ module Metanorma
32
32
  option :version, aliases: "-v", desc: "Print version of code (accompanied with -t)"
33
33
  option "output-dir", aliases: "-o", desc: "Directory to save compiled files"
34
34
 
35
+ option :agree_to_terms, type: :boolean, desc: "Agree / Disagree with all third-party licensing terms presented (WARNING: do know what you are agreeing with!)"
36
+ option :no_install_fonts, type: :boolean, desc: "Skip the font installation process"
37
+ option :continue_without_fonts, type: :boolean, desc: "Continue processing even when fonts are missing"
38
+
35
39
  def compile(file_name = nil)
36
40
  if file_name && !options[:version]
37
41
  Metanorma::Cli.load_flavors
@@ -89,33 +93,8 @@ module Metanorma
89
93
  desc "template-repo", "Manage metanorma templates repository"
90
94
  subcommand :template_repo, Metanorma::Cli::Commands::TemplateRepo
91
95
 
92
- desc "setup", "Initial necessary setup"
93
- option(
94
- :agree_to_terms,
95
- type: :boolean,
96
- required: false,
97
- default: false,
98
- desc: "Agree / Disagree with all third-party licensing terms presented (WARNING: do know what you are agreeing with!)",
99
- )
100
-
101
- def setup
102
- list_required_fonts.each do |font|
103
- begin
104
- Metanorma::Cli::Setup.run(
105
- font: font,
106
- term_agreement: options[:agree_to_terms],
107
- )
108
- rescue Fontist::Errors::LicensingError
109
- UI.error(
110
- "[error]: License acceptance required to install a necessary font." \
111
- "Accept required licenses with: `metanorma setup --agree-to-terms`."
112
- )
113
- return
114
- rescue Fontist::Errors::NonSupportedFontError
115
- UI.say("[info]: The font `#{font}` is not yet supported.")
116
- end
117
- end
118
- end
96
+ desc "site", "Manage site for metanorma collections"
97
+ subcommand :site, Metanorma::Cli::Commands::Site
119
98
 
120
99
  private
121
100
 
@@ -175,19 +154,6 @@ module Metanorma
175
154
  )
176
155
  end
177
156
 
178
- def list_required_fonts
179
- Metanorma::Cli.load_flavors
180
-
181
- Metanorma::Registry.instance.processors.map do |_key, processor|
182
- flavour = processor.class.to_s.gsub("::Processor", "")
183
- flavour_module = Object.const_get(flavour)
184
-
185
- if flavour_module.respond_to?(:fonts_used)
186
- flavour_module.fonts_used.map { |_, value| value }.flatten
187
- end
188
- end.compact.flatten.uniq
189
- end
190
-
191
157
  def load_flavours(type)
192
158
  Metanorma::Cli.load_flavors
193
159
  unless Metanorma::Registry.instance.find_processor(type&.to_sym)
@@ -0,0 +1,26 @@
1
+ require "pathname"
2
+ require "metanorma/cli/site_generator"
3
+
4
+ module Metanorma
5
+ module Cli
6
+ module Commands
7
+ class Site < Thor
8
+ desc "site generate SOURCE_PATH", "Geneate site from collection"
9
+ option :config, aliases: "-c", desc: "The metanorma configuration file"
10
+ option(
11
+ :output_dir,
12
+ aliases: "-o",
13
+ default: Pathname.new(Dir.pwd).join("site").to_s,
14
+ desc: "Output directory for the generated site",
15
+ )
16
+
17
+ def generate(source_path)
18
+ Cli::SiteGenerator.generate(source_path, options.dup)
19
+ UI.say("Site has been generated at #{options[:output_dir]}")
20
+ rescue Cli::Errors::InvalidManifestFileError
21
+ UI.error("Invalid data in: #{options[:config]}")
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -4,6 +4,7 @@ module Metanorma
4
4
  class DuplicateTemplateError < StandardError; end
5
5
 
6
6
  class FileNotFoundError < StandardError; end
7
+ class InvalidManifestFileError < StandardError; end
7
8
  end
8
9
  end
9
10
  end
@@ -0,0 +1,130 @@
1
+ require "yaml"
2
+ require "pathname"
3
+ require "fileutils"
4
+
5
+ module Metanorma
6
+ module Cli
7
+ class SiteGenerator
8
+ def initialize(source, options = {})
9
+ @source = find_realpath(source)
10
+ @site_path = options.fetch(:output_dir, "site").to_s
11
+ @manifest_file = find_realpath(options.fetch(:config, nil))
12
+ @asset_folder = options.fetch(:asset_folder, "documents").to_s
13
+ @collection_name = options.fetch(:collection_name, "documents.xml")
14
+
15
+ ensure_site_asset_directory!
16
+ end
17
+
18
+ def self.generate(source, options = {})
19
+ new(source, options).generate
20
+ end
21
+
22
+ def generate
23
+ site_directory = asset_directory.join("..")
24
+
25
+ Dir.chdir(site_directory) do
26
+ select_source_files.each { |source| compile(source) }
27
+
28
+ build_collection_file(collection_name)
29
+ convert_to_html_page(collection_name, "index.html")
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ attr_reader :source, :asset_folder, :asset_directory
36
+ attr_reader :site_path, :manifest_file, :collection_name
37
+
38
+ def find_realpath(source_path)
39
+ Pathname.new(source_path.to_s).realpath if source_path
40
+ rescue Errno::ENOENT
41
+ source_path
42
+ end
43
+
44
+ def select_source_files
45
+ files = source_from_manifest
46
+
47
+ if files.empty?
48
+ files = Dir[File.join(source, "**", "*.adoc")]
49
+ end
50
+
51
+ files.flatten.uniq.reject { |file| File.directory?(file) }
52
+ end
53
+
54
+ def build_collection_file(collection_name)
55
+ collection_path = [site_path, collection_name].join("/")
56
+ UI.info("Building collection file: #{collection_path} ...")
57
+
58
+ Relaton::Cli::RelatonFile.concatenate(
59
+ asset_folder,
60
+ collection_name,
61
+ title: manifest[:collection_name],
62
+ organization: manifest[:collection_organization],
63
+ )
64
+ end
65
+
66
+ def compile(source)
67
+ UI.info("Compiling #{source} ...")
68
+
69
+ Metanorma::Cli::Compiler.compile(
70
+ source.to_s, format: :asciidoc, "output-dir" => asset_folder
71
+ )
72
+ end
73
+
74
+ def convert_to_html_page(collection, page_name)
75
+ UI.info("Generating html site in #{site_path} ...")
76
+
77
+ Relaton::Cli::XMLConvertor.to_html(collection)
78
+ File.rename(Pathname.new(collection).sub_ext(".html").to_s, page_name)
79
+ end
80
+
81
+ def manifest
82
+ @manifest ||= config_from_manifest || {
83
+ files: [], collection_name: "", collection_organization: ""
84
+ }
85
+ end
86
+
87
+ def config_from_manifest
88
+ if manifest_file
89
+ manifest_config(YAML.safe_load(File.read(manifest_file.to_s)))
90
+ end
91
+ end
92
+
93
+ def manifest_config(manifest)
94
+ {
95
+ files: extract_config_data(
96
+ manifest["metanorma"]["source"], "files"
97
+ ) || [],
98
+
99
+ collection_name: extract_config_data(
100
+ manifest["relaton"]["collection"], "name"
101
+ ),
102
+
103
+ collection_organization: extract_config_data(
104
+ manifest["relaton"]["collection"], "organization"
105
+ ),
106
+ }
107
+ rescue NoMethodError
108
+ raise Errors::InvalidManifestFileError.new("Invalid manifest file")
109
+ end
110
+
111
+ def extract_config_data(node, key)
112
+ node ? node[key] : nil
113
+ end
114
+
115
+ def source_from_manifest
116
+ @source_from_manifest ||= manifest[:files].map do |source_file|
117
+ file_path = source.join(source_file).to_s
118
+ file_path.include?("*") ? Dir.glob(file_path) : file_path
119
+ end.flatten
120
+ end
121
+
122
+ def ensure_site_asset_directory!
123
+ asset_path = [site_path, asset_folder].join("/")
124
+ @asset_directory = Pathname.new(Dir.pwd).join(asset_path)
125
+
126
+ FileUtils.mkdir_p(@asset_directory) unless @asset_directory.exist?
127
+ end
128
+ end
129
+ end
130
+ end
@@ -11,6 +11,10 @@ module Metanorma
11
11
  new.say(message)
12
12
  end
13
13
 
14
+ def self.info(message)
15
+ new.say(["[info]", message].join(": "))
16
+ end
17
+
14
18
  def self.error(message)
15
19
  new.error(message)
16
20
  end
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module Cli
3
- VERSION = "1.3.8.1pre"
3
+ VERSION = "1.4.0"
4
4
  end
5
5
  end
@@ -29,7 +29,6 @@ Gem::Specification.new do |spec|
29
29
  spec.add_development_dependency "rspec", "~> 3.0"
30
30
  spec.add_development_dependency "byebug", "~> 10.0"
31
31
  spec.add_development_dependency "rspec-command", "~> 1.0.3"
32
- spec.add_development_dependency "equivalent-xml", "~> 0.6"
33
32
  spec.add_development_dependency "rspec-core", "~> 3.4"
34
33
  spec.add_development_dependency "vcr", "~> 5.0.0"
35
34
  spec.add_development_dependency "webmock"
@@ -39,24 +38,24 @@ Gem::Specification.new do |spec|
39
38
 
40
39
  spec.add_runtime_dependency "thor", "~> 1.0"
41
40
  spec.add_runtime_dependency "metanorma-iso", "~> 1.5.0"
42
- spec.add_runtime_dependency 'metanorma-ietf', "~> 2.2.0"
43
- spec.add_runtime_dependency 'metanorma-gb', "~> 1.5.0"
44
- spec.add_runtime_dependency 'metanorma-iec', "~> 1.2.0"
45
- spec.add_runtime_dependency 'metanorma-cc', "~> 1.6.0"
46
- spec.add_runtime_dependency 'metanorma-csa', "~> 1.6.0"
41
+ spec.add_runtime_dependency "metanorma-ietf", "~> 2.2.0"
42
+ #spec.add_runtime_dependency "metanorma-gb", "~> 1.5.0"
43
+ spec.add_runtime_dependency "metanorma-iec", "~> 1.2.0"
44
+ spec.add_runtime_dependency "metanorma-cc", "~> 1.6.0"
45
+ spec.add_runtime_dependency "metanorma-csa", "~> 1.7.0"
47
46
  #spec.add_runtime_dependency 'metanorma-ribose', "~> 1.6.0"
48
- spec.add_runtime_dependency 'metanorma-m3aawg', "~> 1.6.0"
49
- spec.add_runtime_dependency 'metanorma-generic', "~> 1.7.0"
50
- spec.add_runtime_dependency 'metanorma-standoc', "~> 1.6.0"
47
+ spec.add_runtime_dependency "metanorma-m3aawg", "~> 1.6.0"
48
+ spec.add_runtime_dependency "metanorma-bipm", "~> 1.0.0"
49
+ spec.add_runtime_dependency "metanorma-generic", "~> 1.8.0"
50
+ spec.add_runtime_dependency "metanorma-standoc", "~> 1.6.0"
51
51
  #spec.add_runtime_dependency 'metanorma-mpfa', "~> 0.5.0"
52
- spec.add_runtime_dependency 'metanorma-un', "~> 0.5.0"
53
- spec.add_runtime_dependency 'metanorma-ogc', "~> 1.2.0"
54
- spec.add_runtime_dependency 'metanorma-nist', "~> 1.2.0"
55
- spec.add_runtime_dependency 'metanorma-itu', "~> 1.2.0"
56
- spec.add_runtime_dependency 'metanorma-iho', "~> 0.2.0"
57
- spec.add_runtime_dependency 'isodoc', ">= 1.2.0"
58
- spec.add_runtime_dependency 'metanorma', "~> 1.2.0"
52
+ spec.add_runtime_dependency "metanorma-un", "~> 0.5.0"
53
+ spec.add_runtime_dependency "metanorma-ogc", "~> 1.2.0"
54
+ spec.add_runtime_dependency "metanorma-nist", "~> 1.2.0"
55
+ spec.add_runtime_dependency "metanorma-itu", "~> 1.2.0"
56
+ spec.add_runtime_dependency "metanorma-iho", "~> 0.2.0"
57
+ spec.add_runtime_dependency "isodoc", ">= 1.3.0"
58
+ spec.add_runtime_dependency "metanorma", "~> 1.2.0"
59
59
  spec.add_runtime_dependency "git", "~> 1.5"
60
60
  spec.add_runtime_dependency "relaton-cli", ">= 0.8.2"
61
- spec.add_runtime_dependency "fontist", "~> 1.3.0"
62
61
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.8.1pre
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-11-09 00:00:00.000000000 Z
11
+ date: 2020-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -80,20 +80,6 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: 1.0.3
83
- - !ruby/object:Gem::Dependency
84
- name: equivalent-xml
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '0.6'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '0.6'
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: rspec-core
99
85
  requirement: !ruby/object:Gem::Requirement
@@ -207,49 +193,49 @@ dependencies:
207
193
  - !ruby/object:Gem::Version
208
194
  version: 2.2.0
209
195
  - !ruby/object:Gem::Dependency
210
- name: metanorma-gb
196
+ name: metanorma-iec
211
197
  requirement: !ruby/object:Gem::Requirement
212
198
  requirements:
213
199
  - - "~>"
214
200
  - !ruby/object:Gem::Version
215
- version: 1.5.0
201
+ version: 1.2.0
216
202
  type: :runtime
217
203
  prerelease: false
218
204
  version_requirements: !ruby/object:Gem::Requirement
219
205
  requirements:
220
206
  - - "~>"
221
207
  - !ruby/object:Gem::Version
222
- version: 1.5.0
208
+ version: 1.2.0
223
209
  - !ruby/object:Gem::Dependency
224
- name: metanorma-iec
210
+ name: metanorma-cc
225
211
  requirement: !ruby/object:Gem::Requirement
226
212
  requirements:
227
213
  - - "~>"
228
214
  - !ruby/object:Gem::Version
229
- version: 1.2.0
215
+ version: 1.6.0
230
216
  type: :runtime
231
217
  prerelease: false
232
218
  version_requirements: !ruby/object:Gem::Requirement
233
219
  requirements:
234
220
  - - "~>"
235
221
  - !ruby/object:Gem::Version
236
- version: 1.2.0
222
+ version: 1.6.0
237
223
  - !ruby/object:Gem::Dependency
238
- name: metanorma-cc
224
+ name: metanorma-csa
239
225
  requirement: !ruby/object:Gem::Requirement
240
226
  requirements:
241
227
  - - "~>"
242
228
  - !ruby/object:Gem::Version
243
- version: 1.6.0
229
+ version: 1.7.0
244
230
  type: :runtime
245
231
  prerelease: false
246
232
  version_requirements: !ruby/object:Gem::Requirement
247
233
  requirements:
248
234
  - - "~>"
249
235
  - !ruby/object:Gem::Version
250
- version: 1.6.0
236
+ version: 1.7.0
251
237
  - !ruby/object:Gem::Dependency
252
- name: metanorma-csa
238
+ name: metanorma-m3aawg
253
239
  requirement: !ruby/object:Gem::Requirement
254
240
  requirements:
255
241
  - - "~>"
@@ -263,33 +249,33 @@ dependencies:
263
249
  - !ruby/object:Gem::Version
264
250
  version: 1.6.0
265
251
  - !ruby/object:Gem::Dependency
266
- name: metanorma-m3aawg
252
+ name: metanorma-bipm
267
253
  requirement: !ruby/object:Gem::Requirement
268
254
  requirements:
269
255
  - - "~>"
270
256
  - !ruby/object:Gem::Version
271
- version: 1.6.0
257
+ version: 1.0.0
272
258
  type: :runtime
273
259
  prerelease: false
274
260
  version_requirements: !ruby/object:Gem::Requirement
275
261
  requirements:
276
262
  - - "~>"
277
263
  - !ruby/object:Gem::Version
278
- version: 1.6.0
264
+ version: 1.0.0
279
265
  - !ruby/object:Gem::Dependency
280
266
  name: metanorma-generic
281
267
  requirement: !ruby/object:Gem::Requirement
282
268
  requirements:
283
269
  - - "~>"
284
270
  - !ruby/object:Gem::Version
285
- version: 1.7.0
271
+ version: 1.8.0
286
272
  type: :runtime
287
273
  prerelease: false
288
274
  version_requirements: !ruby/object:Gem::Requirement
289
275
  requirements:
290
276
  - - "~>"
291
277
  - !ruby/object:Gem::Version
292
- version: 1.7.0
278
+ version: 1.8.0
293
279
  - !ruby/object:Gem::Dependency
294
280
  name: metanorma-standoc
295
281
  requirement: !ruby/object:Gem::Requirement
@@ -380,14 +366,14 @@ dependencies:
380
366
  requirements:
381
367
  - - ">="
382
368
  - !ruby/object:Gem::Version
383
- version: 1.2.0
369
+ version: 1.3.0
384
370
  type: :runtime
385
371
  prerelease: false
386
372
  version_requirements: !ruby/object:Gem::Requirement
387
373
  requirements:
388
374
  - - ">="
389
375
  - !ruby/object:Gem::Version
390
- version: 1.2.0
376
+ version: 1.3.0
391
377
  - !ruby/object:Gem::Dependency
392
378
  name: metanorma
393
379
  requirement: !ruby/object:Gem::Requirement
@@ -430,20 +416,6 @@ dependencies:
430
416
  - - ">="
431
417
  - !ruby/object:Gem::Version
432
418
  version: 0.8.2
433
- - !ruby/object:Gem::Dependency
434
- name: fontist
435
- requirement: !ruby/object:Gem::Requirement
436
- requirements:
437
- - - "~>"
438
- - !ruby/object:Gem::Version
439
- version: 1.3.0
440
- type: :runtime
441
- prerelease: false
442
- version_requirements: !ruby/object:Gem::Requirement
443
- requirements:
444
- - - "~>"
445
- - !ruby/object:Gem::Version
446
- version: 1.3.0
447
419
  description: Executable to process any Metanorma standard.
448
420
  email:
449
421
  - open.source@ribose.com
@@ -489,12 +461,13 @@ files:
489
461
  - lib/metanorma-cli.rb
490
462
  - lib/metanorma/cli.rb
491
463
  - lib/metanorma/cli/command.rb
464
+ - lib/metanorma/cli/commands/site.rb
492
465
  - lib/metanorma/cli/commands/template_repo.rb
493
466
  - lib/metanorma/cli/compiler.rb
494
467
  - lib/metanorma/cli/errors.rb
495
468
  - lib/metanorma/cli/generator.rb
496
469
  - lib/metanorma/cli/git_template.rb
497
- - lib/metanorma/cli/setup.rb
470
+ - lib/metanorma/cli/site_generator.rb
498
471
  - lib/metanorma/cli/template_repo.rb
499
472
  - lib/metanorma/cli/ui.rb
500
473
  - lib/metanorma/cli/version.rb
@@ -518,9 +491,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
518
491
  version: 2.4.0
519
492
  required_rubygems_version: !ruby/object:Gem::Requirement
520
493
  requirements:
521
- - - ">"
494
+ - - ">="
522
495
  - !ruby/object:Gem::Version
523
- version: 1.3.1
496
+ version: '0'
524
497
  requirements: []
525
498
  rubygems_version: 3.0.3
526
499
  signing_key:
@@ -1,73 +0,0 @@
1
- require "fontist"
2
- require "fileutils"
3
-
4
- module Metanorma
5
- module Cli
6
- class Setup
7
- def initialize(options)
8
- @options = options
9
- @font_name = options.fetch(:font)
10
- @term_agreement = options.fetch(:term_agreement, false)
11
-
12
- create_metanorma_fonts_directory
13
- end
14
-
15
- def self.run(options = {})
16
- new(options).run
17
- end
18
-
19
- def run
20
- font = Metanorma::Cli.fonts.grep(/#{font_name}/i)
21
-
22
- if font.empty?
23
- font_paths = download_font
24
- copy_to_fonts(font_paths)
25
- end
26
- end
27
-
28
- private
29
-
30
- attr_reader :font_name, :options, :term_agreement
31
-
32
- def create_metanorma_fonts_directory
33
- unless Metanorma::Cli.fonts_directory.exist?
34
- FileUtils.mkdir_p(Metanorma::Cli.fonts_directory)
35
- end
36
- end
37
-
38
- def metanorma_fonts_path
39
- @metanorma_fonts_path ||= Metanorma::Cli.fonts_directory
40
- end
41
-
42
- def download_font
43
- begin
44
- Fontist::Font.find(font_name)
45
- rescue Fontist::Errors::MissingFontError
46
- process_font_installation(font_name)
47
- end
48
- end
49
-
50
- def copy_to_fonts(fonts_path)
51
- fonts_path.each do |font_path|
52
- font_name = File.basename(font_path)
53
- FileUtils.copy_file(font_path, metanorma_fonts_path.join(font_name))
54
- end
55
- end
56
-
57
- def process_font_installation(font_name)
58
- accepted_agreement = term_agreement == true ? "yes" : "no"
59
-
60
- UI.say(missing_font_message) if !term_agreement
61
- Fontist::Font.install(font_name, confirmation: accepted_agreement)
62
- end
63
-
64
- def missing_font_message
65
- <<~MSG
66
- Your system does not have the necessary fonts installed for
67
- PDF generation. Without these fonts, the generated PDF will use
68
- generic fonts that may not resemble the desired styling.\n
69
- MSG
70
- end
71
- end
72
- end
73
- end