class CDNGet::Base

Public Class Methods

inherited(klass) click to toggle source
# File lib/cdnget.rb, line 34
def self.inherited(klass)
  CLASSES << klass
end

Public Instance Methods

download(library, version, basedir=".", quiet: false) click to toggle source
# File lib/cdnget.rb, line 50
def download(library, version, basedir=".", quiet: false)
  validate(library, version)
  File.exist?(basedir)  or
    raise CommandError.new("#{basedir}: not exist.")
  File.directory?(basedir)  or
    raise CommandError.new("#{basedir}: not a directory.")
  target_dir = File.join(basedir, library, version)
  d = get(library, version)
  d[:files].each do |file|
    filepath = File.join(target_dir, file)
    dirpath  = File.dirname(filepath)
    print "#{filepath} ..." unless quiet
    url = File.join(d[:baseurl], file)   # not use URI.join!
    content = fetch(url)
    content = content.force_encoding('ascii-8bit')
    print " Done (#{format_integer(content.bytesize)} byte)" unless quiet
    FileUtils.mkdir_p(dirpath) unless File.exist?(dirpath)
    unchanged = File.exist?(filepath) && File.read(filepath, mode: 'rb') == content
    if unchanged
      print " (Unchanged)" unless quiet
    else
      File.open(filepath, 'wb') {|f| f.write(content) }
    end
    puts() unless quiet
  end
  nil
end
find(library) click to toggle source
# File lib/cdnget.rb, line 42
def find(library)
  raise NotImplementedError.new("#{self.class.name}#find(): not implemented yet.")
end
get(library, version) click to toggle source
# File lib/cdnget.rb, line 46
def get(library, version)
  raise NotImplementedError.new("#{self.class.name}#get(): not implemented yet.")
end
list() click to toggle source
# File lib/cdnget.rb, line 38
def list()
  raise NotImplementedError.new("#{self.class.name}#list(): not implemented yet.")
end

Protected Instance Methods

fetch(url, library=nil) click to toggle source
# File lib/cdnget.rb, line 80
def fetch(url, library=nil)
  begin
    html = open(url, 'rb') {|f| f.read() }
    return html
  rescue OpenURI::HTTPError => ex
    raise CommandError.new("GET #{url} : #{ex.message}")
  end
end
format_integer(value) click to toggle source
# File lib/cdnget.rb, line 100
def format_integer(value)
  return value.to_s.reverse.scan(/..?.?/).collect {|s| s.reverse }.reverse.join(',')
end
validate(library, version) click to toggle source
# File lib/cdnget.rb, line 89
def validate(library, version)
  if library
    library =~ /\A[-.\w]+\z/  or
      raise ArgumentError.new("#{library.inspect}: Unexpected library name.")
  end
  if version
    version =~ /\A\d+(\.\d+)+([-.\w]+)?/  or
      raise ArgumentError.new("#{version.inspect}: Unexpected version number.")
  end
end