ruby-lokalise-api 4.3.0 → 4.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CONTRIBUTING.md +1 -1
  3. data/README.md +11 -3
  4. data/lib/ruby-lokalise-api/client.rb +4 -1
  5. data/lib/ruby-lokalise-api/collections/base.rb +19 -7
  6. data/lib/ruby-lokalise-api/collections/segment.rb +15 -0
  7. data/lib/ruby-lokalise-api/connection.rb +1 -1
  8. data/lib/ruby-lokalise-api/data/attributes.json +26 -0
  9. data/lib/ruby-lokalise-api/error.rb +4 -3
  10. data/lib/ruby-lokalise-api/oauth_client.rb +11 -0
  11. data/lib/ruby-lokalise-api/request.rb +3 -2
  12. data/lib/ruby-lokalise-api/resources/base.rb +18 -7
  13. data/lib/ruby-lokalise-api/resources/branch.rb +3 -1
  14. data/lib/ruby-lokalise-api/resources/contributor.rb +1 -1
  15. data/lib/ruby-lokalise-api/resources/custom_translation_status.rb +1 -1
  16. data/lib/ruby-lokalise-api/resources/key.rb +1 -0
  17. data/lib/ruby-lokalise-api/resources/key_comment.rb +1 -1
  18. data/lib/ruby-lokalise-api/resources/order.rb +1 -0
  19. data/lib/ruby-lokalise-api/resources/payment_card.rb +1 -0
  20. data/lib/ruby-lokalise-api/resources/project.rb +1 -0
  21. data/lib/ruby-lokalise-api/resources/project_comment.rb +1 -0
  22. data/lib/ruby-lokalise-api/resources/project_language.rb +1 -1
  23. data/lib/ruby-lokalise-api/resources/queued_process.rb +1 -1
  24. data/lib/ruby-lokalise-api/resources/screenshot.rb +1 -0
  25. data/lib/ruby-lokalise-api/resources/segment.rb +19 -0
  26. data/lib/ruby-lokalise-api/resources/snapshot.rb +1 -0
  27. data/lib/ruby-lokalise-api/resources/task.rb +1 -0
  28. data/lib/ruby-lokalise-api/resources/team_user.rb +1 -1
  29. data/lib/ruby-lokalise-api/resources/team_user_billing_details.rb +14 -0
  30. data/lib/ruby-lokalise-api/resources/team_user_group.rb +1 -1
  31. data/lib/ruby-lokalise-api/resources/translation.rb +1 -0
  32. data/lib/ruby-lokalise-api/resources/translation_provider.rb +1 -1
  33. data/lib/ruby-lokalise-api/resources/webhook.rb +1 -0
  34. data/lib/ruby-lokalise-api/rest/segments.rb +43 -0
  35. data/lib/ruby-lokalise-api/rest/team_user_billing_details.rb +34 -0
  36. data/lib/ruby-lokalise-api/utils/attribute_helpers.rb +3 -1
  37. data/lib/ruby-lokalise-api/utils/string_utils.rb +24 -18
  38. data/lib/ruby-lokalise-api/version.rb +1 -1
  39. data/lib/ruby-lokalise-api.rb +19 -1
  40. data/ruby-lokalise-api.gemspec +18 -15
  41. data/spec/lib/ruby-lokalise-api/connection_spec.rb +6 -0
  42. data/spec/lib/ruby-lokalise-api/error_spec.rb +8 -0
  43. data/spec/lib/ruby-lokalise-api/rest/contributors_spec.rb +2 -2
  44. data/spec/lib/ruby-lokalise-api/rest/keys_spec.rb +1 -1
  45. data/spec/lib/ruby-lokalise-api/rest/languages_spec.rb +2 -2
  46. data/spec/lib/ruby-lokalise-api/rest/projects_spec.rb +1 -1
  47. data/spec/lib/ruby-lokalise-api/rest/screenshots_spec.rb +2 -2
  48. data/spec/lib/ruby-lokalise-api/rest/segments_spec.rb +106 -0
  49. data/spec/lib/ruby-lokalise-api/rest/snapshots_spec.rb +1 -1
  50. data/spec/lib/ruby-lokalise-api/rest/tasks_spec.rb +2 -2
  51. data/spec/lib/ruby-lokalise-api/rest/team_user_billing_details_spec.rb +48 -0
  52. data/spec/lib/ruby-lokalise-api/rest/team_users_spec.rb +1 -1
  53. data/spec/lib/ruby-lokalise-api/rest/translations_spec.rb +1 -1
  54. data/spec/lib/ruby-lokalise-api_spec.rb +16 -1
  55. data/spec/support/test_client.rb +4 -0
  56. metadata +19 -10
  57. data/spec/lib/ruby-lokalise-api/utils/snakecase_spec.rb +0 -19
@@ -3,6 +3,8 @@
3
3
  module Lokalise
4
4
  module Utils
5
5
  module AttributeHelpers
6
+ using Lokalise::Utils::StringUtils
7
+
6
8
  UNIFIED_RESOURCES = %w[comment language].freeze
7
9
 
8
10
  # Returns the name of the API resource for the given class.
@@ -40,7 +42,7 @@ module Lokalise
40
42
  # @return [String]
41
43
  # @param model_class [String]
42
44
  def id_key_for(model_class)
43
- "#{get_key(name: 'ID_KEY', model_class: model_class)}_id"
45
+ get_key name: 'ID_KEY', model_class: model_class
44
46
  end
45
47
 
46
48
  # Loads attributes for the given resource based on its name
@@ -3,25 +3,31 @@
3
3
  # Initial code taken from Facets gem by Rubyworks
4
4
  # https://github.com/rubyworks/facets/blob/master/lib/core/facets/string/snakecase.rb
5
5
 
6
- class String
7
- # Underscore a string such that camelcase, dashes and spaces are
8
- # replaced by underscores.
9
- def snakecase
10
- base_class_name.
11
- gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
12
- gsub(/([a-z\d])([A-Z])/, '\1_\2').
13
- tr('-', '_').
14
- gsub(/\s/, '_').
15
- gsub(/__+/, '_').
16
- downcase
17
- end
6
+ module Lokalise
7
+ module Utils
8
+ module StringUtils
9
+ refine String do
10
+ # Underscore a string such that camelcase, dashes and spaces are
11
+ # replaced by underscores.
12
+ def snakecase
13
+ base_class_name.
14
+ gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
15
+ gsub(/([a-z\d])([A-Z])/, '\1_\2').
16
+ tr('-', '_').
17
+ gsub(/\s/, '_').
18
+ gsub(/__+/, '_').
19
+ downcase
20
+ end
18
21
 
19
- # Turn `Module::Nested::ClassName` to just `ClassName`
20
- def base_class_name
21
- split('::').last
22
- end
22
+ # Turn `Module::Nested::ClassName` to just `ClassName`
23
+ def base_class_name
24
+ split('::').last
25
+ end
23
26
 
24
- def remove_trailing_slash
25
- delete_suffix '/'
27
+ def remove_trailing_slash
28
+ delete_suffix '/'
29
+ end
30
+ end
31
+ end
26
32
  end
27
33
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Lokalise
4
- VERSION = '4.3.0'
4
+ VERSION = '4.5.1'
5
5
  end
@@ -37,6 +37,8 @@ require 'ruby-lokalise-api/resources/translation_provider'
37
37
  require 'ruby-lokalise-api/resources/team_user_group'
38
38
  require 'ruby-lokalise-api/resources/custom_translation_status'
39
39
  require 'ruby-lokalise-api/resources/webhook'
40
+ require 'ruby-lokalise-api/resources/segment'
41
+ require 'ruby-lokalise-api/resources/team_user_billing_details'
40
42
 
41
43
  require 'ruby-lokalise-api/collections/base'
42
44
  require 'ruby-lokalise-api/collections/branch'
@@ -61,8 +63,10 @@ require 'ruby-lokalise-api/collections/translation_provider'
61
63
  require 'ruby-lokalise-api/collections/team_user_group'
62
64
  require 'ruby-lokalise-api/collections/custom_translation_status'
63
65
  require 'ruby-lokalise-api/collections/webhook'
66
+ require 'ruby-lokalise-api/collections/segment'
64
67
 
65
68
  require 'ruby-lokalise-api/client'
69
+ require 'ruby-lokalise-api/oauth_client'
66
70
 
67
71
  module Lokalise
68
72
  class << self
@@ -72,12 +76,26 @@ module Lokalise
72
76
  # @param token [String]
73
77
  # @param params [Hash]
74
78
  def client(token, params = {})
75
- @client ||= Lokalise::Client.new token, params
79
+ @client = Lokalise::Client.new token, params
76
80
  end
77
81
 
78
82
  # Reset the currently set client
79
83
  def reset_client!
80
84
  @client = nil
81
85
  end
86
+
87
+ # Initializes a new OAuthClient object
88
+ #
89
+ # @return [Lokalise::OAuthClient]
90
+ # @param token [String]
91
+ # @param params [Hash]
92
+ def oauth_client(token, params = {})
93
+ @oauth_client = Lokalise::OAuthClient.new token, params
94
+ end
95
+
96
+ # Reset the currently set OAuth client
97
+ def reset_oauth_client!
98
+ @oauth_client = nil
99
+ end
82
100
  end
83
101
  end
@@ -5,7 +5,7 @@ require File.expand_path('lib/ruby-lokalise-api/version', __dir__)
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'ruby-lokalise-api'
7
7
  spec.version = Lokalise::VERSION
8
- spec.authors = ['Ilya Bodrov']
8
+ spec.authors = ['Ilya Bodrov-Krukowski']
9
9
  spec.email = ['golosizpru@gmail.com']
10
10
  spec.summary = 'Ruby interface to the Lokalise API'
11
11
  spec.description = 'Opinionated Ruby client for the Lokalise platform API allowing to work with translations, projects, users and other resources as with Ruby objects.'
@@ -22,19 +22,22 @@ Gem::Specification.new do |spec|
22
22
  spec.extra_rdoc_files = ['README.md']
23
23
  spec.require_paths = ['lib']
24
24
 
25
- spec.add_dependency 'addressable', '~> 2.5'
26
- spec.add_dependency 'faraday', '~> 1.0'
27
- spec.add_dependency 'faraday_middleware', '~> 1.0'
28
- spec.add_dependency 'json', '>= 1.8.0'
25
+ spec.add_dependency 'addressable', '~> 2.5'
26
+ spec.add_dependency 'faraday', '~> 1.0'
27
+ spec.add_dependency 'faraday_middleware', '~> 1.0'
28
+ spec.add_dependency 'json', '>= 1.8.0'
29
29
 
30
- spec.add_development_dependency 'codecov', '~> 0.1'
31
- spec.add_development_dependency 'dotenv', '~> 2.5'
32
- spec.add_development_dependency 'oj', '~> 3.10'
33
- spec.add_development_dependency 'rake', '~> 13.0'
34
- spec.add_development_dependency 'rspec', '~> 3.6'
35
- spec.add_development_dependency 'rubocop', '~> 1.6'
36
- spec.add_development_dependency 'rubocop-performance', '~> 1.5'
37
- spec.add_development_dependency 'rubocop-rspec', '~> 2.0'
38
- spec.add_development_dependency 'simplecov', '~> 0.16'
39
- spec.add_development_dependency 'vcr', '~> 6.0'
30
+ spec.add_development_dependency 'codecov', '~> 0.1'
31
+ spec.add_development_dependency 'dotenv', '~> 2.5'
32
+ spec.add_development_dependency 'oj', '~> 3.10'
33
+ spec.add_development_dependency 'rake', '~> 13.0'
34
+ spec.add_development_dependency 'rspec', '~> 3.6'
35
+ spec.add_development_dependency 'rubocop', '~> 1.6'
36
+ spec.add_development_dependency 'rubocop-performance', '~> 1.5'
37
+ spec.add_development_dependency 'rubocop-rspec', '~> 2.0'
38
+ spec.add_development_dependency 'simplecov', '~> 0.16'
39
+ spec.add_development_dependency 'vcr', '~> 6.0'
40
+ spec.metadata = {
41
+ 'rubygems_mfa_required' => 'true'
42
+ }
40
43
  end
@@ -13,6 +13,12 @@ RSpec.describe Lokalise::Connection do
13
13
  Faraday.default_adapter = :net_http
14
14
  end
15
15
 
16
+ it 'Authorization header must be present for OAuth client' do
17
+ conn = connection test_oauth_client
18
+ expect(conn.headers['Authorization']).to eq("Bearer #{test_client.token}")
19
+ expect(conn.headers['X-api-token']).to be_nil
20
+ end
21
+
16
22
  it 'timeouts and compression should not be set by default but the token must be present' do
17
23
  conn = connection test_client
18
24
  expect(conn.options.timeout).to be_nil
@@ -15,6 +15,14 @@ RSpec.describe Lokalise::Error do
15
15
  end.to raise_error(described_class)
16
16
  end
17
17
 
18
+ it 'handles an exception when the response does not contain an error key' do
19
+ expect do
20
+ VCR.use_cassette('error_no_error_key') do
21
+ get 'projects', Lokalise.client('invalid')
22
+ end
23
+ end.to raise_error(Lokalise::Error::BadRequest)
24
+ end
25
+
18
26
  it 'raises BadRequest when API token is invalid' do
19
27
  expect do
20
28
  VCR.use_cassette('error_invalid_token') do
@@ -106,7 +106,7 @@ RSpec.describe Lokalise::Client do
106
106
  languages: [{lang_iso: 'en'}]
107
107
  end.collection.first
108
108
 
109
- expect(contributor.client).to eq(test_client)
109
+ expect(contributor.client.token).to eq(test_client.token)
110
110
  expect(contributor.fullname).to eq('chained')
111
111
 
112
112
  id = contributor.user_id
@@ -116,7 +116,7 @@ RSpec.describe Lokalise::Client do
116
116
  contributor.update fullname: 'updated!'
117
117
  end
118
118
 
119
- expect(updated_contributor.client).to eq(test_client)
119
+ expect(updated_contributor.client.token).to eq(test_client.token)
120
120
  expect(updated_contributor.fullname).to eq('updated!')
121
121
  expect(updated_contributor.user_id).to eq(id)
122
122
  expect(updated_contributor.path).to eq(path)
@@ -160,7 +160,7 @@ RSpec.describe Lokalise::Client do
160
160
  key.update key_name: 'updated!'
161
161
  end
162
162
 
163
- expect(updated_key.client).to eq(test_client)
163
+ expect(updated_key.client.token).to eq(test_client.token)
164
164
  expect(updated_key.key_name['ios']).to eq('updated!')
165
165
  expect(updated_key.path).to eq(path)
166
166
 
@@ -109,7 +109,7 @@ RSpec.describe Lokalise::Client do
109
109
  test_client.create_languages project_id, lang_iso: 'ab', custom_name: 'chained lang'
110
110
  end.collection.first
111
111
 
112
- expect(language.client).to eq(test_client)
112
+ expect(language.client.token).to eq(test_client.token)
113
113
  expect(language.lang_name).to eq('chained lang')
114
114
 
115
115
  path = language.path
@@ -118,7 +118,7 @@ RSpec.describe Lokalise::Client do
118
118
  language.update lang_name: 'updated!'
119
119
  end
120
120
 
121
- expect(updated_language.client).to eq(test_client)
121
+ expect(updated_language.client.token).to eq(test_client.token)
122
122
  expect(updated_language.lang_name).to eq('updated!')
123
123
  expect(updated_language.lang_id).to eq(language.lang_id)
124
124
  expect(updated_language.path).to eq(path)
@@ -115,7 +115,7 @@ RSpec.describe Lokalise::Client do
115
115
  project.update name: 'updated!'
116
116
  end
117
117
 
118
- expect(updated_project.client).to eq(test_client)
118
+ expect(updated_project.client.token).to eq(test_client.token)
119
119
  expect(updated_project.name).to eq('updated!')
120
120
  expect(updated_project.path).to eq(path)
121
121
 
@@ -91,7 +91,7 @@ RSpec.describe Lokalise::Client do
91
91
  end.collection.first
92
92
  end
93
93
 
94
- expect(screenshot.client).to eq(test_client)
94
+ expect(screenshot.client.token).to eq(test_client.token)
95
95
  expect(screenshot.title).to eq('chained screen')
96
96
 
97
97
  path = screenshot.path
@@ -100,7 +100,7 @@ RSpec.describe Lokalise::Client do
100
100
  screenshot.update title: 'updated!'
101
101
  end
102
102
 
103
- expect(updated_screenshot.client).to eq(test_client)
103
+ expect(updated_screenshot.client.token).to eq(test_client.token)
104
104
  expect(updated_screenshot.title).to eq('updated!')
105
105
  expect(updated_screenshot.screenshot_id).to eq(screenshot.screenshot_id)
106
106
  expect(updated_screenshot.path).to eq(path)
@@ -0,0 +1,106 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Lokalise::Client do
4
+ let(:project_id) { '39066161618d4ecb9fdc12.00274309' }
5
+ let(:key_id) { 129_358_815 }
6
+
7
+ describe '#segments' do
8
+ it 'returns all segments for a key under lang_iso' do
9
+ segments = VCR.use_cassette('all_key_segments') do
10
+ test_client.segments project_id, key_id, 'en'
11
+ end.collection
12
+
13
+ expect(segments.count).to eq(4)
14
+ expect(segments.first.value).to eq('Hello!')
15
+ end
16
+ end
17
+
18
+ describe '#segment' do
19
+ it 'returns a single segment' do
20
+ lang_iso = 'en'
21
+ segment_number = 2
22
+
23
+ segment = VCR.use_cassette('key_segment') do
24
+ test_client.segment project_id, key_id, lang_iso, segment_number
25
+ end
26
+
27
+ expect(segment.key_id).to eq(key_id)
28
+ expect(segment.segment_number).to eq(segment_number)
29
+ expect(segment.language_iso).to eq(lang_iso)
30
+ expect(segment.modified_at).to eq('2021-11-22 16:46:50 (Etc/UTC)')
31
+ expect(segment.modified_at_timestamp).to eq(1_637_599_610)
32
+ expect(segment.modified_by).to eq(20_181)
33
+ expect(segment.modified_by_email).to eq('bodrovis@protonmail.com')
34
+ expect(segment.value).to eq('This is just a simple text.')
35
+ expect(segment.is_fuzzy).to eq(false)
36
+ expect(segment.is_reviewed).to eq(false)
37
+ expect(segment.reviewed_by).to eq(0)
38
+ expect(segment.words).to eq(6)
39
+ expect(segment.custom_translation_statuses.first['color']).to eq('#61bd4f')
40
+ end
41
+
42
+ it 'allows to pass params' do
43
+ lang_iso = 'en'
44
+ segment_number = 2
45
+
46
+ segment = VCR.use_cassette('key_segment_params') do
47
+ test_client.segment project_id, key_id, lang_iso, segment_number, disable_references: '1'
48
+ end
49
+
50
+ expect(segment.segment_number).to eq(segment_number)
51
+ expect(segment.value).to eq('This is just a simple text.')
52
+ expect(segment.language_iso).to eq(lang_iso)
53
+ end
54
+ end
55
+
56
+ specify '#update_segment' do
57
+ lang_iso = 'en'
58
+ segment_number = 3
59
+
60
+ segment = VCR.use_cassette('update_key_segment') do
61
+ test_client.update_segment project_id, key_id, lang_iso, segment_number,
62
+ value: 'Updated via API',
63
+ is_reviewed: true
64
+ end
65
+
66
+ expect(segment.segment_number).to eq(segment_number)
67
+ expect(segment.value).to eq('Updated via API')
68
+ expect(segment.language_iso).to eq(lang_iso)
69
+ end
70
+
71
+ context 'when segment methods are chained' do
72
+ specify '#reload_data' do
73
+ lang_iso = 'en'
74
+ segment_number = 2
75
+
76
+ segment = VCR.use_cassette('key_segment') do
77
+ test_client.segment project_id, key_id, lang_iso, segment_number
78
+ end
79
+
80
+ reloaded_segment = VCR.use_cassette('reload_key_segment') do
81
+ segment.reload_data
82
+ end
83
+
84
+ expect(reloaded_segment.segment_number).to eq(segment_number)
85
+ expect(reloaded_segment.key_id).to eq(key_id)
86
+ end
87
+
88
+ specify '#update' do
89
+ lang_iso = 'en'
90
+ segment_number = 4
91
+
92
+ segment = VCR.use_cassette('another_key_segment') do
93
+ test_client.segment project_id, key_id, lang_iso, segment_number
94
+ end
95
+
96
+ updated_segment = VCR.use_cassette('update_key_segment_chained') do
97
+ segment.update value: 'Chain Updated',
98
+ is_fuzzy: true
99
+ end
100
+
101
+ expect(updated_segment.segment_number).to eq(segment_number)
102
+ expect(updated_segment.is_fuzzy).to eq(true)
103
+ expect(updated_segment.value).to eq('Chain Updated')
104
+ end
105
+ end
106
+ end
@@ -81,7 +81,7 @@ RSpec.describe Lokalise::Client do
81
81
  new_project.update name: 'Restored and updated'
82
82
  end
83
83
 
84
- expect(updated_project.client).to eq(test_client)
84
+ expect(updated_project.client.token).to eq(test_client.token)
85
85
  expect(updated_project.name).to eq('Restored and updated')
86
86
  expect(updated_project.project_id).to eq(new_project.project_id)
87
87
 
@@ -120,7 +120,7 @@ RSpec.describe Lokalise::Client do
120
120
  ]
121
121
  end
122
122
 
123
- expect(task.client).to eq(test_client)
123
+ expect(task.client.token).to eq(test_client.token)
124
124
  expect(task.title).to eq('chained')
125
125
 
126
126
  path = task.path
@@ -129,7 +129,7 @@ RSpec.describe Lokalise::Client do
129
129
  task.update title: 'updated!'
130
130
  end
131
131
 
132
- expect(updated_task.client).to eq(test_client)
132
+ expect(updated_task.client.token).to eq(test_client.token)
133
133
  expect(updated_task.title).to eq('updated!')
134
134
  expect(updated_task.task_id).to eq(task.task_id)
135
135
  expect(updated_task.path).to eq(path)
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Lokalise::Client do
4
+ let(:team_id) { 176_692 }
5
+ let(:team_id2) { 273_879 }
6
+
7
+ specify '#team_user_billing_details' do
8
+ details = VCR.use_cassette('team_user_billing_details') do
9
+ test_client.team_user_billing_details team_id
10
+ end
11
+
12
+ expect(details.billing_email).to eq('hello@example.com')
13
+ expect(details.country_code).to eq('LV')
14
+ expect(details.zip).to eq('LV-6543')
15
+ expect(details.state_code).to eq('')
16
+ expect(details.address1).to eq('Sample line 1')
17
+ expect(details.address2).to eq('Sample line 2')
18
+ expect(details.city).to eq('Riga')
19
+ expect(details.phone).to eq('+371123456')
20
+ expect(details.company).to eq('Self-employed')
21
+ expect(details.vatnumber).to eq('123')
22
+ end
23
+
24
+ specify '#create_team_user_billing_details' do
25
+ details = VCR.use_cassette('create_team_user_billing_details') do
26
+ test_client.create_team_user_billing_details team_id2, billing_email: 'ruby@example.com',
27
+ country_code: 'LV',
28
+ zip: 'LV-1111'
29
+ end
30
+
31
+ expect(details.billing_email).to eq('ruby@example.com')
32
+ expect(details.country_code).to eq('LV')
33
+ expect(details.address1).to eq('')
34
+ end
35
+
36
+ specify '#update_team_user_billing_details' do
37
+ details = VCR.use_cassette('update_team_user_billing_details') do
38
+ test_client.update_team_user_billing_details team_id2, billing_email: 'ruby_rspec@example.com',
39
+ country_code: 'LV',
40
+ zip: 'LV-1111',
41
+ address1: 'Addr line 1'
42
+ end
43
+
44
+ expect(details.billing_email).to eq('ruby_rspec@example.com')
45
+ expect(details.country_code).to eq('LV')
46
+ expect(details.address1).to eq('Addr line 1')
47
+ end
48
+ end
@@ -81,7 +81,7 @@ RSpec.describe Lokalise::Client do
81
81
  team_user.update role: 'admin'
82
82
  end
83
83
 
84
- expect(updated_team_user.client).to eq(test_client)
84
+ expect(updated_team_user.client.token).to eq(test_client.token)
85
85
  expect(updated_team_user.role).to eq('admin')
86
86
 
87
87
  delete_response = VCR.use_cassette('delete_team_user_chained') do
@@ -110,7 +110,7 @@ RSpec.describe Lokalise::Client do
110
110
  translation.update translation: 'chained updated'
111
111
  end
112
112
 
113
- expect(updated_translation.client).to eq(test_client)
113
+ expect(updated_translation.client.token).to eq(test_client.token)
114
114
  expect(updated_translation.translation).to eq('chained updated')
115
115
  expect(updated_translation.translation_id).to eq(translation.translation_id)
116
116
  end
@@ -12,10 +12,25 @@ RSpec.describe Lokalise do
12
12
  specify '.reset_client!' do
13
13
  expect(test_client).to be_an_instance_of(Lokalise::Client)
14
14
  described_class.reset_client!
15
- current_client = described_class.instance_variable_get '@client'
15
+ current_client = described_class.instance_variable_get :@client
16
16
  expect(current_client).to be_nil
17
17
  end
18
18
 
19
+ specify '.oauth_client' do
20
+ expect(test_oauth_client).to be_an_instance_of(Lokalise::OAuthClient)
21
+ expect(test_oauth_client.token).to eq("Bearer #{ENV['LOKALISE_API_TOKEN']}")
22
+ expect(test_oauth_client.timeout).to be_nil
23
+ expect(test_oauth_client.open_timeout).to be_nil
24
+ expect(test_oauth_client.enable_compression).to be false
25
+ end
26
+
27
+ specify '.reset_oauth_client!' do
28
+ expect(test_oauth_client).to be_an_instance_of(Lokalise::OAuthClient)
29
+ described_class.reset_oauth_client!
30
+ current_oauth_client = described_class.instance_variable_get :@oauth_client
31
+ expect(current_oauth_client).to be_nil
32
+ end
33
+
19
34
  context 'with client params' do
20
35
  before { described_class.reset_client! }
21
36
 
@@ -4,4 +4,8 @@ module TestClient
4
4
  def test_client(token = nil, params = {})
5
5
  Lokalise.client(token || ENV['LOKALISE_API_TOKEN'], params)
6
6
  end
7
+
8
+ def test_oauth_client(token = nil, params = {})
9
+ Lokalise.oauth_client(token || ENV['LOKALISE_API_TOKEN'], params)
10
+ end
7
11
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-lokalise-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.0
4
+ version: 4.5.1
5
5
  platform: ruby
6
6
  authors:
7
- - Ilya Bodrov
7
+ - Ilya Bodrov-Krukowski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-15 00:00:00.000000000 Z
11
+ date: 2022-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -239,6 +239,7 @@ files:
239
239
  - lib/ruby-lokalise-api/collections/project_language.rb
240
240
  - lib/ruby-lokalise-api/collections/queued_process.rb
241
241
  - lib/ruby-lokalise-api/collections/screenshot.rb
242
+ - lib/ruby-lokalise-api/collections/segment.rb
242
243
  - lib/ruby-lokalise-api/collections/snapshot.rb
243
244
  - lib/ruby-lokalise-api/collections/system_language.rb
244
245
  - lib/ruby-lokalise-api/collections/task.rb
@@ -252,6 +253,7 @@ files:
252
253
  - lib/ruby-lokalise-api/data/attributes.json
253
254
  - lib/ruby-lokalise-api/error.rb
254
255
  - lib/ruby-lokalise-api/json_handler.rb
256
+ - lib/ruby-lokalise-api/oauth_client.rb
255
257
  - lib/ruby-lokalise-api/request.rb
256
258
  - lib/ruby-lokalise-api/resources/base.rb
257
259
  - lib/ruby-lokalise-api/resources/branch.rb
@@ -267,11 +269,13 @@ files:
267
269
  - lib/ruby-lokalise-api/resources/project_language.rb
268
270
  - lib/ruby-lokalise-api/resources/queued_process.rb
269
271
  - lib/ruby-lokalise-api/resources/screenshot.rb
272
+ - lib/ruby-lokalise-api/resources/segment.rb
270
273
  - lib/ruby-lokalise-api/resources/snapshot.rb
271
274
  - lib/ruby-lokalise-api/resources/system_language.rb
272
275
  - lib/ruby-lokalise-api/resources/task.rb
273
276
  - lib/ruby-lokalise-api/resources/team.rb
274
277
  - lib/ruby-lokalise-api/resources/team_user.rb
278
+ - lib/ruby-lokalise-api/resources/team_user_billing_details.rb
275
279
  - lib/ruby-lokalise-api/resources/team_user_group.rb
276
280
  - lib/ruby-lokalise-api/resources/translation.rb
277
281
  - lib/ruby-lokalise-api/resources/translation_provider.rb
@@ -288,8 +292,10 @@ files:
288
292
  - lib/ruby-lokalise-api/rest/projects.rb
289
293
  - lib/ruby-lokalise-api/rest/queued_processes.rb
290
294
  - lib/ruby-lokalise-api/rest/screenshots.rb
295
+ - lib/ruby-lokalise-api/rest/segments.rb
291
296
  - lib/ruby-lokalise-api/rest/snapshots.rb
292
297
  - lib/ruby-lokalise-api/rest/tasks.rb
298
+ - lib/ruby-lokalise-api/rest/team_user_billing_details.rb
293
299
  - lib/ruby-lokalise-api/rest/team_user_group.rb
294
300
  - lib/ruby-lokalise-api/rest/team_users.rb
295
301
  - lib/ruby-lokalise-api/rest/teams.rb
@@ -316,15 +322,16 @@ files:
316
322
  - spec/lib/ruby-lokalise-api/rest/projects_spec.rb
317
323
  - spec/lib/ruby-lokalise-api/rest/queued_processes_spec.rb
318
324
  - spec/lib/ruby-lokalise-api/rest/screenshots_spec.rb
325
+ - spec/lib/ruby-lokalise-api/rest/segments_spec.rb
319
326
  - spec/lib/ruby-lokalise-api/rest/snapshots_spec.rb
320
327
  - spec/lib/ruby-lokalise-api/rest/tasks_spec.rb
328
+ - spec/lib/ruby-lokalise-api/rest/team_user_billing_details_spec.rb
321
329
  - spec/lib/ruby-lokalise-api/rest/team_user_groups_spec.rb
322
330
  - spec/lib/ruby-lokalise-api/rest/team_users_spec.rb
323
331
  - spec/lib/ruby-lokalise-api/rest/teams_spec.rb
324
332
  - spec/lib/ruby-lokalise-api/rest/translation_providers_spec.rb
325
333
  - spec/lib/ruby-lokalise-api/rest/translations_spec.rb
326
334
  - spec/lib/ruby-lokalise-api/rest/webhooks_spec.rb
327
- - spec/lib/ruby-lokalise-api/utils/snakecase_spec.rb
328
335
  - spec/lib/ruby-lokalise-api_spec.rb
329
336
  - spec/spec_helper.rb
330
337
  - spec/support/test_client.rb
@@ -332,7 +339,8 @@ files:
332
339
  homepage: https://github.com/lokalise/ruby-lokalise-api
333
340
  licenses:
334
341
  - BSD-3-Clause
335
- metadata: {}
342
+ metadata:
343
+ rubygems_mfa_required: 'true'
336
344
  post_install_message:
337
345
  rdoc_options: []
338
346
  require_paths:
@@ -348,7 +356,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
348
356
  - !ruby/object:Gem::Version
349
357
  version: '0'
350
358
  requirements: []
351
- rubygems_version: 3.2.23
359
+ rubygems_version: 3.3.5
352
360
  signing_key:
353
361
  specification_version: 4
354
362
  summary: Ruby interface to the Lokalise API
@@ -368,15 +376,16 @@ test_files:
368
376
  - spec/lib/ruby-lokalise-api/rest/projects_spec.rb
369
377
  - spec/lib/ruby-lokalise-api/rest/queued_processes_spec.rb
370
378
  - spec/lib/ruby-lokalise-api/rest/screenshots_spec.rb
379
+ - spec/lib/ruby-lokalise-api/rest/segments_spec.rb
371
380
  - spec/lib/ruby-lokalise-api/rest/snapshots_spec.rb
372
381
  - spec/lib/ruby-lokalise-api/rest/tasks_spec.rb
373
- - spec/lib/ruby-lokalise-api/rest/teams_spec.rb
374
- - spec/lib/ruby-lokalise-api/rest/team_users_spec.rb
382
+ - spec/lib/ruby-lokalise-api/rest/team_user_billing_details_spec.rb
375
383
  - spec/lib/ruby-lokalise-api/rest/team_user_groups_spec.rb
376
- - spec/lib/ruby-lokalise-api/rest/translations_spec.rb
384
+ - spec/lib/ruby-lokalise-api/rest/team_users_spec.rb
385
+ - spec/lib/ruby-lokalise-api/rest/teams_spec.rb
377
386
  - spec/lib/ruby-lokalise-api/rest/translation_providers_spec.rb
387
+ - spec/lib/ruby-lokalise-api/rest/translations_spec.rb
378
388
  - spec/lib/ruby-lokalise-api/rest/webhooks_spec.rb
379
- - spec/lib/ruby-lokalise-api/utils/snakecase_spec.rb
380
389
  - spec/lib/ruby-lokalise-api_spec.rb
381
390
  - spec/spec_helper.rb
382
391
  - spec/support/test_client.rb
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe String do
4
- let(:snake_result) { 'snake_case' }
5
- let(:bc_result) { 'Klass' }
6
-
7
- specify '#snakecase' do
8
- expect('SnakeCase'.snakecase).to eq snake_result
9
- expect('Snake-Case'.snakecase).to eq snake_result
10
- expect('Snake Case'.snakecase).to eq snake_result
11
- expect('Snake - Case'.snakecase).to eq snake_result
12
- end
13
-
14
- specify '#base_class_name' do
15
- expect('Namespace::Nested::Klass'.base_class_name).to eq bc_result
16
- expect('Nested::Klass'.base_class_name).to eq bc_result
17
- expect('Klass'.base_class_name).to eq bc_result
18
- end
19
- end