crowdin-api 1.3.0 → 1.4.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/.rubocop_todo.yml +55 -61
- data/README.md +30 -1
- data/lib/crowdin-api/api_resources/bundles.rb +81 -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 +14 -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/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
- metadata +5 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 283ff1afb3a211be3a2c06c0417decc9b6ff3fcca1e8c61c78523708c428d286
|
|
4
|
+
data.tar.gz: e6f02c86c39702e00eacc0908c6dec0a93783a7a4038e2eddbc634ca2d4887d3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ca47c68a8c81d3de24a5ae913155ece611ae9400fdbea47933355d6043036c269d15ab067df037afcdc4aae1fa982991f49bee4603fb5f6816a783dd6d7c30b1
|
|
7
|
+
data.tar.gz: dcf04302fb3c882a81f630476b4e7dce4cf1e98320da04615d3d393fb4bdfadb9bc67aec732bee227321cd3af7cbc095363f0f0c22a903a5f954acb6101a243a
|
data/.rubocop_todo.yml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# This configuration was generated by
|
|
2
2
|
# `rubocop --auto-gen-config`
|
|
3
|
-
# on 2022-
|
|
3
|
+
# on 2022-08-12 15:14:54 UTC using RuboCop version 1.26.0.
|
|
4
4
|
# The point is for the user to remove these configuration records
|
|
5
5
|
# one by one as the offenses are removed from the code base.
|
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
|
@@ -21,16 +21,21 @@ Gemspec/RequiredRubyVersion:
|
|
|
21
21
|
Exclude:
|
|
22
22
|
- 'crowdin-api.gemspec'
|
|
23
23
|
|
|
24
|
-
# Offense count:
|
|
24
|
+
# Offense count: 2
|
|
25
25
|
# This cop supports safe auto-correction (--auto-correct).
|
|
26
|
-
# Configuration parameters:
|
|
27
|
-
|
|
26
|
+
# Configuration parameters: EnforcedStyle, IndentOneStep, IndentationWidth.
|
|
27
|
+
# SupportedStyles: case, end
|
|
28
|
+
Layout/CaseIndentation:
|
|
28
29
|
Exclude:
|
|
29
|
-
- 'lib/crowdin-api/
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
- 'lib/crowdin-api/client/client.rb'
|
|
31
|
+
|
|
32
|
+
# Offense count: 1
|
|
33
|
+
# This cop supports safe auto-correction (--auto-correct).
|
|
34
|
+
# Configuration parameters: EnforcedStyleAlignWith, Severity.
|
|
35
|
+
# SupportedStylesAlignWith: keyword, variable, start_of_line
|
|
36
|
+
Layout/EndAlignment:
|
|
37
|
+
Exclude:
|
|
38
|
+
- 'lib/crowdin-api/client/client.rb'
|
|
34
39
|
|
|
35
40
|
# Offense count: 4
|
|
36
41
|
# This cop supports safe auto-correction (--auto-correct).
|
|
@@ -42,7 +47,7 @@ Layout/HashAlignment:
|
|
|
42
47
|
Exclude:
|
|
43
48
|
- 'lib/crowdin-api/client/configuration.rb'
|
|
44
49
|
|
|
45
|
-
# Offense count:
|
|
50
|
+
# Offense count: 14
|
|
46
51
|
# This cop supports safe auto-correction (--auto-correct).
|
|
47
52
|
# Configuration parameters: EnforcedStyle.
|
|
48
53
|
# SupportedStyles: normal, indented_internal_methods
|
|
@@ -52,7 +57,7 @@ Layout/IndentationConsistency:
|
|
|
52
57
|
- 'lib/crowdin-api/core/request.rb'
|
|
53
58
|
- 'lib/crowdin-api/core/send_request.rb'
|
|
54
59
|
|
|
55
|
-
# Offense count:
|
|
60
|
+
# Offense count: 14
|
|
56
61
|
# This cop supports safe auto-correction (--auto-correct).
|
|
57
62
|
# Configuration parameters: Width, IgnoredPatterns.
|
|
58
63
|
Layout/IndentationWidth:
|
|
@@ -61,59 +66,60 @@ Layout/IndentationWidth:
|
|
|
61
66
|
- 'lib/crowdin-api/core/request.rb'
|
|
62
67
|
- 'lib/crowdin-api/core/send_request.rb'
|
|
63
68
|
|
|
64
|
-
# Offense count:
|
|
69
|
+
# Offense count: 4
|
|
65
70
|
# This cop supports safe auto-correction (--auto-correct).
|
|
66
71
|
# Configuration parameters: AllowForAlignment, EnforcedStyleForExponentOperator.
|
|
67
72
|
# SupportedStylesForExponentOperator: space, no_space
|
|
68
73
|
Layout/SpaceAroundOperators:
|
|
69
74
|
Exclude:
|
|
70
75
|
- 'crowdin-api.gemspec'
|
|
71
|
-
- 'lib/crowdin-api/api_resources/machine_translation_engines.rb'
|
|
72
|
-
- 'lib/crowdin-api/api_resources/reports.rb'
|
|
73
|
-
- 'lib/crowdin-api/api_resources/teams.rb'
|
|
74
|
-
- 'lib/crowdin-api/api_resources/users.rb'
|
|
75
|
-
- 'lib/crowdin-api/api_resources/workflows.rb'
|
|
76
76
|
- 'spec/api_resources/projects_spec.rb'
|
|
77
77
|
|
|
78
|
-
# Offense count:
|
|
79
|
-
# This cop supports safe auto-correction (--auto-correct).
|
|
80
|
-
# Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods, IgnoreNotImplementedMethods.
|
|
81
|
-
Lint/UnusedMethodArgument:
|
|
82
|
-
Exclude:
|
|
83
|
-
- 'lib/crowdin-api/core/send_request.rb'
|
|
84
|
-
|
|
85
|
-
# Offense count: 2
|
|
78
|
+
# Offense count: 3
|
|
86
79
|
# Configuration parameters: IgnoredMethods, CountRepeatedAttributes.
|
|
87
80
|
Metrics/AbcSize:
|
|
88
|
-
Max:
|
|
81
|
+
Max: 42
|
|
89
82
|
|
|
90
|
-
# Offense count:
|
|
83
|
+
# Offense count: 46
|
|
91
84
|
# Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
|
|
92
85
|
# IgnoredMethods: refine
|
|
93
86
|
Metrics/BlockLength:
|
|
94
87
|
Max: 171
|
|
95
88
|
|
|
96
|
-
# Offense count:
|
|
89
|
+
# Offense count: 1
|
|
90
|
+
# Configuration parameters: CountComments, CountAsOne.
|
|
91
|
+
Metrics/ClassLength:
|
|
92
|
+
Max: 101
|
|
93
|
+
|
|
94
|
+
# Offense count: 1
|
|
95
|
+
# Configuration parameters: IgnoredMethods.
|
|
96
|
+
Metrics/CyclomaticComplexity:
|
|
97
|
+
Max: 18
|
|
98
|
+
|
|
99
|
+
# Offense count: 6
|
|
97
100
|
# Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
|
|
98
101
|
Metrics/MethodLength:
|
|
99
|
-
Max:
|
|
102
|
+
Max: 41
|
|
100
103
|
|
|
101
|
-
# Offense count:
|
|
104
|
+
# Offense count: 8
|
|
102
105
|
# Configuration parameters: CountComments, CountAsOne.
|
|
103
106
|
Metrics/ModuleLength:
|
|
104
|
-
Max:
|
|
107
|
+
Max: 196
|
|
105
108
|
|
|
106
|
-
# Offense count:
|
|
107
|
-
# Configuration parameters: CountKeywordArgs.
|
|
109
|
+
# Offense count: 2
|
|
110
|
+
# Configuration parameters: Max, CountKeywordArgs.
|
|
108
111
|
Metrics/ParameterLists:
|
|
109
112
|
MaxOptionalParameters: 4
|
|
110
|
-
Max: 6
|
|
111
113
|
|
|
112
|
-
# Offense count:
|
|
114
|
+
# Offense count: 1
|
|
115
|
+
# Configuration parameters: IgnoredMethods.
|
|
116
|
+
Metrics/PerceivedComplexity:
|
|
117
|
+
Max: 19
|
|
118
|
+
|
|
119
|
+
# Offense count: 1
|
|
113
120
|
Naming/AccessorMethodName:
|
|
114
121
|
Exclude:
|
|
115
122
|
- 'lib/crowdin-api/api_resources/users.rb'
|
|
116
|
-
- 'lib/crowdin-api/core/send_request.rb'
|
|
117
123
|
|
|
118
124
|
# Offense count: 1
|
|
119
125
|
# Configuration parameters: ExpectMatchingDefinition, CheckDefinitionPathHierarchy, CheckDefinitionPathHierarchyRoots, Regex, IgnoreExecutableScripts, AllowedAcronyms.
|
|
@@ -130,13 +136,6 @@ Naming/MemoizedInstanceVariableName:
|
|
|
130
136
|
Exclude:
|
|
131
137
|
- 'lib/crowdin-api/client/client.rb'
|
|
132
138
|
|
|
133
|
-
# Offense count: 6
|
|
134
|
-
# This cop supports safe auto-correction (--auto-correct).
|
|
135
|
-
# Configuration parameters: PreferredName.
|
|
136
|
-
Naming/RescuedExceptionsVariableName:
|
|
137
|
-
Exclude:
|
|
138
|
-
- 'lib/crowdin-api/core/send_request.rb'
|
|
139
|
-
|
|
140
139
|
# Offense count: 7
|
|
141
140
|
# This cop supports safe auto-correction (--auto-correct).
|
|
142
141
|
# Configuration parameters: EnforcedStyle.
|
|
@@ -146,14 +145,13 @@ Style/AccessorGrouping:
|
|
|
146
145
|
- 'lib/crowdin-api/client/configuration.rb'
|
|
147
146
|
- 'lib/crowdin-api/core/request.rb'
|
|
148
147
|
|
|
149
|
-
# Offense count:
|
|
148
|
+
# Offense count: 2
|
|
150
149
|
# This cop supports unsafe auto-correction (--auto-correct-all).
|
|
151
150
|
Style/CollectionCompact:
|
|
152
151
|
Exclude:
|
|
153
152
|
- 'lib/crowdin-api/core/request.rb'
|
|
154
|
-
- 'lib/crowdin-api/core/send_request.rb'
|
|
155
153
|
|
|
156
|
-
# Offense count:
|
|
154
|
+
# Offense count: 27
|
|
157
155
|
# Configuration parameters: AllowedConstants.
|
|
158
156
|
Style/Documentation:
|
|
159
157
|
Enabled: false
|
|
@@ -175,25 +173,21 @@ Style/FrozenStringLiteralComment:
|
|
|
175
173
|
- 'bin/crowdin-console'
|
|
176
174
|
|
|
177
175
|
# Offense count: 1
|
|
178
|
-
|
|
176
|
+
# Configuration parameters: MinBodyLength.
|
|
177
|
+
Style/GuardClause:
|
|
179
178
|
Exclude:
|
|
180
|
-
- '
|
|
179
|
+
- 'lib/crowdin-api/client/client.rb'
|
|
181
180
|
|
|
182
|
-
# Offense count:
|
|
183
|
-
|
|
184
|
-
# Configuration parameters: EnforcedStyle.
|
|
185
|
-
# SupportedStyles: implicit, explicit
|
|
186
|
-
Style/RescueStandardError:
|
|
181
|
+
# Offense count: 1
|
|
182
|
+
Style/MixinUsage:
|
|
187
183
|
Exclude:
|
|
188
|
-
- '
|
|
189
|
-
- 'lib/crowdin-api/api_resources/string_translations.rb'
|
|
184
|
+
- 'bin/crowdin-console'
|
|
190
185
|
|
|
191
186
|
# Offense count: 1
|
|
192
|
-
# This cop supports
|
|
193
|
-
|
|
194
|
-
Style/StringConcatenation:
|
|
187
|
+
# This cop supports safe auto-correction (--auto-correct).
|
|
188
|
+
Style/RedundantFreeze:
|
|
195
189
|
Exclude:
|
|
196
|
-
- 'lib/crowdin-api/
|
|
190
|
+
- 'lib/crowdin-api/core/fetch_all_extensions.rb'
|
|
197
191
|
|
|
198
192
|
# Offense count: 8
|
|
199
193
|
# This cop supports safe auto-correction (--auto-correct).
|
|
@@ -203,9 +197,9 @@ Style/StringLiterals:
|
|
|
203
197
|
Exclude:
|
|
204
198
|
- 'spec/api_resources/projects_spec.rb'
|
|
205
199
|
|
|
206
|
-
# Offense count:
|
|
200
|
+
# Offense count: 2
|
|
207
201
|
# This cop supports safe auto-correction (--auto-correct).
|
|
208
202
|
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
|
209
203
|
# URISchemes: http, https
|
|
210
204
|
Layout/LineLength:
|
|
211
|
-
Max:
|
|
205
|
+
Max: 122
|
data/README.md
CHANGED
|
@@ -27,6 +27,7 @@ For more about Crowdin API v2 see the documentation:
|
|
|
27
27
|
* [Quick Start](#quick-start)
|
|
28
28
|
* [Initialization](#initialization)
|
|
29
29
|
* [Usage](#usage)
|
|
30
|
+
* [Fetch all records](#fetch-all-records)
|
|
30
31
|
* [Command-Line Client](#command-line-client)
|
|
31
32
|
* [Seeking Assistance](#seeking-assistance)
|
|
32
33
|
* [Contributing](#contributing)
|
|
@@ -40,7 +41,7 @@ For more about Crowdin API v2 see the documentation:
|
|
|
40
41
|
Add this line to your application's Gemfile:
|
|
41
42
|
|
|
42
43
|
```gemfile
|
|
43
|
-
gem 'crowdin-api', '~> 1.
|
|
44
|
+
gem 'crowdin-api', '~> 1.4.0'
|
|
44
45
|
```
|
|
45
46
|
|
|
46
47
|
And then execute:
|
|
@@ -66,6 +67,7 @@ gem install crowdin-api
|
|
|
66
67
|
## Quick start
|
|
67
68
|
|
|
68
69
|
### Initialization
|
|
70
|
+
|
|
69
71
|
```ruby
|
|
70
72
|
require 'crowdin-api'
|
|
71
73
|
|
|
@@ -145,6 +147,33 @@ file_revisions = crowdin.list_file_revisions(your_file_id, { limit: 10 }, your_p
|
|
|
145
147
|
# Note: more examples you can find in spec folder
|
|
146
148
|
```
|
|
147
149
|
|
|
150
|
+
### Fetch all records
|
|
151
|
+
|
|
152
|
+
There is a possibility to fetch all records from paginatable methods using `fetch_all` method.
|
|
153
|
+
|
|
154
|
+
```ruby
|
|
155
|
+
# FetchAll options:
|
|
156
|
+
# * limit, Integer, default: 500 | How many records need to load per one request
|
|
157
|
+
# * offset, Integer, default: 0
|
|
158
|
+
# * request_delay, Integer (seconds), default: 0 | Delay between requests. To specify a delay in milliseconds use float values like 0.100
|
|
159
|
+
|
|
160
|
+
# Examples:
|
|
161
|
+
|
|
162
|
+
@crowdin.fetch_all(:list_projects)
|
|
163
|
+
|
|
164
|
+
# with options
|
|
165
|
+
@crowdin.fetch_all(:list_projects, { limit: 10, request_delay: 1 })
|
|
166
|
+
|
|
167
|
+
# playing with response per fetch
|
|
168
|
+
# Note: the block actually don't make any effect to finite result
|
|
169
|
+
@crowdin.fetch_all(:list_projects, { limit: 10, request_delay: 1 }) { |response| puts response['data'] }
|
|
170
|
+
|
|
171
|
+
# also, you could specify a retry configuration to handle some exceptions
|
|
172
|
+
# fetch all execution will be terminated if response status code is the same as one of the error_messages array value
|
|
173
|
+
# otherwise, the request will be retried so many times, as indicated at retries_count
|
|
174
|
+
@crowdin.fetch_all(:list_projects, {}, { request_delay: 2, retries_count: 3, error_messages: ['401'] })
|
|
175
|
+
```
|
|
176
|
+
|
|
148
177
|
### Command-Line Client
|
|
149
178
|
|
|
150
179
|
The Crowdin Ruby client support crowdin-console, where you can test endpoints easier
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Crowdin
|
|
4
|
+
module ApiResources
|
|
5
|
+
module Bundles
|
|
6
|
+
def list_bundles(query = {}, project_id = config.project_id)
|
|
7
|
+
project_id || raise_project_id_is_required_error
|
|
8
|
+
|
|
9
|
+
request = Web::Request.new(
|
|
10
|
+
connection,
|
|
11
|
+
:get,
|
|
12
|
+
"#{config.target_api_url}/projects/#{project_id}/bundles",
|
|
13
|
+
{ params: query }
|
|
14
|
+
)
|
|
15
|
+
Web::SendRequest.new(request).perform
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def add_bundle(query = {}, project_id = config.project_id)
|
|
19
|
+
project_id || raise_project_id_is_required_error
|
|
20
|
+
|
|
21
|
+
request = Web::Request.new(
|
|
22
|
+
connection,
|
|
23
|
+
:post,
|
|
24
|
+
"#{config.target_api_url}/projects/#{project_id}/bundles",
|
|
25
|
+
{ params: query }
|
|
26
|
+
)
|
|
27
|
+
Web::SendRequest.new(request).perform
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def get_bundle(bundle_id, project_id = config.project_id)
|
|
31
|
+
bundle_id || raise_parameter_is_required_error(:bundle_id)
|
|
32
|
+
project_id || raise_project_id_is_required_error
|
|
33
|
+
|
|
34
|
+
request = Web::Request.new(
|
|
35
|
+
connection,
|
|
36
|
+
:get,
|
|
37
|
+
"#{config.target_api_url}/projects/#{project_id}/bundles/#{bundle_id}"
|
|
38
|
+
)
|
|
39
|
+
Web::SendRequest.new(request).perform
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def delete_bundle(bundle_id, project_id = config.project_id)
|
|
43
|
+
bundle_id || raise_parameter_is_required_error(:bundle_id)
|
|
44
|
+
project_id || raise_project_id_is_required_error
|
|
45
|
+
|
|
46
|
+
request = Web::Request.new(
|
|
47
|
+
connection,
|
|
48
|
+
:delete,
|
|
49
|
+
"#{config.target_api_url}/projects/#{project_id}/bundles/#{bundle_id}"
|
|
50
|
+
)
|
|
51
|
+
Web::SendRequest.new(request).perform
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def edit_bundle(bundle_id, query = {}, project_id = config.project_id)
|
|
55
|
+
bundle_id || raise_parameter_is_required_error(:bundle_id)
|
|
56
|
+
project_id || raise_project_id_is_required_error
|
|
57
|
+
|
|
58
|
+
request = Web::Request.new(
|
|
59
|
+
connection,
|
|
60
|
+
:patch,
|
|
61
|
+
"#{config.target_api_url}/projects/#{project_id}/bundles/#{bundle_id}",
|
|
62
|
+
{ params: query }
|
|
63
|
+
)
|
|
64
|
+
Web::SendRequest.new(request).perform
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def bundle_list_files(bundle_id, query = {}, project_id = config.project_id)
|
|
68
|
+
bundle_id || raise_parameter_is_required_error(:bundle_id)
|
|
69
|
+
project_id || raise_project_id_is_required_error
|
|
70
|
+
|
|
71
|
+
request = Web::Request.new(
|
|
72
|
+
connection,
|
|
73
|
+
:get,
|
|
74
|
+
"#{config.target_api_url}/projects/#{project_id}/bundles/#{bundle_id}/files",
|
|
75
|
+
{ params: query }
|
|
76
|
+
)
|
|
77
|
+
Web::SendRequest.new(request).perform
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -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 Web::FetchAllExtensions::API_RESOURCES_FOR_FETCH_ALL.include?(api_resource)
|
|
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
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Crowdin
|
|
4
|
+
module Web
|
|
5
|
+
module FetchAllExtensions
|
|
6
|
+
MAX_ITEMS_COUNT_PER_REQUEST = 500.freeze
|
|
7
|
+
API_RESOURCES_FOR_FETCH_ALL = %i[list_vendors list_dictionaries list_directories list_distributions
|
|
8
|
+
list_workflow_templates list_languages list_labels list_mts list_files
|
|
9
|
+
list_projects list_groups list_branches list_strings list_storages
|
|
10
|
+
list_string_comments list_tasks list_user_tasks list_webhooks
|
|
11
|
+
list_terms list_file_revisions list_bundles].freeze
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
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({}, 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
|
|
@@ -9,5 +9,176 @@ describe Crowdin::ApiResources::SourceFiles do
|
|
|
9
9
|
expect(list_branches).to eq(200)
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
|
+
|
|
13
|
+
describe '#add_branch' do
|
|
14
|
+
it 'when request are valid', :default do
|
|
15
|
+
stub_request(:post, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/branches")
|
|
16
|
+
add_branch = @crowdin.add_branch({}, project_id)
|
|
17
|
+
expect(add_branch).to eq(200)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe '#get_branch' do
|
|
22
|
+
let(:branch_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}/branches/#{branch_id}")
|
|
26
|
+
get_branch = @crowdin.get_branch(branch_id, project_id)
|
|
27
|
+
expect(get_branch).to eq(200)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe '#delete_branch' do
|
|
32
|
+
let(:branch_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}/branches/#{branch_id}")
|
|
36
|
+
delete_branch = @crowdin.delete_branch(branch_id, project_id)
|
|
37
|
+
expect(delete_branch).to eq(200)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe '#edit_branch' do
|
|
42
|
+
let(:branch_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}/branches/#{branch_id}")
|
|
46
|
+
edit_branch = @crowdin.edit_branch(branch_id, {}, project_id)
|
|
47
|
+
expect(edit_branch).to eq(200)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
describe '#list_directories' do
|
|
52
|
+
it 'when request are valid', :default do
|
|
53
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/directories")
|
|
54
|
+
list_directories = @crowdin.list_directories({}, project_id)
|
|
55
|
+
expect(list_directories).to eq(200)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
describe '#add_directory' do
|
|
60
|
+
it 'when request are valid', :default do
|
|
61
|
+
stub_request(:post, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/directories")
|
|
62
|
+
add_directory = @crowdin.add_directory({}, project_id)
|
|
63
|
+
expect(add_directory).to eq(200)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
describe '#get_directory' do
|
|
68
|
+
let(:directory_id) { 1 }
|
|
69
|
+
|
|
70
|
+
it 'when request are valid', :default do
|
|
71
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/directories/#{directory_id}")
|
|
72
|
+
get_directory = @crowdin.get_directory(directory_id, project_id)
|
|
73
|
+
expect(get_directory).to eq(200)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
describe '#delete_directory' do
|
|
78
|
+
let(:directory_id) { 1 }
|
|
79
|
+
|
|
80
|
+
it 'when request are valid', :default do
|
|
81
|
+
stub_request(:delete, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/directories/#{directory_id}")
|
|
82
|
+
delete_directory = @crowdin.delete_directory(directory_id, project_id)
|
|
83
|
+
expect(delete_directory).to eq(200)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
describe '#edit_directory' do
|
|
88
|
+
let(:directory_id) { 1 }
|
|
89
|
+
|
|
90
|
+
it 'when request are valid', :default do
|
|
91
|
+
stub_request(:patch, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/directories/#{directory_id}")
|
|
92
|
+
edit_directory = @crowdin.edit_directory(directory_id, {}, project_id)
|
|
93
|
+
expect(edit_directory).to eq(200)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
describe '#list_files' do
|
|
98
|
+
it 'when request are valid', :default do
|
|
99
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/files")
|
|
100
|
+
list_files = @crowdin.list_files({}, project_id)
|
|
101
|
+
expect(list_files).to eq(200)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
describe '#add_file' do
|
|
106
|
+
it 'when request are valid', :default do
|
|
107
|
+
stub_request(:post, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/files")
|
|
108
|
+
add_file = @crowdin.add_file({}, project_id)
|
|
109
|
+
expect(add_file).to eq(200)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
describe '#get_file' do
|
|
114
|
+
let(:file_id) { 1 }
|
|
115
|
+
|
|
116
|
+
it 'when request are valid', :default do
|
|
117
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/files/#{file_id}")
|
|
118
|
+
get_file = @crowdin.get_file(file_id, project_id)
|
|
119
|
+
expect(get_file).to eq(200)
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
describe '#update_or_restore_file' do
|
|
124
|
+
let(:file_id) { 1 }
|
|
125
|
+
|
|
126
|
+
it 'when request are valid', :default do
|
|
127
|
+
stub_request(:put, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/files/#{file_id}")
|
|
128
|
+
update_or_restore_file = @crowdin.update_or_restore_file(file_id, {}, project_id)
|
|
129
|
+
expect(update_or_restore_file).to eq(200)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
describe '#delete_file' do
|
|
134
|
+
let(:file_id) { 1 }
|
|
135
|
+
|
|
136
|
+
it 'when request are valid', :default do
|
|
137
|
+
stub_request(:delete, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/files/#{file_id}")
|
|
138
|
+
delete_file = @crowdin.delete_file(file_id, project_id)
|
|
139
|
+
expect(delete_file).to eq(200)
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
describe '#edit_file' do
|
|
144
|
+
let(:file_id) { 1 }
|
|
145
|
+
|
|
146
|
+
it 'when request are valid', :default do
|
|
147
|
+
stub_request(:patch, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/files/#{file_id}")
|
|
148
|
+
edit_file = @crowdin.edit_file(file_id, {}, project_id)
|
|
149
|
+
expect(edit_file).to eq(200)
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
describe '#download_file' do
|
|
154
|
+
let(:file_id) { 1 }
|
|
155
|
+
|
|
156
|
+
it 'when request are valid', :default do
|
|
157
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/files/#{file_id}/download")
|
|
158
|
+
download_file = @crowdin.download_file(file_id, nil, project_id)
|
|
159
|
+
expect(download_file).to eq(200)
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
describe '#list_file_revisions' do
|
|
164
|
+
let(:file_id) { 1 }
|
|
165
|
+
|
|
166
|
+
it 'when request are valid', :default do
|
|
167
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/files/#{file_id}/revisions")
|
|
168
|
+
list_file_revisions = @crowdin.list_file_revisions(file_id, {}, project_id)
|
|
169
|
+
expect(list_file_revisions).to eq(200)
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
describe '#get_file_revision' do
|
|
174
|
+
let(:file_id) { 1 }
|
|
175
|
+
let(:revision_id) { 1 }
|
|
176
|
+
|
|
177
|
+
it 'when request are valid', :default do
|
|
178
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/files/#{file_id}/revisions/#{revision_id}")
|
|
179
|
+
get_file_revision = @crowdin.get_file_revision(file_id, revision_id, project_id)
|
|
180
|
+
expect(get_file_revision).to eq(200)
|
|
181
|
+
end
|
|
182
|
+
end
|
|
12
183
|
end
|
|
13
184
|
end
|
|
@@ -9,5 +9,33 @@ describe Crowdin::ApiResources::Storages do
|
|
|
9
9
|
expect(list_storages).to eq(200)
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
|
+
|
|
13
|
+
describe '#add_storage' do
|
|
14
|
+
it 'when request are valid', :default do
|
|
15
|
+
stub_request(:post, "https://api.crowdin.com/#{target_api_url}/storages")
|
|
16
|
+
add_storage = @crowdin.add_storage('README.md')
|
|
17
|
+
expect(add_storage).to eq(200)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe '#get_storage' do
|
|
22
|
+
let(:storage_id) { 1 }
|
|
23
|
+
|
|
24
|
+
it 'when request are valid', :default do
|
|
25
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/storages/#{storage_id}")
|
|
26
|
+
get_storage = @crowdin.get_storage(storage_id)
|
|
27
|
+
expect(get_storage).to eq(200)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe '#delete_storage' do
|
|
32
|
+
let(:storage_id) { 1 }
|
|
33
|
+
|
|
34
|
+
it 'when request are valid', :default do
|
|
35
|
+
stub_request(:delete, "https://api.crowdin.com/#{target_api_url}/storages/#{storage_id}")
|
|
36
|
+
delete_storage = @crowdin.delete_storage(storage_id)
|
|
37
|
+
expect(delete_storage).to eq(200)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
12
40
|
end
|
|
13
41
|
end
|
|
@@ -9,5 +9,43 @@ describe Crowdin::ApiResources::StringComments do
|
|
|
9
9
|
expect(list_string_comments).to eq(200)
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
|
+
|
|
13
|
+
describe '#add_string_comment' do
|
|
14
|
+
it 'when request are valid', :default do
|
|
15
|
+
stub_request(:post, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/comments")
|
|
16
|
+
add_string_comment = @crowdin.add_string_comment({}, project_id)
|
|
17
|
+
expect(add_string_comment).to eq(200)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe '#get_string_comment' do
|
|
22
|
+
let(:string_comment_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}/comments/#{string_comment_id}")
|
|
26
|
+
get_string_comment = @crowdin.get_string_comment(string_comment_id, project_id)
|
|
27
|
+
expect(get_string_comment).to eq(200)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe '#delete_string_comment' do
|
|
32
|
+
let(:string_comment_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}/comments/#{string_comment_id}")
|
|
36
|
+
delete_string_comment = @crowdin.delete_string_comment(string_comment_id, project_id)
|
|
37
|
+
expect(delete_string_comment).to eq(200)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe '#edit_string_comment' do
|
|
42
|
+
let(:string_comment_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}/comments/#{string_comment_id}")
|
|
46
|
+
edit_string_comment = @crowdin.edit_string_comment(string_comment_id, {}, project_id)
|
|
47
|
+
expect(edit_string_comment).to eq(200)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
12
50
|
end
|
|
13
51
|
end
|
|
@@ -9,5 +9,133 @@ describe Crowdin::ApiResources::StringTranslations do
|
|
|
9
9
|
expect(list_translation_approvals).to eq(200)
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
|
+
|
|
13
|
+
describe '#add_approval' do
|
|
14
|
+
it 'when request are valid', :default do
|
|
15
|
+
stub_request(:post, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/approvals")
|
|
16
|
+
add_approval = @crowdin.add_approval({}, project_id)
|
|
17
|
+
expect(add_approval).to eq(200)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe '#get_approval' do
|
|
22
|
+
let(:approval_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}/approvals/#{approval_id}")
|
|
26
|
+
get_approval = @crowdin.get_approval(approval_id, project_id)
|
|
27
|
+
expect(get_approval).to eq(200)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe '#remove_approval' do
|
|
32
|
+
let(:approval_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}/approvals/#{approval_id}")
|
|
36
|
+
remove_approval = @crowdin.remove_approval(approval_id, project_id)
|
|
37
|
+
expect(remove_approval).to eq(200)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe '#list_language_translations' do
|
|
42
|
+
let(:language_id) { 1 }
|
|
43
|
+
|
|
44
|
+
it 'when request are valid', :default do
|
|
45
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/languages/#{language_id}/translations")
|
|
46
|
+
list_language_translations = @crowdin.list_language_translations(language_id, {}, project_id)
|
|
47
|
+
expect(list_language_translations).to eq(200)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
describe '#list_string_translations' do
|
|
52
|
+
it 'when request are valid', :default do
|
|
53
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/translations")
|
|
54
|
+
list_string_translations = @crowdin.list_string_translations({}, project_id)
|
|
55
|
+
expect(list_string_translations).to eq(200)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
describe '#add_translation' do
|
|
60
|
+
it 'when request are valid', :default do
|
|
61
|
+
stub_request(:post, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/translations")
|
|
62
|
+
add_translation = @crowdin.add_translation({}, project_id)
|
|
63
|
+
expect(add_translation).to eq(200)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
describe '#delete_string_translations' do
|
|
68
|
+
it 'when request are valid', :default do
|
|
69
|
+
stub_request(:delete, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/translations")
|
|
70
|
+
delete_string_translations = @crowdin.delete_string_translations({}, project_id)
|
|
71
|
+
expect(delete_string_translations).to eq(200)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
describe '#get_translation' do
|
|
76
|
+
let(:translation_id) { 1 }
|
|
77
|
+
|
|
78
|
+
it 'when request are valid', :default do
|
|
79
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/translations/#{translation_id}")
|
|
80
|
+
get_translation = @crowdin.get_translation(translation_id, {}, project_id)
|
|
81
|
+
expect(get_translation).to eq(200)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
describe '#restore_translation' do
|
|
86
|
+
let(:translation_id) { 1 }
|
|
87
|
+
|
|
88
|
+
it 'when request are valid', :default do
|
|
89
|
+
stub_request(:put, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/translations/#{translation_id}")
|
|
90
|
+
restore_translation = @crowdin.restore_translation(translation_id, project_id)
|
|
91
|
+
expect(restore_translation).to eq(200)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
describe '#delete_translation' do
|
|
96
|
+
let(:translation_id) { 1 }
|
|
97
|
+
|
|
98
|
+
it 'when request are valid', :default do
|
|
99
|
+
stub_request(:delete, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/translations/#{translation_id}")
|
|
100
|
+
delete_translation = @crowdin.delete_translation(translation_id, project_id)
|
|
101
|
+
expect(delete_translation).to eq(200)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
describe '#list_translation_votes' do
|
|
106
|
+
it 'when request are valid', :default do
|
|
107
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/votes")
|
|
108
|
+
list_translation_votes = @crowdin.list_translation_votes({}, project_id)
|
|
109
|
+
expect(list_translation_votes).to eq(200)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
describe '#add_vote' do
|
|
114
|
+
it 'when request are valid', :default do
|
|
115
|
+
stub_request(:post, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/votes")
|
|
116
|
+
add_vote = @crowdin.add_vote({}, project_id)
|
|
117
|
+
expect(add_vote).to eq(200)
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
describe '#get_vote' do
|
|
122
|
+
let(:vote_id) { 1 }
|
|
123
|
+
|
|
124
|
+
it 'when request are valid', :default do
|
|
125
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/votes/#{vote_id}")
|
|
126
|
+
get_vote = @crowdin.get_vote(vote_id, project_id)
|
|
127
|
+
expect(get_vote).to eq(200)
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
describe '#cancel_vote' do
|
|
132
|
+
let(:vote_id) { 1 }
|
|
133
|
+
|
|
134
|
+
it 'when request are valid', :default do
|
|
135
|
+
stub_request(:delete, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/votes/#{vote_id}")
|
|
136
|
+
cancel_vote = @crowdin.cancel_vote(vote_id, project_id)
|
|
137
|
+
expect(cancel_vote).to eq(200)
|
|
138
|
+
end
|
|
139
|
+
end
|
|
12
140
|
end
|
|
13
141
|
end
|
|
@@ -9,5 +9,92 @@ describe Crowdin::ApiResources::Teams do
|
|
|
9
9
|
expect(add_team_to_project).to eq(200)
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
|
+
|
|
13
|
+
describe '#list_teams' do
|
|
14
|
+
it 'when request are valid', :enterprise do
|
|
15
|
+
stub_request(:get, "https://domain.api.crowdin.com/#{target_api_url}/teams")
|
|
16
|
+
list_teams = @crowdin.list_teams({})
|
|
17
|
+
expect(list_teams).to eq(200)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe '#add_team' do
|
|
22
|
+
it 'when request are valid', :enterprise do
|
|
23
|
+
stub_request(:post, "https://domain.api.crowdin.com/#{target_api_url}/teams")
|
|
24
|
+
add_team = @crowdin.add_team({})
|
|
25
|
+
expect(add_team).to eq(200)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe '#get_team' do
|
|
30
|
+
let(:team_id) { 1 }
|
|
31
|
+
|
|
32
|
+
it 'when request are valid', :enterprise do
|
|
33
|
+
stub_request(:get, "https://domain.api.crowdin.com/#{target_api_url}/teams/#{team_id}")
|
|
34
|
+
get_team = @crowdin.get_team(team_id, {})
|
|
35
|
+
expect(get_team).to eq(200)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe '#delete_team' do
|
|
40
|
+
let(:team_id) { 1 }
|
|
41
|
+
|
|
42
|
+
it 'when request are valid', :enterprise do
|
|
43
|
+
stub_request(:delete, "https://domain.api.crowdin.com/#{target_api_url}/teams/#{team_id}")
|
|
44
|
+
delete_team = @crowdin.delete_team(team_id)
|
|
45
|
+
expect(delete_team).to eq(200)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
describe '#edit_team' do
|
|
50
|
+
let(:team_id) { 1 }
|
|
51
|
+
|
|
52
|
+
it 'when request are valid', :enterprise do
|
|
53
|
+
stub_request(:patch, "https://domain.api.crowdin.com/#{target_api_url}/teams/#{team_id}")
|
|
54
|
+
edit_team = @crowdin.edit_team(team_id, {})
|
|
55
|
+
expect(edit_team).to eq(200)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
describe '#team_members_list' do
|
|
60
|
+
let(:team_id) { 1 }
|
|
61
|
+
|
|
62
|
+
it 'when request are valid', :enterprise do
|
|
63
|
+
stub_request(:get, "https://domain.api.crowdin.com/#{target_api_url}/teams/#{team_id}/members")
|
|
64
|
+
team_members_list = @crowdin.team_members_list(team_id, {})
|
|
65
|
+
expect(team_members_list).to eq(200)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
describe '#add_team_members' do
|
|
70
|
+
let(:team_id) { 1 }
|
|
71
|
+
|
|
72
|
+
it 'when request are valid', :enterprise do
|
|
73
|
+
stub_request(:post, "https://domain.api.crowdin.com/#{target_api_url}/teams/#{team_id}/members")
|
|
74
|
+
add_team_members = @crowdin.add_team_members(team_id, {})
|
|
75
|
+
expect(add_team_members).to eq(200)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
describe '#delete_all_team_members' do
|
|
80
|
+
let(:team_id) { 1 }
|
|
81
|
+
|
|
82
|
+
it 'when request are valid', :enterprise do
|
|
83
|
+
stub_request(:delete, "https://domain.api.crowdin.com/#{target_api_url}/teams/#{team_id}/members")
|
|
84
|
+
delete_all_team_members = @crowdin.delete_all_team_members(team_id)
|
|
85
|
+
expect(delete_all_team_members).to eq(200)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
describe '#delete_team_member' do
|
|
90
|
+
let(:team_id) { 1 }
|
|
91
|
+
let(:member_id) { 1 }
|
|
92
|
+
|
|
93
|
+
it 'when request are valid', :enterprise do
|
|
94
|
+
stub_request(:delete, "https://domain.api.crowdin.com/#{target_api_url}/teams/#{team_id}/members/#{member_id}")
|
|
95
|
+
delete_team_member = @crowdin.delete_team_member(team_id, member_id)
|
|
96
|
+
expect(delete_team_member).to eq(200)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
12
99
|
end
|
|
13
100
|
end
|
|
@@ -9,5 +9,106 @@ describe Crowdin::ApiResources::TranslationMemory do
|
|
|
9
9
|
expect(list_tms).to eq(200)
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
|
+
|
|
13
|
+
describe '#add_tm' do
|
|
14
|
+
it 'when request are valid', :default do
|
|
15
|
+
stub_request(:post, "https://api.crowdin.com/#{target_api_url}/tms")
|
|
16
|
+
add_tm = @crowdin.add_tm
|
|
17
|
+
expect(add_tm).to eq(200)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe '#get_tm' do
|
|
22
|
+
let(:tm_id) { 1 }
|
|
23
|
+
|
|
24
|
+
it 'when request are valid', :default do
|
|
25
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/tms/#{tm_id}")
|
|
26
|
+
get_tm = @crowdin.get_tm(tm_id)
|
|
27
|
+
expect(get_tm).to eq(200)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe '#delete_tm' do
|
|
32
|
+
let(:tm_id) { 1 }
|
|
33
|
+
|
|
34
|
+
it 'when request are valid', :default do
|
|
35
|
+
stub_request(:delete, "https://api.crowdin.com/#{target_api_url}/tms/#{tm_id}")
|
|
36
|
+
delete_tm = @crowdin.delete_tm(tm_id)
|
|
37
|
+
expect(delete_tm).to eq(200)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe '#edit_tm' do
|
|
42
|
+
let(:tm_id) { 1 }
|
|
43
|
+
|
|
44
|
+
it 'when request are valid', :default do
|
|
45
|
+
stub_request(:patch, "https://api.crowdin.com/#{target_api_url}/tms/#{tm_id}")
|
|
46
|
+
edit_tm = @crowdin.edit_tm(tm_id)
|
|
47
|
+
expect(edit_tm).to eq(200)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
describe '#clear_tm' do
|
|
52
|
+
let(:tm_id) { 1 }
|
|
53
|
+
|
|
54
|
+
it 'when request are valid', :default do
|
|
55
|
+
stub_request(:delete, "https://api.crowdin.com/#{target_api_url}/tms/#{tm_id}/segments")
|
|
56
|
+
clear_tm = @crowdin.clear_tm(tm_id)
|
|
57
|
+
expect(clear_tm).to eq(200)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
describe '#export_tm' do
|
|
62
|
+
let(:tm_id) { 1 }
|
|
63
|
+
|
|
64
|
+
it 'when request are valid', :default do
|
|
65
|
+
stub_request(:post, "https://api.crowdin.com/#{target_api_url}/tms/#{tm_id}/exports")
|
|
66
|
+
export_tm = @crowdin.export_tm(tm_id)
|
|
67
|
+
expect(export_tm).to eq(200)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
describe '#check_tm_export_status' do
|
|
72
|
+
let(:tm_id) { 1 }
|
|
73
|
+
let(:export_id) { 1 }
|
|
74
|
+
|
|
75
|
+
it 'when request are valid', :default do
|
|
76
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/tms/#{tm_id}/exports/#{export_id}")
|
|
77
|
+
check_tm_export_status = @crowdin.check_tm_export_status(tm_id, export_id)
|
|
78
|
+
expect(check_tm_export_status).to eq(200)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
describe '#download_tm' do
|
|
83
|
+
let(:tm_id) { 1 }
|
|
84
|
+
let(:export_id) { 1 }
|
|
85
|
+
|
|
86
|
+
it 'when request are valid', :default do
|
|
87
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/tms/#{tm_id}/exports/#{export_id}/download")
|
|
88
|
+
download_tm = @crowdin.download_tm(tm_id, export_id)
|
|
89
|
+
expect(download_tm).to eq(200)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
describe '#import_tm' do
|
|
94
|
+
let(:tm_id) { 1 }
|
|
95
|
+
|
|
96
|
+
it 'when request are valid', :default do
|
|
97
|
+
stub_request(:post, "https://api.crowdin.com/#{target_api_url}/tms/#{tm_id}/imports")
|
|
98
|
+
import_tm = @crowdin.import_tm(tm_id)
|
|
99
|
+
expect(import_tm).to eq(200)
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
describe '#check_tm_import_status' do
|
|
104
|
+
let(:tm_id) { 1 }
|
|
105
|
+
let(:import_id) { 1 }
|
|
106
|
+
|
|
107
|
+
it 'when request are valid', :default do
|
|
108
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/tms/#{tm_id}/imports/#{import_id}")
|
|
109
|
+
check_tm_import_status = @crowdin.check_tm_import_status(tm_id, import_id)
|
|
110
|
+
expect(check_tm_import_status).to eq(200)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
12
113
|
end
|
|
13
114
|
end
|
|
@@ -11,5 +11,51 @@ describe Crowdin::ApiResources::TranslationStatus do
|
|
|
11
11
|
expect(get_branch_progress).to eq(200)
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
|
+
|
|
15
|
+
describe '#get_directory_progress' do
|
|
16
|
+
let(:directory_id) { 1 }
|
|
17
|
+
|
|
18
|
+
it 'when request are valid', :default do
|
|
19
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/directories/#{directory_id}/languages/progress")
|
|
20
|
+
get_directory_progress = @crowdin.get_directory_progress(directory_id, {}, project_id)
|
|
21
|
+
expect(get_directory_progress).to eq(200)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe '#get_file_progress' do
|
|
26
|
+
let(:file_id) { 1 }
|
|
27
|
+
|
|
28
|
+
it 'when request are valid', :default do
|
|
29
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/files/#{file_id}/languages/progress")
|
|
30
|
+
get_file_progress = @crowdin.get_file_progress(file_id, {}, project_id)
|
|
31
|
+
expect(get_file_progress).to eq(200)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe '#get_language_progress' do
|
|
36
|
+
let(:language_id) { 1 }
|
|
37
|
+
|
|
38
|
+
it 'when request are valid', :default do
|
|
39
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/languages/#{language_id}/progress")
|
|
40
|
+
get_language_progress = @crowdin.get_language_progress(language_id, {}, project_id)
|
|
41
|
+
expect(get_language_progress).to eq(200)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe '#get_project_progress' do
|
|
46
|
+
it 'when request are valid', :default do
|
|
47
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/languages/progress")
|
|
48
|
+
get_project_progress = @crowdin.get_project_progress({}, project_id)
|
|
49
|
+
expect(get_project_progress).to eq(200)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
describe '#get_qa_progress' do
|
|
54
|
+
it 'when request are valid', :default do
|
|
55
|
+
stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/qa-checks")
|
|
56
|
+
get_qa_progress = @crowdin.get_qa_progress({}, project_id)
|
|
57
|
+
expect(get_qa_progress).to eq(200)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
14
60
|
end
|
|
15
61
|
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -21,7 +21,10 @@ RSpec.configure do |config|
|
|
|
21
21
|
config.include_context 'crowdin_client_options'
|
|
22
22
|
|
|
23
23
|
config.before(:each) do |spec|
|
|
24
|
-
@crowdin =
|
|
25
|
-
|
|
24
|
+
@crowdin = if spec.metadata[:enterprise]
|
|
25
|
+
Crowdin::Client.new { |cfg| cfg.organization_domain = organization_domain }
|
|
26
|
+
else # default
|
|
27
|
+
Crowdin::Client.new
|
|
28
|
+
end
|
|
26
29
|
end
|
|
27
30
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: crowdin-api
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Crowdin
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-
|
|
11
|
+
date: 2022-08-15 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: open-uri
|
|
@@ -184,6 +184,7 @@ files:
|
|
|
184
184
|
- bin/crowdin-console
|
|
185
185
|
- crowdin-api.gemspec
|
|
186
186
|
- lib/crowdin-api.rb
|
|
187
|
+
- lib/crowdin-api/api_resources/bundles.rb
|
|
187
188
|
- lib/crowdin-api/api_resources/dictionaries.rb
|
|
188
189
|
- lib/crowdin-api/api_resources/distributions.rb
|
|
189
190
|
- lib/crowdin-api/api_resources/glossaries.rb
|
|
@@ -212,8 +213,10 @@ files:
|
|
|
212
213
|
- lib/crowdin-api/client/version.rb
|
|
213
214
|
- lib/crowdin-api/core/errors.rb
|
|
214
215
|
- lib/crowdin-api/core/errors_raisers.rb
|
|
216
|
+
- lib/crowdin-api/core/fetch_all_extensions.rb
|
|
215
217
|
- lib/crowdin-api/core/request.rb
|
|
216
218
|
- lib/crowdin-api/core/send_request.rb
|
|
219
|
+
- spec/api_resources/bundles_spec.rb
|
|
217
220
|
- spec/api_resources/dictionaries_spec.rb
|
|
218
221
|
- spec/api_resources/distributions_spec.rb
|
|
219
222
|
- spec/api_resources/glossaries_spec.rb
|