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