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