deepl-rb 1.0.1 → 2.0.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
  SHA1:
3
- metadata.gz: 37163389ddd5655c4c9f1d1e60e0d414e3c35420
4
- data.tar.gz: 881b3877774bc62cf3f42900c72d336c7b32583d
3
+ metadata.gz: 13a3bbfea258695f87a655395197001cef339a23
4
+ data.tar.gz: 683f5b706dee4a5b8f23d1c02b8a081ec452e46e
5
5
  SHA512:
6
- metadata.gz: d63335bb2ec23d724e77dba606844c711afbc798afe8c7a64f12a420e14561c33c555f36716f7d3537f8f234bed064d8d72aa659837a99b442952186813718cb
7
- data.tar.gz: 944992d82a26e096f4389cbc50dd076c80b7d6c58113c84401539e20b8620dcac21ac362730fb3a3b862d97658b70e565911f69fc3c13e2b1f6b26580cb697b7
6
+ metadata.gz: cc8cb5c628c1c146f3f29c84425205175a714301a8978db7f0c1d3559503f8d3206855502055b02021bdbe90cdcddeab9b28088c4599178e5b4271c1a539ddfe
7
+ data.tar.gz: e9daaaed2529971d5cd5813ff593a99a4950f559d280dee881b7fd7fc356b7fc0cfbc88a25978414e46cda54872f0180d23b848df49c7106f3867d45af1b6e19
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # DeepL for ruby
4
4
 
5
- A simple ruby wrapper for the [DeepL translation API (v1)](https://www.deepl.com/docs/api-reference.html).
5
+ A simple ruby wrapper for the [DeepL translation API (v1)](https://www.deepl.com/api.html).
6
6
 
7
7
  ## Installation
8
8
 
@@ -90,15 +90,36 @@ Here's a list of available language codes:
90
90
  | `NL` | Dutch
91
91
  | `PL` | Polish
92
92
 
93
- You can also use custom query parameters, like `tag_handling`:
93
+ You can also use custom query parameters, like `tag_handling` or `split_sentences`:
94
94
 
95
95
  ```rb
96
- translation = DeepL.translate '<p>A sample</p>', 'EN', 'ES', tag_handling: true
96
+ translation = DeepL.translate '<p>A sample</p>', 'EN', 'ES',
97
+ tag_handling: 'xml', split_sentences: false
97
98
 
98
99
  puts translation.text
99
100
  # => "<p>Una muestra</p>"
100
101
  ```
101
102
 
103
+ The following parameters will be automatically converted:
104
+
105
+ | Parameter | Conversion
106
+ | --------------------- | ---------------
107
+ | `preserve_formatting` | Convertes `false` to `'0'` and `true` to `'1'`
108
+ | `split_sentences` | Convertes `false` to `'0'` and `true` to `'1'`
109
+
110
+ ### Usage
111
+
112
+ To check current API usage, use:
113
+
114
+ ```rb
115
+ usage = DeepL.usage
116
+
117
+ puts usage.character_count
118
+ # => 180118
119
+ puts usage.character_limit
120
+ # => 1250000
121
+ ```
122
+
102
123
  ### Handle exceptions
103
124
 
104
125
  You can capture and process exceptions that may be raised during API calls. These are all the possible exceptions:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.1
1
+ 2.0.0
@@ -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 1.0.1 ruby lib
5
+ # stub: deepl-rb 2.0.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "deepl-rb".freeze
9
- s.version = "1.0.1"
9
+ s.version = "2.0.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 = "2018-03-31"
14
+ s.date = "2018-05-08"
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,21 +37,27 @@ Gem::Specification.new do |s|
37
37
  "lib/deepl/exceptions/limit_exceeded.rb",
38
38
  "lib/deepl/exceptions/request_error.rb",
39
39
  "lib/deepl/requests/base.rb",
40
- "lib/deepl/requests/translate_text.rb",
40
+ "lib/deepl/requests/translate.rb",
41
+ "lib/deepl/requests/usage.rb",
41
42
  "lib/deepl/resources/base.rb",
42
43
  "lib/deepl/resources/text.rb",
44
+ "lib/deepl/resources/usage.rb",
43
45
  "spec/api/api_spec.rb",
44
46
  "spec/api/configuration_spec.rb",
45
47
  "spec/api/deepl_spec.rb",
46
48
  "spec/fixtures/vcr_cassettes/deepl_translate.yml",
49
+ "spec/fixtures/vcr_cassettes/deepl_usage.yml",
47
50
  "spec/fixtures/vcr_cassettes/translate_texts.yml",
48
- "spec/requests/translate_text_spec.rb",
51
+ "spec/fixtures/vcr_cassettes/usage.yml",
52
+ "spec/requests/translate_spec.rb",
53
+ "spec/requests/usage_spec.rb",
49
54
  "spec/resources/text_spec.rb",
55
+ "spec/resources/usage_spec.rb",
50
56
  "spec/spec_helper.rb"
51
57
  ]
52
58
  s.homepage = "http://github.com/wikiti/deepl-rb".freeze
53
59
  s.licenses = ["MIT".freeze]
54
- s.rubygems_version = "2.6.13".freeze
60
+ s.rubygems_version = "2.6.14".freeze
55
61
  s.summary = "A simple ruby wrapper for the DeepL API".freeze
56
62
 
57
63
  if s.respond_to? :specification_version then
@@ -11,11 +11,13 @@ require 'deepl/exceptions/limit_exceeded'
11
11
 
12
12
  # -- Requests
13
13
  require 'deepl/requests/base'
14
- require 'deepl/requests/translate_text'
14
+ require 'deepl/requests/translate'
15
+ require 'deepl/requests/usage'
15
16
 
16
17
  # -- Responses and resources
17
18
  require 'deepl/resources/base'
18
19
  require 'deepl/resources/text'
20
+ require 'deepl/resources/usage'
19
21
 
20
22
  # -- Other wrappers
21
23
  require 'deepl/api'
@@ -33,7 +35,12 @@ module DeepL
33
35
 
34
36
  def translate(text, source_lang, target_lang, options = {})
35
37
  configure if @configuration.nil?
36
- Requests::TranslateText.new(api, text, source_lang, target_lang, options).request
38
+ Requests::Translate.new(api, text, source_lang, target_lang, options).request
39
+ end
40
+
41
+ def usage(options = {})
42
+ configure if @configuration.nil?
43
+ Requests::Usage.new(api, options).request
37
44
  end
38
45
 
39
46
  # -- Configuration
@@ -16,10 +16,22 @@ module DeepL
16
16
 
17
17
  private
18
18
 
19
+ def option?(name)
20
+ options.key?(name.to_s) || options.key?(name.to_sym)
21
+ end
22
+
19
23
  def option(name)
20
24
  options[name.to_s] || options[name.to_sym]
21
25
  end
22
26
 
27
+ def set_option(name, value)
28
+ if options.key?(name.to_sym)
29
+ options[name.to_sym] = value
30
+ else
31
+ options[name.to_s] = value
32
+ end
33
+ end
34
+
23
35
  def post(payload)
24
36
  request = Net::HTTP::Post.new(uri.request_uri)
25
37
  request.set_form_data(payload.reject { |_, v| v.nil? })
@@ -29,6 +41,14 @@ module DeepL
29
41
  [request, response]
30
42
  end
31
43
 
44
+ def get
45
+ request = Net::HTTP::Get.new(uri.request_uri)
46
+ response = http.request(request)
47
+
48
+ validate_response!(request, response)
49
+ [request, response]
50
+ end
51
+
32
52
  def http
33
53
  @http ||= begin
34
54
  http = Net::HTTP.new(uri.host, uri.port)
@@ -1,6 +1,11 @@
1
1
  module DeepL
2
2
  module Requests
3
- class TranslateText < Base
3
+ class Translate < Base
4
+ OPTIONS_CONVERSIONS = {
5
+ split_sentences: { true => '1', false => '0' },
6
+ preserve_formatting: { true => '1', false => '0' }
7
+ }.freeze
8
+
4
9
  attr_reader :text, :source_lang, :target_lang
5
10
 
6
11
  def initialize(api, text, source_lang, target_lang, options = {})
@@ -8,6 +13,8 @@ module DeepL
8
13
  @text = text
9
14
  @source_lang = source_lang
10
15
  @target_lang = target_lang
16
+
17
+ tweak_parameters!
11
18
  end
12
19
 
13
20
  def request
@@ -17,6 +24,13 @@ module DeepL
17
24
 
18
25
  private
19
26
 
27
+ def tweak_parameters!
28
+ OPTIONS_CONVERSIONS.each do |param, converter|
29
+ next unless option?(param) && converter[option(param)]
30
+ set_option(param, converter[option(param)])
31
+ end
32
+ end
33
+
20
34
  def build_texts(request, response)
21
35
  data = JSON.parse(response.body)
22
36
 
@@ -0,0 +1,24 @@
1
+ module DeepL
2
+ module Requests
3
+ class Usage < Base
4
+ def initialize(api, options = {})
5
+ super(api, options)
6
+ end
7
+
8
+ def request
9
+ build_usage(*get)
10
+ end
11
+
12
+ private
13
+
14
+ def build_usage(request, response)
15
+ data = JSON.parse(response.body)
16
+ Resources::Usage.new(data['character_count'], data['character_limit'], request, response)
17
+ end
18
+
19
+ def path
20
+ 'usage'
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ module DeepL
2
+ module Resources
3
+ class Usage < Base
4
+ attr_reader :character_count, :character_limit
5
+
6
+ def initialize(character_count, character_limit, *args)
7
+ super(*args)
8
+
9
+ @character_count = character_count
10
+ @character_limit = character_limit
11
+ end
12
+
13
+ def to_s
14
+ "#{character_count} / #{character_limit}"
15
+ end
16
+
17
+ def quota_exceeded?
18
+ character_count >= character_limit
19
+ end
20
+ end
21
+ end
22
+ end
@@ -49,7 +49,7 @@ describe DeepL do
49
49
 
50
50
  context 'When translating a text' do
51
51
  it 'should create and call a request object' do
52
- expect(DeepL::Requests::TranslateText).to receive(:new)
52
+ expect(DeepL::Requests::Translate).to receive(:new)
53
53
  .with(subject.api, input, source_lang, target_lang, options).and_call_original
54
54
 
55
55
  text = subject.translate(input, source_lang, target_lang, options)
@@ -57,4 +57,22 @@ describe DeepL do
57
57
  end
58
58
  end
59
59
  end
60
+
61
+ describe '#usage' do
62
+ let(:options) { {} }
63
+
64
+ around do |example|
65
+ VCR.use_cassette('deepl_usage') { example.call }
66
+ end
67
+
68
+ context 'When checking usage' do
69
+ it 'should create and call a request object' do
70
+ expect(DeepL::Requests::Usage).to receive(:new)
71
+ .with(subject.api, options).and_call_original
72
+
73
+ usage = subject.usage(options)
74
+ expect(usage).to be_a(DeepL::Resources::Usage)
75
+ end
76
+ end
77
+ end
60
78
  end
@@ -1,112 +1,5 @@
1
1
  ---
2
2
  http_interactions:
3
- - request:
4
- method: post
5
- uri: https://api.deepl.com/v1/translate?auth_key=VALID_TOKEN
6
- body:
7
- encoding: US-ASCII
8
- string: source_lang=EN&target_lang=ES
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
- Content-Type:
17
- - application/x-www-form-urlencoded
18
- response:
19
- status:
20
- code: 400
21
- message: Bad Request
22
- headers:
23
- Server:
24
- - nginx
25
- Date:
26
- - Sun, 10 Dec 2017 21:20:25 GMT
27
- Content-Length:
28
- - '45'
29
- Connection:
30
- - keep-alive
31
- body:
32
- encoding: UTF-8
33
- string: '{"message":"Parameter ''text'' not specified."}'
34
- http_version:
35
- recorded_at: Sun, 10 Dec 2017 21:20:25 GMT
36
- - request:
37
- method: post
38
- uri: https://api.deepl.com/v1/translate?auth_key=VALID_TOKEN
39
- body:
40
- encoding: US-ASCII
41
- string: text=Abc&source_lang=EN&target_lang=ES
42
- headers:
43
- Accept-Encoding:
44
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
45
- Accept:
46
- - "*/*"
47
- User-Agent:
48
- - Ruby
49
- Content-Type:
50
- - application/x-www-form-urlencoded
51
- response:
52
- status:
53
- code: 200
54
- message: OK
55
- headers:
56
- Server:
57
- - nginx
58
- Date:
59
- - Sun, 10 Dec 2017 21:21:23 GMT
60
- Content-Type:
61
- - application/json
62
- Content-Length:
63
- - '65'
64
- Connection:
65
- - keep-alive
66
- Access-Control-Allow-Origin:
67
- - "*"
68
- body:
69
- encoding: UTF-8
70
- string: '{"translations":[{"detected_source_language":"EN","text":"ABC"}]}'
71
- http_version:
72
- recorded_at: Sun, 10 Dec 2017 21:21:23 GMT
73
- - request:
74
- method: post
75
- uri: https://api.deepl.com/v1/translate?auth_key=VALID_TOKEN
76
- body:
77
- encoding: US-ASCII
78
- string: text=Sample&source_lang=EN&target_lang=ES
79
- headers:
80
- Accept-Encoding:
81
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
82
- Accept:
83
- - "*/*"
84
- User-Agent:
85
- - Ruby
86
- Content-Type:
87
- - application/x-www-form-urlencoded
88
- response:
89
- status:
90
- code: 200
91
- message: OK
92
- headers:
93
- Server:
94
- - nginx
95
- Date:
96
- - Sun, 10 Dec 2017 21:22:11 GMT
97
- Content-Type:
98
- - application/json
99
- Content-Length:
100
- - '69'
101
- Connection:
102
- - keep-alive
103
- Access-Control-Allow-Origin:
104
- - "*"
105
- body:
106
- encoding: UTF-8
107
- string: '{"translations":[{"detected_source_language":"EN","text":"Muestra"}]}'
108
- http_version:
109
- recorded_at: Sun, 10 Dec 2017 21:22:11 GMT
110
3
  - request:
111
4
  method: post
112
5
  uri: https://api.deepl.com/v1/translate?auth_key=VALID_TOKEN&param=fake
@@ -130,7 +23,7 @@ http_interactions:
130
23
  Server:
131
24
  - nginx
132
25
  Date:
133
- - Thu, 04 Jan 2018 18:08:31 GMT
26
+ - Tue, 08 May 2018 16:31:34 GMT
134
27
  Content-Type:
135
28
  - application/json
136
29
  Content-Length:
@@ -143,5 +36,5 @@ http_interactions:
143
36
  encoding: UTF-8
144
37
  string: '{"translations":[{"detected_source_language":"EN","text":"Muestra"}]}'
145
38
  http_version:
146
- recorded_at: Thu, 04 Jan 2018 18:08:31 GMT
39
+ recorded_at: Tue, 08 May 2018 16:31:33 GMT
147
40
  recorded_with: VCR 4.0.0
@@ -0,0 +1,34 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.deepl.com/v1/usage?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
+ - Tue, 08 May 2018 16:31:35 GMT
25
+ Content-Length:
26
+ - '52'
27
+ Connection:
28
+ - keep-alive
29
+ body:
30
+ 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
@@ -23,21 +23,20 @@ http_interactions:
23
23
  Server:
24
24
  - nginx
25
25
  Date:
26
- - Sun, 10 Dec 2017 20:34:26 GMT
26
+ - Tue, 08 May 2018 16:31:36 GMT
27
27
  Content-Type:
28
28
  - application/json
29
29
  Content-Length:
30
- - '78'
30
+ - '74'
31
31
  Connection:
32
32
  - keep-alive
33
33
  Access-Control-Allow-Origin:
34
34
  - "*"
35
35
  body:
36
36
  encoding: UTF-8
37
- string: '{"translations":[{"detected_source_language":"EN","text":"Texto de
38
- muestra"}]}'
39
- http_version:
40
- recorded_at: Sun, 10 Dec 2017 20:34:26 GMT
37
+ string: '{"translations":[{"detected_source_language":"EN","text":"Texto de muestra"}]}'
38
+ http_version:
39
+ recorded_at: Tue, 08 May 2018 16:31:34 GMT
41
40
  - request:
42
41
  method: post
43
42
  uri: https://api.deepl.com/v1/translate?auth_key=VALID_TOKEN
@@ -61,7 +60,7 @@ http_interactions:
61
60
  Server:
62
61
  - nginx
63
62
  Date:
64
- - Sun, 10 Dec 2017 20:34:26 GMT
63
+ - Tue, 08 May 2018 16:31:37 GMT
65
64
  Content-Type:
66
65
  - application/json
67
66
  Content-Length:
@@ -73,14 +72,14 @@ 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: Sun, 10 Dec 2017 20:34:26 GMT
75
+ http_version:
76
+ recorded_at: Tue, 08 May 2018 16:31:35 GMT
78
77
  - request:
79
78
  method: post
80
- uri: https://api.deepl.com/v1/translate?auth_key=invalid
79
+ uri: https://api.deepl.com/v1/translate?auth_key=VALID_TOKEN
81
80
  body:
82
81
  encoding: US-ASCII
83
- string: text=Sample+text&source_lang=EN&target_lang=ES
82
+ string: text=%3Cp%3ESample+text%3C%2Fp%3E&source_lang=EN&target_lang=ES
84
83
  headers:
85
84
  Accept-Encoding:
86
85
  - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
@@ -92,28 +91,33 @@ http_interactions:
92
91
  - application/x-www-form-urlencoded
93
92
  response:
94
93
  status:
95
- code: 403
96
- message: Forbidden
94
+ code: 200
95
+ message: OK
97
96
  headers:
98
97
  Server:
99
98
  - nginx
100
99
  Date:
101
- - Sun, 10 Dec 2017 20:34:27 GMT
100
+ - Tue, 08 May 2018 16:31:37 GMT
101
+ Content-Type:
102
+ - application/json
102
103
  Content-Length:
103
- - '0'
104
+ - '85'
104
105
  Connection:
105
106
  - keep-alive
107
+ Access-Control-Allow-Origin:
108
+ - "*"
106
109
  body:
107
110
  encoding: UTF-8
108
- string: ''
109
- http_version:
110
- recorded_at: Sun, 10 Dec 2017 20:34:27 GMT
111
+ string: '{"translations":[{"detected_source_language":"EN","text":"<p>Texto
112
+ de muestra</p>"}]}'
113
+ http_version:
114
+ recorded_at: Tue, 08 May 2018 16:31:36 GMT
111
115
  - request:
112
116
  method: post
113
- uri: https://api.deepl.com/v1/translate?auth_key=VALID_TOKEN
117
+ uri: https://api.deepl.com/v1/translate?auth_key=invalid
114
118
  body:
115
119
  encoding: US-ASCII
116
- string: source_lang=EN&target_lang=ES
120
+ string: text=Sample+text&source_lang=EN&target_lang=ES
117
121
  headers:
118
122
  Accept-Encoding:
119
123
  - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
@@ -125,28 +129,28 @@ http_interactions:
125
129
  - application/x-www-form-urlencoded
126
130
  response:
127
131
  status:
128
- code: 400
129
- message: Bad Request
132
+ code: 403
133
+ message: Forbidden
130
134
  headers:
131
135
  Server:
132
136
  - nginx
133
137
  Date:
134
- - Sun, 10 Dec 2017 20:34:27 GMT
138
+ - Tue, 08 May 2018 16:31:38 GMT
135
139
  Content-Length:
136
- - '45'
140
+ - '0'
137
141
  Connection:
138
142
  - keep-alive
139
143
  body:
140
144
  encoding: UTF-8
141
- string: '{"message":"Parameter ''text'' not specified."}'
142
- http_version:
143
- recorded_at: Sun, 10 Dec 2017 20:34:27 GMT
145
+ string: ''
146
+ http_version:
147
+ recorded_at: Tue, 08 May 2018 16:31:37 GMT
144
148
  - request:
145
149
  method: post
146
150
  uri: https://api.deepl.com/v1/translate?auth_key=VALID_TOKEN
147
151
  body:
148
152
  encoding: US-ASCII
149
- string: text=Sample+text&source_lang=EN
153
+ string: source_lang=EN&target_lang=ES
150
154
  headers:
151
155
  Accept-Encoding:
152
156
  - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
@@ -164,22 +168,22 @@ http_interactions:
164
168
  Server:
165
169
  - nginx
166
170
  Date:
167
- - Sun, 10 Dec 2017 20:34:28 GMT
171
+ - Tue, 08 May 2018 16:31:38 GMT
168
172
  Content-Length:
169
- - '52'
173
+ - '45'
170
174
  Connection:
171
175
  - keep-alive
172
176
  body:
173
177
  encoding: UTF-8
174
- string: '{"message":"Parameter ''target_lang'' not specified."}'
175
- http_version:
176
- recorded_at: Sun, 10 Dec 2017 20:34:28 GMT
178
+ string: '{"message":"Parameter ''text'' not specified."}'
179
+ http_version:
180
+ recorded_at: Tue, 08 May 2018 16:31:37 GMT
177
181
  - request:
178
182
  method: post
179
183
  uri: https://api.deepl.com/v1/translate?auth_key=VALID_TOKEN
180
184
  body:
181
185
  encoding: US-ASCII
182
- string: text=%3Cp%3ESample+text%3C%2Fp%3E&source_lang=EN&target_lang=ES
186
+ string: text=Sample+text&source_lang=EN
183
187
  headers:
184
188
  Accept-Encoding:
185
189
  - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
@@ -191,25 +195,20 @@ http_interactions:
191
195
  - application/x-www-form-urlencoded
192
196
  response:
193
197
  status:
194
- code: 200
195
- message: OK
198
+ code: 400
199
+ message: Bad Request
196
200
  headers:
197
201
  Server:
198
202
  - nginx
199
203
  Date:
200
- - Thu, 04 Jan 2018 18:09:50 GMT
201
- Content-Type:
202
- - application/json
204
+ - Tue, 08 May 2018 16:31:39 GMT
203
205
  Content-Length:
204
- - '85'
206
+ - '52'
205
207
  Connection:
206
208
  - keep-alive
207
- Access-Control-Allow-Origin:
208
- - "*"
209
209
  body:
210
210
  encoding: UTF-8
211
- string: '{"translations":[{"detected_source_language":"EN","text":"<p>Texto
212
- de muestra</p>"}]}'
213
- http_version:
214
- recorded_at: Thu, 04 Jan 2018 18:09:49 GMT
211
+ string: '{"message":"Parameter ''target_lang'' not specified."}'
212
+ http_version:
213
+ recorded_at: Tue, 08 May 2018 16:31:37 GMT
215
214
  recorded_with: VCR 4.0.0
@@ -0,0 +1,34 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.deepl.com/v1/usage?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
+ - Tue, 08 May 2018 20:42:44 GMT
25
+ Content-Length:
26
+ - '52'
27
+ Connection:
28
+ - keep-alive
29
+ body:
30
+ 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
@@ -1,16 +1,60 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe DeepL::Requests::TranslateText do
3
+ describe DeepL::Requests::Translate do
4
4
  let(:api) { build_deepl_api }
5
5
  let(:text) { 'Sample text' }
6
6
  let(:source_lang) { 'EN' }
7
7
  let(:target_lang) { 'ES' }
8
- subject { DeepL::Requests::TranslateText.new(api, text, source_lang, target_lang) }
8
+ subject { DeepL::Requests::Translate.new(api, text, source_lang, target_lang) }
9
9
 
10
10
  describe '#initialize' do
11
11
  context 'When building a request' do
12
12
  it 'should create a request object' do
13
- expect(subject).to be_a(DeepL::Requests::TranslateText)
13
+ expect(subject).to be_a(DeepL::Requests::Translate)
14
+ end
15
+ end
16
+
17
+ context 'when using `split_sentences` options' do
18
+ it 'should convert `true` to `1`' do
19
+ request = DeepL::Requests::Translate.new(api, nil, nil, nil, split_sentences: true)
20
+ expect(request.options[:split_sentences]).to eq('1')
21
+ end
22
+
23
+ it 'should convert `false` to `0`' do
24
+ request = DeepL::Requests::Translate.new(api, nil, nil, nil, split_sentences: false)
25
+ expect(request.options[:split_sentences]).to eq('0')
26
+ end
27
+
28
+ it 'should leave `0` as is' do
29
+ request = DeepL::Requests::Translate.new(api, nil, nil, nil, split_sentences: '0')
30
+ expect(request.options[:split_sentences]).to eq('0')
31
+ end
32
+
33
+ it 'should leave `1` as is' do
34
+ request = DeepL::Requests::Translate.new(api, nil, nil, nil, split_sentences: '1')
35
+ expect(request.options[:split_sentences]).to eq('1')
36
+ end
37
+ end
38
+
39
+ context 'when using `preserve_formatting` options' do
40
+ it 'should convert `true` to `1`' do
41
+ request = DeepL::Requests::Translate.new(api, nil, nil, nil, preserve_formatting: true)
42
+ expect(request.options[:preserve_formatting]).to eq('1')
43
+ end
44
+
45
+ it 'should convert `false` to `0`' do
46
+ request = DeepL::Requests::Translate.new(api, nil, nil, nil, preserve_formatting: false)
47
+ expect(request.options[:preserve_formatting]).to eq('0')
48
+ end
49
+
50
+ it 'should leave `0` as is' do
51
+ request = DeepL::Requests::Translate.new(api, nil, nil, nil, preserve_formatting: '0')
52
+ expect(request.options[:preserve_formatting]).to eq('0')
53
+ end
54
+
55
+ it 'should leave `1` as is' do
56
+ request = DeepL::Requests::Translate.new(api, nil, nil, nil, preserve_formatting: '1')
57
+ expect(request.options[:preserve_formatting]).to eq('1')
14
58
  end
15
59
  end
16
60
  end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe DeepL::Requests::Usage do
4
+ let(:api) { build_deepl_api }
5
+ let(:options) { {} }
6
+ subject { DeepL::Requests::Usage.new(api, options) }
7
+
8
+ describe '#initialize' do
9
+ context 'When building a request' do
10
+ it 'should create a request object' do
11
+ expect(subject).to be_a(DeepL::Requests::Usage)
12
+ end
13
+ end
14
+ end
15
+
16
+ describe '#request' do
17
+ around do |example|
18
+ VCR.use_cassette('usage') { example.call }
19
+ end
20
+
21
+ context 'When performing a valid request' do
22
+ it 'should return an usage object' do
23
+ usage = subject.request
24
+
25
+ expect(usage).to be_a(DeepL::Resources::Usage)
26
+ expect(usage.character_count).to be_a(Numeric)
27
+ expect(usage.character_limit).to be_a(Numeric)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe DeepL::Resources::Usage do
4
+ subject { DeepL::Resources::Usage.new(3, 5, nil, nil) }
5
+
6
+ describe '#initialize' do
7
+ context 'When building a basic object' do
8
+ it 'should create a resource' do
9
+ expect(subject).to be_a(DeepL::Resources::Usage)
10
+ end
11
+
12
+ it 'should assign the attributes' do
13
+ expect(subject.character_count).to eq(3)
14
+ expect(subject.character_limit).to eq(5)
15
+ end
16
+
17
+ it 'should not exceed the quota' do
18
+ expect(subject.quota_exceeded?).to be_falsey
19
+ end
20
+ end
21
+
22
+ context 'When building a quota exceeded object' do
23
+ subject { DeepL::Resources::Usage.new(5, 5, nil, nil) }
24
+
25
+ it 'should exceed the quota' do
26
+ expect(subject.quota_exceeded?).to be_truthy
27
+ end
28
+ end
29
+ end
30
+ 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: 1.0.1
4
+ version: 2.0.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: 2018-03-31 00:00:00.000000000 Z
11
+ date: 2018-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: juwelier
@@ -51,16 +51,22 @@ files:
51
51
  - lib/deepl/exceptions/limit_exceeded.rb
52
52
  - lib/deepl/exceptions/request_error.rb
53
53
  - lib/deepl/requests/base.rb
54
- - lib/deepl/requests/translate_text.rb
54
+ - lib/deepl/requests/translate.rb
55
+ - lib/deepl/requests/usage.rb
55
56
  - lib/deepl/resources/base.rb
56
57
  - lib/deepl/resources/text.rb
58
+ - lib/deepl/resources/usage.rb
57
59
  - spec/api/api_spec.rb
58
60
  - spec/api/configuration_spec.rb
59
61
  - spec/api/deepl_spec.rb
60
62
  - spec/fixtures/vcr_cassettes/deepl_translate.yml
63
+ - spec/fixtures/vcr_cassettes/deepl_usage.yml
61
64
  - spec/fixtures/vcr_cassettes/translate_texts.yml
62
- - spec/requests/translate_text_spec.rb
65
+ - spec/fixtures/vcr_cassettes/usage.yml
66
+ - spec/requests/translate_spec.rb
67
+ - spec/requests/usage_spec.rb
63
68
  - spec/resources/text_spec.rb
69
+ - spec/resources/usage_spec.rb
64
70
  - spec/spec_helper.rb
65
71
  homepage: http://github.com/wikiti/deepl-rb
66
72
  licenses:
@@ -82,7 +88,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
88
  version: '0'
83
89
  requirements: []
84
90
  rubyforge_project:
85
- rubygems_version: 2.6.13
91
+ rubygems_version: 2.6.14
86
92
  signing_key:
87
93
  specification_version: 4
88
94
  summary: A simple ruby wrapper for the DeepL API