Class: Meroku::CLI::Cli

Inherits:
Thor
  • Object
show all
Includes:
Util
Defined in:
lib/meroku/cli/cli.rb

Instance Method Summary collapse

Instance Method Details

#_run(command) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/meroku/cli/cli.rb', line 16

def _run(command)
  user_id = `cat /tmp/meroku.id`.chomp
  server = "u#{user_id}@www.meroku.com"
  name = app_name
  if IO.read("Gemfile") =~ /^[^\#]*gem ["']mysql/
    dbtype="mysql"
  else
    dbtype="postgres"
  end

  _additional_env_vars = additional_env_vars(name,dbtype)
  if command == "bash"
    exec "ssh -t -o StrictHostKeyChecking=no #{server} '#{_additional_env_vars} ;echo INFO: Type exit quit this remote shell; cd #{name}; bash --login'"
  end
  abort "ERROR: Unexpected output for \"git remote -v\"" if name.blank?
  require 'open3'
  stdout, stderr, exit_status = Open3.capture3(%Q[ssh -o 'StrictHostKeyChecking=no' #{server} 'export PATH=$PATH:/opt/bitnami/nodejs/bin; source ~/.rvm/scripts/rvm; cd #{name}; #{_additional_env_vars} ; #{command}'])
  puts stdout if !stdout.empty?
  puts stderr if !stderr.empty?
  puts "meroku run finished with exit code #{exit_status.exitstatus}" if exit_status.exitstatus != 0
end

#create(name) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/meroku/cli/cli.rb', line 39

def create(name)
  require 'rest-client'
  require 'rack'
  
  return if !cli_logged_in?
  resp = RestClient.post 'https://www.meroku.com/meroku/apps.json', { :"app[name]" => name, authentication: { app: name, token: cli_token} }
  puts "Created #{JSON.parse(resp)["name"]}! (#{resp.code} #{Rack::Utils::HTTP_STATUS_CODES[resp.code]})"
  `git remote remove meroku 2>&1 >/dev/null`
  `git remote add meroku u#{cli_user_id}@www.meroku.com:#{name}.git 2>&1 >/dev/null`
  puts "Added git remote meroku ( u#{cli_user_id}@www.meroku.com:#{name}.git )"
rescue RestClient::Exception => e
  abort e.to_s if e == RestClient::ServerBrokeConnection
  out_str = "ERROR"
  if valid_json?(e.response) && JSON.parse(e.response)["errors"].size >= 1
    out_str += " "
    out_str += JSON.parse(e.response)["errors"].map { |e| e.join(' ') }.to_sentence
  end
  out_str += " (#{e.to_s}) "
  puts out_str
end

#loginObject



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/meroku/cli/cli.rb', line 63

def ()
  require 'rest-client'
  require 'rack'
  resp = RestClient.post 'https://www.meroku.com/users/sign_in.json', {:"user[email]" => options[:email], :"user[password]" => options[:password] }  
  puts "Logged in! (#{resp.code} #{Rack::Utils::HTTP_STATUS_CODES[resp.code]})"
  IO.write("/tmp/meroku.token", JSON.parse(resp)["encrypted_password"])
  IO.write("/tmp/meroku.id", JSON.parse(resp)["id"])
rescue RestClient::Exception => e
  abort e.to_s if e.response.code == 500 || e.response.code == 404
  out_str = "ERROR"
  if JSON.parse(e.response)["errors"].is_a? Array
    out_str += " "
    out_str += JSON.parse(e.response)["errors"].map { |e| e.join(' ') }.to_sentence
  end
  out_str += " (#{e.to_s}) "
  puts out_str
end

#signupObject



84
85
86
87
88
89
90
91
92
93
94
# File 'lib/meroku/cli/cli.rb', line 84

def ()
  require 'rest-client'
  require 'rack'
  resp = RestClient.post 'https://www.meroku.com/users.json', {:"user[email]" => options[:email], :"user[password]" => options[:password], :"user[password_confirmation]" => options[:password] }
  puts "Signed up #{JSON.parse(resp)["email"]}! (#{resp.code} #{Rack::Utils::HTTP_STATUS_CODES[resp.code]})"
rescue RestClient::Exception => e
  abort e.to_s if e.response.code == 500 || e.response.code == 404
  puts "ERROR " +
    JSON.parse(e.response)["errors"].map { |e| e.join(' ') }.to_sentence +
    " (#{e.to_s})"
end