deepl-rb 2.2.4 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cf8ebdcd8a45fe7ad967c6b029c25bbfb434fb084248f4857af3a951ac796d2f
4
- data.tar.gz: fbc03bfcbb0e0da19a0c0b13f6362fda347bf8827f06621938504276b498f5b3
3
+ metadata.gz: f531ff13d2ba139bab65f6027f2e673f6480b097847d898531ecc7a9b247faea
4
+ data.tar.gz: e12727852eff8153dbb3a95d853d0fbd5ef5c703f02eaf7dedd089320e6873a2
5
5
  SHA512:
6
- metadata.gz: 43f953deb1764db33e4c184af1f2456ec2f0eeccb4eeb4be1487dd4f84929b557f2e5cb81c9e258fb97caf5ab3adc2e28b7c850e8eed744d865f12c10abbc680
7
- data.tar.gz: dcbf37fa50d6219ff68f6c77684414f9d7b1e32c102654e98e4e550af38f6f2923dd796563f15a35fb0fe87891a49d88b804f229e632de45407811f12db6e2ea
6
+ metadata.gz: 1d783cba5c207fb772589bc3f328a942919eff214778ea739a6924022bb7589a1898ab62a1cad2b9f6b177f857beb1bd0c5fbe290eba1467c31b26ab9cad461e
7
+ data.tar.gz: f14387ba9bc6e7ca3b97176fe1d51f4fa001ca9caba1dc6377d13e4c573896f953575f6efa682bbf55d6704657a53eb73686f9ec51711298549b49a2e5a07701
data/Gemfile CHANGED
@@ -7,6 +7,10 @@ group :development do
7
7
  gem 'juwelier'
8
8
  end
9
9
 
10
+ group :test, :development do
11
+ gem 'byebug', require: 'byebug'
12
+ end
13
+
10
14
  group :test do
11
15
  # Test
12
16
  gem 'codecov', require: false
data/README.md CHANGED
@@ -40,11 +40,39 @@ You can also configure the API host and the API version:
40
40
  ```rb
41
41
  DeepL.configure do |config|
42
42
  config.auth_key = 'your-api-token'
43
- config.host = 'https://test-api.deepl.com' # Default value is 'https://api.deepl.com'
43
+ config.host = 'https://api-free.deepl.com' # Default value is 'https://api.deepl.com'
44
44
  config.version = 'v1' # Default value is 'v2'
45
45
  end
46
46
  ```
47
47
 
48
+ ### Available languages
49
+
50
+ Available languages can be retrieved via API:
51
+
52
+ ```rb
53
+ languages = DeepL.languages
54
+
55
+ puts languages.class
56
+ # => Array
57
+ puts languages.first.class
58
+ # => DeepL::Resources::Language
59
+ puts "#{languages.first.code} -> #{languages.first.name}"
60
+ # => "ES -> Spanish"
61
+ ```
62
+
63
+ Note that source and target languages may be different, which can be retrieved by using the `type`
64
+ option:
65
+
66
+ ```rb
67
+ puts DeepL.languages(type: :source).count
68
+ # => 24
69
+ puts DeepL.languages(type: :target).count
70
+ # => 26
71
+ ```
72
+
73
+ All languages are also defined on the
74
+ [official API documentation](https://www.deepl.com/docs-api/translating-text/)
75
+
48
76
  ### Translate
49
77
 
50
78
  To translate a simple text, use the `translate` method:
@@ -79,20 +107,6 @@ puts translations.first.class
79
107
  # => DeepL::Resources::Text
80
108
  ```
81
109
 
82
- Here's a list of available language codes:
83
-
84
- | Language code | Language
85
- | --------------- | ---------------
86
- | `EN` | English
87
- | `DE` | German
88
- | `FR` | French
89
- | `ES` | Spanish
90
- | `PT` | Portuguese
91
- | `IT` | Italian
92
- | `NL` | Dutch
93
- | `PL` | Polish
94
- | `RU` | Russian
95
-
96
110
  You can also use custom query parameters, like `tag_handling`, `split_sentences`, `non_splitting_tags` or `ignore_tags`:
97
111
 
98
112
  ```rb
@@ -113,7 +127,7 @@ The following parameters will be automatically converted:
113
127
  | `non_splitting_tags` | Converts arrays to strings joining by commas
114
128
  | `ignore_tags` | Converts arrays to strings joining by commas
115
129
 
116
- ### Usage
130
+ ### Monitor usage
117
131
 
118
132
  To check current API usage, use:
119
133
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.2.4
1
+ 2.3.0
data/deepl-rb.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: deepl-rb 2.2.4 ruby lib
5
+ # stub: deepl-rb 2.3.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "deepl-rb".freeze
9
- s.version = "2.2.4"
9
+ s.version = "2.3.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Daniel Herzog".freeze]
14
- s.date = "2021-02-28"
14
+ s.date = "2021-05-17"
15
15
  s.description = "A simple ruby wrapper for the DeepL translation API (v1). For more information, check this: https://www.deepl.com/docs/api-reference.html".freeze
16
16
  s.email = "info@danielherzog.es".freeze
17
17
  s.extra_rdoc_files = [
@@ -37,20 +37,26 @@ Gem::Specification.new do |s|
37
37
  "lib/deepl/exceptions/quota_exceeded.rb",
38
38
  "lib/deepl/exceptions/request_error.rb",
39
39
  "lib/deepl/requests/base.rb",
40
+ "lib/deepl/requests/languages.rb",
40
41
  "lib/deepl/requests/translate.rb",
41
42
  "lib/deepl/requests/usage.rb",
42
43
  "lib/deepl/resources/base.rb",
44
+ "lib/deepl/resources/language.rb",
43
45
  "lib/deepl/resources/text.rb",
44
46
  "lib/deepl/resources/usage.rb",
45
47
  "spec/api/api_spec.rb",
46
48
  "spec/api/configuration_spec.rb",
47
49
  "spec/api/deepl_spec.rb",
50
+ "spec/fixtures/vcr_cassettes/deepl_languages.yml",
48
51
  "spec/fixtures/vcr_cassettes/deepl_translate.yml",
49
52
  "spec/fixtures/vcr_cassettes/deepl_usage.yml",
53
+ "spec/fixtures/vcr_cassettes/languages.yml",
50
54
  "spec/fixtures/vcr_cassettes/translate_texts.yml",
51
55
  "spec/fixtures/vcr_cassettes/usage.yml",
56
+ "spec/requests/languages_spec.rb",
52
57
  "spec/requests/translate_spec.rb",
53
58
  "spec/requests/usage_spec.rb",
59
+ "spec/resources/language_spec.rb",
54
60
  "spec/resources/text_spec.rb",
55
61
  "spec/resources/usage_spec.rb",
56
62
  "spec/spec_helper.rb"
@@ -66,8 +72,10 @@ Gem::Specification.new do |s|
66
72
 
67
73
  if s.respond_to? :add_runtime_dependency then
68
74
  s.add_development_dependency(%q<juwelier>.freeze, [">= 0"])
75
+ s.add_development_dependency(%q<byebug>.freeze, [">= 0"])
69
76
  else
70
77
  s.add_dependency(%q<juwelier>.freeze, [">= 0"])
78
+ s.add_dependency(%q<byebug>.freeze, [">= 0"])
71
79
  end
72
80
  end
73
81
 
data/lib/deepl.rb CHANGED
@@ -14,11 +14,13 @@ require 'deepl/exceptions/quota_exceeded'
14
14
 
15
15
  # -- Requests
16
16
  require 'deepl/requests/base'
17
+ require 'deepl/requests/languages'
17
18
  require 'deepl/requests/translate'
18
19
  require 'deepl/requests/usage'
19
20
 
20
21
  # -- Responses and resources
21
22
  require 'deepl/resources/base'
23
+ require 'deepl/resources/language'
22
24
  require 'deepl/resources/text'
23
25
  require 'deepl/resources/usage'
24
26
 
@@ -36,6 +38,10 @@ module DeepL
36
38
  @api ||= API.new(configuration)
37
39
  end
38
40
 
41
+ def languages(options = {})
42
+ Requests::Languages.new(api, options).request
43
+ end
44
+
39
45
  def translate(text, source_lang, target_lang, options = {})
40
46
  configure if @configuration.nil?
41
47
  Requests::Translate.new(api, text, source_lang, target_lang, options).request
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DeepL
4
+ module Requests
5
+ class Languages < Base
6
+ def initialize(api, options = {})
7
+ super(api, options)
8
+ end
9
+
10
+ def request
11
+ build_languages(*get)
12
+ end
13
+
14
+ private
15
+
16
+ def build_languages(request, response)
17
+ data = JSON.parse(response.body)
18
+ data.map do |language|
19
+ Resources::Language.new(language['language'], language['name'], request, response)
20
+ end
21
+ end
22
+
23
+ def path
24
+ 'languages'
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DeepL
4
+ module Resources
5
+ class Language < Base
6
+ attr_reader :code, :name
7
+
8
+ def initialize(code, name, *args)
9
+ super(*args)
10
+
11
+ @code = code
12
+ @name = name
13
+ end
14
+
15
+ def to_s
16
+ "#{code} - #{name}"
17
+ end
18
+ end
19
+ end
20
+ end
@@ -16,7 +16,7 @@ describe DeepL::Configuration do
16
16
  end
17
17
 
18
18
  context 'When using custom configuration attributes' do
19
- let(:attributes) { { auth_key: 'SAMPLE', host: 'http://www.example.org', version: 'v1' } }
19
+ let(:attributes) { { auth_key: 'SAMPLE', host: 'https://api-free.deepl.com', version: 'v1' } }
20
20
 
21
21
  it 'should use custom attributes' do
22
22
  expect(subject.auth_key).to eq(attributes[:auth_key])
@@ -47,6 +47,7 @@ describe DeepL do
47
47
  let(:options) { { param: 'fake' } }
48
48
 
49
49
  around do |example|
50
+ subject.configure { |config| config.host = 'https://api-free.deepl.com' }
50
51
  VCR.use_cassette('deepl_translate') { example.call }
51
52
  end
52
53
 
@@ -65,6 +66,7 @@ describe DeepL do
65
66
  let(:options) { {} }
66
67
 
67
68
  around do |example|
69
+ subject.configure { |config| config.host = 'https://api-free.deepl.com' }
68
70
  VCR.use_cassette('deepl_usage') { example.call }
69
71
  end
70
72
 
@@ -78,4 +80,24 @@ describe DeepL do
78
80
  end
79
81
  end
80
82
  end
83
+
84
+ describe '#languages' do
85
+ let(:options) { { type: :target } }
86
+
87
+ around do |example|
88
+ subject.configure { |config| config.host = 'https://api-free.deepl.com' }
89
+ VCR.use_cassette('deepl_languages') { example.call }
90
+ end
91
+
92
+ context 'When checking languages' do
93
+ it 'should create and call a request object' do
94
+ expect(DeepL::Requests::Languages).to receive(:new)
95
+ .with(subject.api, options).and_call_original
96
+
97
+ languages = subject.languages(options)
98
+ expect(languages).to be_an(Array)
99
+ expect(languages.all? { |l| l.is_a?(DeepL::Resources::Language) }).to be_truthy
100
+ end
101
+ end
102
+ end
81
103
  end
@@ -0,0 +1,41 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api-free.deepl.com/v2/languages?auth_key=VALID_TOKEN&type=target
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Server:
22
+ - nginx
23
+ Date:
24
+ - Mon, 17 May 2021 15:07:54 GMT
25
+ Content-Type:
26
+ - application/json
27
+ Content-Length:
28
+ - '1667'
29
+ Connection:
30
+ - keep-alive
31
+ Access-Control-Allow-Origin:
32
+ - "*"
33
+ body:
34
+ encoding: UTF-8
35
+ string: '[{"language":"BG","name":"Bulgarian","supports_formality":false},{"language":"CS","name":"Czech","supports_formality":false},{"language":"DA","name":"Danish","supports_formality":false},{"language":"DE","name":"German","supports_formality":true},{"language":"EL","name":"Greek","supports_formality":false},{"language":"EN-GB","name":"English
36
+ (British)","supports_formality":false},{"language":"EN-US","name":"English
37
+ (American)","supports_formality":false},{"language":"ES","name":"Spanish","supports_formality":true},{"language":"ET","name":"Estonian","supports_formality":false},{"language":"FI","name":"Finnish","supports_formality":false},{"language":"FR","name":"French","supports_formality":true},{"language":"HU","name":"Hungarian","supports_formality":false},{"language":"IT","name":"Italian","supports_formality":true},{"language":"JA","name":"Japanese","supports_formality":false},{"language":"LT","name":"Lithuanian","supports_formality":false},{"language":"LV","name":"Latvian","supports_formality":false},{"language":"NL","name":"Dutch","supports_formality":true},{"language":"PL","name":"Polish","supports_formality":true},{"language":"PT-BR","name":"Portuguese
38
+ (Brazilian)","supports_formality":true},{"language":"PT-PT","name":"Portuguese
39
+ (European)","supports_formality":true},{"language":"RO","name":"Romanian","supports_formality":false},{"language":"RU","name":"Russian","supports_formality":true},{"language":"SK","name":"Slovak","supports_formality":false},{"language":"SL","name":"Slovenian","supports_formality":false},{"language":"SV","name":"Swedish","supports_formality":false},{"language":"ZH","name":"Chinese","supports_formality":false}]'
40
+ recorded_at: Mon, 17 May 2021 15:07:54 GMT
41
+ recorded_with: VCR 6.0.0
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: post
5
- uri: https://api.deepl.com/v2/translate?auth_key=VALID_TOKEN&param=fake
5
+ uri: https://api-free.deepl.com/v2/translate?auth_key=VALID_TOKEN&param=fake
6
6
  body:
7
7
  encoding: US-ASCII
8
8
  string: text=Sample&source_lang=EN&target_lang=ES
@@ -23,7 +23,7 @@ http_interactions:
23
23
  Server:
24
24
  - nginx
25
25
  Date:
26
- - Tue, 08 May 2018 16:31:34 GMT
26
+ - Mon, 17 May 2021 14:42:56 GMT
27
27
  Content-Type:
28
28
  - application/json
29
29
  Content-Length:
@@ -35,6 +35,5 @@ http_interactions:
35
35
  body:
36
36
  encoding: UTF-8
37
37
  string: '{"translations":[{"detected_source_language":"EN","text":"Muestra"}]}'
38
- http_version:
39
- recorded_at: Tue, 08 May 2018 16:31:33 GMT
40
- recorded_with: VCR 4.0.0
38
+ recorded_at: Mon, 17 May 2021 14:42:56 GMT
39
+ recorded_with: VCR 6.0.0
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: get
5
- uri: https://api.deepl.com/v2/usage?auth_key=VALID_TOKEN
5
+ uri: https://api-free.deepl.com/v2/usage?auth_key=VALID_TOKEN
6
6
  body:
7
7
  encoding: US-ASCII
8
8
  string: ''
@@ -21,14 +21,17 @@ http_interactions:
21
21
  Server:
22
22
  - nginx
23
23
  Date:
24
- - Tue, 08 May 2018 16:31:35 GMT
24
+ - Mon, 17 May 2021 14:18:28 GMT
25
+ Content-Type:
26
+ - application/json
25
27
  Content-Length:
26
- - '52'
28
+ - '48'
27
29
  Connection:
28
30
  - keep-alive
31
+ Access-Control-Allow-Origin:
32
+ - "*"
29
33
  body:
30
34
  encoding: UTF-8
31
- string: '{"character_count":802127,"character_limit":1000000}'
32
- http_version:
33
- recorded_at: Tue, 08 May 2018 16:31:33 GMT
34
- recorded_with: VCR 4.0.0
35
+ string: '{"character_count":303,"character_limit":500000}'
36
+ recorded_at: Mon, 17 May 2021 14:18:28 GMT
37
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,108 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api-free.deepl.com/v2/languages?auth_key=VALID_TOKEN
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Server:
22
+ - nginx
23
+ Date:
24
+ - Mon, 17 May 2021 14:49:42 GMT
25
+ Content-Type:
26
+ - application/json
27
+ Content-Length:
28
+ - '845'
29
+ Connection:
30
+ - keep-alive
31
+ Access-Control-Allow-Origin:
32
+ - "*"
33
+ body:
34
+ encoding: UTF-8
35
+ string: '[{"language":"BG","name":"Bulgarian"},{"language":"CS","name":"Czech"},{"language":"DA","name":"Danish"},{"language":"DE","name":"German"},{"language":"EL","name":"Greek"},{"language":"EN","name":"English"},{"language":"ES","name":"Spanish"},{"language":"ET","name":"Estonian"},{"language":"FI","name":"Finnish"},{"language":"FR","name":"French"},{"language":"HU","name":"Hungarian"},{"language":"IT","name":"Italian"},{"language":"JA","name":"Japanese"},{"language":"LT","name":"Lithuanian"},{"language":"LV","name":"Latvian"},{"language":"NL","name":"Dutch"},{"language":"PL","name":"Polish"},{"language":"PT","name":"Portuguese"},{"language":"RO","name":"Romanian"},{"language":"RU","name":"Russian"},{"language":"SK","name":"Slovak"},{"language":"SL","name":"Slovenian"},{"language":"SV","name":"Swedish"},{"language":"ZH","name":"Chinese"}]'
36
+ recorded_at: Mon, 17 May 2021 14:49:42 GMT
37
+ - request:
38
+ method: get
39
+ uri: https://api-free.deepl.com/v2/languages?auth_key=VALID_TOKEN&type=target
40
+ body:
41
+ encoding: US-ASCII
42
+ string: ''
43
+ headers:
44
+ Accept-Encoding:
45
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
46
+ Accept:
47
+ - "*/*"
48
+ User-Agent:
49
+ - Ruby
50
+ response:
51
+ status:
52
+ code: 200
53
+ message: OK
54
+ headers:
55
+ Server:
56
+ - nginx
57
+ Date:
58
+ - Mon, 17 May 2021 14:55:30 GMT
59
+ Content-Type:
60
+ - application/json
61
+ Content-Length:
62
+ - '1667'
63
+ Connection:
64
+ - keep-alive
65
+ Access-Control-Allow-Origin:
66
+ - "*"
67
+ body:
68
+ encoding: UTF-8
69
+ string: '[{"language":"BG","name":"Bulgarian","supports_formality":false},{"language":"CS","name":"Czech","supports_formality":false},{"language":"DA","name":"Danish","supports_formality":false},{"language":"DE","name":"German","supports_formality":true},{"language":"EL","name":"Greek","supports_formality":false},{"language":"EN-GB","name":"English
70
+ (British)","supports_formality":false},{"language":"EN-US","name":"English
71
+ (American)","supports_formality":false},{"language":"ES","name":"Spanish","supports_formality":true},{"language":"ET","name":"Estonian","supports_formality":false},{"language":"FI","name":"Finnish","supports_formality":false},{"language":"FR","name":"French","supports_formality":true},{"language":"HU","name":"Hungarian","supports_formality":false},{"language":"IT","name":"Italian","supports_formality":true},{"language":"JA","name":"Japanese","supports_formality":false},{"language":"LT","name":"Lithuanian","supports_formality":false},{"language":"LV","name":"Latvian","supports_formality":false},{"language":"NL","name":"Dutch","supports_formality":true},{"language":"PL","name":"Polish","supports_formality":true},{"language":"PT-BR","name":"Portuguese
72
+ (Brazilian)","supports_formality":true},{"language":"PT-PT","name":"Portuguese
73
+ (European)","supports_formality":true},{"language":"RO","name":"Romanian","supports_formality":false},{"language":"RU","name":"Russian","supports_formality":true},{"language":"SK","name":"Slovak","supports_formality":false},{"language":"SL","name":"Slovenian","supports_formality":false},{"language":"SV","name":"Swedish","supports_formality":false},{"language":"ZH","name":"Chinese","supports_formality":false}]'
74
+ recorded_at: Mon, 17 May 2021 14:55:30 GMT
75
+ - request:
76
+ method: get
77
+ uri: https://api-free.deepl.com/v2/languages?auth_key=VALID_TOKEN&type=invalid
78
+ body:
79
+ encoding: US-ASCII
80
+ string: ''
81
+ headers:
82
+ Accept-Encoding:
83
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
84
+ Accept:
85
+ - "*/*"
86
+ User-Agent:
87
+ - Ruby
88
+ response:
89
+ status:
90
+ code: 400
91
+ message: Bad Request
92
+ headers:
93
+ Server:
94
+ - nginx
95
+ Date:
96
+ - Mon, 17 May 2021 14:57:00 GMT
97
+ Content-Length:
98
+ - '82'
99
+ Connection:
100
+ - keep-alive
101
+ Access-Control-Allow-Origin:
102
+ - "*"
103
+ body:
104
+ encoding: UTF-8
105
+ string: '{"message":"Parameter ''type'' is invalid. ''source'' and ''target''
106
+ are valid values."}'
107
+ recorded_at: Mon, 17 May 2021 14:57:00 GMT
108
+ recorded_with: VCR 6.0.0
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: post
5
- uri: https://api.deepl.com/v2/translate?auth_key=VALID_TOKEN
5
+ uri: https://api-free.deepl.com/v2/translate?auth_key=VALID_TOKEN
6
6
  body:
7
7
  encoding: US-ASCII
8
8
  string: text=Sample+text&source_lang=EN&target_lang=ES
@@ -23,11 +23,11 @@ http_interactions:
23
23
  Server:
24
24
  - nginx
25
25
  Date:
26
- - Tue, 08 May 2018 16:31:36 GMT
26
+ - Mon, 17 May 2021 14:20:14 GMT
27
27
  Content-Type:
28
28
  - application/json
29
29
  Content-Length:
30
- - '74'
30
+ - '78'
31
31
  Connection:
32
32
  - keep-alive
33
33
  Access-Control-Allow-Origin:
@@ -36,11 +36,10 @@ http_interactions:
36
36
  encoding: UTF-8
37
37
  string: '{"translations":[{"detected_source_language":"EN","text":"Texto de
38
38
  muestra"}]}'
39
- http_version:
40
- recorded_at: Tue, 08 May 2018 16:31:34 GMT
39
+ recorded_at: Mon, 17 May 2021 14:20:14 GMT
41
40
  - request:
42
41
  method: post
43
- uri: https://api.deepl.com/v2/translate?auth_key=VALID_TOKEN
42
+ uri: https://api-free.deepl.com/v2/translate?auth_key=VALID_TOKEN
44
43
  body:
45
44
  encoding: US-ASCII
46
45
  string: text=Sample&text=Word&source_lang=EN&target_lang=ES
@@ -61,7 +60,7 @@ http_interactions:
61
60
  Server:
62
61
  - nginx
63
62
  Date:
64
- - Tue, 08 May 2018 16:31:37 GMT
63
+ - Mon, 17 May 2021 14:20:14 GMT
65
64
  Content-Type:
66
65
  - application/json
67
66
  Content-Length:
@@ -73,11 +72,10 @@ http_interactions:
73
72
  body:
74
73
  encoding: UTF-8
75
74
  string: '{"translations":[{"detected_source_language":"EN","text":"Muestra"},{"detected_source_language":"EN","text":"Palabra"}]}'
76
- http_version:
77
- recorded_at: Tue, 08 May 2018 16:31:35 GMT
75
+ recorded_at: Mon, 17 May 2021 14:20:14 GMT
78
76
  - request:
79
77
  method: post
80
- uri: https://api.deepl.com/v2/translate?auth_key=VALID_TOKEN
78
+ uri: https://api-free.deepl.com/v2/translate?auth_key=VALID_TOKEN&tag_handling=xml
81
79
  body:
82
80
  encoding: US-ASCII
83
81
  string: text=%3Cp%3ESample+text%3C%2Fp%3E&source_lang=EN&target_lang=ES
@@ -98,7 +96,7 @@ http_interactions:
98
96
  Server:
99
97
  - nginx
100
98
  Date:
101
- - Tue, 08 May 2018 16:31:37 GMT
99
+ - Mon, 17 May 2021 14:20:15 GMT
102
100
  Content-Type:
103
101
  - application/json
104
102
  Content-Length:
@@ -111,11 +109,47 @@ http_interactions:
111
109
  encoding: UTF-8
112
110
  string: '{"translations":[{"detected_source_language":"EN","text":"<p>Texto
113
111
  de muestra</p>"}]}'
114
- http_version:
115
- recorded_at: Tue, 08 May 2018 16:31:36 GMT
112
+ recorded_at: Mon, 17 May 2021 14:20:15 GMT
116
113
  - request:
117
114
  method: post
118
- uri: https://api.deepl.com/v2/translate?auth_key=invalid
115
+ uri: https://api-free.deepl.com/v2/translate?auth_key=VALID_TOKEN&ignore_tags=code,span
116
+ body:
117
+ encoding: US-ASCII
118
+ string: text=Welcome+and+%3Ccode%3EHello+great+World%3C%2Fcode%3E+Good+Morning%21&source_lang=EN&target_lang=ES
119
+ headers:
120
+ Accept-Encoding:
121
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
122
+ Accept:
123
+ - "*/*"
124
+ User-Agent:
125
+ - Ruby
126
+ Content-Type:
127
+ - application/x-www-form-urlencoded
128
+ response:
129
+ status:
130
+ code: 200
131
+ message: OK
132
+ headers:
133
+ Server:
134
+ - nginx
135
+ Date:
136
+ - Mon, 17 May 2021 14:20:16 GMT
137
+ Content-Type:
138
+ - application/json
139
+ Content-Length:
140
+ - '119'
141
+ Connection:
142
+ - keep-alive
143
+ Access-Control-Allow-Origin:
144
+ - "*"
145
+ body:
146
+ encoding: ASCII-8BIT
147
+ string: !binary |-
148
+ eyJ0cmFuc2xhdGlvbnMiOlt7ImRldGVjdGVkX3NvdXJjZV9sYW5ndWFnZSI6IkVOIiwidGV4dCI6IkJpZW52ZW5pZG8geSA8Y29kZT5Ib2xhIGdyYW4gbXVuZG88L2NvZGU+IMKhQnVlbm9zIGTDrWFzISJ9XX0=
149
+ recorded_at: Mon, 17 May 2021 14:20:16 GMT
150
+ - request:
151
+ method: post
152
+ uri: https://api-free.deepl.com/v2/translate?auth_key=invalid
119
153
  body:
120
154
  encoding: US-ASCII
121
155
  string: text=Sample+text&source_lang=EN&target_lang=ES
@@ -136,19 +170,20 @@ http_interactions:
136
170
  Server:
137
171
  - nginx
138
172
  Date:
139
- - Tue, 08 May 2018 16:31:38 GMT
173
+ - Mon, 17 May 2021 14:20:16 GMT
140
174
  Content-Length:
141
175
  - '0'
142
176
  Connection:
143
177
  - keep-alive
178
+ Access-Control-Allow-Origin:
179
+ - "*"
144
180
  body:
145
181
  encoding: UTF-8
146
182
  string: ''
147
- http_version:
148
- recorded_at: Tue, 08 May 2018 16:31:37 GMT
183
+ recorded_at: Mon, 17 May 2021 14:20:16 GMT
149
184
  - request:
150
185
  method: post
151
- uri: https://api.deepl.com/v2/translate?auth_key=VALID_TOKEN
186
+ uri: https://api-free.deepl.com/v2/translate?auth_key=VALID_TOKEN
152
187
  body:
153
188
  encoding: US-ASCII
154
189
  string: source_lang=EN&target_lang=ES
@@ -169,19 +204,20 @@ http_interactions:
169
204
  Server:
170
205
  - nginx
171
206
  Date:
172
- - Tue, 08 May 2018 16:31:38 GMT
207
+ - Mon, 17 May 2021 14:20:16 GMT
173
208
  Content-Length:
174
209
  - '45'
175
210
  Connection:
176
211
  - keep-alive
212
+ Access-Control-Allow-Origin:
213
+ - "*"
177
214
  body:
178
215
  encoding: UTF-8
179
216
  string: '{"message":"Parameter ''text'' not specified."}'
180
- http_version:
181
- recorded_at: Tue, 08 May 2018 16:31:37 GMT
217
+ recorded_at: Mon, 17 May 2021 14:20:16 GMT
182
218
  - request:
183
219
  method: post
184
- uri: https://api.deepl.com/v2/translate?auth_key=VALID_TOKEN
220
+ uri: https://api-free.deepl.com/v2/translate?auth_key=VALID_TOKEN
185
221
  body:
186
222
  encoding: US-ASCII
187
223
  string: text=Sample+text&source_lang=EN
@@ -202,19 +238,20 @@ http_interactions:
202
238
  Server:
203
239
  - nginx
204
240
  Date:
205
- - Tue, 08 May 2018 16:31:39 GMT
241
+ - Mon, 17 May 2021 14:20:17 GMT
206
242
  Content-Length:
207
243
  - '52'
208
244
  Connection:
209
245
  - keep-alive
246
+ Access-Control-Allow-Origin:
247
+ - "*"
210
248
  body:
211
249
  encoding: UTF-8
212
- string: '{"message":"Parameter ''target_lang'' not specified."}'
213
- http_version:
214
- recorded_at: Tue, 08 May 2018 16:31:37 GMT
250
+ string: '{"message":"Value for ''target_lang'' not supported."}'
251
+ recorded_at: Mon, 17 May 2021 14:20:17 GMT
215
252
  - request:
216
253
  method: post
217
- uri: https://api.deepl.com/v2/translate?auth_key=VALID_TOKEN&ignore_tags=code,%20span
254
+ uri: https://api-free.deepl.com/v2/translate?auth_key=VALID_TOKEN&ignore_tags=code,span&tag_handling=xml
218
255
  body:
219
256
  encoding: US-ASCII
220
257
  string: text=Welcome+and+%3Ccode%3EHello+great+World%3C%2Fcode%3E+Good+Morning%21&source_lang=EN&target_lang=ES
@@ -235,11 +272,11 @@ http_interactions:
235
272
  Server:
236
273
  - nginx
237
274
  Date:
238
- - Tue, 24 Jul 2018 16:13:51 GMT
275
+ - Mon, 17 May 2021 14:20:56 GMT
239
276
  Content-Type:
240
277
  - application/json
241
278
  Content-Length:
242
- - '119'
279
+ - '121'
243
280
  Connection:
244
281
  - keep-alive
245
282
  Access-Control-Allow-Origin:
@@ -247,7 +284,6 @@ http_interactions:
247
284
  body:
248
285
  encoding: ASCII-8BIT
249
286
  string: !binary |-
250
- eyJ0cmFuc2xhdGlvbnMiOlt7ImRldGVjdGVkX3NvdXJjZV9sYW5ndWFnZSI6IkVOIiwidGV4dCI6IkJpZW52ZW5pZG8geSA8Y29kZT5IZWxsbyBncmVhdCBXb3JsZDwvY29kZT4gQnVlbm9zIGTDrWFzISJ9XX0=
251
- http_version:
252
- recorded_at: Tue, 24 Jul 2018 16:13:49 GMT
253
- recorded_with: VCR 4.0.0
287
+ eyJ0cmFuc2xhdGlvbnMiOlt7ImRldGVjdGVkX3NvdXJjZV9sYW5ndWFnZSI6IkVOIiwidGV4dCI6IkJpZW52ZW5pZG8geSA8Y29kZT5IZWxsbyBncmVhdCBXb3JsZDwvY29kZT4gwqFCdWVub3MgZMOtYXMhIn1dfQ==
288
+ recorded_at: Mon, 17 May 2021 14:20:56 GMT
289
+ recorded_with: VCR 6.0.0
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: get
5
- uri: https://api.deepl.com/v2/usage?auth_key=VALID_TOKEN
5
+ uri: https://api-free.deepl.com/v2/usage?auth_key=VALID_TOKEN
6
6
  body:
7
7
  encoding: US-ASCII
8
8
  string: ''
@@ -21,14 +21,17 @@ http_interactions:
21
21
  Server:
22
22
  - nginx
23
23
  Date:
24
- - Tue, 08 May 2018 20:42:44 GMT
24
+ - Mon, 17 May 2021 14:18:32 GMT
25
+ Content-Type:
26
+ - application/json
25
27
  Content-Length:
26
- - '52'
28
+ - '48'
27
29
  Connection:
28
30
  - keep-alive
31
+ Access-Control-Allow-Origin:
32
+ - "*"
29
33
  body:
30
34
  encoding: UTF-8
31
- string: '{"character_count":805718,"character_limit":1000000}'
32
- http_version:
33
- recorded_at: Tue, 08 May 2018 20:42:43 GMT
34
- recorded_with: VCR 4.0.0
35
+ string: '{"character_count":353,"character_limit":500000}'
36
+ recorded_at: Mon, 17 May 2021 14:18:32 GMT
37
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe DeepL::Requests::Languages do
6
+ let(:api) { build_deepl_api }
7
+ let(:options) { {} }
8
+ subject { DeepL::Requests::Languages.new(api, options) }
9
+
10
+ describe '#initialize' do
11
+ context 'When building a request' do
12
+ it 'should create a request object' do
13
+ expect(subject).to be_a(described_class)
14
+ end
15
+ end
16
+ end
17
+
18
+ describe '#request' do
19
+ around do |example|
20
+ VCR.use_cassette('languages') { example.call }
21
+ end
22
+
23
+ context 'When requesting source languages' do
24
+ it 'should return an usage object' do
25
+ languages = subject.request
26
+
27
+ expect(languages).to be_an(Array)
28
+ expect(languages.size).to eq(24)
29
+ expect(languages.any? { |l| l.code == 'EN' && l.name == 'English' }).to be_truthy
30
+ expect(languages.any? { |l| l.code == 'ES' && l.name == 'Spanish' }).to be_truthy
31
+ end
32
+ end
33
+
34
+ context 'When requesting target languages' do
35
+ let(:options) { { type: :target } }
36
+
37
+ it 'should return an usage object' do
38
+ languages = subject.request
39
+
40
+ expect(languages).to be_an(Array)
41
+ expect(languages.size).to eq(26)
42
+ expect(languages.any? { |l| l.code == 'EN' && l.name == 'English' }).to be_falsey
43
+ expect(languages.any? { |l| l.code == 'ES' && l.name == 'Spanish' }).to be_truthy
44
+ expect(languages.any? { |l| l.code == 'EN-US' && l.name == 'English (American)' })
45
+ .to be_truthy
46
+ end
47
+ end
48
+
49
+ context 'When using an invalid type' do
50
+ let(:options) { { type: :invalid } }
51
+
52
+ it 'should return an usage object' do
53
+ message = "Parameter 'type' is invalid. 'source' and 'target' are valid values."
54
+ expect { subject.request }.to raise_error(DeepL::Exceptions::BadRequest, message)
55
+ end
56
+ end
57
+ end
58
+ end
@@ -151,6 +151,7 @@ describe DeepL::Requests::Translate do
151
151
 
152
152
  context 'When performing a valid request with tag handling' do
153
153
  let(:text) { '<p>Sample text</p>' }
154
+ let(:options) { { tag_handling: 'xml' } }
154
155
 
155
156
  it 'should return a text object' do
156
157
  text = subject.request
@@ -163,13 +164,13 @@ describe DeepL::Requests::Translate do
163
164
 
164
165
  context 'When performing a valid request and passing a variable' do
165
166
  let(:text) { 'Welcome and <code>Hello great World</code> Good Morning!' }
166
- let(:options) { { ignore_tags: 'code, span' } }
167
+ let(:options) { { tag_handling: 'xml', ignore_tags: 'code,span' } }
167
168
 
168
169
  it 'should return a text object' do
169
170
  text = subject.request
170
171
 
171
172
  expect(text).to be_a(DeepL::Resources::Text)
172
- expect(text.text).to eq('Bienvenido y <code>Hello great World</code> Buenos días!')
173
+ expect(text.text).to eq('Bienvenido y <code>Hello great World</code> ¡Buenos días!')
173
174
  expect(text.detected_source_language).to eq('EN')
174
175
  end
175
176
  end
@@ -200,7 +201,7 @@ describe DeepL::Requests::Translate do
200
201
  let(:target_lang) { nil }
201
202
 
202
203
  it 'should raise a bad request error' do
203
- message = "Parameter 'target_lang' not specified."
204
+ message = "Value for 'target_lang' not supported."
204
205
  expect { subject.request }.to raise_error(DeepL::Exceptions::BadRequest, message)
205
206
  end
206
207
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe DeepL::Resources::Language do
6
+ subject { described_class.new('EN', 'English', nil, nil) }
7
+
8
+ describe '#initialize' do
9
+ context 'When building a basic object' do
10
+ it 'should create a resource' do
11
+ expect(subject).to be_a(described_class)
12
+ end
13
+
14
+ it 'should assign the attributes' do
15
+ expect(subject.code).to eq('EN')
16
+ expect(subject.name).to eq('English')
17
+ end
18
+ end
19
+ end
20
+ end
@@ -3,12 +3,12 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe DeepL::Resources::Text do
6
- subject { DeepL::Resources::Text.new('Target', 'es', nil, nil) }
6
+ subject { described_class.new('Target', 'es', nil, nil) }
7
7
 
8
8
  describe '#initialize' do
9
9
  context 'When building a basic object' do
10
10
  it 'should create a resource' do
11
- expect(subject).to be_a(DeepL::Resources::Text)
11
+ expect(subject).to be_a(described_class)
12
12
  end
13
13
 
14
14
  it 'should assign the attributes' do
@@ -3,12 +3,12 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe DeepL::Resources::Usage do
6
- subject { DeepL::Resources::Usage.new(3, 5, nil, nil) }
6
+ subject { described_class.new(3, 5, nil, nil) }
7
7
 
8
8
  describe '#initialize' do
9
9
  context 'When building a basic object' do
10
10
  it 'should create a resource' do
11
- expect(subject).to be_a(DeepL::Resources::Usage)
11
+ expect(subject).to be_a(described_class)
12
12
  end
13
13
 
14
14
  it 'should assign the attributes' do
@@ -22,7 +22,7 @@ describe DeepL::Resources::Usage do
22
22
  end
23
23
 
24
24
  context 'When building a quota exceeded object' do
25
- subject { DeepL::Resources::Usage.new(5, 5, nil, nil) }
25
+ subject { described_class.new(5, 5, nil, nil) }
26
26
 
27
27
  it 'should exceed the quota' do
28
28
  expect(subject.quota_exceeded?).to be_truthy
data/spec/spec_helper.rb CHANGED
@@ -27,5 +27,5 @@ end
27
27
 
28
28
  # General helpers
29
29
  def build_deepl_api
30
- DeepL::API.new(DeepL::Configuration.new)
30
+ DeepL::API.new(DeepL::Configuration.new(host: 'https://api-free.deepl.com'))
31
31
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deepl-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.4
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Herzog
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-28 00:00:00.000000000 Z
11
+ date: 2021-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: juwelier
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: byebug
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  description: 'A simple ruby wrapper for the DeepL translation API (v1). For more information,
28
42
  check this: https://www.deepl.com/docs/api-reference.html'
29
43
  email: info@danielherzog.es
@@ -51,20 +65,26 @@ files:
51
65
  - lib/deepl/exceptions/quota_exceeded.rb
52
66
  - lib/deepl/exceptions/request_error.rb
53
67
  - lib/deepl/requests/base.rb
68
+ - lib/deepl/requests/languages.rb
54
69
  - lib/deepl/requests/translate.rb
55
70
  - lib/deepl/requests/usage.rb
56
71
  - lib/deepl/resources/base.rb
72
+ - lib/deepl/resources/language.rb
57
73
  - lib/deepl/resources/text.rb
58
74
  - lib/deepl/resources/usage.rb
59
75
  - spec/api/api_spec.rb
60
76
  - spec/api/configuration_spec.rb
61
77
  - spec/api/deepl_spec.rb
78
+ - spec/fixtures/vcr_cassettes/deepl_languages.yml
62
79
  - spec/fixtures/vcr_cassettes/deepl_translate.yml
63
80
  - spec/fixtures/vcr_cassettes/deepl_usage.yml
81
+ - spec/fixtures/vcr_cassettes/languages.yml
64
82
  - spec/fixtures/vcr_cassettes/translate_texts.yml
65
83
  - spec/fixtures/vcr_cassettes/usage.yml
84
+ - spec/requests/languages_spec.rb
66
85
  - spec/requests/translate_spec.rb
67
86
  - spec/requests/usage_spec.rb
87
+ - spec/resources/language_spec.rb
68
88
  - spec/resources/text_spec.rb
69
89
  - spec/resources/usage_spec.rb
70
90
  - spec/spec_helper.rb