Class: Helm::Commands::Servers::Edit

Inherits:
Command
  • Object
show all
Defined in:
lib/helm/application.rb

Instance Attribute Summary

Attributes inherited from Command

#app_config, #options

Instance Method Summary collapse

Methods inherited from Command

#if_option, #initialize

Constructor Details

This class inherits a constructor from Helm::Commands::Command

Instance Method Details

#edit_tempfile(file) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/helm/application.rb', line 91

def edit_tempfile(file)
  require 'io/console'

  edit_shell = Caliph::Shell.new
  edit_shell.output_stream = File.new("/dev/null", "a")
  edit_shell.run(ENV['EDITOR'] || app_config.editor, file.path) do |cmd|
    cmd.redirect_stdin(IO.console.path)
    cmd.redirect_stdout(IO.console.path)
  end
ensure
  edit_shell.output_stream.close
end

#executeObject



137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/helm/application.rb', line 137

def execute
  require 'yaml'
  require 'helm/persisters/server'

  query = server_query

  unless query.to_a.length == 1
    puts "#{query.to_a.length} servers match #{query.constraint.inspect}"
    exit 1
  end

  begin
    file = Tempfile.new('server', app_config.tempdir)

    server_id = put_server_record_in_file(query, file)

    edit_tempfile(file)

    save_server_record_to_database(server_id, file)
  ensure
    file.unlink if file
  end
end

#put_server_record_in_file(query, file) ⇒ Object



116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/helm/application.rb', line 116

def put_server_record_in_file(query, file)
  server = query.first
  server_hash = server.to_hash

  server_id = server_hash.delete(:server_id)

  file.write("# Edit this file to update the server\n")
  file.write(server_hash.to_yaml)
  file.close

  return server_id
end

#save_server_record_to_database(server_id, file) ⇒ Object



129
130
131
132
133
134
135
# File 'lib/helm/application.rb', line 129

def save_server_record_to_database(server_id, file)
  file.open
  new_hash = YAML.load(file.read).merge(:server_id => server_id)

  store = Helm::Persisters::Server.new(app_config.connstring)
  store.insert_or_update(new_hash)
end

#server_queryObject



104
105
106
107
108
109
110
111
112
113
114
# File 'lib/helm/application.rb', line 104

def server_query
  query = Helm::Queries::Server.new(app_config.connstring)

  if_option(:id){|server_id| query.server_id = server_id }
  if_option(:client){|client| query.client = client }
  if_option(:role){|role| query.role = role }
  if_option(:name){|name| query.name = name }
  if_option(:platform){|platform| query.platform = platform }

  query
end