Class: Divide::CLI

Inherits:
Object
  • Object
show all
Defined in:
lib/divide/cli.rb

Constant Summary collapse

OPTIONS =
%w(--tabs)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(argv = []) ⇒ CLI

Returns a new instance of CLI.



6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/divide/cli.rb', line 6

def initialize(argv=[])
  @options = {}
  OPTIONS.each { |option| @options[option.sub('--', '').to_sym] = argv.include?(option) }
  @flags = (argv - OPTIONS).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

Instance Attribute Details

#flagsObject (readonly)

Returns the value of attribute flags.



3
4
5
# File 'lib/divide/cli.rb', line 3

def flags
  @flags
end

#optionsObject (readonly)

Returns the value of attribute options.



3
4
5
# File 'lib/divide/cli.rb', line 3

def options
  @options
end

Instance Method Details

#current_app_nameObject



51
52
53
# File 'lib/divide/cli.rb', line 51

def current_app_name
  @current_app_name ||= TerminalBridge.current_app_name
end

#current_directoryObject



59
60
61
# File 'lib/divide/cli.rb', line 59

def current_directory
  @current_directory ||= Dir.pwd
end

#error(type) ⇒ Object



29
30
31
32
33
34
35
36
# File 'lib/divide/cli.rb', line 29

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) ⇒ Object



46
47
48
49
# File 'lib/divide/cli.rb', line 46

def exit_with_message(message, code=0)
  STDOUT.puts(message)
  exit code
end

#extract_processesObject



24
25
26
27
# File 'lib/divide/cli.rb', line 24

def extract_processes
  error(:no_procfile) unless extracted_processes
  extracted_processes.to_a.map { |a| a[1] }
end

#extracted_processesObject



55
56
57
# File 'lib/divide/cli.rb', line 55

def extracted_processes
  @extracted_processes ||= extractor.extract_processes!
end

#extractorObject



71
72
73
# File 'lib/divide/cli.rb', line 71

def extractor
  @extractor ||= Extractor.new(@flags)
end

#show_helpObject



42
43
44
# File 'lib/divide/cli.rb', line 42

def show_help
  exit_with_message("Usage: divide [options]")
end

#show_versionObject



38
39
40
# File 'lib/divide/cli.rb', line 38

def show_version
  exit_with_message("Divide #{VERSION}")
end

#start_processes(processes) ⇒ Object



20
21
22
# File 'lib/divide/cli.rb', line 20

def start_processes(processes)
  terminal.exec(processes)
end

#terminalObject



63
64
65
66
67
68
69
# File 'lib/divide/cli.rb', line 63

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