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