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.
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