assembla_api 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +20 -0
  3. data/Rakefile +22 -0
  4. data/lib/assembla_api.rb +130 -0
  5. data/lib/assembla_api/api.rb +373 -0
  6. data/lib/assembla_api/api/actions.rb +58 -0
  7. data/lib/assembla_api/api/arguments.rb +248 -0
  8. data/lib/assembla_api/api/config.rb +107 -0
  9. data/lib/assembla_api/api/config/property.rb +30 -0
  10. data/lib/assembla_api/api/config/property_set.rb +119 -0
  11. data/lib/assembla_api/api/factory.rb +33 -0
  12. data/lib/assembla_api/authorization.rb +76 -0
  13. data/lib/assembla_api/client.rb +21 -0
  14. data/lib/assembla_api/client/activity.rb +30 -0
  15. data/lib/assembla_api/client/authorizations.rb +143 -0
  16. data/lib/assembla_api/client/authorizations/app.rb +98 -0
  17. data/lib/assembla_api/client/portfolio.rb +19 -0
  18. data/lib/assembla_api/client/portfolio/invitations.rb +30 -0
  19. data/lib/assembla_api/client/portfolio/spaces.rb +13 -0
  20. data/lib/assembla_api/client/portfolio/standup_reports.rb +34 -0
  21. data/lib/assembla_api/client/portfolio/tasks.rb +13 -0
  22. data/lib/assembla_api/client/portfolio/ticket_reports.rb +13 -0
  23. data/lib/assembla_api/client/portfolio/tickets.rb +13 -0
  24. data/lib/assembla_api/client/portfolio/users.rb +13 -0
  25. data/lib/assembla_api/client/spaces.rb +140 -0
  26. data/lib/assembla_api/client/spaces/documents.rb +87 -0
  27. data/lib/assembla_api/client/spaces/milestones.rb +102 -0
  28. data/lib/assembla_api/client/spaces/space_tools.rb +65 -0
  29. data/lib/assembla_api/client/spaces/space_tools/merge_requests.rb +105 -0
  30. data/lib/assembla_api/client/spaces/space_tools/merge_requests/versions.rb +41 -0
  31. data/lib/assembla_api/client/spaces/space_tools/merge_requests/versions/comments.rb +34 -0
  32. data/lib/assembla_api/client/spaces/space_tools/merge_requests/versions/votes.rb +46 -0
  33. data/lib/assembla_api/client/spaces/ssh.rb +14 -0
  34. data/lib/assembla_api/client/spaces/ssh/actions.rb +76 -0
  35. data/lib/assembla_api/client/spaces/ssh/actions/launches.rb +14 -0
  36. data/lib/assembla_api/client/spaces/ssh/keys.rb +18 -0
  37. data/lib/assembla_api/client/spaces/ssh/launches.rb +29 -0
  38. data/lib/assembla_api/client/spaces/ssh/servers.rb +63 -0
  39. data/lib/assembla_api/client/spaces/standup_away_reports.rb +41 -0
  40. data/lib/assembla_api/client/spaces/standup_reports.rb +41 -0
  41. data/lib/assembla_api/client/spaces/tags.rb +96 -0
  42. data/lib/assembla_api/client/spaces/tickets.rb +154 -0
  43. data/lib/assembla_api/client/spaces/tickets/associations.rb +57 -0
  44. data/lib/assembla_api/client/spaces/tickets/comments.rb +45 -0
  45. data/lib/assembla_api/client/spaces/tickets/custom_fields.rb +57 -0
  46. data/lib/assembla_api/client/spaces/tickets/statuses.rb +55 -0
  47. data/lib/assembla_api/client/spaces/user_roles.rb +61 -0
  48. data/lib/assembla_api/client/spaces/users.rb +11 -0
  49. data/lib/assembla_api/client/spaces/webhooks.rb +63 -0
  50. data/lib/assembla_api/client/spaces/wiki_pages.rb +78 -0
  51. data/lib/assembla_api/client/spaces/wiki_pages/versions.rb +20 -0
  52. data/lib/assembla_api/client/tasks.rb +72 -0
  53. data/lib/assembla_api/client/users.rb +49 -0
  54. data/lib/assembla_api/client/users/keys.rb +97 -0
  55. data/lib/assembla_api/configuration.rb +71 -0
  56. data/lib/assembla_api/connection.rb +66 -0
  57. data/lib/assembla_api/constants.rb +74 -0
  58. data/lib/assembla_api/core_ext/array.rb +25 -0
  59. data/lib/assembla_api/core_ext/hash.rb +92 -0
  60. data/lib/assembla_api/core_ext/ordered_hash.rb +107 -0
  61. data/lib/assembla_api/deprecation.rb +39 -0
  62. data/lib/assembla_api/error.rb +37 -0
  63. data/lib/assembla_api/error/bad_request.rb +14 -0
  64. data/lib/assembla_api/error/client_error.rb +20 -0
  65. data/lib/assembla_api/error/forbidden.rb +14 -0
  66. data/lib/assembla_api/error/internal_server_error.rb +15 -0
  67. data/lib/assembla_api/error/invalid_options.rb +18 -0
  68. data/lib/assembla_api/error/not_acceptable.rb +15 -0
  69. data/lib/assembla_api/error/not_found.rb +14 -0
  70. data/lib/assembla_api/error/required_params.rb +18 -0
  71. data/lib/assembla_api/error/service_error.rb +68 -0
  72. data/lib/assembla_api/error/service_unavailable.rb +15 -0
  73. data/lib/assembla_api/error/unauthorized.rb +15 -0
  74. data/lib/assembla_api/error/unknown_media.rb +18 -0
  75. data/lib/assembla_api/error/unknown_value.rb +18 -0
  76. data/lib/assembla_api/error/unprocessable_entity.rb +14 -0
  77. data/lib/assembla_api/error/validations.rb +18 -0
  78. data/lib/assembla_api/ext/faraday.rb +38 -0
  79. data/lib/assembla_api/jsonable.rb +18 -0
  80. data/lib/assembla_api/middleware.rb +31 -0
  81. data/lib/assembla_api/mime_type.rb +33 -0
  82. data/lib/assembla_api/normalizer.rb +25 -0
  83. data/lib/assembla_api/null_encoder.rb +25 -0
  84. data/lib/assembla_api/page_iterator.rb +142 -0
  85. data/lib/assembla_api/page_links.rb +45 -0
  86. data/lib/assembla_api/paged_request.rb +40 -0
  87. data/lib/assembla_api/pagination.rb +102 -0
  88. data/lib/assembla_api/parameter_filter.rb +32 -0
  89. data/lib/assembla_api/params_hash.rb +101 -0
  90. data/lib/assembla_api/rate_limit.rb +25 -0
  91. data/lib/assembla_api/request.rb +85 -0
  92. data/lib/assembla_api/request/basic_auth.rb +33 -0
  93. data/lib/assembla_api/request/jsonize.rb +53 -0
  94. data/lib/assembla_api/request/key_auth.rb +31 -0
  95. data/lib/assembla_api/request/oauth2.rb +42 -0
  96. data/lib/assembla_api/request/verbs.rb +60 -0
  97. data/lib/assembla_api/response.rb +28 -0
  98. data/lib/assembla_api/response/header.rb +76 -0
  99. data/lib/assembla_api/response/jsonize.rb +29 -0
  100. data/lib/assembla_api/response/mashify.rb +24 -0
  101. data/lib/assembla_api/response/raise_error.rb +18 -0
  102. data/lib/assembla_api/response/xmlize.rb +26 -0
  103. data/lib/assembla_api/response_wrapper.rb +157 -0
  104. data/lib/assembla_api/ssl_certs/cacerts.pem +2183 -0
  105. data/lib/assembla_api/utils/url.rb +59 -0
  106. data/lib/assembla_api/validations.rb +25 -0
  107. data/lib/assembla_api/validations/format.rb +24 -0
  108. data/lib/assembla_api/validations/presence.rb +30 -0
  109. data/lib/assembla_api/validations/required.rb +24 -0
  110. data/lib/assembla_api/validations/token.rb +41 -0
  111. data/lib/assembla_api/version.rb +12 -0
  112. 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