module Slugforge::Helper

Constants

SEGMENTS

Public Class Methods

included(base) click to toggle source
# File lib/slugforge/helper.rb, line 12
def self.included(base)
  base.send(:include, Slugforge::Helper::Build)
  base.send(:include, Slugforge::Helper::Config)
  base.send(:include, Slugforge::Helper::Fog)
  base.send(:include, Slugforge::Helper::Git)
  base.send(:include, Slugforge::Helper::Path)
  base.send(:include, Slugforge::Helper::Project)
end

Protected Instance Methods

delete_option(options, option) click to toggle source
# File lib/slugforge/helper.rb, line 128
def delete_option(options, option)
  result = options.dup
  index = result.index(option)
  if index
    result.delete_at(index)
    result.delete_at(index)
  end
  result
end
delete_switch(options, switch) click to toggle source
# File lib/slugforge/helper.rb, line 138
def delete_switch(options, switch)
  result = options.dup
  index = result.index(option)
  result.delete_at(index) if index
  result
end
elapsed_time() click to toggle source
# File lib/slugforge/helper.rb, line 54
def elapsed_time
  format_age @command_start_time
end
error_class() click to toggle source
# File lib/slugforge/helper.rb, line 50
def error_class
  json? ? JsonError : Thor::Error
end
execute(cmd) click to toggle source
# File lib/slugforge/helper.rb, line 71
def execute(cmd)
  unless pretend?
    if ruby_version_specified?
      cmd = "rvm #{options[:ruby]} do #{cmd}"
    elsif has_ruby_version_file?
      cmd = "rvm #{get_ruby_version_from_file} do #{cmd}"
    end

    # in thor, if capture is set, it uses backticks to run the command which returns a string.
    # Otherwise they use `system` which returns true or nil if it worked. So check the return value
    # and if it used backticks examine $? which keeps the result of the last command run to see
    # if it worked.
    returned = run(cmd, {:verbose => verbose?, :capture => verbose?})
    if returned.is_a?(String)
      process_status = $?
      logger.say_status :run, "Command result #{process_status.to_s}. Command output: #{returned}", :green
      return process_status.success?
    end

    return returned
  end
  true
end
force?() click to toggle source
# File lib/slugforge/helper.rb, line 22
def force?
  options[:force] == true
end
format_age(age) click to toggle source
# File lib/slugforge/helper.rb, line 162
def format_age(age)
  age = Time.now - age
  segments = {}

  SEGMENTS.each do |segment, length|
    next unless age >= length

    segments[segment] = (age / length).floor
    age = age % length
  end

  # We only show Minutes or Seconds if there is no other scope
  if segments.empty?
    segments[:minute] = (age / 60).floor if age >= 60
    segments[:second] = (age % 60).floor
  end

  segments.map do |seg, size|
    plural = 's' if size != 1
    "#{size} #{seg}#{plural}"
  end.join(', ')
end
format_size(size) click to toggle source
# File lib/slugforge/helper.rb, line 145
def format_size(size)
  units = %w(B KB MB GB TB)
  size, unit = units.reduce(size.to_f) do |(fsize, _), utype|
    fsize > 512 ? [fsize / 1024, utype] : (break [fsize, utype])
  end

  "#{size > 9 || size.modulo(1) < 0.1 ? '%d' : '%.1f'} %s" % [size, unit]
end
json?() click to toggle source
# File lib/slugforge/helper.rb, line 26
def json?
  options[:json] == true
end
logger() click to toggle source
# File lib/slugforge/helper.rb, line 58
def logger
  @logger ||= begin
                log_level = if quiet?
                              :quiet
                            elsif verbose?
                              :verbose
                            elsif json?
                              :json
                            end
                Slugforge::Logger.new(self.shell, log_level)
              end
end
notifications_enabled?() click to toggle source
# File lib/slugforge/helper.rb, line 38
def notifications_enabled?
  test? || !pretend?
end
pretend?() click to toggle source
# File lib/slugforge/helper.rb, line 30
def pretend?
  test? || options[:pretend] == true
end
quiet?() click to toggle source
# File lib/slugforge/helper.rb, line 42
def quiet?
  options[:quiet] == true
end
test?() click to toggle source
# File lib/slugforge/helper.rb, line 34
def test?
  options[:test] == true
end
verbose?() click to toggle source
# File lib/slugforge/helper.rb, line 46
def verbose?
  options[:verbose] == true
end
with_env(env={}) { || ... } click to toggle source
# File lib/slugforge/helper.rb, line 95
def with_env(env={}, &blk)
  original = ENV.to_hash
  ENV.replace(original.merge(env))

  # Ensure rbenv isn't locked into a version
  if ENV['RBENV_VERSION']
    ENV.delete('RBENV_VERSION')

    # when you use a shim provided by rbenv the $PATH is modified to point to the proper ruby version so shims are
    # bypassed. We need to remove those path entries to totally unset rbenv. We remove every .rbenv path _except_
    # shims so it can still use the correct version defined by .ruby-version.
    paths = ENV['PATH'].split(':').reject do |path|
      path =~ /\.rbenv\/(\w+)/ && !%w(shims bin).include?($1)
    end
    ENV['PATH'] = paths * ':'
  end

  # Ensure RVM isn't locked into a version
  ENV.delete('RUBY_VERSION')
  yield
ensure
  ENV.replace(original)
end
with_gemfile(gemfile) { || ... } click to toggle source
# File lib/slugforge/helper.rb, line 119
def with_gemfile(gemfile, &blk)
  with_env('BUNDLE_GEMFILE' => gemfile) do
    ENV.delete('GEM_HOME')
    ENV.delete('GEM_PATH')
    ENV.delete('RUBYOPT')
    yield
  end
end