crowdin-api 1.3.0 → 1.5.0
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.
- checksums.yaml +4 -4
- data/.github/workflows/docs.yml +31 -0
- data/.rubocop_todo.yml +55 -61
- data/Gemfile +3 -0
- data/README.md +37 -6
- data/lib/crowdin-api/api_resources/bundles.rb +104 -0
- data/lib/crowdin-api/api_resources/glossaries.rb +49 -0
- data/lib/crowdin-api/api_resources/projects.rb +27 -0
- data/lib/crowdin-api/api_resources/reports.rb +64 -0
- data/lib/crowdin-api/api_resources/source_files.rb +64 -0
- data/lib/crowdin-api/api_resources/storages.rb +12 -0
- data/lib/crowdin-api/api_resources/string_translations.rb +1 -1
- data/lib/crowdin-api/client/client.rb +86 -0
- data/lib/crowdin-api/client/version.rb +1 -1
- data/lib/crowdin-api/core/errors.rb +1 -0
- data/lib/crowdin-api/core/fetch_all_extensions.rb +9 -0
- data/lib/crowdin-api/core/request.rb +7 -12
- data/lib/crowdin-api.rb +2 -1
- data/spec/api_resources/bundles_spec.rb +61 -0
- data/spec/api_resources/glossaries_spec.rb +43 -0
- data/spec/api_resources/reports_spec.rb +50 -0
- data/spec/api_resources/source_files_spec.rb +171 -0
- data/spec/api_resources/storages_spec.rb +28 -0
- data/spec/api_resources/string_comments_spec.rb +38 -0
- data/spec/api_resources/string_translations_spec.rb +128 -0
- data/spec/api_resources/teams_spec.rb +87 -0
- data/spec/api_resources/translation_memory_spec.rb +101 -0
- data/spec/api_resources/translation_status_spec.rb +46 -0
- data/spec/spec_helper.rb +5 -2
- data/spec/unit/client_spec.rb +6 -0
- metadata +6 -2
@@ -115,6 +115,70 @@ module Crowdin
|
|
115
115
|
)
|
116
116
|
Web::SendRequest.new(request, destination).perform
|
117
117
|
end
|
118
|
+
|
119
|
+
def list_report_settings_templates(query = {}, project_id = config.project_id)
|
120
|
+
project_id || raise_project_id_is_required_error
|
121
|
+
|
122
|
+
request = Web::Request.new(
|
123
|
+
connection,
|
124
|
+
:get,
|
125
|
+
"#{config.target_api_url}/projects/#{project_id}/reports/settings-templates",
|
126
|
+
{ params: query }
|
127
|
+
)
|
128
|
+
Web::SendRequest.new(request).perform
|
129
|
+
end
|
130
|
+
|
131
|
+
def add_report_settings_template(query = {}, project_id = config.project_id)
|
132
|
+
project_id || raise_project_id_is_required_error
|
133
|
+
%i[name currency unit mode config].each do |param|
|
134
|
+
query[param] || raise_parameter_is_required_error(param)
|
135
|
+
end
|
136
|
+
|
137
|
+
request = Web::Request.new(
|
138
|
+
connection,
|
139
|
+
:post,
|
140
|
+
"#{config.target_api_url}/projects/#{project_id}/reports/settings-templates",
|
141
|
+
{ params: query }
|
142
|
+
)
|
143
|
+
Web::SendRequest.new(request).perform
|
144
|
+
end
|
145
|
+
|
146
|
+
def get_report_settings_template(template_id = nil, project_id = config.project_id)
|
147
|
+
project_id || raise_project_id_is_required_error
|
148
|
+
template_id || raise_parameter_is_required_error(:template_id)
|
149
|
+
|
150
|
+
request = Web::Request.new(
|
151
|
+
connection,
|
152
|
+
:get,
|
153
|
+
"#{config.target_api_url}/projects/#{project_id}/reports/settings-templates/#{template_id}"
|
154
|
+
)
|
155
|
+
Web::SendRequest.new(request).perform
|
156
|
+
end
|
157
|
+
|
158
|
+
def edit_report_settings_template(query = {}, template_id = nil, project_id = config.project_id)
|
159
|
+
project_id || raise_project_id_is_required_error
|
160
|
+
template_id || raise_parameter_is_required_error(:template_id)
|
161
|
+
|
162
|
+
request = Web::Request.new(
|
163
|
+
connection,
|
164
|
+
:patch,
|
165
|
+
"#{config.target_api_url}/projects/#{project_id}/reports/settings-templates/#{template_id}",
|
166
|
+
{ params: query }
|
167
|
+
)
|
168
|
+
Web::SendRequest.new(request).perform
|
169
|
+
end
|
170
|
+
|
171
|
+
def delete_report_settings_template(template_id = nil, project_id = config.project_id)
|
172
|
+
project_id || raise_project_id_is_required_error
|
173
|
+
template_id || raise_parameter_is_required_error(:template_id)
|
174
|
+
|
175
|
+
request = Web::Request.new(
|
176
|
+
connection,
|
177
|
+
:delete,
|
178
|
+
"#{config.target_api_url}/projects/#{project_id}/reports/settings-templates/#{template_id}"
|
179
|
+
)
|
180
|
+
Web::SendRequest.new(request).perform
|
181
|
+
end
|
118
182
|
end
|
119
183
|
end
|
120
184
|
end
|
@@ -3,6 +3,9 @@
|
|
3
3
|
module Crowdin
|
4
4
|
module ApiResources
|
5
5
|
module SourceFiles
|
6
|
+
# @param query [Hash] Request Body
|
7
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.projects.branches.getMany API Documentation}
|
8
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.branches.getMany Enterprise API Documentation}
|
6
9
|
def list_branches(query = {}, project_id = config.project_id)
|
7
10
|
project_id || raise_project_id_is_required_error
|
8
11
|
|
@@ -15,6 +18,9 @@ module Crowdin
|
|
15
18
|
Web::SendRequest.new(request).perform
|
16
19
|
end
|
17
20
|
|
21
|
+
# @param query [Hash] Request Body
|
22
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.projects.branches.post API Documentation}
|
23
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.branches.post Enterprise API Documentation}
|
18
24
|
def add_branch(query = {}, project_id = config.project_id)
|
19
25
|
project_id || raise_project_id_is_required_error
|
20
26
|
|
@@ -27,6 +33,9 @@ module Crowdin
|
|
27
33
|
Web::SendRequest.new(request).perform
|
28
34
|
end
|
29
35
|
|
36
|
+
# @param branch_id [Integer] Branch ID
|
37
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.projects.branches.get API Documentation}
|
38
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.branches.get Enterprise API Documentation}
|
30
39
|
def get_branch(branch_id = nil, project_id = config.project_id)
|
31
40
|
branch_id || raise_parameter_is_required_error(:branch_id)
|
32
41
|
project_id || raise_project_id_is_required_error
|
@@ -39,6 +48,9 @@ module Crowdin
|
|
39
48
|
Web::SendRequest.new(request).perform
|
40
49
|
end
|
41
50
|
|
51
|
+
# @param branch_id [Hash] Branch ID
|
52
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.projects.branches.delete API Documentation}
|
53
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.branches.delete Enterprise API Documentation}
|
42
54
|
def delete_branch(branch_id = nil, project_id = config.project_id)
|
43
55
|
branch_id || raise_parameter_is_required_error(:branch_id)
|
44
56
|
project_id || raise_project_id_is_required_error
|
@@ -51,6 +63,10 @@ module Crowdin
|
|
51
63
|
Web::SendRequest.new(request).perform
|
52
64
|
end
|
53
65
|
|
66
|
+
# @param query [Hash] Request Body
|
67
|
+
# @param branch_id [Integer] Branch ID
|
68
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.projects.branches.patch API Documentation}
|
69
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.branches.patch Enterprise API Documentation}
|
54
70
|
def edit_branch(branch_id = nil, query = {}, project_id = config.project_id)
|
55
71
|
branch_id || raise_parameter_is_required_error(:branch_id)
|
56
72
|
project_id || raise_project_id_is_required_error
|
@@ -64,6 +80,9 @@ module Crowdin
|
|
64
80
|
Web::SendRequest.new(request).perform
|
65
81
|
end
|
66
82
|
|
83
|
+
# @param query [Hash] Request Body
|
84
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.projects.directories.getMany API Documentation}
|
85
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.directories.getMany Enterprise API Documentation}
|
67
86
|
def list_directories(query = {}, project_id = config.project_id)
|
68
87
|
project_id || raise_project_id_is_required_error
|
69
88
|
|
@@ -76,6 +95,9 @@ module Crowdin
|
|
76
95
|
Web::SendRequest.new(request).perform
|
77
96
|
end
|
78
97
|
|
98
|
+
# @param query [Hash] Request Body
|
99
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.projects.directories.post API Documentation}
|
100
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.directories.post Enterprise API Documentation}
|
79
101
|
def add_directory(query = {}, project_id = config.project_id)
|
80
102
|
project_id || raise_project_id_is_required_error
|
81
103
|
|
@@ -88,6 +110,9 @@ module Crowdin
|
|
88
110
|
Web::SendRequest.new(request).perform
|
89
111
|
end
|
90
112
|
|
113
|
+
# @param directory_id [Integer] Directory ID
|
114
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.projects.directories.get API Documentation}
|
115
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.directories.get Enterprise API Documentation}
|
91
116
|
def get_directory(directory_id = nil, project_id = config.project_id)
|
92
117
|
directory_id || raise_parameter_is_required_error(:directory_id)
|
93
118
|
project_id || raise_project_id_is_required_error
|
@@ -100,6 +125,9 @@ module Crowdin
|
|
100
125
|
Web::SendRequest.new(request).perform
|
101
126
|
end
|
102
127
|
|
128
|
+
# @param directory_id [Integer] Directory ID
|
129
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.projects.directories.delete API Documentation}
|
130
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.directories.delete Enterprise API Documentation}
|
103
131
|
def delete_directory(directory_id = nil, project_id = config.project_id)
|
104
132
|
directory_id || raise_parameter_is_required_error(:directory_id)
|
105
133
|
project_id || raise_project_id_is_required_error
|
@@ -112,6 +140,10 @@ module Crowdin
|
|
112
140
|
Web::SendRequest.new(request).perform
|
113
141
|
end
|
114
142
|
|
143
|
+
# @param query [Hash] Request Body
|
144
|
+
# @param directory_id [Integer] Directory ID
|
145
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.projects.directories.patch API Documentation}
|
146
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.directories.patch Enterprise API Documentation}
|
115
147
|
def edit_directory(directory_id = nil, query = {}, project_id = config.project_id)
|
116
148
|
directory_id || raise_parameter_is_required_error(:directory_id)
|
117
149
|
project_id || raise_project_id_is_required_error
|
@@ -125,6 +157,9 @@ module Crowdin
|
|
125
157
|
Web::SendRequest.new(request).perform
|
126
158
|
end
|
127
159
|
|
160
|
+
# @param query [Hash] Request Body
|
161
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.projects.files.getMany API Documentation}
|
162
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.files.getMany Enterprise API Documentation}
|
128
163
|
def list_files(query = {}, project_id = config.project_id)
|
129
164
|
project_id || raise_project_id_is_required_error
|
130
165
|
|
@@ -137,6 +172,9 @@ module Crowdin
|
|
137
172
|
Web::SendRequest.new(request).perform
|
138
173
|
end
|
139
174
|
|
175
|
+
# @param query [Hash] Request Body
|
176
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.projects.files.post API Documentation}
|
177
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.files.post Enterprise API Documentation}
|
140
178
|
def add_file(query = {}, project_id = config.project_id)
|
141
179
|
project_id || raise_project_id_is_required_error
|
142
180
|
|
@@ -149,6 +187,9 @@ module Crowdin
|
|
149
187
|
Web::SendRequest.new(request).perform
|
150
188
|
end
|
151
189
|
|
190
|
+
# @param file_id [Integer] File ID
|
191
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.projects.files.get API Documentation}
|
192
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.files.get Enterprise API Documentation}
|
152
193
|
def get_file(file_id = nil, project_id = config.project_id)
|
153
194
|
file_id || raise_parameter_is_required_error(:file_id)
|
154
195
|
project_id || raise_project_id_is_required_error
|
@@ -161,6 +202,10 @@ module Crowdin
|
|
161
202
|
Web::SendRequest.new(request).perform
|
162
203
|
end
|
163
204
|
|
205
|
+
# @param query [Hash] Request Body
|
206
|
+
# @param file_id [Integer] File ID
|
207
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.projects.files.put API Documentation}
|
208
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.files.put Enterprise API Documentation}
|
164
209
|
def update_or_restore_file(file_id = nil, query = {}, project_id = config.project_id)
|
165
210
|
file_id || raise_parameter_is_required_error(:file_id)
|
166
211
|
project_id || raise_project_id_is_required_error
|
@@ -174,6 +219,9 @@ module Crowdin
|
|
174
219
|
Web::SendRequest.new(request).perform
|
175
220
|
end
|
176
221
|
|
222
|
+
# @param file_id [Integer] File ID
|
223
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.projects.files.delete API Documentation}
|
224
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.files.delete Enterprise API Documentation}
|
177
225
|
def delete_file(file_id = nil, project_id = config.project_id)
|
178
226
|
file_id || raise_parameter_is_required_error(:file_id)
|
179
227
|
project_id || raise_project_id_is_required_error
|
@@ -186,6 +234,10 @@ module Crowdin
|
|
186
234
|
Web::SendRequest.new(request).perform
|
187
235
|
end
|
188
236
|
|
237
|
+
# @param query [Hash] Request Body
|
238
|
+
# @param file_id [Integer] File ID
|
239
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.projects.files.patch API Documentation}
|
240
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.files.patch Enterprise API Documentation}
|
189
241
|
def edit_file(file_id = nil, query = {}, project_id = config.project_id)
|
190
242
|
file_id || raise_parameter_is_required_error(:file_id)
|
191
243
|
project_id || raise_project_id_is_required_error
|
@@ -199,6 +251,10 @@ module Crowdin
|
|
199
251
|
Web::SendRequest.new(request).perform
|
200
252
|
end
|
201
253
|
|
254
|
+
# @param file_id [Integer] File ID
|
255
|
+
# @param destination [String] Destination of File
|
256
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.projects.files.download.get API Documentation}
|
257
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.files.download.get Enterprise API Documentation}
|
202
258
|
def download_file(file_id = nil, destination = nil, project_id = config.project_id)
|
203
259
|
file_id || raise_parameter_is_required_error(:file_id)
|
204
260
|
project_id || raise_project_id_is_required_error
|
@@ -211,6 +267,10 @@ module Crowdin
|
|
211
267
|
Web::SendRequest.new(request, destination).perform
|
212
268
|
end
|
213
269
|
|
270
|
+
# @param query [Hash] Request Body
|
271
|
+
# @param file_id [Integer] File ID
|
272
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.projects.files.revisions.getMany API Documentation}
|
273
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.files.revisions.getMany Enterprise API Documentation}
|
214
274
|
def list_file_revisions(file_id = nil, query = {}, project_id = config.project_id)
|
215
275
|
file_id || raise_parameter_is_required_error(:file_id)
|
216
276
|
project_id || raise_project_id_is_required_error
|
@@ -224,6 +284,10 @@ module Crowdin
|
|
224
284
|
Web::SendRequest.new(request).perform
|
225
285
|
end
|
226
286
|
|
287
|
+
# @param revision_id [Integer] Revision ID
|
288
|
+
# @param file_id [Integer] File ID
|
289
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.projects.files.revisions.get API Documentation}
|
290
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.files.revisions.get Enterprise API Documentation}
|
227
291
|
def get_file_revision(file_id = nil, revision_id = nil, project_id = config.project_id)
|
228
292
|
file_id || raise_parameter_is_required_error(:file_id)
|
229
293
|
revision_id || raise_parameter_is_required_error(:revision_id)
|
@@ -3,6 +3,9 @@
|
|
3
3
|
module Crowdin
|
4
4
|
module ApiResources
|
5
5
|
module Storages
|
6
|
+
# @param query [Hash] Request Body
|
7
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.storages.getMany API Documentation}
|
8
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.storages.getMany Enterprise API Documentation}
|
6
9
|
def list_storages(query = {})
|
7
10
|
request = Web::Request.new(
|
8
11
|
connection,
|
@@ -13,6 +16,9 @@ module Crowdin
|
|
13
16
|
Web::SendRequest.new(request).perform
|
14
17
|
end
|
15
18
|
|
19
|
+
# @param file [string] File path
|
20
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.storages.post API Documentation}
|
21
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.storages.post Enterprise API Documentation}
|
16
22
|
def add_storage(file = nil)
|
17
23
|
file || raise_parameter_is_required_error(:file)
|
18
24
|
|
@@ -28,6 +34,9 @@ module Crowdin
|
|
28
34
|
Web::SendRequest.new(request).perform
|
29
35
|
end
|
30
36
|
|
37
|
+
# @param storage_id [Integer] Storage ID
|
38
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.storages.get API Documentation}
|
39
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.storages.get Enterprise API Documentation}
|
31
40
|
def get_storage(storage_id = nil)
|
32
41
|
storage_id || raise_parameter_is_required_error(:storage_id)
|
33
42
|
|
@@ -39,6 +48,9 @@ module Crowdin
|
|
39
48
|
Web::SendRequest.new(request).perform
|
40
49
|
end
|
41
50
|
|
51
|
+
# @param storage_id [Integer] Storage ID
|
52
|
+
# * {https://developer.crowdin.com/api/v2/#operation/api.storages.delete API Documentation}
|
53
|
+
# * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.storages.delete Enterprise API Documentation}
|
42
54
|
def delete_storage(storage_id = nil)
|
43
55
|
storage_id || raise_parameter_is_required_error(:storage_id)
|
44
56
|
|
@@ -177,7 +177,7 @@ module Crowdin
|
|
177
177
|
Web::SendRequest.new(request).perform
|
178
178
|
end
|
179
179
|
|
180
|
-
def
|
180
|
+
def cancel_vote(vote_id = nil, project_id = config.project_id)
|
181
181
|
vote_id || raise_parameter_is_required_error(:vote_id)
|
182
182
|
project_id || raise_project_id_is_required_error
|
183
183
|
|
@@ -30,6 +30,8 @@ module Crowdin
|
|
30
30
|
Client.send(:include, Object.const_get("Crowdin::Errors::#{module_name}"))
|
31
31
|
end
|
32
32
|
|
33
|
+
include Web::FetchAllExtensions
|
34
|
+
|
33
35
|
# Config instance that includes configuration options for the Client
|
34
36
|
attr_reader :config
|
35
37
|
# Instance with established connection through RestClient to the Crowdin API
|
@@ -67,6 +69,89 @@ module Crowdin
|
|
67
69
|
config.logger_enabled?
|
68
70
|
end
|
69
71
|
|
72
|
+
#
|
73
|
+
# FetchAll options:
|
74
|
+
# * limit, Integer, default: 500 | How many records need to load per one request
|
75
|
+
# * offset, Integer, default: 0 | How many records need to skip
|
76
|
+
# * request_delay, Integer (seconds), default: 0 | Delay between requests
|
77
|
+
#
|
78
|
+
#
|
79
|
+
# Note: Please, specify project_id while Client initialization if you need to use methods that need it within FetchAll
|
80
|
+
#
|
81
|
+
# === Example
|
82
|
+
#
|
83
|
+
# @crowdin.fetch_all(:list_projects)
|
84
|
+
#
|
85
|
+
# with specified options
|
86
|
+
#
|
87
|
+
# @crowdin.fetch_all(:list_projects, { limit: 10, request_delay: 1 })
|
88
|
+
#
|
89
|
+
# playing with response per fetch. Note: the block actually don't make any effect to finite result
|
90
|
+
#
|
91
|
+
# @crowdin.fetch_all(:list_projects, { limit: 10, request_delay: 1 }) { |response| puts response['data'] }
|
92
|
+
#
|
93
|
+
# also you can specify retry configuration to handle some exceptions
|
94
|
+
#
|
95
|
+
# Retry configuration options:
|
96
|
+
# * request_delay, Integer (seconds), default: 0 | Delay between retries
|
97
|
+
# * retries_count, Integer, default: 0
|
98
|
+
# * error_messages, Array
|
99
|
+
#
|
100
|
+
# @crowdin.fetch_all(:list_projects, {}, { request_delay: 2, retries_count: 3, error_messages: ['401'] })
|
101
|
+
#
|
102
|
+
# fetch all execution will be terminated if response error are same as in error_messages array
|
103
|
+
# otherwise system will retry so many times, as indicated at tries_count
|
104
|
+
#
|
105
|
+
def fetch_all(api_resource, opts = {}, retry_opts = {})
|
106
|
+
unless api_resource.to_s.start_with?('list_')
|
107
|
+
raise(Errors::FetchAllProcessingError, "#{api_resource} method aren't supported for FetchAll")
|
108
|
+
end
|
109
|
+
|
110
|
+
limit = opts[:limit] || Web::FetchAllExtensions::MAX_ITEMS_COUNT_PER_REQUEST
|
111
|
+
offset = opts[:offset] || 0
|
112
|
+
request_delay = opts[:request_delay] || 0
|
113
|
+
|
114
|
+
retry_request_delay = retry_opts[:request_delay] || 0
|
115
|
+
retries_count = retry_opts[:retries_count] || 0
|
116
|
+
retry_error_messages = retry_opts[:error_messages] || []
|
117
|
+
|
118
|
+
result = []
|
119
|
+
loop do
|
120
|
+
response = case api_resource
|
121
|
+
when :list_terms
|
122
|
+
send(api_resource, opts[:glossary_id], { limit: limit, offset: offset }.merge(opts))
|
123
|
+
when :list_file_revisions
|
124
|
+
send(api_resource, opts[:file_id], { limit: limit, offset: offset }.merge(opts))
|
125
|
+
else
|
126
|
+
send(api_resource, { limit: limit, offset: offset }.merge(opts))
|
127
|
+
end
|
128
|
+
|
129
|
+
if response.is_a?(String) && response.match('Something went wrong')
|
130
|
+
if retries_count.positive?
|
131
|
+
retry_error_messages.each do |message|
|
132
|
+
break if response.match(message)
|
133
|
+
end
|
134
|
+
|
135
|
+
retries_count -= 1
|
136
|
+
sleep retry_request_delay
|
137
|
+
else
|
138
|
+
raise(Errors::FetchAllProcessingError, response)
|
139
|
+
end
|
140
|
+
else
|
141
|
+
yield response if block_given?
|
142
|
+
deserialized_response = response['data']
|
143
|
+
result.concat(deserialized_response)
|
144
|
+
offset += deserialized_response.size
|
145
|
+
break if deserialized_response.size < limit
|
146
|
+
end
|
147
|
+
|
148
|
+
sleep request_delay
|
149
|
+
end
|
150
|
+
result
|
151
|
+
rescue StandardError => e
|
152
|
+
raise(Errors::FetchAllProcessingError, "FetchAll wasn't processed. Details - #{e.message}")
|
153
|
+
end
|
154
|
+
|
70
155
|
private
|
71
156
|
|
72
157
|
def build_configuration
|
@@ -85,6 +170,7 @@ module Crowdin
|
|
85
170
|
|
86
171
|
def set_default_logger
|
87
172
|
require 'logger'
|
173
|
+
|
88
174
|
@logger ||= Logger.new($stdout)
|
89
175
|
update_rest_client_logger
|
90
176
|
end
|
@@ -29,29 +29,24 @@ module Crowdin
|
|
29
29
|
connection.delete
|
30
30
|
end
|
31
31
|
|
32
|
-
def
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
def patch
|
37
|
-
connection.patch(prepare_payload(payload[:params]), payload[:headers]) { |response, _, _| response }
|
32
|
+
def process_with_body
|
33
|
+
connection.send(method, prepare_payload(payload[:params]), payload[:headers]) { |response, _, _| response }
|
38
34
|
end
|
39
35
|
|
40
36
|
def post?
|
41
37
|
method.eql?(:post)
|
42
38
|
end
|
39
|
+
alias post process_with_body
|
43
40
|
|
44
|
-
def
|
45
|
-
|
41
|
+
def patch?
|
42
|
+
method.eql?(:patch)
|
46
43
|
end
|
44
|
+
alias patch process_with_body
|
47
45
|
|
48
46
|
def put?
|
49
47
|
method.eql?(:put)
|
50
48
|
end
|
51
|
-
|
52
|
-
def put
|
53
|
-
connection.put(prepare_payload(payload[:params]), payload[:headers]) { |response, _, _| response }
|
54
|
-
end
|
49
|
+
alias put process_with_body
|
55
50
|
|
56
51
|
private
|
57
52
|
|
data/lib/crowdin-api.rb
CHANGED
@@ -5,7 +5,7 @@ module Crowdin
|
|
5
5
|
API_RESOURCES_MODULES = %i[Storages Languages Projects Workflows SourceFiles Translations SourceStrings
|
6
6
|
StringTranslations StringComments Screenshots Glossaries TranslationMemory
|
7
7
|
MachineTranslationEngines Reports Tasks Users Teams Vendors Webhooks
|
8
|
-
Dictionaries Distributions Labels TranslationStatus].freeze
|
8
|
+
Dictionaries Distributions Labels TranslationStatus Bundles].freeze
|
9
9
|
|
10
10
|
# Error Raisers modules
|
11
11
|
ERROR_RAISERS_MODULES = %i[ApiErrorsRaiser ClientErrorsRaiser].freeze
|
@@ -21,6 +21,7 @@ require 'crowdin-api/core/errors'
|
|
21
21
|
require 'crowdin-api/core/errors_raisers'
|
22
22
|
require 'crowdin-api/core/request'
|
23
23
|
require 'crowdin-api/core/send_request'
|
24
|
+
require 'crowdin-api/core/fetch_all_extensions'
|
24
25
|
|
25
26
|
# API modules
|
26
27
|
Crowdin::API_RESOURCES_MODULES.each do |api_resource|
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
describe Crowdin::ApiResources::Bundles do
|
4
|
+
describe 'Default endpoints' do
|
5
|
+
describe '#list_bundles' do
|
6
|
+
it 'when request are valid', :default do
|
7
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/bundles")
|
8
|
+
list_bundles = @crowdin.list_bundles({}, project_id)
|
9
|
+
expect(list_bundles).to eq(200)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '#add_bundle' do
|
14
|
+
it 'when request are valid', :default do
|
15
|
+
stub_request(:post, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/bundles")
|
16
|
+
add_bundle = @crowdin.add_bundle({ name: '', format: '', sourcePatterns: [], exportPattern: '' }, project_id)
|
17
|
+
expect(add_bundle).to eq(200)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#get_bundle' do
|
22
|
+
let(:bundle_id) { 1 }
|
23
|
+
|
24
|
+
it 'when request are valid', :default do
|
25
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/bundles/#{bundle_id}")
|
26
|
+
get_bundle = @crowdin.get_bundle(bundle_id, project_id)
|
27
|
+
expect(get_bundle).to eq(200)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#delete_bundle' do
|
32
|
+
let(:bundle_id) { 1 }
|
33
|
+
|
34
|
+
it 'when request are valid', :default do
|
35
|
+
stub_request(:delete, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/bundles/#{bundle_id}")
|
36
|
+
delete_bundle = @crowdin.delete_bundle(bundle_id, project_id)
|
37
|
+
expect(delete_bundle).to eq(200)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe '#edit_bundle' do
|
42
|
+
let(:bundle_id) { 1 }
|
43
|
+
|
44
|
+
it 'when request are valid', :default do
|
45
|
+
stub_request(:patch, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/bundles/#{bundle_id}")
|
46
|
+
edit_bundle = @crowdin.edit_bundle(bundle_id, {}, project_id)
|
47
|
+
expect(edit_bundle).to eq(200)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe '#bundle_list_files' do
|
52
|
+
let(:bundle_id) { 1 }
|
53
|
+
|
54
|
+
it 'when request are valid', :default do
|
55
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/bundles/#{bundle_id}/files")
|
56
|
+
bundle_list_files = @crowdin.bundle_list_files(bundle_id, {}, project_id)
|
57
|
+
expect(bundle_list_files).to eq(200)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -163,5 +163,48 @@ describe Crowdin::ApiResources::Glossaries do
|
|
163
163
|
expect(edit_term).to eq(200)
|
164
164
|
end
|
165
165
|
end
|
166
|
+
|
167
|
+
describe '#list_concepts' do
|
168
|
+
let(:glossary_id) { 1 }
|
169
|
+
|
170
|
+
it 'when request are valid', :default do
|
171
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/glossaries/#{glossary_id}/concepts")
|
172
|
+
concepts = @crowdin.list_concepts(glossary_id)
|
173
|
+
expect(concepts).to eq(200)
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
describe '#get_concept' do
|
178
|
+
let(:glossary_id) { 1 }
|
179
|
+
let(:concept_id) { 1 }
|
180
|
+
|
181
|
+
it 'when request are valid', :default do
|
182
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/glossaries/#{glossary_id}/concepts/#{concept_id}")
|
183
|
+
concept = @crowdin.get_concept(glossary_id, concept_id)
|
184
|
+
expect(concept).to eq(200)
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
describe '#update_concept' do
|
189
|
+
let(:glossary_id) { 1 }
|
190
|
+
let(:concept_id) { 1 }
|
191
|
+
|
192
|
+
it 'when request are valid', :default do
|
193
|
+
stub_request(:put, "https://api.crowdin.com/#{target_api_url}/glossaries/#{glossary_id}/concepts/#{concept_id}")
|
194
|
+
concept = @crowdin.update_concept(glossary_id, concept_id)
|
195
|
+
expect(concept).to eq(200)
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
describe '#update_concept' do
|
200
|
+
let(:glossary_id) { 1 }
|
201
|
+
let(:concept_id) { 1 }
|
202
|
+
|
203
|
+
it 'when request are valid', :default do
|
204
|
+
stub_request(:delete, "https://api.crowdin.com/#{target_api_url}/glossaries/#{glossary_id}/concepts/#{concept_id}")
|
205
|
+
concept = @crowdin.delete_concept(glossary_id, concept_id)
|
206
|
+
expect(concept).to eq(200)
|
207
|
+
end
|
208
|
+
end
|
166
209
|
end
|
167
210
|
end
|
@@ -92,4 +92,54 @@ describe Crowdin::ApiResources::Reports do
|
|
92
92
|
end
|
93
93
|
end
|
94
94
|
end
|
95
|
+
|
96
|
+
describe 'Setting Templates endpoints' do
|
97
|
+
describe 'List Report Settings templates' do
|
98
|
+
it 'when request are valid', :default do
|
99
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/reports/settings-templates")
|
100
|
+
settings_templates = @crowdin.list_report_settings_templates({}, project_id)
|
101
|
+
expect(settings_templates).to eq(200)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe 'Add Report Settings template' do
|
106
|
+
it 'when request are valid', :default do
|
107
|
+
stub_request(:post, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/reports/settings-templates")
|
108
|
+
settings_templates = @crowdin.add_report_settings_template(
|
109
|
+
{ name: '', currency: '', unit: '', mode: '', config: '' }, project_id
|
110
|
+
)
|
111
|
+
expect(settings_templates).to eq(200)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe 'Get Report Settings template' do
|
116
|
+
let(:template_id) { 1 }
|
117
|
+
|
118
|
+
it 'when request are valid', :default do
|
119
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/reports/settings-templates/#{template_id}")
|
120
|
+
settings_templates = @crowdin.get_report_settings_template(template_id, project_id)
|
121
|
+
expect(settings_templates).to eq(200)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
describe 'Get Report Settings template' do
|
126
|
+
let(:template_id) { 1 }
|
127
|
+
|
128
|
+
it 'when request are valid', :default do
|
129
|
+
stub_request(:patch, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/reports/settings-templates/#{template_id}")
|
130
|
+
settings_templates = @crowdin.edit_report_settings_template({}, template_id, project_id)
|
131
|
+
expect(settings_templates).to eq(200)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
describe 'Get Report Settings template' do
|
136
|
+
let(:template_id) { 1 }
|
137
|
+
|
138
|
+
it 'when request are valid', :default do
|
139
|
+
stub_request(:delete, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/reports/settings-templates/#{template_id}")
|
140
|
+
settings_templates = @crowdin.delete_report_settings_template(template_id, project_id)
|
141
|
+
expect(settings_templates).to eq(200)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
95
145
|
end
|