module Podjumper::JumpInfo

Public Class Methods

load(args) click to toggle source
# File lib/podjumper/jump_info.rb, line 15
def load(args)
  args = args.dup
  namespace = disambiguate_namespace(args.shift)
  pod = disambiguate_pod(namespace, args.shift)
  container = disambiguate_container(pod, args.shift)

  new(namespace, pod, container)
end
load_rails_from_subdomain(subdomain) click to toggle source
# File lib/podjumper/jump_info.rb, line 39
def load_rails_from_subdomain(subdomain)
  pod = Pod.where(subdomain: subdomain).first
  new(pod.namespace, pod, pod.container('rails'))
end
load_upto_namespace(args) click to toggle source
# File lib/podjumper/jump_info.rb, line 32
def load_upto_namespace(args)
  args = args.dup
  namespace = disambiguate_namespace(args.shift)

  new(namespace, nil, nil)
end
load_upto_pod(args) click to toggle source
# File lib/podjumper/jump_info.rb, line 24
def load_upto_pod(args)
  args = args.dup
  namespace = disambiguate_namespace(args.shift)
  pod = disambiguate_pod(namespace, args.shift)

  new(namespace, pod, nil)
end

Private Class Methods

cli() click to toggle source
# File lib/podjumper/jump_info.rb, line 79
def cli
  @cli ||= HighLine.new
end
disambiguate(choices, query: nil, title: nil, &choice_name) click to toggle source
# File lib/podjumper/jump_info.rb, line 63
def disambiguate(choices, query: nil, title: nil, &choice_name)
  choice_name ||= :itself
  matches = matching_choices(choices, query, &choice_name)
  if matches.count == 1
    matches.first
  else
    puts title if title
    cli.ask_for_choice(matches, &choice_name)
  end
end
disambiguate_container(pod, query) click to toggle source
# File lib/podjumper/jump_info.rb, line 59
def disambiguate_container(pod, query)
  disambiguate(pod.container_names, query: query, title: "Containers in pod #{pod.name.inspect}")
end
disambiguate_namespace(query) click to toggle source
# File lib/podjumper/jump_info.rb, line 46
def disambiguate_namespace(query)
  disambiguate(namespaces, query: query, title: 'Namespaces')
end
disambiguate_pod(namespace, query) click to toggle source
# File lib/podjumper/jump_info.rb, line 50
def disambiguate_pod(namespace, query)
  all_pods = Pod.where(namespace: namespace)
  subdomains = all_pods.map(&:subdomain).uniq
  subdomain = disambiguate(subdomains, query: query, title: "Subdomains in namespace #{namespace.inspect}")
  pods = all_pods.select { |pod| pod.subdomain == subdomain }

  disambiguate(pods, title: "Pods in #{namespace} with subdomain #{subdomain.inspect}", &:name)
end
matching_choices(choices, query) { |c| ... } click to toggle source
# File lib/podjumper/jump_info.rb, line 74
def matching_choices(choices, query)
  return choices if query.nil?
  choices.select { |c| yield(c) =~ /#{query}/ }
end