ruby-lokalise-api 2.8.0 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/CODE_OF_CONDUCT.md +1 -1
- data/.github/CONTRIBUTING.md +2 -2
- data/CHANGELOG.md +46 -0
- data/Gemfile +2 -0
- data/README.md +293 -178
- data/Rakefile +6 -1
- data/lib/ruby-lokalise-api.rb +4 -0
- data/lib/ruby-lokalise-api/client.rb +18 -4
- data/lib/ruby-lokalise-api/collections/base.rb +6 -2
- data/lib/ruby-lokalise-api/collections/branch.rb +3 -1
- data/lib/ruby-lokalise-api/collections/contributor.rb +2 -0
- data/lib/ruby-lokalise-api/collections/custom_translation_status.rb +3 -1
- data/lib/ruby-lokalise-api/collections/file.rb +2 -0
- data/lib/ruby-lokalise-api/collections/key.rb +2 -0
- data/lib/ruby-lokalise-api/collections/key_comment.rb +2 -0
- data/lib/ruby-lokalise-api/collections/order.rb +2 -0
- data/lib/ruby-lokalise-api/collections/payment_card.rb +2 -0
- data/lib/ruby-lokalise-api/collections/project.rb +2 -0
- data/lib/ruby-lokalise-api/collections/project_comment.rb +2 -0
- data/lib/ruby-lokalise-api/collections/project_language.rb +2 -0
- data/lib/ruby-lokalise-api/collections/queued_process.rb +15 -0
- data/lib/ruby-lokalise-api/collections/screenshot.rb +2 -0
- data/lib/ruby-lokalise-api/collections/snapshot.rb +2 -0
- data/lib/ruby-lokalise-api/collections/system_language.rb +2 -0
- data/lib/ruby-lokalise-api/collections/task.rb +2 -0
- data/lib/ruby-lokalise-api/collections/team.rb +2 -0
- data/lib/ruby-lokalise-api/collections/team_user.rb +2 -0
- data/lib/ruby-lokalise-api/collections/team_user_group.rb +3 -1
- data/lib/ruby-lokalise-api/collections/translation.rb +2 -0
- data/lib/ruby-lokalise-api/collections/translation_provider.rb +2 -0
- data/lib/ruby-lokalise-api/collections/webhook.rb +2 -0
- data/lib/ruby-lokalise-api/connection.rb +3 -1
- data/lib/ruby-lokalise-api/data/attributes.json +28 -13
- data/lib/ruby-lokalise-api/error.rb +2 -0
- data/lib/ruby-lokalise-api/json_handler.rb +4 -0
- data/lib/ruby-lokalise-api/request.rb +10 -1
- data/lib/ruby-lokalise-api/resources/base.rb +53 -21
- data/lib/ruby-lokalise-api/resources/branch.rb +3 -1
- data/lib/ruby-lokalise-api/resources/contributor.rb +4 -2
- data/lib/ruby-lokalise-api/resources/custom_translation_status.rb +4 -2
- data/lib/ruby-lokalise-api/resources/file.rb +5 -1
- data/lib/ruby-lokalise-api/resources/key.rb +3 -1
- data/lib/ruby-lokalise-api/resources/key_comment.rb +5 -3
- data/lib/ruby-lokalise-api/resources/order.rb +4 -0
- data/lib/ruby-lokalise-api/resources/payment_card.rb +3 -1
- data/lib/ruby-lokalise-api/resources/project.rb +3 -1
- data/lib/ruby-lokalise-api/resources/project_comment.rb +3 -1
- data/lib/ruby-lokalise-api/resources/project_language.rb +5 -3
- data/lib/ruby-lokalise-api/resources/queued_process.rb +18 -0
- data/lib/ruby-lokalise-api/resources/screenshot.rb +3 -1
- data/lib/ruby-lokalise-api/resources/snapshot.rb +5 -1
- data/lib/ruby-lokalise-api/resources/system_language.rb +3 -1
- data/lib/ruby-lokalise-api/resources/task.rb +3 -1
- data/lib/ruby-lokalise-api/resources/team.rb +2 -0
- data/lib/ruby-lokalise-api/resources/team_user.rb +4 -2
- data/lib/ruby-lokalise-api/resources/team_user_group.rb +6 -3
- data/lib/ruby-lokalise-api/resources/translation.rb +3 -1
- data/lib/ruby-lokalise-api/resources/translation_provider.rb +5 -0
- data/lib/ruby-lokalise-api/resources/webhook.rb +13 -3
- data/lib/ruby-lokalise-api/rest/branches.rb +2 -0
- data/lib/ruby-lokalise-api/rest/comments.rb +7 -5
- data/lib/ruby-lokalise-api/rest/contributors.rb +7 -5
- data/lib/ruby-lokalise-api/rest/custom_translation_statuses.rb +8 -6
- data/lib/ruby-lokalise-api/rest/files.rb +5 -3
- data/lib/ruby-lokalise-api/rest/keys.rb +9 -7
- data/lib/ruby-lokalise-api/rest/languages.rb +8 -6
- data/lib/ruby-lokalise-api/rest/orders.rb +2 -0
- data/lib/ruby-lokalise-api/rest/payment_cards.rb +5 -3
- data/lib/ruby-lokalise-api/rest/projects.rb +8 -6
- data/lib/ruby-lokalise-api/rest/queued_processes.rb +26 -0
- data/lib/ruby-lokalise-api/rest/screenshots.rb +7 -5
- data/lib/ruby-lokalise-api/rest/snapshots.rb +6 -4
- data/lib/ruby-lokalise-api/rest/tasks.rb +7 -5
- data/lib/ruby-lokalise-api/rest/team_user_group.rb +6 -4
- data/lib/ruby-lokalise-api/rest/team_users.rb +6 -4
- data/lib/ruby-lokalise-api/rest/teams.rb +3 -1
- data/lib/ruby-lokalise-api/rest/translation_providers.rb +4 -2
- data/lib/ruby-lokalise-api/rest/translations.rb +5 -3
- data/lib/ruby-lokalise-api/rest/webhooks.rb +18 -5
- data/lib/ruby-lokalise-api/utils/attribute_helpers.rb +2 -0
- data/lib/ruby-lokalise-api/utils/endpoint_helpers.rb +2 -0
- data/lib/ruby-lokalise-api/utils/string_utils.rb +2 -0
- data/lib/ruby-lokalise-api/version.rb +3 -1
- data/ruby-lokalise-api.gemspec +9 -5
- data/spec/lib/ruby-lokalise-api/connection_spec.rb +10 -7
- data/spec/lib/ruby-lokalise-api/custom_json_parser_spec.rb +9 -5
- data/spec/lib/ruby-lokalise-api/error_spec.rb +15 -4
- data/spec/lib/ruby-lokalise-api/rest/branches_spec.rb +19 -5
- data/spec/lib/ruby-lokalise-api/rest/comments_spec.rb +19 -5
- data/spec/lib/ruby-lokalise-api/rest/contributors_spec.rb +18 -4
- data/spec/lib/ruby-lokalise-api/rest/custom_translation_statuses_spec.rb +18 -4
- data/spec/lib/ruby-lokalise-api/rest/files_spec.rb +21 -11
- data/spec/lib/ruby-lokalise-api/rest/keys_spec.rb +46 -26
- data/spec/lib/ruby-lokalise-api/rest/languages_spec.rb +20 -6
- data/spec/lib/ruby-lokalise-api/rest/orders_spec.rb +16 -2
- data/spec/lib/ruby-lokalise-api/rest/payment_cards_spec.rb +21 -5
- data/spec/lib/ruby-lokalise-api/rest/projects_spec.rb +18 -4
- data/spec/lib/ruby-lokalise-api/rest/queued_processes_spec.rb +57 -0
- data/spec/lib/ruby-lokalise-api/rest/screenshots_spec.rb +18 -4
- data/spec/lib/ruby-lokalise-api/rest/snapshots_spec.rb +31 -4
- data/spec/lib/ruby-lokalise-api/rest/tasks_spec.rb +18 -4
- data/spec/lib/ruby-lokalise-api/rest/team_user_groups_spec.rb +92 -6
- data/spec/lib/ruby-lokalise-api/rest/team_users_spec.rb +19 -4
- data/spec/lib/ruby-lokalise-api/rest/teams_spec.rb +2 -0
- data/spec/lib/ruby-lokalise-api/rest/translation_providers_spec.rb +9 -2
- data/spec/lib/ruby-lokalise-api/rest/translations_spec.rb +20 -6
- data/spec/lib/ruby-lokalise-api/rest/webhooks_spec.rb +54 -2
- data/spec/lib/ruby-lokalise-api/utils/snakecase_spec.rb +2 -0
- data/spec/lib/ruby-lokalise-api_spec.rb +12 -9
- data/spec/spec_helper.rb +8 -1
- data/spec/support/test_client.rb +2 -0
- data/spec/support/vcr.rb +2 -0
- metadata +59 -12
data/Rakefile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rake'
|
2
4
|
|
3
5
|
begin
|
@@ -13,4 +15,7 @@ require 'rspec/core/rake_task'
|
|
13
15
|
RSpec::Core::RakeTask.new(:spec)
|
14
16
|
|
15
17
|
require 'rubocop/rake_task'
|
16
|
-
RuboCop::RakeTask.new
|
18
|
+
RuboCop::RakeTask.new do |task|
|
19
|
+
task.requires << 'rubocop-performance'
|
20
|
+
task.requires << 'rubocop-rspec'
|
21
|
+
end
|
data/lib/ruby-lokalise-api.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'faraday'
|
2
4
|
require 'yaml'
|
3
5
|
require 'addressable'
|
@@ -15,6 +17,7 @@ require 'ruby-lokalise-api/resources/base'
|
|
15
17
|
require 'ruby-lokalise-api/resources/branch'
|
16
18
|
require 'ruby-lokalise-api/resources/project'
|
17
19
|
require 'ruby-lokalise-api/resources/project_language'
|
20
|
+
require 'ruby-lokalise-api/resources/queued_process'
|
18
21
|
require 'ruby-lokalise-api/resources/key_comment'
|
19
22
|
require 'ruby-lokalise-api/resources/contributor'
|
20
23
|
require 'ruby-lokalise-api/resources/file'
|
@@ -41,6 +44,7 @@ require 'ruby-lokalise-api/collections/team'
|
|
41
44
|
require 'ruby-lokalise-api/collections/system_language'
|
42
45
|
require 'ruby-lokalise-api/collections/project_language'
|
43
46
|
require 'ruby-lokalise-api/collections/project_comment'
|
47
|
+
require 'ruby-lokalise-api/collections/queued_process'
|
44
48
|
require 'ruby-lokalise-api/collections/key_comment'
|
45
49
|
require 'ruby-lokalise-api/collections/key'
|
46
50
|
require 'ruby-lokalise-api/collections/contributor'
|
@@ -1,7 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'ruby-lokalise-api/rest/branches'
|
2
4
|
require 'ruby-lokalise-api/rest/languages'
|
3
5
|
require 'ruby-lokalise-api/rest/teams'
|
4
6
|
require 'ruby-lokalise-api/rest/projects'
|
7
|
+
require 'ruby-lokalise-api/rest/queued_processes'
|
5
8
|
require 'ruby-lokalise-api/rest/comments'
|
6
9
|
require 'ruby-lokalise-api/rest/keys'
|
7
10
|
require 'ruby-lokalise-api/rest/contributors'
|
@@ -25,14 +28,25 @@ module Lokalise
|
|
25
28
|
|
26
29
|
def initialize(token, params = {})
|
27
30
|
@token = token
|
28
|
-
@timeout = params.fetch(:timeout
|
29
|
-
@open_timeout = params.fetch(:open_timeout
|
31
|
+
@timeout = params.fetch(:timeout, nil)
|
32
|
+
@open_timeout = params.fetch(:open_timeout, nil)
|
30
33
|
end
|
31
34
|
|
32
|
-
|
35
|
+
# rubocop:disable Metrics/ParameterLists
|
36
|
+
# Constructs request to perform the specified action
|
37
|
+
# @param klass The actual class to call the method upon
|
38
|
+
# @param method [Symbol] The method to call (:new, :update, :create etc)
|
39
|
+
# @param endpoint_ids [Array, Hash] IDs that are used to generate the proper path to the endpoint
|
40
|
+
# @param params [Array, Hash] Request parameters
|
41
|
+
# @param object_key [String, Symbol] Key that should be used to wrap parameters into
|
42
|
+
# @param initial_ids [Array] IDs that should be used to generate base endpoint path. The base path is used for method chaining
|
43
|
+
def construct_request(klass, method, endpoint_ids, params = {}, object_key = nil, initial_ids = nil)
|
33
44
|
path = klass.endpoint(*endpoint_ids)
|
34
|
-
|
45
|
+
formatted_params = format_params(params, object_key)
|
46
|
+
formatted_params[:_initial_path] = klass.endpoint(*initial_ids) if initial_ids
|
47
|
+
klass.send method, self, path, formatted_params
|
35
48
|
end
|
49
|
+
# rubocop:enable Metrics/ParameterLists
|
36
50
|
|
37
51
|
# Converts `params` to hash with arrays under the `object_key` key.
|
38
52
|
# Used in bulk operations
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Lokalise
|
2
4
|
module Collections
|
3
5
|
class Base
|
@@ -7,7 +9,7 @@ module Lokalise
|
|
7
9
|
extend Lokalise::Utils::EndpointHelpers
|
8
10
|
|
9
11
|
attr_reader :total_pages, :total_results, :results_per_page, :current_page, :collection,
|
10
|
-
:project_id, :team_id, :request_params, :client, :path
|
12
|
+
:project_id, :team_id, :request_params, :client, :path, :branch, :user_id
|
11
13
|
|
12
14
|
# Initializes a new collection based on the response
|
13
15
|
#
|
@@ -17,9 +19,11 @@ module Lokalise
|
|
17
19
|
def initialize(response, params = {})
|
18
20
|
produce_collection_for response
|
19
21
|
populate_pagination_data_for response
|
20
|
-
# Project
|
22
|
+
# Project, team id, user id, and branch may not be present in some cases
|
21
23
|
@project_id = response['content']['project_id']
|
22
24
|
@team_id = response['content']['team_id']
|
25
|
+
@user_id = response['content']['user_id']
|
26
|
+
@branch = response['content']['branch']
|
23
27
|
@request_params = params
|
24
28
|
@client = response['client']
|
25
29
|
@path = response['path']
|
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Lokalise
|
2
4
|
module Collections
|
3
5
|
class CustomTranslationStatus < Base
|
4
|
-
DATA_KEY_PLURAL = 'CustomTranslationStatuses'
|
6
|
+
DATA_KEY_PLURAL = 'CustomTranslationStatuses'
|
5
7
|
|
6
8
|
class << self
|
7
9
|
def endpoint(project_id, *_args)
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lokalise
|
4
|
+
module Collections
|
5
|
+
class QueuedProcess < Base
|
6
|
+
DATA_KEY_PLURAL = 'Processes'
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def endpoint(project_id, *_args)
|
10
|
+
path_from projects: [project_id, 'processes']
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -21,11 +21,11 @@
|
|
21
21
|
"email",
|
22
22
|
"fullname",
|
23
23
|
"created_at",
|
24
|
+
"created_at_timestamp",
|
24
25
|
"is_admin",
|
25
26
|
"is_reviewer",
|
26
27
|
"languages",
|
27
|
-
"admin_rights"
|
28
|
-
"created_at_timestamp"
|
28
|
+
"admin_rights"
|
29
29
|
],
|
30
30
|
"custom_translation_status": [
|
31
31
|
"status_id",
|
@@ -39,6 +39,7 @@
|
|
39
39
|
"key": [
|
40
40
|
"key_id",
|
41
41
|
"created_at",
|
42
|
+
"created_at_timestamp",
|
42
43
|
"key_name",
|
43
44
|
"filenames",
|
44
45
|
"description",
|
@@ -55,7 +56,10 @@
|
|
55
56
|
"base_words",
|
56
57
|
"char_limit",
|
57
58
|
"custom_attributes",
|
58
|
-
"
|
59
|
+
"modified_at",
|
60
|
+
"modified_at_timestamp",
|
61
|
+
"translations_modified_at",
|
62
|
+
"translations_modified_at_timestamp"
|
59
63
|
],
|
60
64
|
"language": [
|
61
65
|
"lang_id",
|
@@ -70,6 +74,7 @@
|
|
70
74
|
"card_id",
|
71
75
|
"status",
|
72
76
|
"created_at",
|
77
|
+
"created_at_timestamp",
|
73
78
|
"created_by",
|
74
79
|
"created_by_email",
|
75
80
|
"source_language_iso",
|
@@ -81,8 +86,7 @@
|
|
81
86
|
"translation_tier",
|
82
87
|
"translation_tier_name",
|
83
88
|
"briefing",
|
84
|
-
"total"
|
85
|
-
"created_at_timestamp"
|
89
|
+
"total"
|
86
90
|
],
|
87
91
|
"payment_card": [
|
88
92
|
"card_id",
|
@@ -96,15 +100,26 @@
|
|
96
100
|
"name",
|
97
101
|
"description",
|
98
102
|
"created_at",
|
103
|
+
"created_at_timestamp",
|
99
104
|
"created_by",
|
100
105
|
"created_by_email",
|
101
106
|
"team_id",
|
102
|
-
"created_at_timestamp",
|
103
107
|
"base_language_id",
|
104
108
|
"base_language_iso",
|
105
109
|
"settings",
|
106
110
|
"statistics"
|
107
111
|
],
|
112
|
+
"queued_process": [
|
113
|
+
"process_id",
|
114
|
+
"type",
|
115
|
+
"status",
|
116
|
+
"message",
|
117
|
+
"created_by",
|
118
|
+
"created_by_email",
|
119
|
+
"created_at",
|
120
|
+
"created_at_timestamp",
|
121
|
+
"details"
|
122
|
+
],
|
108
123
|
"screenshot": [
|
109
124
|
"screenshot_id",
|
110
125
|
"key_ids",
|
@@ -121,9 +136,9 @@
|
|
121
136
|
"snapshot_id",
|
122
137
|
"title",
|
123
138
|
"created_at",
|
139
|
+
"created_at_timestamp",
|
124
140
|
"created_by",
|
125
|
-
"created_by_email"
|
126
|
-
"created_at_timestamp"
|
141
|
+
"created_by_email"
|
127
142
|
],
|
128
143
|
"task": [
|
129
144
|
"task_id",
|
@@ -157,18 +172,18 @@
|
|
157
172
|
"team_id",
|
158
173
|
"name",
|
159
174
|
"created_at",
|
175
|
+
"created_at_timestamp",
|
160
176
|
"plan",
|
161
177
|
"quota_usage",
|
162
|
-
"quota_allowed"
|
163
|
-
"created_at_timestamp"
|
178
|
+
"quota_allowed"
|
164
179
|
],
|
165
180
|
"team_user": [
|
166
181
|
"user_id",
|
167
182
|
"email",
|
168
183
|
"fullname",
|
169
184
|
"created_at",
|
170
|
-
"
|
171
|
-
"
|
185
|
+
"created_at_timestamp",
|
186
|
+
"role"
|
172
187
|
],
|
173
188
|
"team_user_group": [
|
174
189
|
"group_id",
|
@@ -211,4 +226,4 @@
|
|
211
226
|
"events",
|
212
227
|
"event_lang_map"
|
213
228
|
]
|
214
|
-
}
|
229
|
+
}
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Lokalise
|
2
4
|
module Request
|
3
5
|
include Lokalise::Connection
|
@@ -27,6 +29,13 @@ module Lokalise
|
|
27
29
|
)
|
28
30
|
end
|
29
31
|
|
32
|
+
def patch(path, client, params = {})
|
33
|
+
respond_with(
|
34
|
+
connection(client).patch(prepare(path), params.any? ? custom_dump(params) : nil),
|
35
|
+
client
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
30
39
|
def delete(path, client, params = {})
|
31
40
|
respond_with(
|
32
41
|
# Rubocop tries to replace `delete` with `gsub` but that's a different method here!
|
@@ -43,7 +52,7 @@ module Lokalise
|
|
43
52
|
|
44
53
|
# Get rid of double slashes in the `path`, leading and trailing slash
|
45
54
|
def prepare(path)
|
46
|
-
path.
|
55
|
+
path.delete_prefix('/').gsub(%r{//}, '/').gsub(%r{/+\z}, '')
|
47
56
|
end
|
48
57
|
|
49
58
|
def respond_with(response, client)
|