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,13 @@
1
+ module Assembla
2
+ class Client::Portfolio::Spaces < API
3
+
4
+ # @example
5
+ # api.portfolio.spaces.list
6
+ def list(*args)
7
+ arguments(args)
8
+ response = get_request("/spaces", arguments.params)
9
+ return response unless block_given?
10
+ response.each { |el| yield el }
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,34 @@
1
+ module Assembla
2
+ class Client::Portfolio::StandupReports < API
3
+
4
+ # @example
5
+ # api.portfolio.standup_reports.list
6
+ def list(*args)
7
+ arguments(args)
8
+ response = get_request("/standup_reports", arguments.params)
9
+ return response unless block_given?
10
+ response.each { |el| yield el }
11
+ end
12
+
13
+ # @example
14
+ # api.portfolio.standup_reports.away
15
+ def away(*args)
16
+ arguments(args) do
17
+ permit %w{ from to }
18
+ end
19
+
20
+ response = get_request("/standup_reports/away", arguments.params)
21
+ return response unless block_given?
22
+ response.each { |el| yield el }
23
+ end
24
+
25
+ # @example
26
+ # api.portfolio.standup_reports.with_needs
27
+ def with_needs(*args)
28
+ arguments(args)
29
+ response = get_request("/standup_reports/with_needs", arguments.params)
30
+ return response unless block_given?
31
+ response.each { |el| yield el }
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,13 @@
1
+ module Assembla
2
+ class Client::Portfolio::Tasks < API
3
+
4
+ # @example
5
+ # api.portfolio.tasks.list
6
+ def list(*args)
7
+ arguments(args)
8
+ response = get_request("/tasks", arguments.params)
9
+ return response unless block_given?
10
+ response.each { |el| yield el }
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Assembla
2
+ class Client::Portfolio::TicketReports < API
3
+
4
+ # @example
5
+ # api.portfolio.ticket_reports.list
6
+ def list(*args)
7
+ arguments(args)
8
+ response = get_request("/ticket_reports", arguments.params)
9
+ return response unless block_given?
10
+ response.each { |el| yield el }
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Assembla
2
+ class Client::Portfolio::Tickets < API
3
+
4
+ # @example
5
+ # api.portfolio.tickets.list
6
+ def list(*args)
7
+ arguments(args)
8
+ response = get_request("/tickets", arguments.params)
9
+ return response unless block_given?
10
+ response.each { |el| yield el }
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Assembla
2
+ class Client::Portfolio::Users < API
3
+
4
+ # @example
5
+ # api.portfolio.tasks.list
6
+ def list(*args)
7
+ arguments(args)
8
+ response = get_request("/users", arguments.params)
9
+ return response unless block_given?
10
+ response.each { |el| yield el }
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,140 @@
1
+ # encoding: utf-8
2
+
3
+ module Assembla
4
+ class Client::Spaces < API
5
+ require_all 'assembla_api/client/spaces',
6
+ 'space_tools',
7
+ 'tickets',
8
+ 'tags',
9
+ 'milestones',
10
+ 'documents',
11
+ 'wiki_pages',
12
+ 'webhooks',
13
+ 'ssh',
14
+ 'standup_reports',
15
+ 'standup_away_reports',
16
+ 'user_roles',
17
+ 'users'
18
+
19
+ VALID_PARAMS_NAMES = %w[
20
+ name
21
+ wiki_name
22
+ description
23
+ public_permissions
24
+ team_permissions
25
+ watcher_permissions
26
+ share_permissions
27
+ status
28
+ team_tab_role
29
+ default_showpage
30
+ tabs_order
31
+ banner
32
+ banner_height
33
+ banner_text
34
+ banner_link
35
+ style
36
+ approved
37
+ can_join
38
+ wiki_format
39
+ ].freeze
40
+
41
+ VALID_REQUEST_PARAM_VALUES = {
42
+ 'status' => [0, 1, 2, 3, 4],
43
+ 'team_tab_role' => [0, 10, 50, 90],
44
+ 'public_permissions' => [0, 1],
45
+ 'team_permissions' => [1, 2, 3],
46
+ 'watcher_permissions' => [0, 1],
47
+ }
48
+
49
+ # Access to Spaces::Users API
50
+ namespace :users
51
+
52
+ # Access to Spaces::UserRoles API
53
+ namespace :user_roles
54
+
55
+ # Access to Spaces::Tickets API
56
+ namespace :tickets
57
+ namespace :tags
58
+ namespace :milestones
59
+ namespace :documents
60
+ namespace :wiki_pages
61
+ namespace :webhooks
62
+ namespace :ssh
63
+ namespace :space_tools
64
+ namespace :standup_reports
65
+ namespace :standup_away_reports
66
+
67
+ #
68
+ def my(*args)
69
+ arguments(args)
70
+ response = get_request("/spaces", arguments.params)
71
+ return response unless block_given?
72
+ response.each { |el| yield el }
73
+ end
74
+
75
+ # api.spaces.get space: 'breakout'
76
+ def get(*args)
77
+ arguments(args, required: [:space])
78
+ get_request("/spaces/#{arguments.space}", arguments.params)
79
+ end
80
+ alias :find :get
81
+
82
+ def create(*args)
83
+ arguments(args) do
84
+ permit VALID_PARAMS_NAMES
85
+ assert_required %w[ name ]
86
+ assert_values VALID_REQUEST_PARAM_VALUES
87
+ end
88
+
89
+ post_request("/spaces", arguments.params)
90
+ end
91
+
92
+ def copy(*args)
93
+ arguments(args, required: [:space]) do
94
+ permit VALID_PARAMS_NAMES
95
+ assert_required %w[ name ]
96
+ assert_values VALID_REQUEST_PARAM_VALUES
97
+ end
98
+
99
+ post_request("/spaces/#{arguments.space}/copy", arguments.params)
100
+ end
101
+
102
+ # Delete a space
103
+ #
104
+ # Deleting a space requires owner access.
105
+ #
106
+ # @example
107
+ # assembla = Assembla.new oauth_token: '...'
108
+ # assembla.repos.delete 'space-name'
109
+ #
110
+ # @api public
111
+ def delete(*args)
112
+ arguments(args, required: [:space])
113
+ delete_request("/spaces/#{arguments.space}", arguments.params)
114
+ end
115
+ alias :remove :delete
116
+
117
+ # Edit a space
118
+ #
119
+ # @param [Hash] params
120
+ # @option params [String] :name
121
+ # Required string
122
+ # @option params [String] :description
123
+ # Optional string
124
+ #
125
+ # @example
126
+ # assembla = Assembla.new
127
+ # assembla.spaces.edit 'space-name',
128
+ # name: 'hello-world',
129
+ # description: 'This is your first space'
130
+ #
131
+ def edit(*args)
132
+ arguments(args,required: [:space]) do
133
+ permit VALID_PARAMS_NAMES
134
+ assert_values VALID_REQUEST_PARAM_VALUES
135
+ end
136
+
137
+ put_request("/spaces/#{arguments.space}", arguments.params)
138
+ end
139
+ end # Spaces
140
+ end # Assembla
@@ -0,0 +1,87 @@
1
+ require "mime/types"
2
+
3
+ module Assembla
4
+ class Client::Spaces::Documents < API
5
+
6
+ VALID_PARAMS_NAMES = %w[
7
+ file
8
+ filename
9
+ name
10
+ description
11
+ position
12
+ cached_tag_list
13
+ attachable_type
14
+ attachable_guid
15
+ attachable_id
16
+ ].freeze
17
+
18
+ VALID_REQUEST_PARAM_VALUES = {
19
+ 'attachable_type' => /^(Ticket|Flow|Milestone)$/
20
+ }
21
+
22
+ # @example
23
+ # api.spaces.documents.create 'project1', document: { file: '/path/to/file' }
24
+ def create(*args)
25
+ arguments(args, required: [:space]) do
26
+ permit VALID_PARAMS_NAMES, recursive: true
27
+ assert_required %w[ file ]
28
+ assert_values VALID_REQUEST_PARAM_VALUES
29
+ end
30
+
31
+ doc = arguments.params.delete 'document'
32
+ path = doc['file']
33
+ name = File.basename(path)
34
+ mime = MIME::Types.of(name).first
35
+ file = Faraday::UploadIO.new(path, mime ? mime.content_type : 'application/octet-stream')
36
+ doc['name'] ||= name
37
+ doc['file'] = file
38
+ arguments.params['data'] = { 'document' => doc }
39
+ arguments.params['options'] = { headers: { content_type: 'multipart/form-data' }}
40
+
41
+ post_request("/spaces/#{arguments.space}/documents", arguments.params)
42
+ end
43
+
44
+ # @example
45
+ # api.spaces.documents.get 'project1', 'guid'
46
+ def get(*args)
47
+ arguments(args, required: [:space, :id])
48
+ get_request("/spaces/#{arguments.space}/documents/#{arguments.id}", arguments.params)
49
+ end
50
+
51
+ # @example
52
+ # api.spaces.documents.download 'project1', 'guid'
53
+ def download(*args)
54
+ arguments(args, required: [:space, :id])
55
+ arguments.params['raw'] = true
56
+ get_request("/spaces/#{arguments.space}/documents/#{arguments.id}/download", arguments.params)
57
+ end
58
+
59
+ # @example
60
+ # api.spaces.documents.edit 'project1', 'guid', document: { description: "Confidential" }
61
+ def edit(*args)
62
+ arguments(args, required: [:space, :id]) do
63
+ permit VALID_PARAMS_NAMES , recursive: true
64
+ assert_values VALID_REQUEST_PARAM_VALUES
65
+ end
66
+
67
+ put_request("/spaces/#{arguments.space}/documents/#{arguments.id}", arguments.params)
68
+ end
69
+
70
+ # Delete document by ID
71
+ # @example
72
+ # api.spaces.documents.delete 'project1', 'guid'
73
+ def delete(*args)
74
+ arguments(args, required: [:space, :id])
75
+ delete_request("/spaces/#{arguments.space}/documents/#{arguments.id}", arguments.params)
76
+ end
77
+
78
+ # @example
79
+ # api.spaces.documents.list 'project1'
80
+ def list(*args)
81
+ arguments(args, required: [:space])
82
+ response = get_request("/spaces/#{arguments.space}/documents", arguments.params)
83
+ return response unless block_given?
84
+ response.each { |el| yield el }
85
+ end
86
+ end # documents
87
+ end
@@ -0,0 +1,102 @@
1
+ module Assembla
2
+ class Client::Spaces::Milestones < API
3
+
4
+ VALID_PARAMS_NAMES = %w[
5
+ title
6
+ user_id
7
+ is_completed
8
+ release_level
9
+ release_notes
10
+ planner_type
11
+ ].freeze
12
+
13
+ VALID_REQUEST_PARAM_VALUES = {
14
+ 'release_level' => [ 1, 2, 3 ], # Alpha, Beta, Stable
15
+ 'planner_type' => [ 0, 1, 2 ], # None, Backlog, Current
16
+ 'is_completed' => [ true, false ],
17
+ }
18
+
19
+ # @example
20
+ # api.spaces.milestones.create 'project1', milestone: { title: 'Mobile App V2' }
21
+ def create(*args)
22
+ arguments(args, required: [:space]) do
23
+ permit VALID_PARAMS_NAMES, recursive: true
24
+ assert_required %w[ title ]
25
+ assert_values VALID_REQUEST_PARAM_VALUES
26
+ end
27
+
28
+ post_request("/spaces/#{arguments.space}/milestones", arguments.params)
29
+ end
30
+
31
+ # @example
32
+ # api.spaces.milestones.get 'project1', 7
33
+ def get(*args)
34
+ arguments(args, required: [:space, :id])
35
+ get_request("/spaces/#{arguments.space}/milestones/#{arguments.id}", arguments.params)
36
+ end
37
+
38
+ # @example
39
+ # api.spaces.milestones.edit 'project1', 7, milestone: { is_completed: true }
40
+ def edit(*args)
41
+ arguments(args, required: [:space, :id]) do
42
+ permit VALID_PARAMS_NAMES , recursive: true
43
+ assert_values VALID_REQUEST_PARAM_VALUES
44
+ end
45
+
46
+ put_request("/spaces/#{arguments.space}/milestones/#{arguments.id}", arguments.params)
47
+ end
48
+
49
+ # Delete milestone by ID
50
+ # @example
51
+ # api.spaces.milestones.delete 'project1', 7
52
+ def delete(*args)
53
+ arguments(args, required: [:space, :id])
54
+ delete_request("/spaces/#{arguments.space}/milestones/#{arguments.id}", arguments.params)
55
+ end
56
+
57
+ # @example
58
+ # api.spaces.milestones.list 'project1'
59
+ def list(*args)
60
+ arguments(args, required: [:space])
61
+ response = get_request("/spaces/#{arguments.space}/milestones", arguments.params)
62
+ return response unless block_given?
63
+ response.each { |el| yield el }
64
+ end
65
+
66
+ # @example
67
+ # api.spaces.milestones.all 'project1'
68
+ def all(*args)
69
+ arguments(args, required: [:space])
70
+ response = get_request("/spaces/#{arguments.space}/milestones/all", arguments.params)
71
+ return response unless block_given?
72
+ response.each { |el| yield el }
73
+ end
74
+
75
+ # @example
76
+ # api.spaces.milestones.completed 'project1'
77
+ def completed(*args)
78
+ arguments(args, required: [:space])
79
+ response = get_request("/spaces/#{arguments.space}/milestones/completed", arguments.params)
80
+ return response unless block_given?
81
+ response.each { |el| yield el }
82
+ end
83
+
84
+ # @example
85
+ # api.spaces.milestones.upcoming 'project1'
86
+ def upcoming(*args)
87
+ arguments(args, required: [:space])
88
+ response = get_request("/spaces/#{arguments.space}/milestones/upcoming", arguments.params)
89
+ return response unless block_given?
90
+ response.each { |el| yield el }
91
+ end
92
+
93
+ # @example
94
+ # api.spaces.milestones.release_notes 'project1'
95
+ def release_notes(*args)
96
+ arguments(args, required: [:space])
97
+ response = get_request("/spaces/#{arguments.space}/milestones/release_notes", arguments.params)
98
+ return response unless block_given?
99
+ response.each { |el| yield el }
100
+ end
101
+ end # milestones
102
+ end
@@ -0,0 +1,65 @@
1
+ module Assembla
2
+ class Client::Spaces::SpaceTools < API
3
+ require_all 'assembla_api/client/spaces/space_tools',
4
+ 'merge_requests'
5
+
6
+ namespace :merge_requests
7
+
8
+ VALID_PARAMS_NAMES = %w{
9
+ team_permissions
10
+ watcher_permissions
11
+ public_permissions
12
+ }
13
+
14
+ # @example
15
+ # api.spaces.space_tools.create 'project1', 21,
16
+ def create(*args)
17
+ arguments(args, required: [:space, :tool_id])
18
+ post_request("/spaces/#{arguments.space}/space_tools/#{arguments.tool_id}/add")
19
+ end
20
+
21
+ # @example
22
+ # api.spaces.space_tools.edit 'project1', 'tool_guid', space_tool: {watcher_permissions: 1}
23
+ def edit(*args)
24
+ arguments(args, required: [:space, :space_tool_id]) do
25
+ permit VALID_PARAMS_NAMES, recursive: true
26
+ end
27
+
28
+ put_request("/spaces/#{arguments.space}/space_tools/#{arguments.space_tool_id}", arguments.params)
29
+ end
30
+
31
+ # @example
32
+ # api.spaces.space_tools.get 'project1', 'tool_guid'
33
+ def get(*args)
34
+ arguments(args, required: [:space, :space_tool_id])
35
+ get_request("/spaces/#{arguments.space}/space_tools/#{arguments.space_tool_id}")
36
+ end
37
+
38
+ # @example
39
+ # api.spaces.space_tools.delete 'project1', 'tool_guid'
40
+ def delete(*args)
41
+ arguments(args, required: [:space, :space_tool_id])
42
+ delete_request("/spaces/#{arguments.space}/space_tools/#{arguments.space_tool_id}")
43
+ end
44
+
45
+ # @example
46
+ # api.spaces.space_tools.list 'project1'
47
+ # api.spaces.space_tools.all 'project1'
48
+ def list(*args)
49
+ arguments(args, required: [:space])
50
+ response = get_request("/spaces/#{arguments.space}/space_tools", arguments.params)
51
+ return response unless block_given?
52
+ response.each { |el| yield el }
53
+ end
54
+ alias :all :list
55
+
56
+ # @example
57
+ # api.spaces.space_tools.repo_list 'project1'
58
+ def repo_list(*args)
59
+ arguments(args, required: [:space])
60
+ response = get_request("/spaces/#{arguments.space}/space_tools/repo", arguments.params)
61
+ return response unless block_given?
62
+ response.each { |el| yield el }
63
+ end
64
+ end # SpaceTools
65
+ end # Assembla