Class: CDNGet::Main
- Inherits:
-
Object
- Object
- CDNGet::Main
- Defined in:
- lib/cdnget.rb
Class Method Summary collapse
Instance Method Summary collapse
- #do_download_library(cdn_code, library, version, basedir) ⇒ Object
- #do_find_library(cdn_code, library) ⇒ Object
- #do_get_library(cdn_code, library, version) ⇒ Object
- #do_list_cdns ⇒ Object
- #do_list_libraries(cdn_code) ⇒ Object
- #do_search_libraries(cdn_code, pattern) ⇒ Object
- #find_cdn(cdn_code) ⇒ Object
- #help_message ⇒ Object
-
#initialize(script = nil) ⇒ Main
constructor
A new instance of Main.
- #parse_cmdopts(cmdargs, short_opts, long_opts) ⇒ Object
- #render_list(list) ⇒ Object
- #run(*args) ⇒ Object
- #validate(library, version) ⇒ Object
Constructor Details
#initialize(script = nil) ⇒ Main
Returns a new instance of Main.
581 582 583 |
# File 'lib/cdnget.rb', line 581 def initialize(script=nil) @script = script || File.basename($0) end |
Class Method Details
.main(args = nil) ⇒ Object
610 611 612 613 614 615 616 617 618 |
# File 'lib/cdnget.rb', line 610 def self.main(args=nil) args ||= ARGV s = self.new().run(*args) puts s if s exit 0 rescue CommandError => ex $stderr.puts ex. exit 1 end |
Instance Method Details
#do_download_library(cdn_code, library, version, basedir) ⇒ Object
770 771 772 773 774 775 |
# File 'lib/cdnget.rb', line 770 def do_download_library(cdn_code, library, version, basedir) cdn = find_cdn(cdn_code) version = _latest_version(cdn, library) if version == 'latest' cdn.download(library, version, basedir, quiet: @quiet) return nil end |
#do_find_library(cdn_code, library) ⇒ Object
718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 |
# File 'lib/cdnget.rb', line 718 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 << "info: #{d[:info]}\n" if d[:info] s << "license: #{d[:license]}\n" if d[:license] 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) ⇒ Object
742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 |
# File 'lib/cdnget.rb', line 742 def do_get_library(cdn_code, library, version) cdn = find_cdn(cdn_code) version = _latest_version(cdn, library) if version == 'latest' 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 << "info: #{d[:info]}\n" if d[:info] s << "npmpkg: #{d[:npmpkg]}\n" if d[:npmpkg] s << "default: #{d[:default]}\n" if d[:default] s << "license: #{d[:license]}\n" if d[:license] 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 ⇒ Object
701 702 703 704 |
# File 'lib/cdnget.rb', line 701 def do_list_cdns() return CLASSES.map {|c| "#{c::CODE}\n" }.join() if @quiet return CLASSES.map {|c| "%-10s # %s\n" % [c::CODE, c::SITE_URL] }.join() end |
#do_list_libraries(cdn_code) ⇒ Object
706 707 708 709 710 711 |
# File 'lib/cdnget.rb', line 706 def do_list_libraries(cdn_code) cdn = find_cdn(cdn_code) list = cdn.list() or raise CommandError.new("#{cdn_code}: cannot list libraries; please specify pattern such as 'jquery*'.") return render_list(list) end |
#do_search_libraries(cdn_code, pattern) ⇒ Object
713 714 715 716 |
# File 'lib/cdnget.rb', line 713 def do_search_libraries(cdn_code, pattern) cdn = find_cdn(cdn_code) return render_list(cdn.search(pattern)) end |
#find_cdn(cdn_code) ⇒ Object
690 691 692 693 694 |
# File 'lib/cdnget.rb', line 690 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(debug_mode: @debug_mode) end |
#help_message ⇒ Object
585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 |
# File 'lib/cdnget.rb', line 585 def () script = @script return <<END #{script} -- download files from public CDN (cdnjs/jsdelivr/unpkg/google) Usage: #{script} [<options>] [<CDN> [<library> [<version> [<directory>]]]] Options: -h, --help : help -v, --version : version -q, --quiet : minimal output --debug : (debug mode) Example: $ #{script} # list public CDN names $ #{script} [-q] cdnjs # list libraries $ #{script} [-q] cdnjs 'jquery*' # search libraries $ #{script} [-q] cdnjs jquery # list versions $ #{script} [-q] cdnjs jquery latest # show latest version $ #{script} [-q] cdnjs jquery 3.6.0 # list files $ #{script} [-q] cdnjs jquery 3.6.0 /tmp # download files into directory END end |
#parse_cmdopts(cmdargs, short_opts, long_opts) ⇒ Object
663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 |
# File 'lib/cdnget.rb', line 663 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) ⇒ Object
696 697 698 699 |
# File 'lib/cdnget.rb', line 696 def render_list(list) return list.collect {|d| "#{d[:name]}\n" }.join() if @quiet return list.collect {|d| "%-20s # %s\n" % [d[:name], d[:desc]] }.join() end |
#run(*args) ⇒ Object
620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 |
# File 'lib/cdnget.rb', line 620 def run(*args) cmdopts = parse_cmdopts(args, "hvq", ["help", "version", "quiet", "debug"]) return () if cmdopts['h'] || cmdopts['help'] return RELEASE + "\n" if cmdopts['v'] || cmdopts['version'] @quiet = cmdopts['quiet'] || cmdopts['q'] @debug_mode = cmdopts['debug'] # 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 return library.include?('*') \ ? do_search_libraries(cdn_code, library) \ : do_find_library(cdn_code, library) 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) ⇒ Object
652 653 654 655 656 657 658 659 660 661 |
# File 'lib/cdnget.rb', line 652 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 |