Class: Divide::CLI

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(argv = []) ⇒ CLI

Returns a new instance of CLI.



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

def initialize(argv=[])
  @options = 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

Instance Attribute Details

#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



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

def current_app_name
  @current_app_name ||= TerminalBridge.current_app_name
end

#current_directoryObject



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

def current_directory
  @current_directory ||= Dir.pwd
end

#error(type) ⇒ Object



26
27
28
29
30
31
32
33
# File 'lib/divide/cli.rb', line 26

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



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

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

#extract_processesObject



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

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

#extracted_processesObject



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

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

#extractorObject



68
69
70
# File 'lib/divide/cli.rb', line 68

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

#show_helpObject



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

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

#show_versionObject



35
36
37
# File 'lib/divide/cli.rb', line 35

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

#start_processes(processes) ⇒ Object



17
18
19
# File 'lib/divide/cli.rb', line 17

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

#terminalObject



60
61
62
63
64
65
66
# File 'lib/divide/cli.rb', line 60

def terminal
  @terminal ||= case current_app_name.downcase
                when 'terminal' then TerminalBridge::Terminal.new
                when 'iterm' then TerminalBridge::ITerm.new
                else nil
                end
end