class BaseProvision

Attributes

env[R]
interpolator[R]
script_list[R]
server_info[R]

Public Class Methods

new(config_file_name, scripts_file_names) click to toggle source
# File lib/script_executor/base_provision.rb, line 13
def initialize(config_file_name, scripts_file_names)
  @terminal = HighLine.new
  @interpolator = TextInterpolator.new

  @env = read_config(config_file_name)

  @script_list = {}

  scripts_file_names.each do |name|
    @script_list.merge!(scripts(name))
  end

  @server_info = env[:node] ? env[:node] : {}

  create_script_methods
end

Public Instance Methods

ask_password(message) click to toggle source
# File lib/script_executor/base_provision.rb, line 36
def ask_password(message)
  @terminal.ask(message) {|q| q.echo = '*'}
end
create_script_methods() click to toggle source
# File lib/script_executor/base_provision.rb, line 50
def create_script_methods
  script_list.keys.each do |name|
    singleton_class.send(:define_method, name.to_sym) do |type, params|
      self.run name.to_s, type, env.merge(ARGV: params.join(' '))
    end
  end
end
create_thor_methods(parent_class, type=:string) click to toggle source
# File lib/script_executor/base_provision.rb, line 58
def create_thor_methods(parent_class, type=:string)
  if parent_class.ancestors.collect(&:to_s).include?('Thor')
    provision = self

    provision.script_list.each do |name, value|
      title = value[:comment]

      title = title.nil? ? name : title

      parent_class.send(:desc, name, title) if parent_class.respond_to?(:desc)

      parent_class.send(:define_method, name.to_sym) do |*params|
        provision.send "#{name}".to_sym, type, params
      end
    end
  end
end
read_config(config_file_name) click to toggle source
# File lib/script_executor/base_provision.rb, line 40
def read_config(config_file_name)
  hash = JSON.parse(File.read(config_file_name), :symbolize_names => true)

  result = interpolator.interpolate hash

  puts interpolator.errors if interpolator.errors.size > 0

  result
end
run(script_name, type=:string, env={}) click to toggle source
# File lib/script_executor/base_provision.rb, line 30
def run(script_name, type=:string, env={})
  execute(server_info) do
    evaluate_script_body(script_list[script_name.to_sym][:code], env, type)
  end
end