class Codestatus::Repositories::BitbucketRepository

Constants

BITBUCKET_API_ENDPOINT

Public Instance Methods

html_url() click to toggle source

bitbucket.org/atlassian/aui

# File lib/codestatus/repositories/bitbucket_repository.rb, line 29
def html_url
  repository.dig('links', 'html', 'href')
end
status(ref = main_branch) click to toggle source

developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref

# File lib/codestatus/repositories/bitbucket_repository.rb, line 9
def status(ref = main_branch)
  statuses = statuses(ref)

  sha = statuses['values'].map {|x| x.dig('commit', 'hash') }.compact.first
  states = statuses['values'].map { |status| status['state'] }

  state = if states.any? { |x| ['STOPPED', 'FAILED'].include?(x) }
            BuildStatus::FAILURE
          elsif states.empty? || states.all? { |x| x == 'INPROGRESS' }
            BuildStatus::PENDING
          elsif states.all? { |x| x == 'SUCCESSFUL' }
            BuildStatus::SUCCESS
          else
            BuildStatus::UNDEFINED
          end

  BuildStatus.new(sha: sha, status: state)
end

Private Instance Methods

client() click to toggle source
# File lib/codestatus/repositories/bitbucket_repository.rb, line 47
def client
  RestClient
end
main_branch() click to toggle source
# File lib/codestatus/repositories/bitbucket_repository.rb, line 35
def main_branch
  repository.dig('mainbranch', 'name')
end
repository() click to toggle source
# File lib/codestatus/repositories/bitbucket_repository.rb, line 39
def repository
  @repository ||= JSON.parse(client.get(repository_uri))
end
repository_uri() click to toggle source
# File lib/codestatus/repositories/bitbucket_repository.rb, line 43
def repository_uri
  File.join(BITBUCKET_API_ENDPOINT, 'repositories', slug)
end
statuses(ref) click to toggle source

developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Busername%7D/%7Brepo_slug%7D/commit/%7Bnode%7D/statuses

example: https://api.bitbucket.org/2.0/repositories/atlassian/aui/commit/master/statuses
# File lib/codestatus/repositories/bitbucket_repository.rb, line 53
def statuses(ref)
  @statuses ||= JSON.parse(client.get(statuses_uri(ref)))
end
statuses_uri(ref) click to toggle source
# File lib/codestatus/repositories/bitbucket_repository.rb, line 57
def statuses_uri(ref)
  File.join(BITBUCKET_API_ENDPOINT, 'repositories', slug, 'commit', ref, 'statuses')
end