summaryrefslogtreecommitdiff
path: root/lib/bitbucket
diff options
context:
space:
mode:
authorDouglas Barbosa Alexandre <dbalexandre@gmail.com>2016-08-22 15:53:46 -0300
committerStan Hu <stanhu@gmail.com>2016-11-21 16:47:25 -0800
commit6418c6f88efe9015c8bc2ebd4f7db1a7277a4dc9 (patch)
tree8481da24ef8418130a68fc2d9f82b7ed1ad0f8a5 /lib/bitbucket
parente2f7f32a60a7663d12b5dae0320f640150f354e7 (diff)
downloadgitlab-ce-6418c6f88efe9015c8bc2ebd4f7db1a7277a4dc9.tar.gz
Add an endpoint to get the user's repositories
Diffstat (limited to 'lib/bitbucket')
-rw-r--r--lib/bitbucket/client.rb14
-rw-r--r--lib/bitbucket/representation/repo.rb57
2 files changed, 69 insertions, 2 deletions
diff --git a/lib/bitbucket/client.rb b/lib/bitbucket/client.rb
index c05fc35f36e..39b52ae25a6 100644
--- a/lib/bitbucket/client.rb
+++ b/lib/bitbucket/client.rb
@@ -4,9 +4,19 @@ module Bitbucket
@connection = options.fetch(:connection, Connection.new(options))
end
+
+ def repos
+ relative_path = "/repositories/#{user.username}"
+ paginator = Paginator.new(connection, relative_path, :repo)
+
+ Collection.new(paginator)
+ end
+
def user
- parsed_response = connection.get('/user')
- Representation::User.new(parsed_response)
+ @user ||= begin
+ parsed_response = connection.get('/user')
+ Representation::User.new(parsed_response)
+ end
end
private
diff --git a/lib/bitbucket/representation/repo.rb b/lib/bitbucket/representation/repo.rb
new file mode 100644
index 00000000000..fe5cda66ab9
--- /dev/null
+++ b/lib/bitbucket/representation/repo.rb
@@ -0,0 +1,57 @@
+module Bitbucket
+ module Representation
+ class Repo < Representation::Base
+ attr_reader :owner, :slug
+
+ def initialize(raw)
+ super(raw)
+
+ if full_name && full_name.split('/').size == 2
+ @owner, @slug = full_name.split('/')
+ end
+ end
+
+ def clone_url(token = nil)
+ url = raw['links']['clone'].find { |link| link['name'] == 'https' }.fetch('href')
+
+ if token.present?
+ url.sub(/^[^\@]*/, "https://x-token-auth:#{token}")
+ else
+ url
+ end
+ end
+
+ def description
+ raw['description']
+ end
+
+ def full_name
+ raw['full_name']
+ end
+
+ def has_issues?
+ raw['has_issues']
+ end
+
+ def name
+ raw['name']
+ end
+
+ def valid?
+ raw['scm'] == 'git'
+ end
+
+ def visibility_level
+ if raw['is_private']
+ Gitlab::VisibilityLevel::PRIVATE
+ else
+ Gitlab::VisibilityLevel::PUBLIC
+ end
+ end
+
+ def to_s
+ full_name
+ end
+ end
+ end
+end