#!/usr/bin/env ruby require 'active_support/core_ext/hash' require 'thor' require_relative '../lib/schema_dev/config' require_relative '../lib/schema_dev/runner' require_relative '../lib/schema_dev/version' def runner $config ||= SchemaDev::Config.load $runner ||= SchemaDev::Runner.new($config) end $cmd = File.basename $0 class CLI < Thor def self.matrix_options method_option :dry_run, aliases: "-n", type: :boolean, desc: "Show what the commands would be without running them" method_option :quick, type: :boolean, desc: "Only execute on the 'quick' choice: #{$config ? $config.quick.inspect : "[from schema_dev.yml]"}" method_option :ruby, type: :string, desc: "Only execute for the specified version of ruby" method_option :rails, type: :string, desc: "Only execute for the specified version of rails" method_option :db, type: :string, desc: "Only execute for the specified database" end desc "travis", "create/update .travis.yml based on schema_dev.yml values" def travis runner.travis end desc "gemfiles", "create/update gemfiles/* hierarchy based on schema_dev.yml values" def gemfiles runner.gemfiles end desc "refresh", "shorthand for runnin both '#{$cmd} travis' and '#{$cmd} gemfiles'" def refresh runner.refresh end desc "matrix", "run a command over the matrix" matrix_options def matrix(*args) runner.run(args, **options.to_h.symbolize_keys) end desc "bundle", "shorthand for '#{$cmd} matrix bundle ...'" matrix_options def bundle(*args) runner.run('bundle', args, **options.to_h.symbolize_keys) end desc "rake", "shorthand for '#{$cmd} matrix bundle exec rake ...'" matrix_options def rake(*args) runner.run('bundle', 'exec', 'rake', args, **options.to_h.symbolize_keys) end desc "rspec", "shorthand for '#{$cmd} bundle exec rspec ...'" matrix_options def rspec(*args) runner.run('bundle', 'exec', 'rspec', args, **options.to_h.symbolize_keys) end end if ARGV[0] == "--version" puts "SchemaDev #{SchemaDev::VERSION}" exit end CLI.start(ARGV)