lib/fontist/font_installer.rb in fontist-1.20.0 vs lib/fontist/font_installer.rb in fontist-1.21.1
- old
+ new
@@ -1,7 +1,9 @@
require "fontist/utils"
require "excavate"
+require_relative "resources/archive_resource"
+require_relative "resources/google_resource"
module Fontist
class FontInstaller
def initialize(formula, font_name: nil, no_progress: false)
@formula = formula
@@ -46,67 +48,36 @@
def raise_licensing_error
raise(Fontist::Errors::LicensingError)
end
def install_font
- fonts_paths = run_in_temp_dir { extract }
+ fonts_paths = do_install_font
fonts_paths.empty? ? nil : fonts_paths
end
- def run_in_temp_dir
- Dir.mktmpdir(nil, Dir.tmpdir) do |dir|
- @temp_dir = Pathname.new(dir)
+ def do_install_font
+ Fontist.ui.say(%(Installing from formula "#{@formula.key}".))
- result = yield
-
- @temp_dir = nil
-
- result
- end
- end
-
- def extract
- archive = download_file(@formula.resources.first)
-
- install_fonts_from_archive(archive)
- end
-
- def install_fonts_from_archive(archive)
- Fontist.ui.say(%(Installing font "#{@formula.key}".))
-
Array.new.tap do |fonts_paths|
- Excavate::Archive.new(archive.path).files(recursive_packages: true) do |path|
+ resource.files(source_files) do |path|
fonts_paths << install_font_file(path) if font_file?(path)
end
end
end
- def download_file(source)
- errors = []
- source.urls.each do |request|
- url = request.respond_to?(:url) ? request.url : request
- Fontist.ui.say(%(Downloading font "#{@formula.key}" from #{url}))
+ def resource
+ resource_class = if @formula.source == "google"
+ Resources::GoogleResource
+ else
+ Resources::ArchiveResource
+ end
- result = try_download_file(request, source)
- return result unless result.is_a?(Errors::InvalidResourceError)
-
- errors << result
- end
-
- raise Errors::InvalidResourceError, errors.join(" ")
+ resource_class.new(resource_options, no_progress: @no_progress)
end
- def try_download_file(request, source)
- Fontist::Utils::Downloader.download(
- request,
- sha: source.sha256,
- file_size: source.file_size,
- progress_bar: !@no_progress
- )
- rescue Errors::InvalidResourceError => e
- Fontist.ui.say(e.message)
- e
+ def resource_options
+ @formula.resources.first
end
def font_file?(path)
source_file?(path) && font_directory?(path)
end
@@ -114,19 +85,19 @@
def source_file?(path)
source_files.include?(File.basename(path))
end
def source_files
- @source_files ||= @formula.fonts.flat_map do |font|
- next [] if @font_name && !font.name.casecmp?(@font_name)
-
- font_files(font)
+ @source_files ||= fonts.flat_map do |font|
+ font.styles.map do |style|
+ style.source_font || style.font
+ end
end
end
- def font_files(font)
- font.styles.map do |style|
- style.source_font || style.font
+ def fonts
+ @formula.fonts.select do |font|
+ @font_name.nil? || font.name.casecmp?(@font_name)
end
end
def font_directory?(path)
return true unless subdirectory_pattern