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.
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