class Divide::CLI

Constants

OPTIONS

Attributes

flags[R]
options[R]

Public Class Methods

new(argv=[]) click to toggle source
# File lib/divide/cli.rb, line 6
def initialize(argv=[])
  @options = {}
  OPTIONS.each do |option|
    is_boolean = option =~ /\?$/
    option_name = option.sub('--', '')

    if is_boolean
      option.sub!(/\?$/, '')
      option_name.sub!(/\?$/, '')

      @options[option_name.to_sym] = argv.include?(option)
      argv.delete(option)
    elsif argv.include?(option)
      value_index = argv.index(option) + 1

      @options[option_name.to_sym] = argv[value_index]
      argv.delete_at(value_index)
      argv.delete(option)
    end
  end

  if from = @options[:from]
    @options[:from] = "#{Dir.pwd}/#{from}"
  else
    @options[:from] = Dir.pwd
  end

  @flags = (argv).each_slice(2).to_a

  show_version if argv.grep(/^-v|--version$/).any?
  show_help if argv.grep(/^-h|--help$/).any?

  error(:app_not_supported) unless terminal

  processes = extract_processes
  start_processes(processes)
end

Public Instance Methods

current_app_name() click to toggle source
# File lib/divide/cli.rb, line 75
def current_app_name
  @current_app_name ||= TerminalBridge.current_app_name
end
current_directory() click to toggle source
# File lib/divide/cli.rb, line 83
def current_directory
  @current_directory ||= Dir.pwd
end
error(type) click to toggle source
# File lib/divide/cli.rb, line 53
def error(type)
  errors = {
    no_procfile: "#{current_directory}: There is no Procfile in this directory",
    app_not_supported: "#{current_app_name} is not yet supported, please fill in a request https://github.com/EtienneLem/divide/issues",
  }

  exit_with_message(errors[type], 1)
end
exit_with_message(message, code=0) click to toggle source
# File lib/divide/cli.rb, line 70
def exit_with_message(message, code=0)
  STDOUT.puts(message)
  exit code
end
extract_processes() click to toggle source
# File lib/divide/cli.rb, line 48
def extract_processes
  error(:no_procfile) unless extracted_processes
  extracted_processes.to_a.map { |a| a[1] }
end
extracted_processes() click to toggle source
# File lib/divide/cli.rb, line 79
def extracted_processes
  @extracted_processes ||= extractor.extract_processes!
end
extractor() click to toggle source
# File lib/divide/cli.rb, line 95
def extractor
  @extractor ||= Extractor.new(@flags, @options)
end
show_help() click to toggle source
# File lib/divide/cli.rb, line 66
def show_help
  exit_with_message("Usage: divide [options]")
end
show_version() click to toggle source
# File lib/divide/cli.rb, line 62
def show_version
  exit_with_message("Divide #{VERSION}")
end
start_processes(processes) click to toggle source
# File lib/divide/cli.rb, line 44
def start_processes(processes)
  terminal.exec(processes)
end
terminal() click to toggle source
# File lib/divide/cli.rb, line 87
def terminal
  @terminal ||= case current_app_name.downcase
                when 'terminal' then TerminalBridge::Terminal.new(@options)
                when 'iterm' then TerminalBridge::ITerm.new(@options)
                else nil
                end
end