assembla_api 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE.txt +20 -0
- data/Rakefile +22 -0
- data/lib/assembla_api.rb +130 -0
- data/lib/assembla_api/api.rb +373 -0
- data/lib/assembla_api/api/actions.rb +58 -0
- data/lib/assembla_api/api/arguments.rb +248 -0
- data/lib/assembla_api/api/config.rb +107 -0
- data/lib/assembla_api/api/config/property.rb +30 -0
- data/lib/assembla_api/api/config/property_set.rb +119 -0
- data/lib/assembla_api/api/factory.rb +33 -0
- data/lib/assembla_api/authorization.rb +76 -0
- data/lib/assembla_api/client.rb +21 -0
- data/lib/assembla_api/client/activity.rb +30 -0
- data/lib/assembla_api/client/authorizations.rb +143 -0
- data/lib/assembla_api/client/authorizations/app.rb +98 -0
- data/lib/assembla_api/client/portfolio.rb +19 -0
- data/lib/assembla_api/client/portfolio/invitations.rb +30 -0
- data/lib/assembla_api/client/portfolio/spaces.rb +13 -0
- data/lib/assembla_api/client/portfolio/standup_reports.rb +34 -0
- data/lib/assembla_api/client/portfolio/tasks.rb +13 -0
- data/lib/assembla_api/client/portfolio/ticket_reports.rb +13 -0
- data/lib/assembla_api/client/portfolio/tickets.rb +13 -0
- data/lib/assembla_api/client/portfolio/users.rb +13 -0
- data/lib/assembla_api/client/spaces.rb +140 -0
- data/lib/assembla_api/client/spaces/documents.rb +87 -0
- data/lib/assembla_api/client/spaces/milestones.rb +102 -0
- data/lib/assembla_api/client/spaces/space_tools.rb +65 -0
- data/lib/assembla_api/client/spaces/space_tools/merge_requests.rb +105 -0
- data/lib/assembla_api/client/spaces/space_tools/merge_requests/versions.rb +41 -0
- data/lib/assembla_api/client/spaces/space_tools/merge_requests/versions/comments.rb +34 -0
- data/lib/assembla_api/client/spaces/space_tools/merge_requests/versions/votes.rb +46 -0
- data/lib/assembla_api/client/spaces/ssh.rb +14 -0
- data/lib/assembla_api/client/spaces/ssh/actions.rb +76 -0
- data/lib/assembla_api/client/spaces/ssh/actions/launches.rb +14 -0
- data/lib/assembla_api/client/spaces/ssh/keys.rb +18 -0
- data/lib/assembla_api/client/spaces/ssh/launches.rb +29 -0
- data/lib/assembla_api/client/spaces/ssh/servers.rb +63 -0
- data/lib/assembla_api/client/spaces/standup_away_reports.rb +41 -0
- data/lib/assembla_api/client/spaces/standup_reports.rb +41 -0
- data/lib/assembla_api/client/spaces/tags.rb +96 -0
- data/lib/assembla_api/client/spaces/tickets.rb +154 -0
- data/lib/assembla_api/client/spaces/tickets/associations.rb +57 -0
- data/lib/assembla_api/client/spaces/tickets/comments.rb +45 -0
- data/lib/assembla_api/client/spaces/tickets/custom_fields.rb +57 -0
- data/lib/assembla_api/client/spaces/tickets/statuses.rb +55 -0
- data/lib/assembla_api/client/spaces/user_roles.rb +61 -0
- data/lib/assembla_api/client/spaces/users.rb +11 -0
- data/lib/assembla_api/client/spaces/webhooks.rb +63 -0
- data/lib/assembla_api/client/spaces/wiki_pages.rb +78 -0
- data/lib/assembla_api/client/spaces/wiki_pages/versions.rb +20 -0
- data/lib/assembla_api/client/tasks.rb +72 -0
- data/lib/assembla_api/client/users.rb +49 -0
- data/lib/assembla_api/client/users/keys.rb +97 -0
- data/lib/assembla_api/configuration.rb +71 -0
- data/lib/assembla_api/connection.rb +66 -0
- data/lib/assembla_api/constants.rb +74 -0
- data/lib/assembla_api/core_ext/array.rb +25 -0
- data/lib/assembla_api/core_ext/hash.rb +92 -0
- data/lib/assembla_api/core_ext/ordered_hash.rb +107 -0
- data/lib/assembla_api/deprecation.rb +39 -0
- data/lib/assembla_api/error.rb +37 -0
- data/lib/assembla_api/error/bad_request.rb +14 -0
- data/lib/assembla_api/error/client_error.rb +20 -0
- data/lib/assembla_api/error/forbidden.rb +14 -0
- data/lib/assembla_api/error/internal_server_error.rb +15 -0
- data/lib/assembla_api/error/invalid_options.rb +18 -0
- data/lib/assembla_api/error/not_acceptable.rb +15 -0
- data/lib/assembla_api/error/not_found.rb +14 -0
- data/lib/assembla_api/error/required_params.rb +18 -0
- data/lib/assembla_api/error/service_error.rb +68 -0
- data/lib/assembla_api/error/service_unavailable.rb +15 -0
- data/lib/assembla_api/error/unauthorized.rb +15 -0
- data/lib/assembla_api/error/unknown_media.rb +18 -0
- data/lib/assembla_api/error/unknown_value.rb +18 -0
- data/lib/assembla_api/error/unprocessable_entity.rb +14 -0
- data/lib/assembla_api/error/validations.rb +18 -0
- data/lib/assembla_api/ext/faraday.rb +38 -0
- data/lib/assembla_api/jsonable.rb +18 -0
- data/lib/assembla_api/middleware.rb +31 -0
- data/lib/assembla_api/mime_type.rb +33 -0
- data/lib/assembla_api/normalizer.rb +25 -0
- data/lib/assembla_api/null_encoder.rb +25 -0
- data/lib/assembla_api/page_iterator.rb +142 -0
- data/lib/assembla_api/page_links.rb +45 -0
- data/lib/assembla_api/paged_request.rb +40 -0
- data/lib/assembla_api/pagination.rb +102 -0
- data/lib/assembla_api/parameter_filter.rb +32 -0
- data/lib/assembla_api/params_hash.rb +101 -0
- data/lib/assembla_api/rate_limit.rb +25 -0
- data/lib/assembla_api/request.rb +85 -0
- data/lib/assembla_api/request/basic_auth.rb +33 -0
- data/lib/assembla_api/request/jsonize.rb +53 -0
- data/lib/assembla_api/request/key_auth.rb +31 -0
- data/lib/assembla_api/request/oauth2.rb +42 -0
- data/lib/assembla_api/request/verbs.rb +60 -0
- data/lib/assembla_api/response.rb +28 -0
- data/lib/assembla_api/response/header.rb +76 -0
- data/lib/assembla_api/response/jsonize.rb +29 -0
- data/lib/assembla_api/response/mashify.rb +24 -0
- data/lib/assembla_api/response/raise_error.rb +18 -0
- data/lib/assembla_api/response/xmlize.rb +26 -0
- data/lib/assembla_api/response_wrapper.rb +157 -0
- data/lib/assembla_api/ssl_certs/cacerts.pem +2183 -0
- data/lib/assembla_api/utils/url.rb +59 -0
- data/lib/assembla_api/validations.rb +25 -0
- data/lib/assembla_api/validations/format.rb +24 -0
- data/lib/assembla_api/validations/presence.rb +30 -0
- data/lib/assembla_api/validations/required.rb +24 -0
- data/lib/assembla_api/validations/token.rb +41 -0
- data/lib/assembla_api/version.rb +12 -0
- metadata +347 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
module Assembla
|
|
2
|
+
class Client::Spaces::Tickets::Statuses < API
|
|
3
|
+
VALID_PARAMS_NAMES = %w{name state list_order}
|
|
4
|
+
VALID_REQUEST_PARAM_VALUES = {
|
|
5
|
+
'state' => [0, 1]
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
# @example
|
|
9
|
+
# api.spaces.tickets.statuses.create 'project1', status: { name: 'Review' }
|
|
10
|
+
def create(*args)
|
|
11
|
+
arguments(args, required: [:space]) do
|
|
12
|
+
permit VALID_PARAMS_NAMES, recursive: true
|
|
13
|
+
assert_required %w[ name ]
|
|
14
|
+
assert_values VALID_REQUEST_PARAM_VALUES
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
post_request("/spaces/#{arguments.space}/tickets/statuses", arguments.params)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# @example
|
|
21
|
+
# api.spaces.tickets.statuses.get 'project1', 34
|
|
22
|
+
def get(*args)
|
|
23
|
+
arguments(args, required: [:space, :id])
|
|
24
|
+
get_request("/spaces/#{arguments.space}/tickets/statuses/#{arguments.id}", arguments.params)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# @example
|
|
28
|
+
# api.spaces.tickets.statuses.edit 'project1', 34, status: {name: 'Review Design'}
|
|
29
|
+
def edit(*args)
|
|
30
|
+
arguments(args, required: [:space, :id]) do
|
|
31
|
+
permit VALID_PARAMS_NAMES , recursive: true
|
|
32
|
+
assert_values VALID_REQUEST_PARAM_VALUES
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
put_request("/spaces/#{arguments.space}/tickets/statuses/#{arguments.id}", arguments.params)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Delete ticket status by ID
|
|
39
|
+
# @example
|
|
40
|
+
# api.spaces.tickets.statuses.delete 'project1', 34
|
|
41
|
+
def delete(*args)
|
|
42
|
+
arguments(args, required: [:space, :id])
|
|
43
|
+
delete_request("/spaces/#{arguments.space}/tickets/statuses/#{arguments.id}", arguments.params)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# @example
|
|
47
|
+
# api.spaces.tickets.statuses.list 'project1'
|
|
48
|
+
def list(*args)
|
|
49
|
+
arguments(args, required: [:space])
|
|
50
|
+
response = get_request("/spaces/#{arguments.space}/tickets/statuses", arguments.params)
|
|
51
|
+
return response unless block_given?
|
|
52
|
+
response.each { |el| yield el }
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
module Assembla
|
|
2
|
+
class Client::Spaces::UserRoles < API
|
|
3
|
+
|
|
4
|
+
VALID_PARAMS_NAMES = %w[
|
|
5
|
+
user_id
|
|
6
|
+
role
|
|
7
|
+
title
|
|
8
|
+
message
|
|
9
|
+
].freeze
|
|
10
|
+
|
|
11
|
+
VALID_REQUEST_PARAM_VALUES = {
|
|
12
|
+
'role' => %w{watcher member owner},
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
# api.spaces.user_roles.list 'project1'
|
|
16
|
+
def list(*args)
|
|
17
|
+
arguments(args, required: [:space])
|
|
18
|
+
response = get_request("/spaces/#{arguments.space}/user_roles", arguments.params)
|
|
19
|
+
return response unless block_given?
|
|
20
|
+
response.each { |el| yield el }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# api.spaces.user_roles.get 'project1', 150
|
|
24
|
+
def get(*args)
|
|
25
|
+
arguments(args, required: [:space, :user_role_id])
|
|
26
|
+
get_request("/spaces/#{arguments.space}/user_roles/#{arguments.user_role_id}", arguments.params)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
alias :find :get
|
|
30
|
+
|
|
31
|
+
# api.spaces.user_roles.delete 'project1', 150
|
|
32
|
+
def delete(*args)
|
|
33
|
+
arguments(args, required: [:space, :user_role_id])
|
|
34
|
+
delete_request("/spaces/#{arguments.space}/user_roles/#{arguments.user_role_id}", arguments.params)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
alias :remove :delete
|
|
38
|
+
|
|
39
|
+
# api.spaces.user_roles.edit 'project1', 150, user_role: { role: 'owner', title: 'Designer' }
|
|
40
|
+
def edit(*args)
|
|
41
|
+
arguments(args, required: [:space, :user_role_id]) do
|
|
42
|
+
permit VALID_PARAMS_NAMES, recursive: true
|
|
43
|
+
assert_required %w[ role ]
|
|
44
|
+
assert_values VALID_REQUEST_PARAM_VALUES
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
put_request("/spaces/#{arguments.space}/user_roles/#{arguments.user_role_id}", arguments.params)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# api.spaces.user_roles.create 'project1', user_role: {user_id: UID, role: 'member'}
|
|
51
|
+
def create(*args)
|
|
52
|
+
arguments(args, required: [:space]) do
|
|
53
|
+
permit VALID_PARAMS_NAMES, recursive: true
|
|
54
|
+
assert_required %w[ user_id role ]
|
|
55
|
+
assert_values VALID_REQUEST_PARAM_VALUES
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
post_request("/spaces/#{arguments.space}/user_roles", arguments.params)
|
|
59
|
+
end
|
|
60
|
+
end # UserRoles
|
|
61
|
+
end # Assembla
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module Assembla
|
|
2
|
+
class Client::Spaces::Users < API
|
|
3
|
+
# api.spaces.users.list space: 'project1'
|
|
4
|
+
def list(*args)
|
|
5
|
+
arguments(args, required: [:space])
|
|
6
|
+
response = get_request("/spaces/#{arguments.space}/users", arguments.params)
|
|
7
|
+
return response unless block_given?
|
|
8
|
+
response.each { |el| yield el }
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
module Assembla
|
|
2
|
+
class Client::Spaces::Webhooks < API
|
|
3
|
+
|
|
4
|
+
VALID_PARAMS_NAMES = %w[
|
|
5
|
+
title
|
|
6
|
+
enabled
|
|
7
|
+
authentication_type
|
|
8
|
+
app_api_key
|
|
9
|
+
app_secret
|
|
10
|
+
app_request_token_url
|
|
11
|
+
app_access_token_url
|
|
12
|
+
app_authorize_url
|
|
13
|
+
app_authorize_query
|
|
14
|
+
access_token
|
|
15
|
+
access_token_secret
|
|
16
|
+
external_url
|
|
17
|
+
http_method
|
|
18
|
+
content_type
|
|
19
|
+
content
|
|
20
|
+
filter
|
|
21
|
+
].freeze
|
|
22
|
+
|
|
23
|
+
BASIC_AUTH = 1
|
|
24
|
+
|
|
25
|
+
VALID_REQUEST_PARAM_VALUES = {
|
|
26
|
+
'enabled' => [true, false],
|
|
27
|
+
'authentication_type' => [1, 2],
|
|
28
|
+
'http_method' => [0, 1]
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
# @example
|
|
32
|
+
# api.spaces.webhooks.create 'project1', webhook: { title: 'Mobile App V2', external_url: 'http://example.com/notify' }
|
|
33
|
+
def create(*args)
|
|
34
|
+
arguments(args, required: [:space]) do
|
|
35
|
+
permit VALID_PARAMS_NAMES, recursive: true
|
|
36
|
+
assert_required %w[ external_url ]
|
|
37
|
+
assert_values VALID_REQUEST_PARAM_VALUES
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
arguments.params['webhook']['authentication_type'] ||= BASIC_AUTH
|
|
41
|
+
post_request("/spaces/#{arguments.space}/webhooks", arguments.params)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# @example
|
|
45
|
+
# api.spaces.webhooks.edit 'project1', 699, webhook: { enabled: false }
|
|
46
|
+
def edit(*args)
|
|
47
|
+
arguments(args, required: [:space, :id]) do
|
|
48
|
+
permit VALID_PARAMS_NAMES , recursive: true
|
|
49
|
+
assert_values VALID_REQUEST_PARAM_VALUES
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
put_request("/spaces/#{arguments.space}/webhooks/#{arguments.id}", arguments.params)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Delete webhook by ID
|
|
56
|
+
# @example
|
|
57
|
+
# api.spaces.webhooks.delete 'project1', 699
|
|
58
|
+
def delete(*args)
|
|
59
|
+
arguments(args, required: [:space, :id])
|
|
60
|
+
delete_request("/spaces/#{arguments.space}/webhooks/#{arguments.id}", arguments.params)
|
|
61
|
+
end
|
|
62
|
+
end # webhooks
|
|
63
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
module Assembla
|
|
2
|
+
class Client::Spaces::WikiPages < API
|
|
3
|
+
require_all 'assembla_api/client/spaces/wiki_pages',
|
|
4
|
+
'versions'
|
|
5
|
+
|
|
6
|
+
VALID_PARAMS_NAMES = %w[
|
|
7
|
+
page_name
|
|
8
|
+
contents
|
|
9
|
+
parent_id
|
|
10
|
+
position
|
|
11
|
+
status
|
|
12
|
+
wiki_format
|
|
13
|
+
change_comment
|
|
14
|
+
].freeze
|
|
15
|
+
|
|
16
|
+
VALID_REQUEST_PARAM_VALUES = {
|
|
17
|
+
'status' => [0, 1, 2],
|
|
18
|
+
'wiki_format' => [0, 1, 2, 3, 4, 5]
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
# @example
|
|
22
|
+
# api.spaces.wiki_pages.create 'project1', wiki_page: { page_name: 'Mobile App V2' }
|
|
23
|
+
def create(*args)
|
|
24
|
+
arguments(args, required: [:space]) do
|
|
25
|
+
permit VALID_PARAMS_NAMES, recursive: true
|
|
26
|
+
assert_required %w[ page_name ]
|
|
27
|
+
assert_values VALID_REQUEST_PARAM_VALUES
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
post_request("/spaces/#{arguments.space}/wiki_pages", arguments.params)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# @example
|
|
34
|
+
# api.spaces.wiki_pages.get 'project1', 'guid'
|
|
35
|
+
def get(*args)
|
|
36
|
+
arguments(args, required: [:space, :id])
|
|
37
|
+
get_request("/spaces/#{arguments.space}/wiki_pages/#{arguments.id}", arguments.params)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# @example
|
|
41
|
+
# api.spaces.wiki_pages.edit 'project1', 'guid', wiki_page: { position: 1 }
|
|
42
|
+
def edit(*args)
|
|
43
|
+
arguments(args, required: [:space, :id]) do
|
|
44
|
+
permit VALID_PARAMS_NAMES , recursive: true
|
|
45
|
+
assert_values VALID_REQUEST_PARAM_VALUES
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
put_request("/spaces/#{arguments.space}/wiki_pages/#{arguments.id}", arguments.params)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Deletes wiki page by ID and all its children
|
|
52
|
+
#
|
|
53
|
+
# @example
|
|
54
|
+
# api.spaces.wiki_pages.delete 'project1', 'guid'
|
|
55
|
+
def delete(*args)
|
|
56
|
+
arguments(args, required: [:space, :id])
|
|
57
|
+
delete_request("/spaces/#{arguments.space}/wiki_pages/#{arguments.id}/all", arguments.params)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Deletes wiki page by ID and moves all children with one level up
|
|
61
|
+
#
|
|
62
|
+
# @example
|
|
63
|
+
# api.spaces.wiki_pages.delete_parent 'project1', 'guid'
|
|
64
|
+
def delete_parent(*args)
|
|
65
|
+
arguments(args, required: [:space, :id])
|
|
66
|
+
delete_request("/spaces/#{arguments.space}/wiki_pages/#{arguments.id}/container", arguments.params)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# @example
|
|
70
|
+
# api.spaces.wiki_pages.list 'project1'
|
|
71
|
+
def list(*args)
|
|
72
|
+
arguments(args, required: [:space])
|
|
73
|
+
response = get_request("/spaces/#{arguments.space}/wiki_pages", arguments.params)
|
|
74
|
+
return response unless block_given?
|
|
75
|
+
response.each { |el| yield el }
|
|
76
|
+
end
|
|
77
|
+
end # wiki_pages
|
|
78
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Assembla
|
|
2
|
+
class Client::Spaces::WikiPages::Versions < API
|
|
3
|
+
|
|
4
|
+
# @example
|
|
5
|
+
# api.spaces.wiki_pages.versions.get 'project1', 'wiki-guid', 369
|
|
6
|
+
def get(*args)
|
|
7
|
+
arguments(args, required: [:space, :wiki_guid, :id])
|
|
8
|
+
get_request("/spaces/#{arguments.space}/wiki_pages/#{arguments.wiki_guid}/versions/#{arguments.id}", arguments.params)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# @example
|
|
12
|
+
# api.spaces.wiki_pages.versions.list 'project1', 'wiki-guid'
|
|
13
|
+
def list(*args)
|
|
14
|
+
arguments(args, required: [:space, :wiki_guid])
|
|
15
|
+
response = get_request("/spaces/#{arguments.space}/wiki_pages/#{arguments.wiki_guid}/versions", arguments.params)
|
|
16
|
+
return response unless block_given?
|
|
17
|
+
response.each { |el| yield el }
|
|
18
|
+
end
|
|
19
|
+
end # versions
|
|
20
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
module Assembla
|
|
2
|
+
class Client::Tasks < API
|
|
3
|
+
VALID_PARAMS_NAMES = %w{
|
|
4
|
+
description
|
|
5
|
+
job_agreement_id
|
|
6
|
+
space_id
|
|
7
|
+
ticket_id
|
|
8
|
+
url
|
|
9
|
+
hours
|
|
10
|
+
begin_at
|
|
11
|
+
end_at
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
# @example
|
|
15
|
+
# api.tasks.get 963
|
|
16
|
+
def get(*args)
|
|
17
|
+
arguments(args, required: [:id])
|
|
18
|
+
get_request("/tasks/#{arguments.id}", arguments.params)
|
|
19
|
+
end
|
|
20
|
+
alias :find :get
|
|
21
|
+
|
|
22
|
+
def create(*args)
|
|
23
|
+
arguments(args) do
|
|
24
|
+
permit VALID_PARAMS_NAMES, recursive: true
|
|
25
|
+
assert_required %w[ description space_id ]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
task = arguments.params['user_task'] = arguments.params.delete 'task'
|
|
29
|
+
task['begin_at'] ||= Time.now.utc.strftime '%FT%TZ'
|
|
30
|
+
task['hours'] ||= 1
|
|
31
|
+
|
|
32
|
+
post_request("/tasks", arguments.params)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def delete(*args)
|
|
36
|
+
arguments(args, required: [:id])
|
|
37
|
+
delete_request("/tasks/#{arguments.id}", arguments.params)
|
|
38
|
+
end
|
|
39
|
+
alias :remove :delete
|
|
40
|
+
|
|
41
|
+
# Edit a task
|
|
42
|
+
#
|
|
43
|
+
# @param [Hash] params
|
|
44
|
+
# @option params [String] :description
|
|
45
|
+
# Optional string
|
|
46
|
+
#
|
|
47
|
+
# @example
|
|
48
|
+
# api = Assembla.new
|
|
49
|
+
# api.tasks.edit 963, task: {
|
|
50
|
+
# url: 'http://google.com',
|
|
51
|
+
# description: 'Search using new engine'
|
|
52
|
+
# }
|
|
53
|
+
def edit(*args)
|
|
54
|
+
arguments(args, required: [:id]) do
|
|
55
|
+
permit VALID_PARAMS_NAMES, recursive: true
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
arguments.params['user_task'] = arguments.params.delete 'task'
|
|
59
|
+
|
|
60
|
+
put_request("/tasks/#{arguments.id}", arguments.params)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# @example
|
|
64
|
+
# api.tasks.list
|
|
65
|
+
def list(*args)
|
|
66
|
+
arguments(args)
|
|
67
|
+
response = get_request("/tasks", arguments.params)
|
|
68
|
+
return response unless block_given?
|
|
69
|
+
response.each { |el| yield el }
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Assembla
|
|
4
|
+
class Client::Users < API
|
|
5
|
+
# Load all the modules after initializing Repos to avoid superclass mismatch
|
|
6
|
+
require_all 'assembla_api/client/users',
|
|
7
|
+
'keys'
|
|
8
|
+
|
|
9
|
+
VALID_USER_PARAMS_NAMES = %w[
|
|
10
|
+
].freeze
|
|
11
|
+
|
|
12
|
+
# Access to Users::Keys API
|
|
13
|
+
namespace :keys
|
|
14
|
+
|
|
15
|
+
# Get a single user
|
|
16
|
+
#
|
|
17
|
+
# @example
|
|
18
|
+
# assembla = Assembla.new oauth_token: '...'
|
|
19
|
+
# assembla.users.get user: 'user-name'
|
|
20
|
+
#
|
|
21
|
+
# Get the authenticated user
|
|
22
|
+
#
|
|
23
|
+
# @example
|
|
24
|
+
# assembla = Assembla.new oauth_token: '...'
|
|
25
|
+
# assembla.users.me
|
|
26
|
+
#
|
|
27
|
+
# @api public
|
|
28
|
+
def get(*args)
|
|
29
|
+
params = arguments(args).params
|
|
30
|
+
|
|
31
|
+
if user_name = params.delete('user')
|
|
32
|
+
get_request("/users/#{user_name}", params)
|
|
33
|
+
else
|
|
34
|
+
get_request("/user")
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
alias :find :get
|
|
39
|
+
alias :me :get
|
|
40
|
+
|
|
41
|
+
# @example
|
|
42
|
+
# api.users.picture 'mike'
|
|
43
|
+
def picture(*args)
|
|
44
|
+
arguments(args, required: [ :user ])
|
|
45
|
+
arguments.params['raw'] = true
|
|
46
|
+
get_request("/users/#{arguments.user}/picture", arguments.params)
|
|
47
|
+
end
|
|
48
|
+
end # Users
|
|
49
|
+
end # Assembla
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Assembla
|
|
4
|
+
class Client::Users::Keys < API
|
|
5
|
+
|
|
6
|
+
VALID_KEY_PARAM_NAMES = %w[ title key read_only ].freeze
|
|
7
|
+
VALID_REQUEST_PARAM_VALUES = {
|
|
8
|
+
'read_only' => [ true, false ],
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
# List public keys for the authenticated user
|
|
12
|
+
#
|
|
13
|
+
# @example
|
|
14
|
+
# assembla = Assembla.new oauth_token: '...'
|
|
15
|
+
# assembla.users.keys.list
|
|
16
|
+
# assembla.users.keys.list { |key| ... }
|
|
17
|
+
#
|
|
18
|
+
# @return [Hash]
|
|
19
|
+
#
|
|
20
|
+
# @api public
|
|
21
|
+
def list(*args)
|
|
22
|
+
params = arguments(args).params
|
|
23
|
+
response = get_request("/user/ssh_keys", params)
|
|
24
|
+
return response unless block_given?
|
|
25
|
+
response.each { |el| yield el }
|
|
26
|
+
end
|
|
27
|
+
alias :all :list
|
|
28
|
+
|
|
29
|
+
# Get a single pulic key for the authenticated user
|
|
30
|
+
#
|
|
31
|
+
# @example
|
|
32
|
+
# assembla = Assembla.new oauth_token: '...'
|
|
33
|
+
# assembla.users.keys.get 571
|
|
34
|
+
#
|
|
35
|
+
# @api public
|
|
36
|
+
def get(*args)
|
|
37
|
+
arguments(args, required: [:id])
|
|
38
|
+
get_request("/user/ssh_keys/#{arguments.id}", arguments.params)
|
|
39
|
+
end
|
|
40
|
+
alias :find :get
|
|
41
|
+
|
|
42
|
+
# Create a public key for the authenticated user
|
|
43
|
+
#
|
|
44
|
+
# @param [Hash] params
|
|
45
|
+
# @option [String] :title
|
|
46
|
+
# Required string
|
|
47
|
+
# @option [String] :key
|
|
48
|
+
# Required string. sha key
|
|
49
|
+
#
|
|
50
|
+
# @example
|
|
51
|
+
# assembla = Assembla.new oauth_token: '...'
|
|
52
|
+
# assembla.users.keys.create ssh_key: {title: "buildbot@mac", key: "ssh-rsa AAA..."}
|
|
53
|
+
#
|
|
54
|
+
# @api public
|
|
55
|
+
def create(*args)
|
|
56
|
+
arguments(args) do
|
|
57
|
+
permit VALID_KEY_PARAM_NAMES, recursive: true
|
|
58
|
+
assert_values VALID_REQUEST_PARAM_VALUES
|
|
59
|
+
end
|
|
60
|
+
post_request("/user/ssh_keys", arguments.params)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Update a public key for the authenticated user
|
|
64
|
+
#
|
|
65
|
+
# @param [Hash] params
|
|
66
|
+
# @option [String] :title
|
|
67
|
+
# Required string
|
|
68
|
+
# @option [String] :key
|
|
69
|
+
# Required string. sha key
|
|
70
|
+
#
|
|
71
|
+
# @example
|
|
72
|
+
# assembla = Assembla.new oauth_token: '...'
|
|
73
|
+
# assembla.users.keys.update 571, "title": "buildbot@mac",
|
|
74
|
+
# "key": "ssh-rsa AAA..."
|
|
75
|
+
#
|
|
76
|
+
# @api public
|
|
77
|
+
def edit(*args)
|
|
78
|
+
arguments(args, required: [:id]) do
|
|
79
|
+
permit VALID_KEY_PARAM_NAMES, recursive: true
|
|
80
|
+
assert_values VALID_REQUEST_PARAM_VALUES
|
|
81
|
+
end
|
|
82
|
+
put_request("/user/ssh_keys/#{arguments.id}", arguments.params)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Delete a public key for the authenticated user
|
|
86
|
+
#
|
|
87
|
+
# @example
|
|
88
|
+
# assembla = Assembla.new oauth_token: '...'
|
|
89
|
+
# assembla.users.keys.delete 571
|
|
90
|
+
#
|
|
91
|
+
# @api public
|
|
92
|
+
def delete(*args)
|
|
93
|
+
arguments(args, required: [:id])
|
|
94
|
+
delete_request("/user/ssh_keys/#{arguments.id}", arguments.params)
|
|
95
|
+
end
|
|
96
|
+
end # Users::Keys
|
|
97
|
+
end # Assembla
|