ruby-lokalise-api 2.3.0 → 2.4.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0f06a31e2619b9aead1f7fe44c4b62557636389c95102757c263672bedef9f19
4
- data.tar.gz: 4c76a5505ffca2f4cc6218abddc017439175d11ca689d0e0f5f2a042e94e3bf0
3
+ metadata.gz: caa20ece7cfd9bbf173ddd4213d6e30b67bec03a78a28188f473414eea7ae42a
4
+ data.tar.gz: 99069ccfa82ca5cebd820de4da81d9215d24341899862ad8c2b21c52500d5fa7
5
5
  SHA512:
6
- metadata.gz: f9e28c0ddf96ac41b7658fdf41d277d9a7fc57940c126f16dcc47b2f24d882b998d83f975a6c5a3840bc81eb8ee12bb2d04978f79cca6f52f0a33e81abf0a235
7
- data.tar.gz: 58837157151d763e18c4c4f13617dfef4c56e1011e0ce2416832b778fbe6d60719b9c0e3ba10ab0c675239ce9f32ef86b86ddcd8f728bd50187e69625753891e
6
+ metadata.gz: fb97f63d412ac981efa9f2b3302b740dbc7ae25a93f6a4637a4e6706f8b5150bfd249915bd80b6279249f4e9298da61d29d53855228b73bdce19206adbef3cef
7
+ data.tar.gz: 5ee66d9e5bd269c7c0cfefa8e73e34601ff18cf487cf623373240ee4b49344a88991cb4cee91f1250944ec14a0c63491e68cf7aa2f893d462c28fb6213b3ea8d
@@ -1,6 +1,10 @@
1
1
  # Changelog
2
2
 
3
- ## 2.3.0 (17-July-19)
3
+ ## 2.4.0 (31-Jul-19)
4
+
5
+ * Remove MultiJson dependency and allow to use a custom JSON parser
6
+
7
+ ## 2.3.0 (17-Jul-19)
4
8
 
5
9
  * Incorporated latest API changes
6
10
  * Added support for [`TranslationStatus` endpoint](https://lokalise.co/api2docs/ruby/#resource-translation-statuses)
data/README.md CHANGED
@@ -31,6 +31,7 @@ Official opinionated Ruby interface for the [Lokalise API](https://lokalise.co/a
31
31
  + [Translation Providers](#translation-providers)
32
32
  + [Translation Statuses](#translation-statuses)
33
33
  * [Additional Info](#additional-info)
34
+ + [Customizing JSON parser](#customizing-json-parser)
34
35
  + [Error handling](#error-handling)
35
36
  + [API Rate Limits](#api-rate-limits)
36
37
  * [Running Tests](#running-tests)
@@ -1462,13 +1463,37 @@ As long as Lokalise supports only very limited array of color hexadecimal codes
1462
1463
 
1463
1464
  ```ruby
1464
1465
  @client.translation_status_colors(project_id) # Input:
1465
- ## project_id (string, required)
1466
- # Output:
1467
- ## Array of color codes in HEX format
1466
+ ## project_id (string, required)
1467
+ # Output:
1468
+ ## Array of color codes in HEX format
1468
1469
  ```
1469
1470
 
1470
1471
  ## Additional Info
1471
1472
 
1473
+ ### Customizing JSON parser
1474
+
1475
+ This gem used to rely on [MultiJson](https://github.com/intridea/multi_json) but it is not maintained anymore. By default we are using a [built-in JSON module](https://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html) but you may utilize any other parser by overriding `#custom_dump` and `#custom_load` methods inside `Lokalise::JsonHandler` module.
1476
+
1477
+ For example, to use [Oj](https://github.com/ohler55/oj) you would do the following:
1478
+
1479
+ ```ruby
1480
+ require 'oj'
1481
+
1482
+ module Lokalise
1483
+ module JsonHandler
1484
+ # This method accepts a Ruby object and must return a JSON string
1485
+ def custom_dump(obj)
1486
+ Oj.dump obj
1487
+ end
1488
+
1489
+ # This method accepts JSON and must return Ruby object
1490
+ def custom_load(obj)
1491
+ Oj.load obj
1492
+ end
1493
+ end
1494
+ end
1495
+ ```
1496
+
1472
1497
  ### Error handling
1473
1498
 
1474
1499
  [Error codes](https://lokalise.co/api2docs/curl/#resource-errors)
@@ -1,9 +1,9 @@
1
1
  require 'faraday'
2
- require 'multi_json'
3
2
  require 'yaml'
4
3
  require 'addressable'
5
4
 
6
5
  require 'ruby-lokalise-api/version'
6
+ require 'ruby-lokalise-api/json_handler'
7
7
  require 'ruby-lokalise-api/connection'
8
8
  require 'ruby-lokalise-api/request'
9
9
  require 'ruby-lokalise-api/error'
@@ -0,0 +1,15 @@
1
+ module Lokalise
2
+ module JsonHandler
3
+ # JSON custom parser. Uses built-in JSON by default but can be overridden to any other parser
4
+
5
+ # Converts Ruby object to JSON
6
+ def custom_dump(obj)
7
+ JSON.dump obj
8
+ end
9
+
10
+ # Converts JSON to Ruby object
11
+ def custom_load(obj)
12
+ JSON.parse obj
13
+ end
14
+ end
15
+ end
@@ -1,6 +1,7 @@
1
1
  module Lokalise
2
2
  module Request
3
3
  include Lokalise::Connection
4
+ include Lokalise::JsonHandler
4
5
 
5
6
  PAGINATION_HEADERS = %w[x-pagination-total-count x-pagination-page-count x-pagination-limit x-pagination-page].freeze
6
7
 
@@ -13,14 +14,14 @@ module Lokalise
13
14
 
14
15
  def post(path, client, params = {})
15
16
  respond_with(
16
- connection(client.token).post(prepare(path), MultiJson.dump(params)),
17
+ connection(client.token).post(prepare(path), custom_dump(params)),
17
18
  client
18
19
  )
19
20
  end
20
21
 
21
22
  def put(path, client, params = {})
22
23
  respond_with(
23
- connection(client.token).put(prepare(path), MultiJson.dump(params)),
24
+ connection(client.token).put(prepare(path), custom_dump(params)),
24
25
  client
25
26
  )
26
27
  end
@@ -31,7 +32,7 @@ module Lokalise
31
32
  # rubocop:disable Style/CollectionMethods
32
33
  connection(client.token).delete(prepare(path)) do |req|
33
34
  # rubocop:enable Style/CollectionMethods
34
- req.body = MultiJson.dump(params)
35
+ req.body = custom_dump params
35
36
  end,
36
37
  client
37
38
  )
@@ -45,7 +46,7 @@ module Lokalise
45
46
  end
46
47
 
47
48
  def respond_with(response, client)
48
- body = MultiJson.load response.body
49
+ body = custom_load response.body
49
50
  uri = Addressable::URI.parse response.env.url
50
51
  respond_with_error(response.status, body) if body.respond_to?(:has_key?) && body.key?('error')
51
52
  extract_headers_from(response).
@@ -1,3 +1,3 @@
1
1
  module Lokalise
2
- VERSION = '2.3.0'.freeze
2
+ VERSION = '2.4.0'.freeze
3
3
  end
@@ -22,9 +22,9 @@ Gem::Specification.new do |spec|
22
22
 
23
23
  spec.add_dependency 'addressable', '~> 2.5'
24
24
  spec.add_dependency 'faraday', '~> 0.13'
25
- spec.add_dependency 'multi_json', '~> 1.12'
26
25
 
27
26
  spec.add_development_dependency 'dotenv', '~> 2.5'
27
+ spec.add_development_dependency 'oj', '~> 3.8'
28
28
  spec.add_development_dependency 'rake', '~> 12.1'
29
29
  spec.add_development_dependency 'rspec', '~> 3.6'
30
30
  spec.add_development_dependency 'rubocop', '~> 0.60'
@@ -0,0 +1,77 @@
1
+ require 'oj'
2
+
3
+ RSpec.describe 'Custom JSON parser' do
4
+ let(:loaded_json) do
5
+ {'projects' => [{'project_id' => '547879415c01a0e6e0b855.29978928',
6
+ 'name' => 'demo phoenix copy',
7
+ 'description' => '',
8
+ 'created_at' => '2018-11-30 20:43:18 (Etc/UTC)',
9
+ 'created_by' => 20_181,
10
+ 'created_by_email' => 'bodrovis@protonmail.com',
11
+ 'team_id' => 176_692,
12
+ 'statistics' =>
13
+ {'progress' => 0,
14
+ 'keys' => 1,
15
+ 'team' => 1,
16
+ 'base_words' => 0,
17
+ 'qa_issues' => 1,
18
+ 'languages' =>
19
+ [{'language_id' => 640, 'language_iso' => 'en', 'progress' => 0, 'words_to_do' => 0},
20
+ {'language_id' => 597, 'language_iso' => 'ru', 'progress' => 0, 'words_to_do' => 0},
21
+ {'language_id' => 673, 'language_iso' => 'f_over', 'progress' => 0, 'words_to_do' => 0}]}}]}
22
+ end
23
+
24
+ let(:dumped_json) do
25
+ '{":name":"rspec proj",":description":"demo project for rspec"}'
26
+ end
27
+
28
+ before :all do
29
+ module Lokalise
30
+ module JsonHandler
31
+ def custom_dump(obj)
32
+ Oj.dump obj
33
+ end
34
+
35
+ def custom_load(obj)
36
+ Oj.load obj
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ after :all do
43
+ module Lokalise
44
+ module JsonHandler
45
+ def custom_dump(obj)
46
+ JSON.dump obj
47
+ end
48
+
49
+ def custom_load(obj)
50
+ JSON.parse obj
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+ it 'should allow to customize #load' do
57
+ expect(Oj).to receive(:load).and_return(loaded_json)
58
+ expect(JSON).not_to receive(:parse)
59
+ projects = VCR.use_cassette('all_projects_pagination') do
60
+ test_client.projects limit: 1, page: 2
61
+ end
62
+
63
+ expect(projects.collection.count).to eq(1)
64
+ expect(projects.total_results).to eq(5)
65
+ expect(projects.collection.first.name).to eq('demo phoenix copy')
66
+ end
67
+
68
+ it 'should allow to customize #dump' do
69
+ expect(Oj).to receive(:dump).and_return(dumped_json)
70
+ expect(JSON).not_to receive(:dump)
71
+ project = VCR.use_cassette('new_project') do
72
+ test_client.create_project name: 'rspec proj', description: 'demo project for rspec'
73
+ end
74
+
75
+ expect(project.name).to eq('rspec proj')
76
+ end
77
+ 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: 2.3.0
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ilya Bodrov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-17 00:00:00.000000000 Z
11
+ date: 2019-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -39,33 +39,33 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.13'
41
41
  - !ruby/object:Gem::Dependency
42
- name: multi_json
42
+ name: dotenv
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.12'
48
- type: :runtime
47
+ version: '2.5'
48
+ type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.12'
54
+ version: '2.5'
55
55
  - !ruby/object:Gem::Dependency
56
- name: dotenv
56
+ name: oj
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '2.5'
61
+ version: '3.8'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '2.5'
68
+ version: '3.8'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -192,6 +192,7 @@ files:
192
192
  - lib/ruby-lokalise-api/connection.rb
193
193
  - lib/ruby-lokalise-api/data/attributes.json
194
194
  - lib/ruby-lokalise-api/error.rb
195
+ - lib/ruby-lokalise-api/json_handler.rb
195
196
  - lib/ruby-lokalise-api/request.rb
196
197
  - lib/ruby-lokalise-api/resources/base.rb
197
198
  - lib/ruby-lokalise-api/resources/contributor.rb
@@ -235,6 +236,7 @@ files:
235
236
  - lib/ruby-lokalise-api/utils/string_utils.rb
236
237
  - lib/ruby-lokalise-api/version.rb
237
238
  - ruby-lokalise-api.gemspec
239
+ - spec/lib/ruby-lokalise-api/custom_json_parser_spec.rb
238
240
  - spec/lib/ruby-lokalise-api/error_spec.rb
239
241
  - spec/lib/ruby-lokalise-api/rest/comments_spec.rb
240
242
  - spec/lib/ruby-lokalise-api/rest/contributors_spec.rb
@@ -282,6 +284,7 @@ signing_key:
282
284
  specification_version: 4
283
285
  summary: Ruby interface to the Lokalise API
284
286
  test_files:
287
+ - spec/lib/ruby-lokalise-api/custom_json_parser_spec.rb
285
288
  - spec/lib/ruby-lokalise-api/error_spec.rb
286
289
  - spec/lib/ruby-lokalise-api/rest/comments_spec.rb
287
290
  - spec/lib/ruby-lokalise-api/rest/contributors_spec.rb