class Abt::Providers::Devops::Services::ProjectPicker

Constants

AZURE_DEV_URL_REGEX
VS_URL_REGEX

Attributes

cli[R]

Public Class Methods

call(**args) click to toggle source
# File lib/abt/providers/devops/services/project_picker.rb, line 21
def self.call(**args)
  new(**args).call
end
new(cli:) click to toggle source
# File lib/abt/providers/devops/services/project_picker.rb, line 27
def initialize(cli:)
  @cli = cli
end

Public Instance Methods

call() click to toggle source
# File lib/abt/providers/devops/services/project_picker.rb, line 31
def call
  Result.new(
    path: Path.from_ids(organization_name: organization_name, project_name: project_name)
  )
end

Private Instance Methods

organization_name() click to toggle source
# File lib/abt/providers/devops/services/project_picker.rb, line 43
def organization_name
  @organization_name ||= project_url_match && project_url_match[:organization]
end
project_name() click to toggle source
# File lib/abt/providers/devops/services/project_picker.rb, line 39
def project_name
  @project_name ||= project_url_match && project_url_match[:project]
end
project_url() click to toggle source
# File lib/abt/providers/devops/services/project_picker.rb, line 51
def project_url
  @project_url ||= loop do
    url = prompt_url

    break url if AZURE_DEV_URL_REGEX =~ url || VS_URL_REGEX =~ url

    cli.warn("Invalid URL")
  end
end
project_url_match() click to toggle source
# File lib/abt/providers/devops/services/project_picker.rb, line 47
def project_url_match
  AZURE_DEV_URL_REGEX.match(project_url) || VS_URL_REGEX.match(project_url)
end
prompt_url() click to toggle source
# File lib/abt/providers/devops/services/project_picker.rb, line 61
          def prompt_url
            cli.prompt.text(<<~TXT)
              Please provide the URL for the devops project
              For instance https://{organization}.visualstudio.com/{project} or https://dev.azure.com/{organization}/{project}

              Enter URL
            TXT
          end