Skip to content

Commit decbc05

Browse files
committed
Merge pull request #20 from keithpitt/services-api
Added services/hooks API
2 parents 013894c + 3a59fd4 commit decbc05

File tree

2 files changed

+113
-4
lines changed

2 files changed

+113
-4
lines changed

lib/bitbucket_rest_api/repos.rb

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@ class Repos < API
66

77
# Load all the modules after initializing Repos to avoid superclass mismatch
88
autoload_all 'bitbucket_rest_api/repos',
9-
:Changesets => 'changesets',
10-
:Keys => 'keys',
11-
:Following => 'following',
12-
:Sources => 'sources'
9+
:Changesets => 'changesets',
10+
:Keys => 'keys',
11+
:Services => 'services',
12+
:Following => 'following',
13+
:Sources => 'sources'
1314

1415
DEFAULT_REPO_OPTIONS = {
1516
"website" => "",
@@ -58,6 +59,11 @@ def sources
5859
@sources ||= ApiFactory.new 'Repos::Sources'
5960
end
6061

62+
# Access to Repos::Services API
63+
def services
64+
@services ||= ApiFactory.new 'Repos::Services'
65+
end
66+
6167
# List branches
6268
#
6369
# = Examples
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
# encoding: utf-8
2+
3+
module BitBucket
4+
class Repos::Services < API
5+
6+
REQUIRED_KEY_PARAM_NAMES = %w[ type ].freeze
7+
8+
# List services
9+
#
10+
# = Examples
11+
# bitbucket = BitBucket.new
12+
# bitbucket.repos.services.list 'user-name', 'repo-name'
13+
# bitbucket.repos.services.list 'user-name', 'repo-name' { |service| ... }
14+
#
15+
def list(user_name, repo_name, params={})
16+
_update_user_repo_params(user_name, repo_name)
17+
_validate_user_repo_params(user, repo) unless user? && repo?
18+
normalize! params
19+
20+
response = get_request("/repositories/#{user}/#{repo.downcase}/services", params)
21+
return response unless block_given?
22+
response.each { |el| yield el }
23+
end
24+
alias :all :list
25+
26+
# Gets a single service
27+
#
28+
# = Examples
29+
# @bitbucket = BitBucket.new
30+
# @bitbucket.repos.services.get 'user-name', 'repo-name', 109172378)
31+
#
32+
def get(user_name, repo_name, service_id, params={})
33+
_update_user_repo_params(user_name, repo_name)
34+
_validate_user_repo_params(user, repo) unless user? && repo?
35+
_validate_presence_of(service_id)
36+
normalize! params
37+
38+
get_request("/repositories/#{user}/#{repo.downcase}/services/#{service_id}", params)
39+
end
40+
alias :find :get
41+
42+
# Create a service
43+
#
44+
# = Inputs
45+
# * <tt>:type</tt> - One of the supported services. The type is a case-insensitive value.
46+
#
47+
# = Examples
48+
# bitbucket = BitBucket.new
49+
# bitbucket.repos.services.create 'user-name', 'repo-name',
50+
# "type" => "Basecamp",
51+
# "Password" => "...",
52+
# "Username" => "...",
53+
# "Discussion URL" => "..."
54+
#
55+
def create(user_name, repo_name, params={})
56+
_update_user_repo_params(user_name, repo_name)
57+
_validate_user_repo_params(user, repo) unless user? && repo?
58+
normalize! params
59+
assert_required_keys(REQUIRED_KEY_PARAM_NAMES, params)
60+
61+
post_request("/repositories/#{user}/#{repo.downcase}/services", params)
62+
end
63+
64+
# Edit a service
65+
#
66+
# = Inputs
67+
# * <tt>:type</tt> - One of the supported services. The type is a case-insensitive value.
68+
#
69+
# = Examples
70+
# bitbucket = BitBucket.new
71+
# bitbucket.repos.services.edit 'user-name', 'repo-name', 109172378,
72+
# "type" => "Basecamp",
73+
# "Password" => "...",
74+
# "Username" => "...",
75+
# "Discussion URL" => "..."
76+
#
77+
def edit(user_name, repo_name, service_id, params={})
78+
_update_user_repo_params(user_name, repo_name)
79+
_validate_user_repo_params(user, repo) unless user? && repo?
80+
_validate_presence_of(service_id)
81+
82+
normalize! params
83+
84+
put_request("/repositories/#{user}/#{repo.downcase}/services/#{service_id}", params)
85+
end
86+
87+
# Delete service
88+
#
89+
# = Examples
90+
# @bitbucket = BitBucket.new
91+
# @bitbucket.repos.services.delete 'user-name', 'repo-name', 109172378
92+
#
93+
def delete(user_name, repo_name, service_id, params={})
94+
_update_user_repo_params(user_name, repo_name)
95+
_validate_user_repo_params(user, repo) unless user? && repo?
96+
_validate_presence_of(service_id)
97+
normalize! params
98+
99+
delete_request("/repositories/#{user}/#{repo.downcase}/services/#{service_id}", params)
100+
end
101+
102+
end # Repos::Keys
103+
end # BitBucket

0 commit comments

Comments
 (0)