class CopyrightHeader::CommandLine

Attributes

options[RW]
optparse[RW]
parser[RW]

Public Class Methods

new(options = {}) click to toggle source
# File lib/copyright_header/command_line.rb, line 28
def initialize(options = {})
  begin
    @options = options
    @options[:base_path] ||= File.expand_path File.dirname(__FILE__) + "/../../"
    @optparse = OptionParser.new do |opts|
      opts.banner = "Usage: #{$0} options [file]"
      
      @options[:dry_run] ||= false
      opts.on( '-n', '--dry-run', 'Output the parsed files to STDOUT' ) do
        @options[:dry_run] = true
      end
      
      opts.on( '-o', '--output-dir DIR', 'Use DIR as output directory') do |dir|
        @options[:output_dir] = dir.gsub(/\/+$/, '')
      end
      
      opts.on( '--license-file FILE', 'Use FILE as header (instead of using --license argument)' ) do|file|
        @options[:license_file] = file
      end

      opts.on( '--license [' + Dir.glob(@options[:base_path] + '/licenses/*').map { |f| File.basename(f, '.erb') }.join('|') + ']', 'Use LICENSE as header' ) do|license|
        @options[:license] = license
      end

      opts.on( '--copyright-software NAME', 'The common name for this piece of software (e.g. "Copyright Header")' ) do|name|
        @options[:copyright_software] = name
      end

      opts.on( '--copyright-software-description DESC', 'The detailed description for this piece of software (e.g. "A utility to manipulate copyright headers on source code files")' ) do|desc|
        @options[:copyright_software_description] = desc
      end

      @options[:copyright_holders] ||= []
      opts.on( '--copyright-holder NAME', 'The legal owner of the copyright for the software. (e.g. "Erik Osterman <e@osterman.com>"). Repeat argument for multiple names.' ) do|name|
        @options[:copyright_holders] << name
      end

      @options[:copyright_years] ||= []
      opts.on( '--copyright-year YEAR', 'The years for which the copyright exists (e.g. "2012"). Repeat argument for multiple years.' ) do|year|
        @options[:copyright_years] << year
      end

      @options[:word_wrap] ||= 80
      opts.on( '-w', '--word-wrap LEN', 'Maximum number of characters per line for license (default: 80)' ) do |len|
        @options[:word_wrap] = len.to_i
      end

      opts.on( '-a', '--add-path PATH', 'Recursively insert header in all files found in path (allows multiple paths separated by platform path-separator "' + File::PATH_SEPARATOR + '")' ) do |path|
        @options[:add_path] = path
      end

      opts.on( '-r', '--remove-path PATH', 'Recursively remove header in all files found in path (allows multiple paths separated by platform path-separator "' + File::PATH_SEPARATOR + '")' ) do |path|
        @options[:remove_path] = path
      end

      @options[:guess_extension] ||= false
      opts.on( '-g', '--guess-extension', 'Use the GitHub Linguist gem to guess the extension of the source code when no extension can be determined (experimental).' ) do 
        @options[:guess_extension] = true
      end

      @options[:syntax] ||= @options[:base_path] + '/contrib/syntax.yml'
      opts.on( '-c', '--syntax FILE', 'Syntax configuration file' ) do |path|
        @options[:syntax] = path
      end

      opts.on( '-V', '--version', 'Display version information' ) do
        STDERR.puts "CopyrightHeader #{CopyrightHeader::VERSION}",
                    "Copyright (C) 2012 Erik Osterman <e@osterman.com>",
                    "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>",
                    "This is free software: you are free to change and redistribute it.", 
                    "There is NO WARRANTY, to the extent permitted by law."
        exit
      end

      opts.on( '-h', '--help', 'Display this screen' ) do
        puts opts
        exit
      end
    end

    @optparse.parse!

    unless @options[:license].nil?
      unless @options[:license_file].nil?
        raise AmbiguousArgumentException.new("Cannot pass both --license and --license-file arguments")
      end
      # get the license_file from the shiped files
      @options[:license_file] ||= @options[:base_path] + '/licenses/' + @options[:license] + '.erb'
    end

    unless @options.has_key?(:license_file)
      raise MissingArgumentException.new("Missing --license or --license-file argument")
    end

    unless File.file?(@options[:license_file])
      raise MissingArgumentException.new("Invalid --license or --license-file argument. Cannot open #{@options[:license_file]}")
    end
 
    if @options[:license]
      raise MissingArgumentException.new("Missing --copyright-software argument") if @options[:copyright_software].nil?
      raise MissingArgumentException.new("Missing --copyright-software-description argument") if @options[:copyright_software_description].nil?
      raise MissingArgumentException.new("Missing --copyright-holder argument") unless @options[:copyright_holders].length > 0
      raise MissingArgumentException.new("Missing --copyright-year argument") unless @options[:copyright_years].length > 0
    end
  rescue MissingArgumentException => e
    STDERR.puts e.message, @optparse
    exit (1)
  end
end

Public Instance Methods

execute() click to toggle source
# File lib/copyright_header/command_line.rb, line 138
def execute
  STDERR.puts "-- DRY RUN --" if @options[:dry_run]
  @parser = CopyrightHeader::Parser.new(@options)
  @parser.execute
end