ruby-lokalise-api 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|