class Dosh::Script

Public Class Methods

new(use_require = false) click to toggle source
# File lib/script.rb, line 23
def initialize(use_require = false)
  @use_require = use_require
end

Public Instance Methods

candidate_files(filename) click to toggle source
# File lib/script.rb, line 27
def candidate_files(filename)
  fn = [filename]
  fn += EXPLICIT_EXTENSIONS.map { |ext| "#{filename}#{ext}"} unless has_explicit_extension?(filename)
  fn += fn.product(platform_prefixes).map { |file, dir| File.join(dir, file) }
  fn.product([@@dosh_dir, Dir.pwd]).map { |file, dir| File.join(dir, file) }.uniq
end
resolve_file(filename) click to toggle source
# File lib/script.rb, line 34
def resolve_file(filename)
  candidate_files(filename).detect { |file| File.exists?(file) }
end
script(*args, &block) click to toggle source
# File lib/script.rb, line 38
def script(*args, &block)
  if args.first == :meet
    command = args.first
    task = Meet.new
    task.instance_eval(&block)
  else 
    filename = nil
    command = args.shift
    if @use_require || !File.exists?(command)
      filename = resolve_file(command)
    end
    task = @use_require ? Require.new(filename, args) : Standard.new(filename, command, args)
  end

  raise "#{command} failed" unless run_dependency(command, task, &block)

rescue Exception => e
  raise e
end

Protected Instance Methods

has_explicit_extension?(filename) click to toggle source
# File lib/script.rb, line 60
def has_explicit_extension?(filename)
  !!EXPLICIT_EXTENSIONS.detect { |ext| filename.end_with?(ext) }
end
run_dependency(header, task, &block) click to toggle source
# File lib/script.rb, line 64
def run_dependency(header, task, &block)
  current = ENV['DOSH_INDENT'] || ""
  log_started(header)
  ENV['DOSH_INDENT'] = "#{current}  "
  result = task.run(&block)
  ENV['DOSH_INDENT'] = current

  result ? log_success(header) : log_failure(header)
  result
rescue Exception => e
  puts e.message
  puts e.backtrace
  ENV['DOSH_INDENT'] = current
  log_failure(header)
  raise e
end