class CDNGet::Main
Public Class Methods
main(args=nil)
click to toggle source
# File lib/cdnget.rb, line 349 def self.main(args=nil) args ||= ARGV s = self.new().run(*args) puts s if s exit 0 rescue CommandError => ex $stderr.puts ex.message exit 1 end
new(script=nil)
click to toggle source
# File lib/cdnget.rb, line 324 def initialize(script=nil) @script = script || File.basename($0) end
Public Instance Methods
do_download_library(cdn_code, library, version, basedir)
click to toggle source
# File lib/cdnget.rb, line 509 def do_download_library(cdn_code, library, version, basedir) cdn = find_cdn(cdn_code) cdn.download(library, version, basedir, quiet: @quiet) return nil end
do_find_library(cdn_code, library)
click to toggle source
# File lib/cdnget.rb, line 464 def do_find_library(cdn_code, library) cdn = find_cdn(cdn_code) d = cdn.find(library) s = "" if @quiet d[:versions].each do |ver| s << "#{ver}\n" end if d[:versions] else s << "name: #{d[:name]}\n" s << "desc: #{d[:desc]}\n" if d[:desc] s << "tags: #{d[:tags]}\n" if d[:tags] s << "site: #{d[:site]}\n" if d[:site] s << "snippet: |\n" << d[:snippet].gsub(/^/, ' ') if d[:snippet] s << "versions:\n" d[:versions].each do |ver| s << " - #{ver}\n" end if d[:versions] end return s end
do_get_library(cdn_code, library, version)
click to toggle source
# File lib/cdnget.rb, line 486 def do_get_library(cdn_code, library, version) cdn = find_cdn(cdn_code) d = cdn.get(library, version) s = "" if @quiet d[:urls].each do |url| s << "#{url}\n" end if d[:urls] else s << "name: #{d[:name]}\n" s << "version: #{d[:version]}\n" s << "desc: #{d[:desc]}\n" if d[:desc] s << "tags: #{d[:tags]}\n" if d[:tags] s << "site: #{d[:site]}\n" if d[:site] s << "snippet: |\n" << d[:snippet].gsub(/^/, ' ') if d[:snippet] s << "urls:\n" if d[:urls] d[:urls].each do |url| s << " - #{url}\n" end if d[:urls] end return s end
do_list_cdns()
click to toggle source
# File lib/cdnget.rb, line 444 def do_list_cdns if @quiet return CLASSES.map {|c| "#{c::CODE}\n" }.join() else return CLASSES.map {|c| "%-10s # %s\n" % [c::CODE, c::SITE_URL] }.join() end end
do_list_libraries(cdn_code)
click to toggle source
# File lib/cdnget.rb, line 452 def do_list_libraries(cdn_code) cdn = find_cdn(cdn_code) return render_list(cdn.list) end
do_search_libraries(cdn_code, pattern)
click to toggle source
# File lib/cdnget.rb, line 457 def do_search_libraries(cdn_code, pattern) cdn = find_cdn(cdn_code) rexp_str = pattern.split('*', -1).collect {|x| Regexp.escape(x) }.join('.*') rexp = Regexp.compile("\\A#{rexp_str}\\z", Regexp::IGNORECASE) return render_list(cdn.list.select {|a| a[:name] =~ rexp }) end
find_cdn(cdn_code)
click to toggle source
# File lib/cdnget.rb, line 430 def find_cdn(cdn_code) klass = CLASSES.find {|c| c::CODE == cdn_code } or raise CommandError.new("#{cdn_code}: no such CDN.") return klass.new end
help_message()
click to toggle source
# File lib/cdnget.rb, line 328 def help_message script = @script return <<END #{script} -- download files from public CDN Usage: #{script} [options] [CDN] [library] [version] [directory] Options: -h, --help : help -v, --version : version -q, --quiet : minimal output Example: $ #{script} # list public CDN $ #{script} [-q] cdnjs # list libraries $ #{script} [-q] cdnjs jquery # list versions $ #{script} [-q] cdnjs jquery 2.2.0 # list files $ #{script} [-q] cdnjs jquery 2.2.0 /tmp # download files END end
parse_cmdopts(cmdargs, short_opts, long_opts)
click to toggle source
# File lib/cdnget.rb, line 403 def parse_cmdopts(cmdargs, short_opts, long_opts) cmdopts = {} while cmdargs[0] && cmdargs[0].start_with?('-') cmdarg = cmdargs.shift if cmdarg == '--' break elsif cmdarg.start_with?('--') cmdarg =~ /\A--(\w[-\w]+)(=.*?)?/ or raise CommandError.new("#{cmdarg}: invalid command option.") name = $1 value = $2 ? $2[1..-1] : true long_opts.include?(name) or raise CommandError.new("#{cmdarg}: unknown command option.") cmdopts[name] = value elsif cmdarg.start_with?('-') cmdarg[1..-1].each_char do |c| short_opts.include?(c) or raise CommandError.new("-#{c}: unknown command option.") cmdopts[c] = true end else raise "unreachable" end end return cmdopts end
render_list(list)
click to toggle source
# File lib/cdnget.rb, line 436 def render_list(list) if @quiet return list.collect {|d| "#{d[:name]}\n" }.join() else return list.collect {|d| "%-20s # %s\n" % [d[:name], d[:desc]] }.join() end end
run(*args)
click to toggle source
# File lib/cdnget.rb, line 359 def run(*args) cmdopts = parse_cmdopts(args, "hvq", ["help", "version", "quiet"]) return help_message() if cmdopts['h'] || cmdopts['help'] return RELEASE + "\n" if cmdopts['v'] || cmdopts['version'] @quiet = cmdopts['quiet'] || cmdopts['q'] # validate(args[1], args[2]) # case args.length when 0 return do_list_cdns() when 1 cdn_code = args[0] return do_list_libraries(cdn_code) when 2 cdn_code, library = args if library.include?('*') return do_search_libraries(cdn_code, library) else return do_find_library(cdn_code, library) end when 3 cdn_code, library, version = args return do_get_library(cdn_code, library, version) when 4 cdn_code, library, version, basedir = args do_download_library(cdn_code, library, version, basedir) return "" else raise CommandError.new("'#{args[4]}': Too many arguments.") end end
validate(library, version)
click to toggle source
# File lib/cdnget.rb, line 392 def validate(library, version) if library && ! library.include?('*') library =~ /\A[-.\w]+\z/ or raise CommandError.new("#{library}: Unexpected library name.") end if version version =~ /\A[-.\w]+\z/ or raise CommandError.new("#{version}: Unexpected version number.") end end