assembla_api 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- 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,41 @@
|
|
1
|
+
module Assembla
|
2
|
+
class Client::Spaces::StandupAwayReports < API
|
3
|
+
|
4
|
+
VALID_PARAMS_NAMES = %w[
|
5
|
+
what_i_did
|
6
|
+
what_i_will_do
|
7
|
+
roadblocks
|
8
|
+
filled_for
|
9
|
+
]
|
10
|
+
|
11
|
+
# @example
|
12
|
+
# api.spaces.standup_away_reports.create 'project1', standup_report: { what_i_will_do: 'Work on #400' }
|
13
|
+
def create(*args)
|
14
|
+
arguments(args, required: [:space]) do
|
15
|
+
permit VALID_PARAMS_NAMES, recursive: true
|
16
|
+
end
|
17
|
+
|
18
|
+
post_request("/spaces/#{arguments.space}/away_standup_report", arguments.params)
|
19
|
+
end
|
20
|
+
alias :edit :create
|
21
|
+
|
22
|
+
# @example
|
23
|
+
# api.spaces.standup_away_reports.my 'project1', date: '2014-09-09'
|
24
|
+
def my(*args)
|
25
|
+
arguments(args, required: [:space]) do
|
26
|
+
permit VALID_PARAMS_NAMES + ['date'], recursive: true
|
27
|
+
end
|
28
|
+
|
29
|
+
get_request("/spaces/#{arguments.space}/away_standup_report", arguments.params)
|
30
|
+
end
|
31
|
+
|
32
|
+
# @example
|
33
|
+
# api.spaces.standup_away_reports.list 'project1'
|
34
|
+
def list(*args)
|
35
|
+
arguments(args, required: [:space])
|
36
|
+
response = get_request("/spaces/#{arguments.space}/away_standup_reports", arguments.params)
|
37
|
+
return response unless block_given?
|
38
|
+
response.each { |el| yield el }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Assembla
|
2
|
+
class Client::Spaces::StandupReports < API
|
3
|
+
|
4
|
+
VALID_PARAMS_NAMES = %w[
|
5
|
+
what_i_did
|
6
|
+
what_i_will_do
|
7
|
+
roadblocks
|
8
|
+
filled_for
|
9
|
+
]
|
10
|
+
|
11
|
+
# @example
|
12
|
+
# api.spaces.standup_reports.create 'project1', standup_report: { what_i_will_do: 'Work on #400' }
|
13
|
+
def create(*args)
|
14
|
+
arguments(args, required: [:space]) do
|
15
|
+
permit VALID_PARAMS_NAMES, recursive: true
|
16
|
+
end
|
17
|
+
|
18
|
+
post_request("/spaces/#{arguments.space}/standup_report", arguments.params)
|
19
|
+
end
|
20
|
+
alias :edit :create
|
21
|
+
|
22
|
+
# @example
|
23
|
+
# api.spaces.standup_reports.my 'project1'
|
24
|
+
def my(*args)
|
25
|
+
arguments(args, required: [:space]) do
|
26
|
+
permit VALID_PARAMS_NAMES, recursive: true
|
27
|
+
end
|
28
|
+
|
29
|
+
get_request("/spaces/#{arguments.space}/standup_report", arguments.params)
|
30
|
+
end
|
31
|
+
|
32
|
+
# @example
|
33
|
+
# api.spaces.standup_reports.list 'project1'
|
34
|
+
def list(*args)
|
35
|
+
arguments(args, required: [:space])
|
36
|
+
response = get_request("/spaces/#{arguments.space}/standup_reports", arguments.params)
|
37
|
+
return response unless block_given?
|
38
|
+
response.each { |el| yield el }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
module Assembla
|
2
|
+
class Client::Spaces::Tags < API
|
3
|
+
|
4
|
+
VALID_PARAMS_NAMES = %w[
|
5
|
+
name
|
6
|
+
state
|
7
|
+
].freeze
|
8
|
+
|
9
|
+
VALID_REQUEST_PARAM_VALUES = {
|
10
|
+
'state' => [ 1, 2, 4 ]
|
11
|
+
}
|
12
|
+
|
13
|
+
# @example
|
14
|
+
# api.spaces.tags.create 'project1', tag: { name: 'Backend' }
|
15
|
+
def create(*args)
|
16
|
+
arguments(args, required: [:space]) do
|
17
|
+
permit VALID_PARAMS_NAMES, recursive: true
|
18
|
+
assert_required %w[ name ]
|
19
|
+
assert_values VALID_REQUEST_PARAM_VALUES
|
20
|
+
end
|
21
|
+
|
22
|
+
post_request("/spaces/#{arguments.space}/tags", arguments.params)
|
23
|
+
end
|
24
|
+
|
25
|
+
# @example
|
26
|
+
# api.spaces.tags.get 'project1', 'tag-id'
|
27
|
+
def get(*args)
|
28
|
+
arguments(args, required: [:space, :id])
|
29
|
+
get_request("/spaces/#{arguments.space}/tags/#{arguments.id}", arguments.params)
|
30
|
+
end
|
31
|
+
|
32
|
+
# @example
|
33
|
+
# api.spaces.tags.edit 'project1', 'tag-id', tag: { state: 4 }
|
34
|
+
def edit(*args)
|
35
|
+
arguments(args, required: [:space, :id]) do
|
36
|
+
permit VALID_PARAMS_NAMES , recursive: true
|
37
|
+
assert_values VALID_REQUEST_PARAM_VALUES
|
38
|
+
end
|
39
|
+
|
40
|
+
put_request("/spaces/#{arguments.space}/tags/#{arguments.id}", arguments.params)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Delete tag by ID
|
44
|
+
# @example
|
45
|
+
# api.spaces.tags.delete 'project1', 'tag-id'
|
46
|
+
def delete(*args)
|
47
|
+
arguments(args, required: [:space, :id])
|
48
|
+
delete_request("/spaces/#{arguments.space}/tags/#{arguments.id}", arguments.params)
|
49
|
+
end
|
50
|
+
|
51
|
+
# @example
|
52
|
+
# api.spaces.tags.list 'project1'
|
53
|
+
def list(*args)
|
54
|
+
arguments(args, required: [:space])
|
55
|
+
response = get_request("/spaces/#{arguments.space}/tags", arguments.params)
|
56
|
+
return response unless block_given?
|
57
|
+
response.each { |el| yield el }
|
58
|
+
end
|
59
|
+
|
60
|
+
# @example
|
61
|
+
# api.spaces.tags.active 'project1'
|
62
|
+
def active(*args)
|
63
|
+
arguments(args, required: [:space])
|
64
|
+
response = get_request("/spaces/#{arguments.space}/tags/active", arguments.params)
|
65
|
+
return response unless block_given?
|
66
|
+
response.each { |el| yield el }
|
67
|
+
end
|
68
|
+
|
69
|
+
# @example
|
70
|
+
# api.spaces.tags.proposed 'project1'
|
71
|
+
def proposed(*args)
|
72
|
+
arguments(args, required: [:space])
|
73
|
+
response = get_request("/spaces/#{arguments.space}/tags/proposed", arguments.params)
|
74
|
+
return response unless block_given?
|
75
|
+
response.each { |el| yield el }
|
76
|
+
end
|
77
|
+
|
78
|
+
# @example
|
79
|
+
# api.spaces.tags.hidden 'project1'
|
80
|
+
def hidden(*args)
|
81
|
+
arguments(args, required: [:space])
|
82
|
+
response = get_request("/spaces/#{arguments.space}/tags/hidden", arguments.params)
|
83
|
+
return response unless block_given?
|
84
|
+
response.each { |el| yield el }
|
85
|
+
end
|
86
|
+
|
87
|
+
# @example
|
88
|
+
# api.spaces.tags.tickets 'project1', 'tag-id'
|
89
|
+
def tickets(*args)
|
90
|
+
arguments(args, required: [:space, :id])
|
91
|
+
response = get_request("/spaces/#{arguments.space}/tags/#{arguments.id}/tickets", arguments.params)
|
92
|
+
return response unless block_given?
|
93
|
+
response.each { |el| yield el }
|
94
|
+
end
|
95
|
+
end # tags
|
96
|
+
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
module Assembla
|
2
|
+
class Client::Spaces::Tickets < API
|
3
|
+
require_all 'assembla_api/client/spaces/tickets',
|
4
|
+
'custom_fields',
|
5
|
+
'associations',
|
6
|
+
'comments',
|
7
|
+
'statuses'
|
8
|
+
|
9
|
+
# Access to Spaces::Tickets::Statuses API
|
10
|
+
namespace :statuses
|
11
|
+
namespace :custom_fields
|
12
|
+
namespace :associations
|
13
|
+
namespace :comments
|
14
|
+
|
15
|
+
VALID_PARAMS_NAMES = %w[
|
16
|
+
summary
|
17
|
+
description
|
18
|
+
priority
|
19
|
+
component_id
|
20
|
+
created_on
|
21
|
+
permission_type
|
22
|
+
is_story
|
23
|
+
milestone_id
|
24
|
+
tags
|
25
|
+
followers
|
26
|
+
notification_list
|
27
|
+
status
|
28
|
+
story_importance
|
29
|
+
working_hours
|
30
|
+
estimate
|
31
|
+
assigned_to_id
|
32
|
+
custom_fields
|
33
|
+
hierarchy_type
|
34
|
+
is_support
|
35
|
+
].freeze
|
36
|
+
|
37
|
+
# @example
|
38
|
+
# api.spaces.tickets.create 'project1', ticket: { summary: 'First ticket' }
|
39
|
+
def create(*args)
|
40
|
+
arguments(args, required: [:space]) do
|
41
|
+
permit VALID_PARAMS_NAMES, recursive: true
|
42
|
+
assert_required %w[ summary ]
|
43
|
+
# TODO assert_values VALID_REQUEST_PARAM_VALUES
|
44
|
+
end
|
45
|
+
|
46
|
+
post_request("/spaces/#{arguments.space}/tickets", arguments.params)
|
47
|
+
end
|
48
|
+
|
49
|
+
# @example
|
50
|
+
# api.spaces.tickets.get 'project1', 7
|
51
|
+
def get(*args)
|
52
|
+
arguments(args, required: [:space, :number])
|
53
|
+
get_request("/spaces/#{arguments.space}/tickets/#{arguments.number}", arguments.params)
|
54
|
+
end
|
55
|
+
|
56
|
+
# @example
|
57
|
+
# api.spaces.tickets.get_by_id 'project1', 1710
|
58
|
+
def get_by_id(*args)
|
59
|
+
arguments(args, required: [:space, :ticket_id])
|
60
|
+
get_request("/spaces/#{arguments.space}/tickets/id/#{arguments.ticket_id}", arguments.params)
|
61
|
+
end
|
62
|
+
|
63
|
+
# @example
|
64
|
+
# api.spaces.tickets.edit 'project1', 7, ticket: {description: 'REQ changed...'}
|
65
|
+
def edit(*args)
|
66
|
+
arguments(args, required: [:space, :number]) do
|
67
|
+
permit VALID_PARAMS_NAMES , recursive: true
|
68
|
+
# TODO assert_values VALID_REQUEST_PARAM_VALUES
|
69
|
+
end
|
70
|
+
|
71
|
+
put_request("/spaces/#{arguments.space}/tickets/#{arguments.number}", arguments.params)
|
72
|
+
end
|
73
|
+
|
74
|
+
# Delete ticket by number
|
75
|
+
# @example
|
76
|
+
# api.spaces.tickets.delete 'project1', 7
|
77
|
+
def delete(*args)
|
78
|
+
arguments(args, required: [:space, :number])
|
79
|
+
delete_request("/spaces/#{arguments.space}/tickets/#{arguments.number}", arguments.params)
|
80
|
+
end
|
81
|
+
|
82
|
+
# @example
|
83
|
+
# api.spaces.tickets.list 'project1'
|
84
|
+
def list(*args)
|
85
|
+
arguments(args, required: [:space])
|
86
|
+
response = get_request("/spaces/#{arguments.space}/tickets", arguments.params)
|
87
|
+
return response unless block_given?
|
88
|
+
response.each { |el| yield el }
|
89
|
+
end
|
90
|
+
|
91
|
+
# @example
|
92
|
+
# api.spaces.tickets.my 'project1'
|
93
|
+
def my(*args)
|
94
|
+
arguments(args, required: [:space])
|
95
|
+
response = get_request("/spaces/#{arguments.space}/tickets/my_active", arguments.params)
|
96
|
+
return response unless block_given?
|
97
|
+
response.each { |el| yield el }
|
98
|
+
end
|
99
|
+
|
100
|
+
# @example
|
101
|
+
# api.spaces.tickets.followed 'project1'
|
102
|
+
def followed(*args)
|
103
|
+
arguments(args, required: [:space])
|
104
|
+
response = get_request("/spaces/#{arguments.space}/tickets/my_followed", arguments.params)
|
105
|
+
return response unless block_given?
|
106
|
+
response.each { |el| yield el }
|
107
|
+
end
|
108
|
+
|
109
|
+
# @example
|
110
|
+
# api.spaces.tickets.by_milestone_id 'project1', 49
|
111
|
+
def by_milestone_id(*args)
|
112
|
+
arguments(args, required: [:space, :milestone_id])
|
113
|
+
response = get_request("/spaces/#{arguments.space}/tickets/milestone/#{arguments.milestone_id}", arguments.params)
|
114
|
+
return response unless block_given?
|
115
|
+
response.each { |el| yield el }
|
116
|
+
end
|
117
|
+
|
118
|
+
# @example
|
119
|
+
# api.spaces.tickets.by_milestone_id 'project1'
|
120
|
+
def without_milestone(*args)
|
121
|
+
arguments(args, required: [:space])
|
122
|
+
response = get_request("/spaces/#{arguments.space}/tickets/no_milestone", arguments.params)
|
123
|
+
return response unless block_given?
|
124
|
+
response.each { |el| yield el }
|
125
|
+
end
|
126
|
+
|
127
|
+
# @example
|
128
|
+
# api.spaces.tickets.attachments 'project1', 14
|
129
|
+
def attachments(*args)
|
130
|
+
arguments(args, required: [:space, :number])
|
131
|
+
response = get_request("/spaces/#{arguments.space}/tickets/#{arguments.number}/attachments", arguments.params)
|
132
|
+
return response unless block_given?
|
133
|
+
response.each { |el| yield el }
|
134
|
+
end
|
135
|
+
|
136
|
+
# @example
|
137
|
+
# api.spaces.tickets.tags 'project1', 14
|
138
|
+
def tags(*args)
|
139
|
+
arguments(args, required: [:space, :number])
|
140
|
+
response = get_request("/spaces/#{arguments.space}/tickets/#{arguments.number}/tags", arguments.params)
|
141
|
+
return response unless block_given?
|
142
|
+
response.each { |el| yield el }
|
143
|
+
end
|
144
|
+
|
145
|
+
# @example
|
146
|
+
# api.spaces.tickets.custom_reports 'project1'
|
147
|
+
def custom_reports(*args)
|
148
|
+
arguments(args, required: [:space])
|
149
|
+
response = get_request("/spaces/#{arguments.space}/tickets/custom_reports", arguments.params)
|
150
|
+
return response unless block_given?
|
151
|
+
response.each { |el| yield el }
|
152
|
+
end
|
153
|
+
end # Tickets
|
154
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module Assembla
|
2
|
+
class Client::Spaces::Tickets::Associations < API
|
3
|
+
VALID_PARAMS_NAMES = %w{ ticket2_id relationship }
|
4
|
+
VALID_REQUEST_PARAM_VALUES = {
|
5
|
+
'relationship' => 0..8,
|
6
|
+
}
|
7
|
+
|
8
|
+
# @example
|
9
|
+
# api.spaces.tickets.associations.create 'project1', 500,
|
10
|
+
# ticket_association: { ticket2_id: 125, relationship: 6 }
|
11
|
+
def create(*args)
|
12
|
+
arguments(args, required: [:space, :number]) do
|
13
|
+
permit VALID_PARAMS_NAMES, recursive: true
|
14
|
+
assert_required %w[ ticket2_id ]
|
15
|
+
assert_values VALID_REQUEST_PARAM_VALUES
|
16
|
+
end
|
17
|
+
|
18
|
+
post_request("/spaces/#{arguments.space}/tickets/#{arguments.number}/ticket_associations", arguments.params)
|
19
|
+
end
|
20
|
+
|
21
|
+
# @example
|
22
|
+
# api.spaces.tickets.associations.get 'project1', 500, 123
|
23
|
+
def get(*args)
|
24
|
+
arguments(args, required: [:space, :number, :id])
|
25
|
+
get_request("/spaces/#{arguments.space}/tickets/#{arguments.number}/ticket_associations/#{arguments.id}", arguments.params)
|
26
|
+
end
|
27
|
+
|
28
|
+
# @example
|
29
|
+
# api.spaces.tickets.associations.edit 'project1', 500, 123, ticket_association: {relationship: 3}
|
30
|
+
def edit(*args)
|
31
|
+
arguments(args, required: [:space, :number, :id]) do
|
32
|
+
permit VALID_PARAMS_NAMES - ['ticket2_id'] , recursive: true
|
33
|
+
assert_required %w[ relationship ]
|
34
|
+
assert_values VALID_REQUEST_PARAM_VALUES
|
35
|
+
end
|
36
|
+
|
37
|
+
put_request("/spaces/#{arguments.space}/tickets/#{arguments.number}/ticket_associations/#{arguments.id}", arguments.params)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Delete ticket association by ID
|
41
|
+
# @example
|
42
|
+
# api.spaces.tickets.associations.delete 'project1', 500, 123
|
43
|
+
def delete(*args)
|
44
|
+
arguments(args, required: [:space, :number, :id])
|
45
|
+
delete_request("/spaces/#{arguments.space}/tickets/#{arguments.number}/ticket_associations/#{arguments.id}", arguments.params)
|
46
|
+
end
|
47
|
+
|
48
|
+
# @example
|
49
|
+
# api.spaces.tickets.associations.list 'project1', 500
|
50
|
+
def list(*args)
|
51
|
+
arguments(args, required: [:space, :number])
|
52
|
+
response = get_request("/spaces/#{arguments.space}/tickets/#{arguments.number}/ticket_associations", arguments.params)
|
53
|
+
return response unless block_given?
|
54
|
+
response.each { |el| yield el }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Assembla
|
2
|
+
class Client::Spaces::Tickets::Comments < API
|
3
|
+
VALID_PARAMS_NAMES = %w{ user_id comment created_on }
|
4
|
+
|
5
|
+
# @example
|
6
|
+
# api.spaces.tickets.comments.create 'project1', 500,
|
7
|
+
# ticket_comment: { comment: 'I will do it now' }
|
8
|
+
def create(*args)
|
9
|
+
arguments(args, required: [:space, :number]) do
|
10
|
+
permit VALID_PARAMS_NAMES, recursive: true
|
11
|
+
assert_required %w[ comment ]
|
12
|
+
end
|
13
|
+
|
14
|
+
post_request("/spaces/#{arguments.space}/tickets/#{arguments.number}/ticket_comments", arguments.params)
|
15
|
+
end
|
16
|
+
|
17
|
+
# @example
|
18
|
+
# api.spaces.tickets.comments.get 'project1', 500, 142857
|
19
|
+
def get(*args)
|
20
|
+
arguments(args, required: [:space, :number, :id])
|
21
|
+
get_request("/spaces/#{arguments.space}/tickets/#{arguments.number}/ticket_comments/#{arguments.id}", arguments.params)
|
22
|
+
end
|
23
|
+
|
24
|
+
# @example
|
25
|
+
# api.spaces.tickets.comments.edit 'project1', 500, 142857,
|
26
|
+
# ticket_comment: { comment: 'Ops, I made a typo' }
|
27
|
+
def edit(*args)
|
28
|
+
arguments(args, required: [:space, :number, :id]) do
|
29
|
+
permit ['comment'] , recursive: true
|
30
|
+
assert_required %w[ comment ]
|
31
|
+
end
|
32
|
+
|
33
|
+
put_request("/spaces/#{arguments.space}/tickets/#{arguments.number}/ticket_comments/#{arguments.id}", arguments.params)
|
34
|
+
end
|
35
|
+
|
36
|
+
# @example
|
37
|
+
# api.spaces.tickets.comments.list 'project1', 500
|
38
|
+
def list(*args)
|
39
|
+
arguments(args, required: [:space, :number])
|
40
|
+
response = get_request("/spaces/#{arguments.space}/tickets/#{arguments.number}/ticket_comments", arguments.params)
|
41
|
+
return response unless block_given?
|
42
|
+
response.each { |el| yield el }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module Assembla
|
2
|
+
class Client::Spaces::Tickets::CustomFields < API
|
3
|
+
VALID_PARAMS_NAMES = %w{type title order required hide default_value list_options}
|
4
|
+
VALID_REQUEST_PARAM_VALUES = {
|
5
|
+
'type' => %w{text numeric team\ list list date},
|
6
|
+
'required' => [true, false],
|
7
|
+
'hide' => [true, false]
|
8
|
+
}
|
9
|
+
|
10
|
+
# @example
|
11
|
+
# api.spaces.tickets.custom_fields.create 'project1', custom_field: { title: 'Build' }
|
12
|
+
def create(*args)
|
13
|
+
arguments(args, required: [:space]) do
|
14
|
+
permit VALID_PARAMS_NAMES, recursive: true
|
15
|
+
assert_required %w[ title ]
|
16
|
+
assert_values VALID_REQUEST_PARAM_VALUES
|
17
|
+
end
|
18
|
+
|
19
|
+
post_request("/spaces/#{arguments.space}/tickets/custom_fields", arguments.params)
|
20
|
+
end
|
21
|
+
|
22
|
+
# @example
|
23
|
+
# api.spaces.tickets.custom_fields.get 'project1', 34
|
24
|
+
def get(*args)
|
25
|
+
arguments(args, required: [:space, :id])
|
26
|
+
get_request("/spaces/#{arguments.space}/tickets/custom_fields/#{arguments.id}", arguments.params)
|
27
|
+
end
|
28
|
+
|
29
|
+
# @example
|
30
|
+
# api.spaces.tickets.custom_fields.edit 'project1', 34, custom_field: {title: 'Build Number', type: 'numeric'}
|
31
|
+
def edit(*args)
|
32
|
+
arguments(args, required: [:space, :id]) do
|
33
|
+
permit VALID_PARAMS_NAMES , recursive: true
|
34
|
+
assert_values VALID_REQUEST_PARAM_VALUES
|
35
|
+
end
|
36
|
+
|
37
|
+
put_request("/spaces/#{arguments.space}/tickets/custom_fields/#{arguments.id}", arguments.params)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Delete ticket status by ID
|
41
|
+
# @example
|
42
|
+
# api.spaces.tickets.custom_fields.delete 'project1', 34
|
43
|
+
def delete(*args)
|
44
|
+
arguments(args, required: [:space, :id])
|
45
|
+
delete_request("/spaces/#{arguments.space}/tickets/custom_fields/#{arguments.id}", arguments.params)
|
46
|
+
end
|
47
|
+
|
48
|
+
# @example
|
49
|
+
# api.spaces.tickets.custom_fields.list 'project1'
|
50
|
+
def list(*args)
|
51
|
+
arguments(args, required: [:space])
|
52
|
+
response = get_request("/spaces/#{arguments.space}/tickets/custom_fields", arguments.params)
|
53
|
+
return response unless block_given?
|
54
|
+
response.each { |el| yield el }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|