ruby-lokalise-api 4.3.0 → 4.5.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 (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