Sha256: 8d383f6a2746578badf4976450d1285d76299acc799a3bc70c57a856ba221150

Contents?: true

Size: 1.74 KB

Versions: 5

Compression:

Stored size: 1.74 KB

Contents

require 'appbundler/version'
require 'appbundler/app'

module Appbundler
  class CLI

    def self.run(argv)
      cli = new(argv)
      cli.validate!
      cli.run
    end

    attr_reader :argv

    attr_reader :app_path
    attr_reader :bin_path

    def initialize(argv)
      @argv = argv
    end

    def validate!
      if argv.any? {|arg| %w{-h --help help -v --version}.include?(arg) }
        $stdout.print(usage)
        exit 0
      elsif argv.size != 2
        usage_and_exit!
      else
        @app_path = File.expand_path(argv[0])
        @bin_path = File.expand_path(argv[1])
        verify_app_path
        verify_bin_path
      end
    end

    def verify_app_path
      if !File.directory?(app_path)
        err("APPLICATION_DIR `#{app_path}' is not a directory or doesn't exist")
        usage_and_exit!
      elsif !File.exist?(File.join(app_path, "Gemfile.lock"))
        err("APPLICATION_DIR does not contain require Gemfile.lock")
        usage_and_exit!
      end
    end

    def verify_bin_path
      if !File.directory?(bin_path)
        err("BINSTUB_DIR `#{bin_path}' is not a directory or doesn't exist")
        usage_and_exit!
      end
    end

    def run
      created_stubs = App.new(app_path, bin_path).write_executable_stubs
      created_stubs.each do |real_executable_path, stub_path|
        $stdout.puts "Generated binstub #{stub_path} => #{real_executable_path}"
      end
    end

    def err(message)
      $stderr.print("#{message}\n")
    end

    def usage_and_exit!
      err(usage)
      exit 1
    end

    def usage
      <<-E
Usage: appbundler APPLICATION_DIR BINSTUB_DIR

  APPLICATION_DIR is the root directory of your app
  BINSTUB_DIR is the directory where you want generated executables to be written
E
    end

  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
appbundler-0.4.0 lib/appbundler/cli.rb
appbundler-0.3.0 lib/appbundler/cli.rb
appbundler-0.2.0 lib/appbundler/cli.rb
appbundler-0.1.0 lib/appbundler/cli.rb
appbundler-0.1.0.beta.0 lib/appbundler/cli.rb