deepl-rb 0.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 +7 -0
- data/.circleci/config.yml +39 -0
- data/.rubocop.yml +17 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +113 -0
- data/LICENSE.md +25 -0
- data/README.md +102 -0
- data/Rakefile +43 -0
- data/VERSION +1 -0
- data/deepl-rb.gemspec +69 -0
- data/lib/deepl.rb +56 -0
- data/lib/deepl/api.rb +10 -0
- data/lib/deepl/configuration.rb +25 -0
- data/lib/deepl/exceptions/authorization_failed.rb +9 -0
- data/lib/deepl/exceptions/bad_request.rb +9 -0
- data/lib/deepl/exceptions/error.rb +6 -0
- data/lib/deepl/exceptions/limit_exceeded.rb +9 -0
- data/lib/deepl/exceptions/request_error.rb +16 -0
- data/lib/deepl/requests/base.rb +72 -0
- data/lib/deepl/requests/translate_text.rb +36 -0
- data/lib/deepl/resources/base.rb +12 -0
- data/lib/deepl/resources/text.rb +18 -0
- data/spec/api/api_spec.rb +14 -0
- data/spec/api/configuration_spec.rb +44 -0
- data/spec/api/deepl_spec.rb +59 -0
- data/spec/fixtures/vcr_cassettes/deepl_translate.yml +110 -0
- data/spec/fixtures/vcr_cassettes/translate_texts.yml +177 -0
- data/spec/requests/translate_text_spec.rb +80 -0
- data/spec/resources/text_spec.rb +18 -0
- data/spec/spec_helper.rb +22 -0
- metadata +89 -0
@@ -0,0 +1,177 @@
|
|
1
|
+
---
|
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: text=Sample+text&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: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Server:
|
24
|
+
- nginx
|
25
|
+
Date:
|
26
|
+
- Sun, 10 Dec 2017 20:34:26 GMT
|
27
|
+
Content-Type:
|
28
|
+
- application/json
|
29
|
+
Content-Length:
|
30
|
+
- '78'
|
31
|
+
Connection:
|
32
|
+
- keep-alive
|
33
|
+
Access-Control-Allow-Origin:
|
34
|
+
- "*"
|
35
|
+
body:
|
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
|
41
|
+
- request:
|
42
|
+
method: post
|
43
|
+
uri: https://api.deepl.com/v1/translate?auth_key=VALID_TOKEN
|
44
|
+
body:
|
45
|
+
encoding: US-ASCII
|
46
|
+
string: text=Sample&text=Word&source_lang=EN&target_lang=ES
|
47
|
+
headers:
|
48
|
+
Accept-Encoding:
|
49
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
50
|
+
Accept:
|
51
|
+
- "*/*"
|
52
|
+
User-Agent:
|
53
|
+
- Ruby
|
54
|
+
Content-Type:
|
55
|
+
- application/x-www-form-urlencoded
|
56
|
+
response:
|
57
|
+
status:
|
58
|
+
code: 200
|
59
|
+
message: OK
|
60
|
+
headers:
|
61
|
+
Server:
|
62
|
+
- nginx
|
63
|
+
Date:
|
64
|
+
- Sun, 10 Dec 2017 20:34:26 GMT
|
65
|
+
Content-Type:
|
66
|
+
- application/json
|
67
|
+
Content-Length:
|
68
|
+
- '120'
|
69
|
+
Connection:
|
70
|
+
- keep-alive
|
71
|
+
Access-Control-Allow-Origin:
|
72
|
+
- "*"
|
73
|
+
body:
|
74
|
+
encoding: UTF-8
|
75
|
+
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
|
78
|
+
- request:
|
79
|
+
method: post
|
80
|
+
uri: https://api.deepl.com/v1/translate?auth_key=invalid
|
81
|
+
body:
|
82
|
+
encoding: US-ASCII
|
83
|
+
string: text=Sample+text&source_lang=EN&target_lang=ES
|
84
|
+
headers:
|
85
|
+
Accept-Encoding:
|
86
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
87
|
+
Accept:
|
88
|
+
- "*/*"
|
89
|
+
User-Agent:
|
90
|
+
- Ruby
|
91
|
+
Content-Type:
|
92
|
+
- application/x-www-form-urlencoded
|
93
|
+
response:
|
94
|
+
status:
|
95
|
+
code: 403
|
96
|
+
message: Forbidden
|
97
|
+
headers:
|
98
|
+
Server:
|
99
|
+
- nginx
|
100
|
+
Date:
|
101
|
+
- Sun, 10 Dec 2017 20:34:27 GMT
|
102
|
+
Content-Length:
|
103
|
+
- '0'
|
104
|
+
Connection:
|
105
|
+
- keep-alive
|
106
|
+
body:
|
107
|
+
encoding: UTF-8
|
108
|
+
string: ''
|
109
|
+
http_version:
|
110
|
+
recorded_at: Sun, 10 Dec 2017 20:34:27 GMT
|
111
|
+
- request:
|
112
|
+
method: post
|
113
|
+
uri: https://api.deepl.com/v1/translate?auth_key=VALID_TOKEN
|
114
|
+
body:
|
115
|
+
encoding: US-ASCII
|
116
|
+
string: source_lang=EN&target_lang=ES
|
117
|
+
headers:
|
118
|
+
Accept-Encoding:
|
119
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
120
|
+
Accept:
|
121
|
+
- "*/*"
|
122
|
+
User-Agent:
|
123
|
+
- Ruby
|
124
|
+
Content-Type:
|
125
|
+
- application/x-www-form-urlencoded
|
126
|
+
response:
|
127
|
+
status:
|
128
|
+
code: 400
|
129
|
+
message: Bad Request
|
130
|
+
headers:
|
131
|
+
Server:
|
132
|
+
- nginx
|
133
|
+
Date:
|
134
|
+
- Sun, 10 Dec 2017 20:34:27 GMT
|
135
|
+
Content-Length:
|
136
|
+
- '45'
|
137
|
+
Connection:
|
138
|
+
- keep-alive
|
139
|
+
body:
|
140
|
+
encoding: UTF-8
|
141
|
+
string: '{"message":"Parameter ''text'' not specified."}'
|
142
|
+
http_version:
|
143
|
+
recorded_at: Sun, 10 Dec 2017 20:34:27 GMT
|
144
|
+
- request:
|
145
|
+
method: post
|
146
|
+
uri: https://api.deepl.com/v1/translate?auth_key=VALID_TOKEN
|
147
|
+
body:
|
148
|
+
encoding: US-ASCII
|
149
|
+
string: text=Sample+text&source_lang=EN
|
150
|
+
headers:
|
151
|
+
Accept-Encoding:
|
152
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
153
|
+
Accept:
|
154
|
+
- "*/*"
|
155
|
+
User-Agent:
|
156
|
+
- Ruby
|
157
|
+
Content-Type:
|
158
|
+
- application/x-www-form-urlencoded
|
159
|
+
response:
|
160
|
+
status:
|
161
|
+
code: 400
|
162
|
+
message: Bad Request
|
163
|
+
headers:
|
164
|
+
Server:
|
165
|
+
- nginx
|
166
|
+
Date:
|
167
|
+
- Sun, 10 Dec 2017 20:34:28 GMT
|
168
|
+
Content-Length:
|
169
|
+
- '52'
|
170
|
+
Connection:
|
171
|
+
- keep-alive
|
172
|
+
body:
|
173
|
+
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
|
177
|
+
recorded_with: VCR 4.0.0
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe DeepL::Requests::TranslateText do
|
4
|
+
let(:api) { build_deepl_api }
|
5
|
+
let(:text) { 'Sample text' }
|
6
|
+
let(:source_lang) { 'EN' }
|
7
|
+
let(:target_lang) { 'ES' }
|
8
|
+
subject { DeepL::Requests::TranslateText.new(api, text, source_lang, target_lang) }
|
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(DeepL::Requests::TranslateText)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#request' do
|
19
|
+
around do |example|
|
20
|
+
VCR.use_cassette('translate_texts') { example.call }
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'When performing a valid request with one text' do
|
24
|
+
it 'should return a text object' do
|
25
|
+
text = subject.request
|
26
|
+
|
27
|
+
expect(text).to be_a(DeepL::Resources::Text)
|
28
|
+
expect(text.text).to eq('Texto de muestra')
|
29
|
+
expect(text.detected_source_language).to eq('EN')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'When performing a valid request with multiple texts' do
|
34
|
+
let(:text) { %w[Sample Word] }
|
35
|
+
|
36
|
+
it 'should return a text object' do
|
37
|
+
texts = subject.request
|
38
|
+
|
39
|
+
expect(texts).to be_a(Array)
|
40
|
+
expect(texts.first.text).to eq('Muestra')
|
41
|
+
expect(texts.first.detected_source_language).to eq('EN')
|
42
|
+
|
43
|
+
expect(texts.last.text).to eq('Palabra')
|
44
|
+
expect(texts.last.detected_source_language).to eq('EN')
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'When performing a bad request' do
|
49
|
+
context 'When using an invalid token' do
|
50
|
+
let(:api) do
|
51
|
+
api = build_deepl_api
|
52
|
+
api.configuration.auth_key = 'invalid'
|
53
|
+
api
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'should raise an unauthorized error' do
|
57
|
+
expect { subject.request }.to raise_error(DeepL::Exceptions::AuthorizationFailed)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context 'When using an invalid text' do
|
62
|
+
let(:text) { nil }
|
63
|
+
|
64
|
+
it 'should raise a bad request error' do
|
65
|
+
message = "Parameter 'text' not specified."
|
66
|
+
expect { subject.request }.to raise_error(DeepL::Exceptions::BadRequest, message)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context 'When using an invalid target language' do
|
71
|
+
let(:target_lang) { nil }
|
72
|
+
|
73
|
+
it 'should raise a bad request error' do
|
74
|
+
message = "Parameter 'target_lang' not specified."
|
75
|
+
expect { subject.request }.to raise_error(DeepL::Exceptions::BadRequest, message)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe DeepL::Resources::Text do
|
4
|
+
subject { DeepL::Resources::Text.new('Target', 'es', 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::Text)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should assign the attributes' do
|
13
|
+
expect(subject.text).to eq('Target')
|
14
|
+
expect(subject.detected_source_language).to eq('es')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'vcr'
|
2
|
+
|
3
|
+
require_relative '../lib/deepl'
|
4
|
+
|
5
|
+
# Lib config
|
6
|
+
ENV['DEEPL_AUTH_KEY'] ||= 'TEST-TOKEN'
|
7
|
+
|
8
|
+
# VCR tapes configuration
|
9
|
+
VCR.configure do |config|
|
10
|
+
config.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
|
11
|
+
config.hook_into :webmock
|
12
|
+
config.filter_sensitive_data('VALID_TOKEN') { ENV['DEEPL_AUTH_KEY'] }
|
13
|
+
config.default_cassette_options = {
|
14
|
+
record: :new_episodes,
|
15
|
+
match_requests_on: %i[method uri body]
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
# General helpers
|
20
|
+
def build_deepl_api
|
21
|
+
DeepL::API.new(DeepL::Configuration.new)
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: deepl-rb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Daniel Herzog
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-12-12 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: juwelier
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: 'A simple ruby wrapper for the DeepL translation API (v1). For more information,
|
28
|
+
check this: https://www.deepl.com/docs/api-reference.html'
|
29
|
+
email: info@danielherzog.es
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files:
|
33
|
+
- LICENSE.md
|
34
|
+
- README.md
|
35
|
+
files:
|
36
|
+
- ".circleci/config.yml"
|
37
|
+
- ".rubocop.yml"
|
38
|
+
- Gemfile
|
39
|
+
- Gemfile.lock
|
40
|
+
- LICENSE.md
|
41
|
+
- README.md
|
42
|
+
- Rakefile
|
43
|
+
- VERSION
|
44
|
+
- deepl-rb.gemspec
|
45
|
+
- lib/deepl.rb
|
46
|
+
- lib/deepl/api.rb
|
47
|
+
- lib/deepl/configuration.rb
|
48
|
+
- lib/deepl/exceptions/authorization_failed.rb
|
49
|
+
- lib/deepl/exceptions/bad_request.rb
|
50
|
+
- lib/deepl/exceptions/error.rb
|
51
|
+
- lib/deepl/exceptions/limit_exceeded.rb
|
52
|
+
- lib/deepl/exceptions/request_error.rb
|
53
|
+
- lib/deepl/requests/base.rb
|
54
|
+
- lib/deepl/requests/translate_text.rb
|
55
|
+
- lib/deepl/resources/base.rb
|
56
|
+
- lib/deepl/resources/text.rb
|
57
|
+
- spec/api/api_spec.rb
|
58
|
+
- spec/api/configuration_spec.rb
|
59
|
+
- spec/api/deepl_spec.rb
|
60
|
+
- spec/fixtures/vcr_cassettes/deepl_translate.yml
|
61
|
+
- spec/fixtures/vcr_cassettes/translate_texts.yml
|
62
|
+
- spec/requests/translate_text_spec.rb
|
63
|
+
- spec/resources/text_spec.rb
|
64
|
+
- spec/spec_helper.rb
|
65
|
+
homepage: http://github.com/wikiti/deepl-rb
|
66
|
+
licenses:
|
67
|
+
- MIT
|
68
|
+
metadata: {}
|
69
|
+
post_install_message:
|
70
|
+
rdoc_options: []
|
71
|
+
require_paths:
|
72
|
+
- lib
|
73
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
requirements: []
|
84
|
+
rubyforge_project:
|
85
|
+
rubygems_version: 2.6.13
|
86
|
+
signing_key:
|
87
|
+
specification_version: 4
|
88
|
+
summary: A simple ruby wrapper for the DeepL API
|
89
|
+
test_files: []
|