lib/aigu/cli.rb in aigu-0.4.5 vs lib/aigu/cli.rb in aigu-0.5

- old
+ new

@@ -1,23 +1,37 @@ module Aigu class CLI + COMMANDS = { + 'rails-import' => 'RailsImporter', + 'rails-export' => 'RailsExporter', + 'android-import' => 'AndroidImporter', + 'android-export' => 'AndroidExporter', + 'core-import' => 'CoreImporter', + 'core-export' => 'CoreExporter', + 'ios-import' => 'IOSImporter', + 'ios-export' => 'IOSExporter', + 'ember-import' => 'EmberImporter', + 'ember-export' => 'EmberExporter', + 'merge' => 'Merger', + 'unmerge' => 'Unmerger' + } + def initialize(env, argv) @env = env @command = argv.first =~ /^[^-]/ ? argv.shift : nil + @command = @command.gsub('_', '-') if @command @argv = argv @options = {} @options = parse_options_from_yaml(@options) @options = parse_options_from_arguments(@options) end def run - service_name = "#{@command}er".split('_').map(&:capitalize).join - - begin - service_class = Aigu.const_get(service_name) - rescue NameError - puts "The Aigu::#{service_name} service doesn’t exist. Nice try." + if COMMANDS[@command] + service_class = Aigu.const_get(COMMANDS[@command]) + else + puts "The #{@command} command doesn’t exist. Nice try." exit 0 end service_object = service_class.new(@options) service_object.process! @@ -40,10 +54,17 @@ end # rubocop:disable Metrics/MethodLength def parse_options_from_arguments(options) OptionParser.new do |opts| - opts.banner = 'Usage: aigu [options]' + opts.banner = <<DOC +"Usage: aigu <command> [options]" + +Commands: +#{COMMANDS.keys.map { |command| " #{command}" }.join("\n")} + +Options: +DOC opts.on('--input-directory=', 'The directory in which the Rails YAML localization files are stored.') do |directory| options[:'input-directory'] = directory end