ruby-lokalise-api 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +7 -0
  2. data/.github/CODE_OF_CONDUCT.md +46 -0
  3. data/.github/CONTRIBUTING.md +14 -0
  4. data/.github/ISSUE_TEMPLATE.md +13 -0
  5. data/.github/PULL_REQUEST_TEMPLATE.md +11 -0
  6. data/CHANGELOG.md +5 -0
  7. data/Gemfile +3 -0
  8. data/LICENSE +22 -0
  9. data/README.md +917 -0
  10. data/Rakefile +16 -0
  11. data/lib/ruby-lokalise-api.rb +60 -0
  12. data/lib/ruby-lokalise-api/client.rb +22 -0
  13. data/lib/ruby-lokalise-api/collections/base.rb +46 -0
  14. data/lib/ruby-lokalise-api/collections/contributor.rb +13 -0
  15. data/lib/ruby-lokalise-api/collections/file.rb +13 -0
  16. data/lib/ruby-lokalise-api/collections/key.rb +13 -0
  17. data/lib/ruby-lokalise-api/collections/key_comment.rb +13 -0
  18. data/lib/ruby-lokalise-api/collections/project.rb +13 -0
  19. data/lib/ruby-lokalise-api/collections/project_comment.rb +13 -0
  20. data/lib/ruby-lokalise-api/collections/project_language.rb +13 -0
  21. data/lib/ruby-lokalise-api/collections/screenshot.rb +13 -0
  22. data/lib/ruby-lokalise-api/collections/snapshot.rb +13 -0
  23. data/lib/ruby-lokalise-api/collections/system_language.rb +13 -0
  24. data/lib/ruby-lokalise-api/collections/task.rb +13 -0
  25. data/lib/ruby-lokalise-api/collections/team.rb +13 -0
  26. data/lib/ruby-lokalise-api/collections/team_user.rb +13 -0
  27. data/lib/ruby-lokalise-api/collections/translation.rb +13 -0
  28. data/lib/ruby-lokalise-api/connection.rb +17 -0
  29. data/lib/ruby-lokalise-api/data/attributes.json +127 -0
  30. data/lib/ruby-lokalise-api/error.rb +47 -0
  31. data/lib/ruby-lokalise-api/request.rb +60 -0
  32. data/lib/ruby-lokalise-api/resources/base.rb +117 -0
  33. data/lib/ruby-lokalise-api/resources/contributor.rb +13 -0
  34. data/lib/ruby-lokalise-api/resources/file.rb +25 -0
  35. data/lib/ruby-lokalise-api/resources/key.rb +13 -0
  36. data/lib/ruby-lokalise-api/resources/key_comment.rb +15 -0
  37. data/lib/ruby-lokalise-api/resources/project.rb +18 -0
  38. data/lib/ruby-lokalise-api/resources/project_comment.rb +7 -0
  39. data/lib/ruby-lokalise-api/resources/project_language.rb +15 -0
  40. data/lib/ruby-lokalise-api/resources/screenshot.rb +13 -0
  41. data/lib/ruby-lokalise-api/resources/snapshot.rb +17 -0
  42. data/lib/ruby-lokalise-api/resources/system_language.rb +7 -0
  43. data/lib/ruby-lokalise-api/resources/task.rb +13 -0
  44. data/lib/ruby-lokalise-api/resources/team.rb +6 -0
  45. data/lib/ruby-lokalise-api/resources/team_user.rb +13 -0
  46. data/lib/ruby-lokalise-api/resources/translation.rb +13 -0
  47. data/lib/ruby-lokalise-api/rest/comments.rb +57 -0
  48. data/lib/ruby-lokalise-api/rest/contributors.rb +54 -0
  49. data/lib/ruby-lokalise-api/rest/files.rb +33 -0
  50. data/lib/ruby-lokalise-api/rest/keys.rb +75 -0
  51. data/lib/ruby-lokalise-api/rest/languages.rb +63 -0
  52. data/lib/ruby-lokalise-api/rest/projects.rb +58 -0
  53. data/lib/ruby-lokalise-api/rest/screenshots.rb +54 -0
  54. data/lib/ruby-lokalise-api/rest/snapshots.rb +43 -0
  55. data/lib/ruby-lokalise-api/rest/tasks.rb +54 -0
  56. data/lib/ruby-lokalise-api/rest/team_users.rb +44 -0
  57. data/lib/ruby-lokalise-api/rest/teams.rb +12 -0
  58. data/lib/ruby-lokalise-api/rest/translations.rb +35 -0
  59. data/lib/ruby-lokalise-api/utils/attribute_helpers.rb +52 -0
  60. data/lib/ruby-lokalise-api/utils/string_utils.rb +21 -0
  61. data/lib/ruby-lokalise-api/version.rb +3 -0
  62. data/ruby-lokalise-api.gemspec +32 -0
  63. data/spec/lib/ruby-lokalise-api/error_spec.rb +23 -0
  64. data/spec/lib/ruby-lokalise-api/rest/comments_spec.rb +78 -0
  65. data/spec/lib/ruby-lokalise-api/rest/contributors_spec.rb +79 -0
  66. data/spec/lib/ruby-lokalise-api/rest/files_spec.rb +53 -0
  67. data/spec/lib/ruby-lokalise-api/rest/keys_spec.rb +119 -0
  68. data/spec/lib/ruby-lokalise-api/rest/languages_spec.rb +91 -0
  69. data/spec/lib/ruby-lokalise-api/rest/projects_spec.rb +79 -0
  70. data/spec/lib/ruby-lokalise-api/rest/screenshots_spec.rb +76 -0
  71. data/spec/lib/ruby-lokalise-api/rest/snapshots_spec.rb +61 -0
  72. data/spec/lib/ruby-lokalise-api/rest/tasks_spec.rb +89 -0
  73. data/spec/lib/ruby-lokalise-api/rest/team_users_spec.rb +56 -0
  74. data/spec/lib/ruby-lokalise-api/rest/teams_spec.rb +22 -0
  75. data/spec/lib/ruby-lokalise-api/rest/translations_spec.rb +54 -0
  76. data/spec/lib/ruby-lokalise-api/utils/snakecase_spec.rb +17 -0
  77. data/spec/lib/ruby-lokalise-api_spec.rb +13 -0
  78. data/spec/spec_helper.rb +15 -0
  79. data/spec/support/test_client.rb +5 -0
  80. data/spec/support/vcr.rb +8 -0
  81. metadata +255 -0
@@ -0,0 +1,91 @@
1
+ RSpec.describe Lokalise::Client do
2
+ let(:project_id) { '803826145ba90b42d5d860.46800099' }
3
+ let(:language_id) { 640 }
4
+ let(:new_language_id) { 894 }
5
+
6
+ describe '#system_languages' do
7
+ it 'should return all system languages' do
8
+ languages = VCR.use_cassette('all_system_languages') do
9
+ test_client.system_languages
10
+ end.collection
11
+
12
+ expect(languages.count).to eq(100)
13
+ expect(languages.first.lang_iso).to eq('ab')
14
+ end
15
+
16
+ it 'should support pagination' do
17
+ languages = VCR.use_cassette('all_system_languages_pagination') do
18
+ test_client.system_languages limit: 10, page: 3
19
+ end
20
+
21
+ expect(languages.collection.count).to eq(10)
22
+ expect(languages.total_results).to eq(618)
23
+ expect(languages.total_pages).to eq(62)
24
+ expect(languages.results_per_page).to eq(10)
25
+ expect(languages.current_page).to eq(3)
26
+ end
27
+ end
28
+
29
+ describe '#project_languages' do
30
+ it 'should return all project languages' do
31
+ languages = VCR.use_cassette('all_project_languages') do
32
+ test_client.project_languages project_id
33
+ end.collection
34
+
35
+ expect(languages.count).to eq(3)
36
+ expect(languages.first.lang_iso).to eq('en')
37
+ end
38
+
39
+ it 'should support pagination' do
40
+ languages = VCR.use_cassette('all_project_languages_pagination') do
41
+ test_client.project_languages project_id, limit: 1, page: 2
42
+ end
43
+
44
+ expect(languages.collection.count).to eq(1)
45
+ expect(languages.total_results).to eq(3)
46
+ expect(languages.total_pages).to eq(3)
47
+ expect(languages.results_per_page).to eq(1)
48
+ expect(languages.current_page).to eq(2)
49
+ end
50
+ end
51
+
52
+ specify '#language' do
53
+ language = VCR.use_cassette('language') do
54
+ test_client.language project_id, language_id
55
+ end
56
+
57
+ expect(language.lang_id).to eq(language_id)
58
+ expect(language.lang_iso).to eq('en')
59
+ expect(language.lang_name).to eq('English')
60
+ expect(language.is_rtl).to eq(false)
61
+ expect(language.plural_forms).to eq(%w[one other])
62
+ end
63
+
64
+ specify '#create_languages' do
65
+ language = VCR.use_cassette('create_languages') do
66
+ test_client.create_languages project_id, lang_iso: 'ab', custom_name: 'rspec lang'
67
+ end.collection.first
68
+
69
+ expect(language.lang_name).to eq('rspec lang')
70
+ expect(language.lang_iso).to eq('ab')
71
+ end
72
+
73
+ specify '#update_language' do
74
+ language = VCR.use_cassette('update_language') do
75
+ test_client.update_language project_id, new_language_id, lang_name: 'updated lang',
76
+ plural_forms: %w[one]
77
+ end
78
+
79
+ expect(language.lang_name).to eq('updated lang')
80
+ expect(language.lang_iso).to eq('ab')
81
+ expect(language.plural_forms).to eq(%w[one])
82
+ end
83
+
84
+ specify '#delete_language' do
85
+ response = VCR.use_cassette('delete_language') do
86
+ test_client.delete_language project_id, new_language_id
87
+ end
88
+ expect(response['project_id']).to eq(project_id)
89
+ expect(response['language_deleted']).to eq(true)
90
+ end
91
+ end
@@ -0,0 +1,79 @@
1
+ RSpec.describe Lokalise::Client do
2
+ let(:new_project_id) { '572222075c0953fd70d492.30502628' }
3
+
4
+ describe '#projects' do
5
+ it 'should return all projects' do
6
+ projects = VCR.use_cassette('all_projects') do
7
+ test_client.projects
8
+ end.collection
9
+ project = projects.first
10
+
11
+ expect(projects.count).to eq(5)
12
+ expect(project.name).to eq('demo phoenix')
13
+ end
14
+
15
+ it 'should support pagination' do
16
+ projects = VCR.use_cassette('all_projects_pagination') do
17
+ test_client.projects limit: 1, page: 2
18
+ end
19
+
20
+ expect(projects.collection.count).to eq(1)
21
+ expect(projects.total_results).to eq(5)
22
+ expect(projects.total_pages).to eq(5)
23
+ expect(projects.results_per_page).to eq(1)
24
+ expect(projects.current_page).to eq(2)
25
+ end
26
+ end
27
+
28
+ specify '#project' do
29
+ project = VCR.use_cassette('project') do
30
+ test_client.project '803826145ba90b42d5d860.46800099'
31
+ end
32
+
33
+ expect(project.project_id).to eq('803826145ba90b42d5d860.46800099')
34
+ expect(project.name).to eq('demo phoenix')
35
+ expect(project.team_id).to eq(176_692)
36
+ expect(project.description).to eq('')
37
+ expect(project.created_at).to eq('2018-09-24 18:05:22 (Etc/UTC)')
38
+ expect(project.created_by).to eq(20_181)
39
+ expect(project.created_by_email).to eq('bodrovis@protonmail.com')
40
+ end
41
+
42
+ specify '#create_project' do
43
+ project = VCR.use_cassette('new_project') do
44
+ test_client.create_project name: 'rspec proj', description: 'demo project for rspec'
45
+ end
46
+
47
+ expect(project.name).to eq('rspec proj')
48
+ expect(project.description).to eq('demo project for rspec')
49
+ expect(project.team_id).to eq(176_692)
50
+ end
51
+
52
+ specify '#update_project' do
53
+ project = VCR.use_cassette('update_project') do
54
+ test_client.update_project new_project_id,
55
+ name: 'rspec proj updated', description: 'updated project for rspec'
56
+ end
57
+
58
+ expect(project.name).to eq('rspec proj updated')
59
+ expect(project.description).to eq('updated project for rspec')
60
+ expect(project.team_id).to eq(176_692)
61
+ end
62
+
63
+ specify '#empty_project' do
64
+ response = VCR.use_cassette('empty_project') do
65
+ test_client.empty_project new_project_id
66
+ end
67
+
68
+ expect(response['project_id']).to eq(new_project_id)
69
+ expect(response['keys_deleted']).to eq(true)
70
+ end
71
+
72
+ specify '#delete_project' do
73
+ response = VCR.use_cassette('delete_project') do
74
+ test_client.delete_project new_project_id
75
+ end
76
+ expect(response['project_id']).to eq(new_project_id)
77
+ expect(response['project_deleted']).to eq(true)
78
+ end
79
+ end
@@ -0,0 +1,76 @@
1
+ RSpec.describe Lokalise::Client do
2
+ let(:project_id) { '803826145ba90b42d5d860.46800099' }
3
+ let(:screenshot_id) { 115_185 }
4
+
5
+ describe '#screenshots' do
6
+ it 'should return all screenshots' do
7
+ screenshots = VCR.use_cassette('all_screenshots') do
8
+ test_client.screenshots project_id
9
+ end.collection
10
+
11
+ expect(screenshots.count).to eq(1)
12
+ end
13
+
14
+ it 'should support pagination' do
15
+ screenshots = VCR.use_cassette('all_screenshots_pagination') do
16
+ test_client.screenshots project_id, limit: 1, page: 1
17
+ end
18
+
19
+ expect(screenshots.collection.count).to eq(1)
20
+ expect(screenshots.total_results).to eq(1)
21
+ expect(screenshots.total_pages).to eq(1)
22
+ expect(screenshots.results_per_page).to eq(1)
23
+ expect(screenshots.current_page).to eq(1)
24
+ end
25
+ end
26
+
27
+ specify '#screenshot' do
28
+ screenshot = VCR.use_cassette('screenshot') do
29
+ test_client.screenshot project_id, screenshot_id
30
+ end
31
+
32
+ expect(screenshot.screenshot_id).to eq(screenshot_id)
33
+ expect(screenshot.key_ids).to eq([])
34
+ expect(screenshot.url).to include('amazonaws.com')
35
+ expect(screenshot.title).to eq('rspec screen')
36
+ expect(screenshot.description).to eq('')
37
+ expect(screenshot.screenshot_tags).to eq([])
38
+ expect(screenshot.width).to eq(125)
39
+ expect(screenshot.height).to eq(32)
40
+ end
41
+
42
+ specify '#create_screenshots' do
43
+ file = File.open File.expand_path('spec/fixtures/screenshot_base64.txt')
44
+ begin
45
+ screenshot = VCR.use_cassette('create_screenshots') do
46
+ test_client.create_screenshots project_id, data: file.read, title: 'rspec screen'
47
+ end.collection.first
48
+
49
+ expect(screenshot.title).to eq('rspec screen')
50
+ expect(screenshot.url).to include('amazonaws.com')
51
+ rescue StandardError => e
52
+ puts e
53
+ ensure
54
+ file.close
55
+ end
56
+ end
57
+
58
+ specify '#update_screenshot' do
59
+ screenshot = VCR.use_cassette('update_screenshot') do
60
+ test_client.update_screenshot project_id, screenshot_id, tags: %w[demo rspec],
61
+ description: 'demo desc'
62
+ end
63
+
64
+ expect(screenshot.screenshot_id).to eq(screenshot_id)
65
+ expect(screenshot.screenshot_tags).to eq(%w[demo rspec])
66
+ expect(screenshot.description).to eq('demo desc')
67
+ end
68
+
69
+ specify '#delete_screenshot' do
70
+ response = VCR.use_cassette('delete_screenshot') do
71
+ test_client.delete_screenshot project_id, screenshot_id
72
+ end
73
+ expect(response['project_id']).to eq(project_id)
74
+ expect(response['screenshot_deleted']).to eq(true)
75
+ end
76
+ end
@@ -0,0 +1,61 @@
1
+ RSpec.describe Lokalise::Client do
2
+ let(:project_id) { '803826145ba90b42d5d860.46800099' }
3
+ let(:snapshot_id) { 27_881 }
4
+
5
+ describe '#snapshots' do
6
+ it 'should return all snapshots' do
7
+ snapshots = VCR.use_cassette('all_snapshots') do
8
+ test_client.snapshots project_id
9
+ end.collection
10
+
11
+ snapshot = snapshots.first
12
+
13
+ expect(snapshots.count).to eq(2)
14
+ expect(snapshot.title).to eq('test')
15
+ expect(snapshot.snapshot_id).to eq(snapshot_id)
16
+ expect(snapshot.created_at).to eq('2018-12-10 17:01:48 (Etc/UTC)')
17
+ expect(snapshot.created_by).to eq(20_181)
18
+ expect(snapshot.created_by_email).to eq('bodrovis@protonmail.com')
19
+ end
20
+
21
+ it 'should support pagination' do
22
+ snapshots = VCR.use_cassette('all_snapshots_pagination') do
23
+ test_client.snapshots project_id, limit: 1, page: 2
24
+ end
25
+
26
+ expect(snapshots.collection.count).to eq(1)
27
+ expect(snapshots.total_results).to eq(2)
28
+ expect(snapshots.total_pages).to eq(2)
29
+ expect(snapshots.results_per_page).to eq(1)
30
+ expect(snapshots.current_page).to eq(2)
31
+ end
32
+ end
33
+
34
+ specify '#create_snapshot' do
35
+ snapshot = VCR.use_cassette('create_snapshot') do
36
+ test_client.create_snapshot project_id, title: 'test rspec'
37
+ end
38
+
39
+ expect(snapshot.title).to eq('test rspec')
40
+ end
41
+
42
+ specify '#restore_snapshot' do
43
+ project = VCR.use_cassette('restore_snapshot') do
44
+ test_client.restore_snapshot project_id, snapshot_id
45
+ end
46
+
47
+ expect(project.name).to eq('demo phoenix copy')
48
+ expect(project.created_by_email).to eq('bodrovis@protonmail.com')
49
+ # Restore creates a new copy of the project!
50
+ expect(project.project_id).not_to eq(project_id)
51
+ end
52
+
53
+ specify '#delete_snapshot' do
54
+ response = VCR.use_cassette('delete_snapshot') do
55
+ test_client.delete_snapshot project_id, snapshot_id
56
+ end
57
+
58
+ expect(response['project_id']).to eq(project_id)
59
+ expect(response['snapshot_deleted']).to eq(true)
60
+ end
61
+ end
@@ -0,0 +1,89 @@
1
+ RSpec.describe Lokalise::Client do
2
+ let(:project_id) { '803826145ba90b42d5d860.46800099' }
3
+ let(:key_id) { 15_571_976 }
4
+ let(:task_id) { 4387 }
5
+
6
+ describe '#tasks' do
7
+ it 'should return all tasks' do
8
+ tasks = VCR.use_cassette('all_tasks') do
9
+ test_client.tasks project_id
10
+ end.collection
11
+
12
+ expect(tasks.count).to eq(3)
13
+ end
14
+
15
+ it 'should support pagination' do
16
+ tasks = VCR.use_cassette('all_tasks_pagination') do
17
+ test_client.tasks project_id, limit: 2, page: 2
18
+ end
19
+
20
+ expect(tasks.collection.count).to eq(1)
21
+ expect(tasks.total_results).to eq(3)
22
+ expect(tasks.total_pages).to eq(2)
23
+ expect(tasks.results_per_page).to eq(2)
24
+ expect(tasks.current_page).to eq(2)
25
+ end
26
+ end
27
+
28
+ specify '#task' do
29
+ task = VCR.use_cassette('task') do
30
+ test_client.task project_id, task_id
31
+ end
32
+
33
+ expect(task.task_id).to eq(task_id)
34
+ expect(task.title).to eq('another rspec key')
35
+ expect(task.description).to eq('desc here')
36
+ expect(task.status).to eq('created')
37
+ expect(task.progress).to eq(0)
38
+ expect(task.due_date).to eq(nil)
39
+ expect(task.keys_count).to eq(1)
40
+ expect(task.words_count).to eq(0)
41
+ expect(task.created_at).to eq('2018-12-10 18:37:02 (Etc/UTC)')
42
+ expect(task.created_by).to eq(20_181)
43
+ expect(task.created_by_email).to eq('bodrovis@protonmail.com')
44
+ expect(task.can_be_parent).to eq(true)
45
+ expect(task.task_type).to eq('translation')
46
+ expect(task.parent_task_id).to eq(nil)
47
+ expect(task.closing_tags).to eq([])
48
+ expect(task.languages.first['language_iso']).to eq('ru')
49
+ expect(task.auto_close_languages).to eq(true)
50
+ expect(task.auto_close_task).to eq(true)
51
+ expect(task.completed_by).to eq(nil)
52
+ expect(task.completed_by_email).to eq(nil)
53
+ expect(task.completed_at).to eq(nil)
54
+ end
55
+
56
+ specify '#create_task' do
57
+ task = VCR.use_cassette('create_task') do
58
+ test_client.create_task project_id, title: 'another rspec key',
59
+ keys: [key_id],
60
+ languages: [
61
+ {
62
+ language_iso: 'ru',
63
+ users: ['20181']
64
+ }
65
+ ]
66
+ end
67
+
68
+ expect(task.title).to eq('another rspec key')
69
+ expect(task.languages.first['language_iso']).to eq('ru')
70
+ end
71
+
72
+ specify '#update_task' do
73
+ task = VCR.use_cassette('update_task') do
74
+ test_client.update_task project_id, task_id, description: 'desc here', auto_close_task: true
75
+ end
76
+
77
+ expect(task.task_id).to eq(task_id)
78
+ expect(task.description).to eq('desc here')
79
+ expect(task.auto_close_task).to eq(true)
80
+ end
81
+
82
+ specify '#delete_task' do
83
+ response = VCR.use_cassette('delete_task') do
84
+ test_client.delete_task project_id, task_id
85
+ end
86
+ expect(response['project_id']).to eq(project_id)
87
+ expect(response['task_deleted']).to eq(true)
88
+ end
89
+ end
@@ -0,0 +1,56 @@
1
+ RSpec.describe Lokalise::Client do
2
+ let(:team_id) { 176_692 }
3
+ let(:team_user_id) { 25_953 }
4
+
5
+ describe '#team_users' do
6
+ it 'should return all team_users' do
7
+ team_users = VCR.use_cassette('team_users') do
8
+ test_client.team_users team_id
9
+ end
10
+
11
+ expect(team_users.collection.count).to eq(4)
12
+ expect(team_users.team_id).to eq(team_id)
13
+ end
14
+
15
+ it 'should support pagination' do
16
+ team_users = VCR.use_cassette('all_team_users_pagination') do
17
+ test_client.team_users team_id, limit: 1, page: 3
18
+ end
19
+
20
+ expect(team_users.collection.count).to eq(1)
21
+ expect(team_users.total_results).to eq(4)
22
+ expect(team_users.total_pages).to eq(4)
23
+ expect(team_users.results_per_page).to eq(1)
24
+ expect(team_users.current_page).to eq(3)
25
+ end
26
+ end
27
+
28
+ specify '#team_user' do
29
+ team_user = VCR.use_cassette('team_user') do
30
+ test_client.team_user team_id, team_user_id
31
+ end
32
+
33
+ expect(team_user.user_id).to eq(team_user_id)
34
+ expect(team_user.email).to eq('rspec@test.com')
35
+ expect(team_user.fullname).to eq('Rspec test')
36
+ expect(team_user.created_at).to eq('2018-12-07 18:21:24 (Etc/UTC)')
37
+ expect(team_user.role).to eq('member')
38
+ end
39
+
40
+ specify '#update_team_user' do
41
+ team_user = VCR.use_cassette('update_team_user') do
42
+ test_client.update_team_user team_id, team_user_id, role: 'admin'
43
+ end
44
+
45
+ expect(team_user.user_id).to eq(team_user_id)
46
+ expect(team_user.role).to eq('admin')
47
+ end
48
+
49
+ specify '#delete_team_user' do
50
+ response = VCR.use_cassette('delete_team_user') do
51
+ test_client.delete_team_user team_id, team_user_id
52
+ end
53
+ expect(response['team_id']).to eq(team_id)
54
+ expect(response['team_user_deleted']).to eq(true)
55
+ end
56
+ end