ruby-lokalise-api 1.0.1
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 +7 -0
- data/.github/CODE_OF_CONDUCT.md +46 -0
- data/.github/CONTRIBUTING.md +14 -0
- data/.github/ISSUE_TEMPLATE.md +13 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +11 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +3 -0
- data/LICENSE +22 -0
- data/README.md +917 -0
- data/Rakefile +16 -0
- data/lib/ruby-lokalise-api.rb +60 -0
- data/lib/ruby-lokalise-api/client.rb +22 -0
- data/lib/ruby-lokalise-api/collections/base.rb +46 -0
- data/lib/ruby-lokalise-api/collections/contributor.rb +13 -0
- data/lib/ruby-lokalise-api/collections/file.rb +13 -0
- data/lib/ruby-lokalise-api/collections/key.rb +13 -0
- data/lib/ruby-lokalise-api/collections/key_comment.rb +13 -0
- data/lib/ruby-lokalise-api/collections/project.rb +13 -0
- data/lib/ruby-lokalise-api/collections/project_comment.rb +13 -0
- data/lib/ruby-lokalise-api/collections/project_language.rb +13 -0
- data/lib/ruby-lokalise-api/collections/screenshot.rb +13 -0
- data/lib/ruby-lokalise-api/collections/snapshot.rb +13 -0
- data/lib/ruby-lokalise-api/collections/system_language.rb +13 -0
- data/lib/ruby-lokalise-api/collections/task.rb +13 -0
- data/lib/ruby-lokalise-api/collections/team.rb +13 -0
- data/lib/ruby-lokalise-api/collections/team_user.rb +13 -0
- data/lib/ruby-lokalise-api/collections/translation.rb +13 -0
- data/lib/ruby-lokalise-api/connection.rb +17 -0
- data/lib/ruby-lokalise-api/data/attributes.json +127 -0
- data/lib/ruby-lokalise-api/error.rb +47 -0
- data/lib/ruby-lokalise-api/request.rb +60 -0
- data/lib/ruby-lokalise-api/resources/base.rb +117 -0
- data/lib/ruby-lokalise-api/resources/contributor.rb +13 -0
- data/lib/ruby-lokalise-api/resources/file.rb +25 -0
- data/lib/ruby-lokalise-api/resources/key.rb +13 -0
- data/lib/ruby-lokalise-api/resources/key_comment.rb +15 -0
- data/lib/ruby-lokalise-api/resources/project.rb +18 -0
- data/lib/ruby-lokalise-api/resources/project_comment.rb +7 -0
- data/lib/ruby-lokalise-api/resources/project_language.rb +15 -0
- data/lib/ruby-lokalise-api/resources/screenshot.rb +13 -0
- data/lib/ruby-lokalise-api/resources/snapshot.rb +17 -0
- data/lib/ruby-lokalise-api/resources/system_language.rb +7 -0
- data/lib/ruby-lokalise-api/resources/task.rb +13 -0
- data/lib/ruby-lokalise-api/resources/team.rb +6 -0
- data/lib/ruby-lokalise-api/resources/team_user.rb +13 -0
- data/lib/ruby-lokalise-api/resources/translation.rb +13 -0
- data/lib/ruby-lokalise-api/rest/comments.rb +57 -0
- data/lib/ruby-lokalise-api/rest/contributors.rb +54 -0
- data/lib/ruby-lokalise-api/rest/files.rb +33 -0
- data/lib/ruby-lokalise-api/rest/keys.rb +75 -0
- data/lib/ruby-lokalise-api/rest/languages.rb +63 -0
- data/lib/ruby-lokalise-api/rest/projects.rb +58 -0
- data/lib/ruby-lokalise-api/rest/screenshots.rb +54 -0
- data/lib/ruby-lokalise-api/rest/snapshots.rb +43 -0
- data/lib/ruby-lokalise-api/rest/tasks.rb +54 -0
- data/lib/ruby-lokalise-api/rest/team_users.rb +44 -0
- data/lib/ruby-lokalise-api/rest/teams.rb +12 -0
- data/lib/ruby-lokalise-api/rest/translations.rb +35 -0
- data/lib/ruby-lokalise-api/utils/attribute_helpers.rb +52 -0
- data/lib/ruby-lokalise-api/utils/string_utils.rb +21 -0
- data/lib/ruby-lokalise-api/version.rb +3 -0
- data/ruby-lokalise-api.gemspec +32 -0
- data/spec/lib/ruby-lokalise-api/error_spec.rb +23 -0
- data/spec/lib/ruby-lokalise-api/rest/comments_spec.rb +78 -0
- data/spec/lib/ruby-lokalise-api/rest/contributors_spec.rb +79 -0
- data/spec/lib/ruby-lokalise-api/rest/files_spec.rb +53 -0
- data/spec/lib/ruby-lokalise-api/rest/keys_spec.rb +119 -0
- data/spec/lib/ruby-lokalise-api/rest/languages_spec.rb +91 -0
- data/spec/lib/ruby-lokalise-api/rest/projects_spec.rb +79 -0
- data/spec/lib/ruby-lokalise-api/rest/screenshots_spec.rb +76 -0
- data/spec/lib/ruby-lokalise-api/rest/snapshots_spec.rb +61 -0
- data/spec/lib/ruby-lokalise-api/rest/tasks_spec.rb +89 -0
- data/spec/lib/ruby-lokalise-api/rest/team_users_spec.rb +56 -0
- data/spec/lib/ruby-lokalise-api/rest/teams_spec.rb +22 -0
- data/spec/lib/ruby-lokalise-api/rest/translations_spec.rb +54 -0
- data/spec/lib/ruby-lokalise-api/utils/snakecase_spec.rb +17 -0
- data/spec/lib/ruby-lokalise-api_spec.rb +13 -0
- data/spec/spec_helper.rb +15 -0
- data/spec/support/test_client.rb +5 -0
- data/spec/support/vcr.rb +8 -0
- metadata +255 -0
@@ -0,0 +1,12 @@
|
|
1
|
+
module Lokalise
|
2
|
+
class Client
|
3
|
+
# Returns all teams available to the user
|
4
|
+
#
|
5
|
+
# @see https://lokalise.co/api2docs/ruby/#transition-list-all-teams-get
|
6
|
+
# @return [Lokalise::Collection::Team<Lokalise::Resources::Team>]
|
7
|
+
# @param params [Hash]
|
8
|
+
def teams(params = {})
|
9
|
+
Lokalise::Collections::Team.all self, params
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Lokalise
|
2
|
+
class Client
|
3
|
+
# Returns all translations for the given project (ungrouped)
|
4
|
+
#
|
5
|
+
# @see https://lokalise.co/api2docs/ruby/#transition-list-all-translations-get
|
6
|
+
# @return [Lokalise::Collection::Translation<Lokalise::Resources::Translation>]
|
7
|
+
# @param project_id [String]
|
8
|
+
# @param params [Hash]
|
9
|
+
def translations(project_id, params = {})
|
10
|
+
Lokalise::Collections::Translation.all self, params, project_id
|
11
|
+
end
|
12
|
+
|
13
|
+
# Returns translation of the given project
|
14
|
+
#
|
15
|
+
# @see https://lokalise.co/api2docs/ruby/#transition-retrieve-a-translation-get
|
16
|
+
# @return [Lokalise::Resources::Translation]
|
17
|
+
# @param project_id [String]
|
18
|
+
# @param translation_id [String, Integer]
|
19
|
+
# @param params [Hash]
|
20
|
+
def translation(project_id, translation_id, params = {})
|
21
|
+
Lokalise::Resources::Translation.find self, project_id, translation_id, params
|
22
|
+
end
|
23
|
+
|
24
|
+
# Updates translation of the given project
|
25
|
+
#
|
26
|
+
# @see https://lokalise.co/api2docs/ruby/#transition-update-a-translation-put
|
27
|
+
# @return [Lokalise::Resources::Translation]
|
28
|
+
# @param project_id [String]
|
29
|
+
# @param translation_id [String, Integer]
|
30
|
+
# @param params [Hash]
|
31
|
+
def update_translation(project_id, translation_id, params)
|
32
|
+
Lokalise::Resources::Translation.update self, project_id, translation_id, params
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Lokalise
|
2
|
+
module Utils
|
3
|
+
module AttributeHelpers
|
4
|
+
UNIFIED_RESOURCES = %w[comment language].freeze
|
5
|
+
|
6
|
+
# Returns the name of the API resource for the given class.
|
7
|
+
# Most class names correspond to resource names (eg, `Project`, `Team`)
|
8
|
+
# but some may differ (`ProjectComment` corresponds to `Comment` resource).
|
9
|
+
# The resource name is in lowercase, with underscores as separators.
|
10
|
+
#
|
11
|
+
# @return [String]
|
12
|
+
# @param model_class [String]
|
13
|
+
# @param plural [Boolean] Should the returned value be pluralized?
|
14
|
+
def data_key_for(model_class, plural = false)
|
15
|
+
data_key = if Module.const_defined? "Lokalise::Resources::#{model_class}::DATA_KEY"
|
16
|
+
Module.const_get "Lokalise::Resources::#{model_class}::DATA_KEY"
|
17
|
+
else
|
18
|
+
model_class
|
19
|
+
end.snakecase
|
20
|
+
|
21
|
+
return data_key unless plural
|
22
|
+
|
23
|
+
data_key + 's'
|
24
|
+
end
|
25
|
+
|
26
|
+
# Loads attributes for the given resource based on its name
|
27
|
+
#
|
28
|
+
# @return [Array<String>]
|
29
|
+
def attributes_for(klass)
|
30
|
+
@attributes ||= begin
|
31
|
+
YAML.load_file(File.expand_path('../data/attributes.json', __dir__)).freeze
|
32
|
+
end
|
33
|
+
|
34
|
+
name = unify klass.name.snakecase
|
35
|
+
@attributes[name]
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
# Unify some resources' names (eg, `ProjectComment` and `KeyComment` have the same attributes which are stored under `comment`)
|
41
|
+
#
|
42
|
+
# @return [String]
|
43
|
+
def unify(name)
|
44
|
+
UNIFIED_RESOURCES.each do |u_a|
|
45
|
+
return u_a if name.match?(/#{u_a}/)
|
46
|
+
end
|
47
|
+
|
48
|
+
name
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# Initial code taken from Facets gem by Rubyworks
|
2
|
+
# https://github.com/rubyworks/facets/blob/master/lib/core/facets/string/snakecase.rb
|
3
|
+
|
4
|
+
class String
|
5
|
+
# Underscore a string such that camelcase, dashes and spaces are
|
6
|
+
# replaced by underscores.
|
7
|
+
def snakecase
|
8
|
+
base_class_name.
|
9
|
+
gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
|
10
|
+
gsub(/([a-z\d])([A-Z])/, '\1_\2').
|
11
|
+
tr('-', '_').
|
12
|
+
gsub(/\s/, '_').
|
13
|
+
gsub(/__+/, '_').
|
14
|
+
downcase
|
15
|
+
end
|
16
|
+
|
17
|
+
# Turn `Module::Nested::ClassName` to just `ClassName`
|
18
|
+
def base_class_name
|
19
|
+
split('::').last
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.expand_path('lib/ruby-lokalise-api/version', __dir__)
|
2
|
+
|
3
|
+
Gem::Specification.new do |spec|
|
4
|
+
spec.name = 'ruby-lokalise-api'
|
5
|
+
spec.version = Lokalise::VERSION
|
6
|
+
spec.authors = ['Ilya Bodrov']
|
7
|
+
spec.email = ['golosizpru@gmail.com']
|
8
|
+
spec.summary = 'Ruby interface to the Lokalise API'
|
9
|
+
spec.description = 'Opinionated Ruby client for the Lokalise platform API allowing to work with translations, projects, users and other resources as with Ruby objects.'
|
10
|
+
spec.homepage = 'https://github.com/lokalise/ruby-lokalise-api'
|
11
|
+
spec.license = 'MIT'
|
12
|
+
spec.platform = Gem::Platform::RUBY
|
13
|
+
spec.required_ruby_version = '>= 2.4.0'
|
14
|
+
|
15
|
+
spec.files = Dir['README.md', 'LICENSE',
|
16
|
+
'CHANGELOG.md', 'lib/**/*.rb', 'lib/ruby-lokalise-api/data/attributes.json',
|
17
|
+
'ruby-lokalise-api.gemspec', '.github/*.md',
|
18
|
+
'Gemfile', 'Rakefile']
|
19
|
+
spec.test_files = Dir['spec/**/*.rb']
|
20
|
+
spec.extra_rdoc_files = ['README.md']
|
21
|
+
spec.require_paths = ['lib']
|
22
|
+
|
23
|
+
spec.add_dependency 'faraday', '~> 0.13'
|
24
|
+
spec.add_dependency 'multi_json', '~> 1.12'
|
25
|
+
|
26
|
+
spec.add_development_dependency 'dotenv', '~> 2.5'
|
27
|
+
spec.add_development_dependency 'rake', '~> 12.1'
|
28
|
+
spec.add_development_dependency 'rspec', '~> 3.6'
|
29
|
+
spec.add_development_dependency 'rubocop', '~> 0.60'
|
30
|
+
spec.add_development_dependency 'simplecov', '~> 0.16'
|
31
|
+
spec.add_development_dependency 'vcr', '~> 4.0'
|
32
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# TODO: rewrite with raw `get` method
|
2
|
+
RSpec.describe Lokalise::Error do
|
3
|
+
include Lokalise::Request
|
4
|
+
|
5
|
+
before(:each) { Lokalise.reset_client! }
|
6
|
+
after(:each) { Lokalise.reset_client! }
|
7
|
+
|
8
|
+
it 'should raise BadRequest when API token is invalid' do
|
9
|
+
expect do
|
10
|
+
VCR.use_cassette('error_invalid_token') do
|
11
|
+
get 'projects', Lokalise.client('invalid')
|
12
|
+
end
|
13
|
+
end.to raise_error(Lokalise::Error::BadRequest)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should raise NotFound when the provided path cannot be found' do
|
17
|
+
expect do
|
18
|
+
VCR.use_cassette('error_not_found') do
|
19
|
+
get 'invalid_path', test_client
|
20
|
+
end
|
21
|
+
end.to raise_error(Lokalise::Error::NotFound)
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
RSpec.describe Lokalise::Client do
|
2
|
+
let(:project_id) { '803826145ba90b42d5d860.46800099' }
|
3
|
+
let(:key_id) { 15_305_182 }
|
4
|
+
|
5
|
+
describe '#comments' do
|
6
|
+
it 'should return all comments' do
|
7
|
+
comments = VCR.use_cassette('all_comments') do
|
8
|
+
test_client.comments project_id, key_id
|
9
|
+
end.collection
|
10
|
+
|
11
|
+
expect(comments.count).to eq(3)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should support pagination' do
|
15
|
+
comments = VCR.use_cassette('all_comments_pagination') do
|
16
|
+
test_client.comments project_id, key_id, limit: 1, page: 2
|
17
|
+
end
|
18
|
+
|
19
|
+
expect(comments.collection.count).to eq(1)
|
20
|
+
expect(comments.total_results).to eq(3)
|
21
|
+
expect(comments.total_pages).to eq(3)
|
22
|
+
expect(comments.results_per_page).to eq(1)
|
23
|
+
expect(comments.current_page).to eq(2)
|
24
|
+
expect(comments.collection.first.comment).to eq('demo comment')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
specify '#comment' do
|
29
|
+
comment = VCR.use_cassette('comment') do
|
30
|
+
test_client.comment project_id, '15519786', '800746'
|
31
|
+
end
|
32
|
+
|
33
|
+
expect(comment.comment).to eq('rspec comment')
|
34
|
+
expect(comment.comment_id).to eq(800_746)
|
35
|
+
expect(comment.key_id).to eq(15_519_786)
|
36
|
+
expect(comment.added_by).to eq(20_181)
|
37
|
+
expect(comment.added_by_email).to eq('bodrovis@protonmail.com')
|
38
|
+
expect(comment.added_at).to eq('2018-12-09 19:41:44 (Etc/UTC)')
|
39
|
+
end
|
40
|
+
|
41
|
+
specify '#create_comments' do
|
42
|
+
comments = VCR.use_cassette('create_comments') do
|
43
|
+
test_client.create_comments project_id, key_id, [
|
44
|
+
{comment: 'demo comment'},
|
45
|
+
{comment: 'from rspec'}
|
46
|
+
]
|
47
|
+
end
|
48
|
+
|
49
|
+
first_comment = comments.collection.first
|
50
|
+
second_comment = comments.collection[1]
|
51
|
+
|
52
|
+
expect(comments.project_id).to eq(project_id)
|
53
|
+
expect(first_comment.comment).to eq('demo comment')
|
54
|
+
expect(first_comment.key_id).to eq(key_id)
|
55
|
+
expect(second_comment.comment).to eq('from rspec')
|
56
|
+
expect(second_comment.key_id).to eq(key_id)
|
57
|
+
end
|
58
|
+
|
59
|
+
specify '#project_comments' do
|
60
|
+
comments = VCR.use_cassette('project_comments') do
|
61
|
+
test_client.project_comments project_id
|
62
|
+
end
|
63
|
+
|
64
|
+
comment = comments.collection.first
|
65
|
+
|
66
|
+
expect(comments.total_results).to eq(3)
|
67
|
+
expect(comment.comment).to eq('test')
|
68
|
+
expect(comment.comment_id).to eq(767_938)
|
69
|
+
end
|
70
|
+
|
71
|
+
specify '#delete_comment' do
|
72
|
+
response = VCR.use_cassette('delete_comment') do
|
73
|
+
test_client.delete_comment project_id, key_id, 767_938
|
74
|
+
end
|
75
|
+
expect(response['project_id']).to eq(project_id)
|
76
|
+
expect(response['comment_deleted']).to eq(true)
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
RSpec.describe Lokalise::Client do
|
2
|
+
let(:project_id) { '803826145ba90b42d5d860.46800099' }
|
3
|
+
let(:contributor_id) { 25_953 }
|
4
|
+
|
5
|
+
describe '#contributors' do
|
6
|
+
it 'should return all contributors' do
|
7
|
+
contributors = VCR.use_cassette('all_contributors') do
|
8
|
+
test_client.contributors project_id
|
9
|
+
end.collection
|
10
|
+
|
11
|
+
expect(contributors.count).to eq(2)
|
12
|
+
expect(contributors.first.fullname).to eq('John Doe')
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should support pagination' do
|
16
|
+
contributors = VCR.use_cassette('all_contributors_pagination') do
|
17
|
+
test_client.contributors project_id, limit: 1, page: 2
|
18
|
+
end
|
19
|
+
|
20
|
+
expect(contributors.collection.count).to eq(1)
|
21
|
+
expect(contributors.total_results).to eq(2)
|
22
|
+
expect(contributors.total_pages).to eq(2)
|
23
|
+
expect(contributors.results_per_page).to eq(1)
|
24
|
+
expect(contributors.current_page).to eq(2)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
specify '#contributor' do
|
29
|
+
contributor = VCR.use_cassette('contributor') do
|
30
|
+
test_client.contributor project_id, '20181'
|
31
|
+
end
|
32
|
+
|
33
|
+
expect(contributor.user_id).to eq(20_181)
|
34
|
+
expect(contributor.email).to eq('bodrovis@protonmail.com')
|
35
|
+
expect(contributor.fullname).to eq('Ilya')
|
36
|
+
expect(contributor.created_at).to eq('2018-08-21 17:35:25 (Etc/UTC)')
|
37
|
+
expect(contributor.is_admin).to eq(true)
|
38
|
+
expect(contributor.is_reviewer).to eq(true)
|
39
|
+
expect(contributor.languages.first['lang_id']).to eq(640)
|
40
|
+
expect(contributor.admin_rights.first).to eq('upload')
|
41
|
+
end
|
42
|
+
|
43
|
+
specify '#create_contributors' do
|
44
|
+
contributor = VCR.use_cassette('create_contributors') do
|
45
|
+
test_client.create_contributors project_id,
|
46
|
+
email: 'rspec@test.com',
|
47
|
+
fullname: 'Rspec test',
|
48
|
+
languages: [{
|
49
|
+
lang_iso: 'en'
|
50
|
+
},
|
51
|
+
{
|
52
|
+
lang_iso: 'ru'
|
53
|
+
}]
|
54
|
+
end.collection.first
|
55
|
+
|
56
|
+
expect(contributor.fullname).to eq('Rspec test')
|
57
|
+
expect(contributor.email).to eq('rspec@test.com')
|
58
|
+
expect(contributor.languages[1]['lang_iso']).to eq('ru')
|
59
|
+
end
|
60
|
+
|
61
|
+
specify '#update_contributor' do
|
62
|
+
contributor = VCR.use_cassette('update_contributor') do
|
63
|
+
test_client.update_contributor project_id, contributor_id,
|
64
|
+
languages: [{lang_iso: 'en'}]
|
65
|
+
end
|
66
|
+
|
67
|
+
expect(contributor.user_id).to eq(contributor_id)
|
68
|
+
expect(contributor.languages[0]['lang_iso']).to eq('en')
|
69
|
+
expect(contributor.languages.length).to eq(1)
|
70
|
+
end
|
71
|
+
|
72
|
+
specify '#delete_contributor' do
|
73
|
+
response = VCR.use_cassette('delete_contributor') do
|
74
|
+
test_client.delete_contributor project_id, contributor_id
|
75
|
+
end
|
76
|
+
expect(response['project_id']).to eq(project_id)
|
77
|
+
expect(response['contributor_deleted']).to eq(true)
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
RSpec.describe Lokalise::Client do
|
2
|
+
let(:project_id) { '803826145ba90b42d5d860.46800099' }
|
3
|
+
|
4
|
+
describe '#files' do
|
5
|
+
it 'should return all files' do
|
6
|
+
files = VCR.use_cassette('files') do
|
7
|
+
test_client.files project_id
|
8
|
+
end.collection
|
9
|
+
|
10
|
+
file = files.first
|
11
|
+
|
12
|
+
expect(files.count).to eq(1)
|
13
|
+
expect(file.filename).to eq('__unassigned__')
|
14
|
+
expect(file.key_count).to eq(1)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should support pagination' do
|
18
|
+
files = VCR.use_cassette('all_files_pagination') do
|
19
|
+
test_client.files project_id, limit: 1, page: 1
|
20
|
+
end
|
21
|
+
|
22
|
+
expect(files.collection.count).to eq(1)
|
23
|
+
expect(files.total_results).to eq(1)
|
24
|
+
expect(files.total_pages).to eq(1)
|
25
|
+
expect(files.results_per_page).to eq(1)
|
26
|
+
expect(files.current_page).to eq(1)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
specify '#download_files' do
|
31
|
+
response = VCR.use_cassette('download_files') do
|
32
|
+
test_client.download_files project_id,
|
33
|
+
"format": 'po',
|
34
|
+
"original_filenames": true
|
35
|
+
end
|
36
|
+
|
37
|
+
expect(response['project_id']).to eq(project_id)
|
38
|
+
expect(response['bundle_url']).to include('amazonaws.com')
|
39
|
+
end
|
40
|
+
|
41
|
+
specify '#upload_file' do
|
42
|
+
response = VCR.use_cassette('upload_file') do
|
43
|
+
test_client.upload_file project_id,
|
44
|
+
"data": 'ZnI6DQogIHRlc3Q6IHRyYW5zbGF0aW9u',
|
45
|
+
"filename": 'rspec.yml',
|
46
|
+
'lang_iso': 'ru'
|
47
|
+
end
|
48
|
+
|
49
|
+
expect(response['project_id']).to eq(project_id)
|
50
|
+
expect(response['file']).to eq('rspec.yml')
|
51
|
+
expect(response['result']['skipped']).to eq(1)
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
RSpec.describe Lokalise::Client do
|
2
|
+
let(:project_id) { '803826145ba90b42d5d860.46800099' }
|
3
|
+
let(:key_id) { 15_305_182 }
|
4
|
+
let(:new_key_id) { 15_519_770 }
|
5
|
+
|
6
|
+
describe '#keys' do
|
7
|
+
it 'should return all keys' do
|
8
|
+
keys = VCR.use_cassette('all_keys') do
|
9
|
+
test_client.keys project_id
|
10
|
+
end.collection
|
11
|
+
|
12
|
+
expect(keys.count).to eq(1)
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should support pagination' do
|
16
|
+
keys = VCR.use_cassette('all_keys_pagination') do
|
17
|
+
test_client.keys project_id, limit: 1, page: 1
|
18
|
+
end
|
19
|
+
|
20
|
+
expect(keys.collection.count).to eq(1)
|
21
|
+
expect(keys.total_results).to eq(1)
|
22
|
+
expect(keys.total_pages).to eq(1)
|
23
|
+
expect(keys.results_per_page).to eq(1)
|
24
|
+
expect(keys.current_page).to eq(1)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
specify '#key' do
|
29
|
+
key = VCR.use_cassette('key') do
|
30
|
+
test_client.key project_id, key_id, disable_references: 0
|
31
|
+
end
|
32
|
+
|
33
|
+
expect(key.key_id).to eq(key_id)
|
34
|
+
expect(key.created_at).to eq('2018-12-03 19:11:30 (Etc/UTC)')
|
35
|
+
expect(key.key_name['ios']).to eq('test')
|
36
|
+
expect(key.filenames['web']).to eq('rspec.yml')
|
37
|
+
expect(key.description).to eq('')
|
38
|
+
expect(key.platforms).to eq(%w[web])
|
39
|
+
expect(key.tags).to eq([])
|
40
|
+
expect(key.comments.first['comment']).to eq('demo comment')
|
41
|
+
expect(key.comments[1]['comment_id']).to eq(800_632)
|
42
|
+
expect(key.screenshots).to eq([])
|
43
|
+
expect(key.translations.first['modified_by_email']).to eq('bodrovis@protonmail.com')
|
44
|
+
expect(key.is_plural).to eq(false)
|
45
|
+
expect(key.plural_name).to eq('')
|
46
|
+
expect(key.is_hidden).to eq(false)
|
47
|
+
expect(key.is_archived).to eq(false)
|
48
|
+
expect(key.context).to eq('')
|
49
|
+
expect(key.char_limit).to eq(0)
|
50
|
+
expect(key.custom_attributes).to eq('')
|
51
|
+
expect(key.base_words).to eq(1)
|
52
|
+
end
|
53
|
+
|
54
|
+
specify '#create_keys' do
|
55
|
+
keys = VCR.use_cassette('create_keys') do
|
56
|
+
test_client.create_keys project_id, key_name: 'rspec_k', platforms: %w[ios]
|
57
|
+
end
|
58
|
+
|
59
|
+
key = keys.collection.first
|
60
|
+
|
61
|
+
expect(keys.project_id).to eq(project_id)
|
62
|
+
expect(key.key_name['ios']).to eq('rspec_k')
|
63
|
+
expect(key.platforms).to eq(%w[ios])
|
64
|
+
end
|
65
|
+
|
66
|
+
specify '#update_key' do
|
67
|
+
key = VCR.use_cassette('update_key') do
|
68
|
+
test_client.update_key project_id, new_key_id, key_name: 'updated_rspec_k', description: 'desc here'
|
69
|
+
end
|
70
|
+
|
71
|
+
expect(key.key_name['ios']).to eq('updated_rspec_k')
|
72
|
+
expect(key.platforms).to eq(%w[ios])
|
73
|
+
expect(key.description).to eq('desc here')
|
74
|
+
end
|
75
|
+
|
76
|
+
specify '#update_keys' do
|
77
|
+
keys = VCR.use_cassette('update_keys') do
|
78
|
+
test_client.update_keys project_id, [
|
79
|
+
{
|
80
|
+
key_id: new_key_id,
|
81
|
+
description: 'bulk updated'
|
82
|
+
},
|
83
|
+
{
|
84
|
+
key_id: key_id,
|
85
|
+
tags: %w[bulk upd]
|
86
|
+
}
|
87
|
+
]
|
88
|
+
end.collection
|
89
|
+
|
90
|
+
first_key = keys.first
|
91
|
+
second_key = keys[1]
|
92
|
+
|
93
|
+
expect(first_key.key_id).to eq(key_id)
|
94
|
+
expect(first_key.key_name['ios']).to eq('test')
|
95
|
+
expect(first_key.tags).to eq(%w[bulk upd])
|
96
|
+
|
97
|
+
expect(second_key.key_id).to eq(new_key_id)
|
98
|
+
expect(second_key.key_name['web']).to eq('updated_rspec_k')
|
99
|
+
expect(second_key.description).to eq('bulk updated')
|
100
|
+
end
|
101
|
+
|
102
|
+
specify '#delete_key' do
|
103
|
+
response = VCR.use_cassette('delete_key') do
|
104
|
+
test_client.delete_key project_id, '15519771'
|
105
|
+
end
|
106
|
+
|
107
|
+
expect(response['project_id']).to eq(project_id)
|
108
|
+
expect(response['key_removed']).to eq(true)
|
109
|
+
end
|
110
|
+
|
111
|
+
specify '#delete_keys' do
|
112
|
+
response = VCR.use_cassette('delete_keys') do
|
113
|
+
test_client.delete_keys project_id, [new_key_id, key_id]
|
114
|
+
end
|
115
|
+
|
116
|
+
expect(response['project_id']).to eq(project_id)
|
117
|
+
expect(response['keys_removed']).to eq(true)
|
118
|
+
end
|
119
|
+
end
|