class Jisota::FileScript::Executor

Attributes

context[R]
script[R]

Public Class Methods

new(script: , context: ) click to toggle source
# File lib/jisota/file_script.rb, line 57
def initialize(script: , context: )
  @script = script
  @context = context
end

Public Instance Methods

handle_file_move() click to toggle source
# File lib/jisota/file_script.rb, line 87
def handle_file_move
  result = ssh_session.command("cmp -s #{tmp_file} #{to}")
  case result
  when 0 then same_file
  when 1 then move_with_callback(update, "File exists and update is not allowed. Skipping.")
  when 2 then move_with_callback(create, "File does not exist and create is not allowed. Skipping.")
  end
end
make_temp_dir() click to toggle source
# File lib/jisota/file_script.rb, line 78
def make_temp_dir
  ssh_session.command("mkdir -p #{tmp_dir}", logger)
end
move_with_callback(callback, callback_not_found_message) click to toggle source
# File lib/jisota/file_script.rb, line 101
def move_with_callback(callback, callback_not_found_message)
  if callback
    result = ssh_session.command("sudo mkdir -p `dirname #{to}` && sudo mv #{tmp_file} #{to}", logger)
    if result == 0
      if callback.is_a?(ScriptBlock)
        callback_script = callback.evaluate(context)
        callback_script.execute(context)
      else
        true
      end
    end
  else
    logger.system_message(callback_not_found_message)
    true
  end
end
run() click to toggle source
# File lib/jisota/file_script.rb, line 70
def run
  logger.system_message("File #{from} -> #{to}") do
    make_temp_dir
    upload
    handle_file_move
  end
end
same_file() click to toggle source
# File lib/jisota/file_script.rb, line 96
def same_file
  logger.system_message("Files are the same. Skipping move.")
  true
end
tmp_dir() click to toggle source
# File lib/jisota/file_script.rb, line 66
def tmp_dir
  "tmp/jisota"
end
tmp_file() click to toggle source
# File lib/jisota/file_script.rb, line 62
def tmp_file
  @tmp_file ||= "#{tmp_dir}/#{SecureRandom.hex}"
end
upload() click to toggle source
# File lib/jisota/file_script.rb, line 82
def upload
  logger.system_message("Uploading #{from} -> #{tmp_file}")
  ssh_session.upload(from: from, to: tmp_file)
end