module EY::UtilityMethods

Protected Instance Methods

api() click to toggle source
# File lib/engineyard/thor.rb, line 7
def api
  @api ||= EY::CLI::API.new(config.endpoint, ui, options[:api_token])
end
config() click to toggle source
# File lib/engineyard/thor.rb, line 11
def config
  @config ||= EY::Config.new
end
fetch_app_environment(app_name, environment_name, account_name) click to toggle source
# File lib/engineyard/thor.rb, line 81
    def fetch_app_environment(app_name, environment_name, account_name)
      ui.info "Loading application data from Engine Yard Cloud..."

      environment_name ||= use_default_environment
      remotes = repo.remotes if in_repo?
      constraints = {
        app_name:         app_name,
        environment_name: environment_name,
        account_name:     account_name,
        remotes:          remotes,
      }

      if constraints.all? { |k,v| v.nil? || v.empty? || v.to_s.empty? }
        raise EY::NoMatchesError.new <<-ERROR
Unable to find application without a git remote URI or app name.

Please specify --app=app_name or add this application at #{config.endpoint}"
        ERROR
      end

      resolver = api.resolve_app_environments(constraints)

      resolver.one_match { |match| return match }
      resolver.no_matches do |errors, suggestions|
        raise_no_matches(errors, suggestions)
      end
      resolver.many_matches do |app_envs|
        raise EY::MultipleMatchesError.new(too_many_app_environments_error(app_envs))
      end
    end
fetch_environment(environment_name, account_name) click to toggle source
# File lib/engineyard/thor.rb, line 49
def fetch_environment(environment_name, account_name)
  ui.info "Loading application data from Engine Yard Cloud..."

  environment_name ||= use_default_environment
  remotes = repo.remotes if in_repo?
  constraints = {
    environment_name: environment_name,
    account_name:     account_name,
    remotes:          remotes,
  }

  resolver = api.resolve_environments(constraints)

  resolver.one_match { |match| return match  }

  resolver.no_matches do |errors, suggestions|
    raise_no_matches(errors, suggestions)
  end

  resolver.many_matches do |matches|
    if environment_name
      message = "Multiple environments possible, please be more specific:\n\n"
      matches.each do |env|
        message << "\t#{env.name.ljust(25)} # ey <command> --environment='#{env.name}' --account='#{env.account.name}'\n"
      end
      raise EY::MultipleMatchesError.new(message)
    else
      raise EY::AmbiguousEnvironmentGitUriError.new(matches)
    end
  end
end
in_repo?() click to toggle source
# File lib/engineyard/thor.rb, line 20
def in_repo?
  EY::Repo.exist?
end
raise_no_matches(errors, suggestions) click to toggle source
# File lib/engineyard/thor.rb, line 112
def raise_no_matches(errors, suggestions)
  message = "We found the following suggestions:\n" if suggestions.any?

  suggestions.each do |suggest|
    message << " # ey <command> --account='#{suggest['account_name']}' --app='#{suggest['app_name']}' --environment='#{suggest['env_name']}'\n"
  end

  raise EY::NoMatchesError.new([errors,message].compact.join("\n").strip)
end
repo() click to toggle source
# File lib/engineyard/thor.rb, line 24
def repo
  @repo ||= EY::Repo.new
end
serverside_runner(app_env, verbose, serverside_version = serverside_version(), ignore_bad_bridge = false) click to toggle source
# File lib/engineyard/thor.rb, line 32
def serverside_runner(app_env, verbose, serverside_version = serverside_version(), ignore_bad_bridge = false)
  ServersideRunner.new({
    bridge:             app_env.environment.bridge!(ignore_bad_bridge).hostname,
    app:                app_env.app,
    environment:        app_env.environment,
    verbose:            verbose,
    serverside_version: serverside_version
  })
end
serverside_version() click to toggle source
# File lib/engineyard/thor.rb, line 28
def serverside_version
  respond_to?(:options) && options[:serverside_version] || EY::ENGINEYARD_SERVERSIDE_VERSION
end
too_many_app_environments_error(app_envs) click to toggle source
# File lib/engineyard/thor.rb, line 122
def too_many_app_environments_error(app_envs)
  message = "Multiple application environments possible, please be more specific:\n\n"

  app_envs.group_by do |app_env|
    [app_env.account_name, app_env.app_name]
  end.sort_by { |k,v| k.join }.each do |(account_name, app_name), grouped_app_envs|
    message << "\n"
    message << account_name << "/" << app_name << "\n"
    grouped_app_envs.map { |ae| ae.environment_name }.uniq.sort.each do |env_name|
      message << "\t#{env_name.ljust(25)}"
      message << " # ey <command> --account='#{account_name}' --app='#{app_name}' --environment='#{env_name}'\n"
    end
  end
  message
end
ui() click to toggle source

engineyard gem uses ui everywhere, thore supplies shell

# File lib/engineyard/thor.rb, line 16
def ui
  shell
end
use_default_environment() click to toggle source
# File lib/engineyard/thor.rb, line 42
def use_default_environment
  if env = config.default_environment
    ui.info "Using default environment #{config.default_environment.inspect} from ey.yml."
    env
  end
end