class Pakyow::Assets::External
@api private
Attributes
name[R]
package[R]
version[R]
Public Class Methods
new(name, version:, package:, files:, config:)
click to toggle source
# File lib/pakyow/assets/external.rb, line 11 def initialize(name, version:, package:, files:, config:) @name, @version, @config = name, version, config @package = package || name @files = files || [] end
Public Instance Methods
exist?()
click to toggle source
# File lib/pakyow/assets/external.rb, line 17 def exist? if @files.empty? Dir.glob(File.join(@config.externals.path, "#{@name}*.js")).any? else !@files.any? { |file| if File.basename(file, File.extname(file)) == @name.to_s Dir.glob(File.join(@config.externals.path, "#{@name}*.js")).empty? else Dir.glob(File.join(@config.externals.path, "#{@name}*__#{File.basename(file, File.extname(file))}.js")).empty? end } end end
fetch!()
click to toggle source
# File lib/pakyow/assets/external.rb, line 31 def fetch! if @files.empty? fetch_file!(nil) else @files.each do |file| fetch_file!(file) end end end
Private Instance Methods
fetch_file!(file)
click to toggle source
# File lib/pakyow/assets/external.rb, line 43 def fetch_file!(file) name_with_version = if @version "#{name}@#{@version}" else name.to_s end file_with_version = File.join(name_with_version, file.to_s).chomp("/") package_with_version = if @version "#{@package}@#{@version}" else @package.to_s end Support::CLI::Runner.new(message: "Fetching #{file_with_version}").run do |runner| Async do downloader = Downloader.new( File.join(@config.externals.provider, CGI.escape(package_with_version), CGI.escape(file.to_s)) ).perform FileUtils.mkdir_p(@config.externals.path) fetched_version = CGI.unescape(downloader.path.to_s).split(@package.to_s, 2)[1].split("/", 2)[0].split("@", 2)[1] file_basename = File.basename(file.to_s, File.extname(file.to_s)) local_path = if file && file_basename != name.to_s File.join( @config.externals.path, "#{name}@#{fetched_version}__#{file_basename}.js" ) else File.join( @config.externals.path, "#{name}@#{fetched_version}.js" ) end File.open(local_path, "w") do |fp| fp.write(downloader.body.to_s) end runner.succeeded rescue Downloader::Failed => error runner.failed(error.to_s) end end end