deepl-rb 2.5.2 → 3.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.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/add_issues_to_kanban.yml +16 -0
  3. data/.gitlab-ci.yml +135 -0
  4. data/.rubocop.yml +27 -0
  5. data/CHANGELOG.md +34 -0
  6. data/CODE_OF_CONDUCT.md +132 -0
  7. data/CONTRIBUTING.md +37 -0
  8. data/Gemfile +3 -1
  9. data/LICENSE.md +1 -0
  10. data/README.md +115 -5
  11. data/Rakefile +7 -5
  12. data/SECURITY.md +58 -0
  13. data/VERSION +1 -1
  14. data/deepl-rb.gemspec +36 -20
  15. data/lib/deepl/api.rb +11 -1
  16. data/lib/deepl/configuration.rb +34 -3
  17. data/lib/deepl/document_api.rb +120 -0
  18. data/lib/deepl/exceptions/authorization_failed.rb +3 -0
  19. data/lib/deepl/exceptions/bad_request.rb +3 -0
  20. data/lib/deepl/exceptions/document_translation_error.rb +15 -0
  21. data/lib/deepl/exceptions/error.rb +6 -0
  22. data/lib/deepl/exceptions/limit_exceeded.rb +7 -0
  23. data/lib/deepl/exceptions/not_found.rb +3 -0
  24. data/lib/deepl/exceptions/not_supported.rb +3 -0
  25. data/lib/deepl/exceptions/quota_exceeded.rb +3 -0
  26. data/lib/deepl/exceptions/request_entity_too_large.rb +4 -1
  27. data/lib/deepl/exceptions/request_error.rb +4 -2
  28. data/lib/deepl/exceptions/server_error.rb +18 -0
  29. data/lib/deepl/glossary_api.rb +3 -0
  30. data/lib/deepl/requests/base.rb +89 -34
  31. data/lib/deepl/requests/document/download.rb +44 -0
  32. data/lib/deepl/requests/document/get_status.rb +44 -0
  33. data/lib/deepl/requests/document/upload.rb +64 -0
  34. data/lib/deepl/requests/glossary/create.rb +15 -1
  35. data/lib/deepl/requests/glossary/destroy.rb +8 -1
  36. data/lib/deepl/requests/glossary/entries.rb +8 -1
  37. data/lib/deepl/requests/glossary/find.rb +8 -1
  38. data/lib/deepl/requests/glossary/language_pairs.rb +9 -2
  39. data/lib/deepl/requests/glossary/list.rb +9 -2
  40. data/lib/deepl/requests/languages.rb +9 -2
  41. data/lib/deepl/requests/translate.rb +33 -11
  42. data/lib/deepl/requests/usage.rb +9 -2
  43. data/lib/deepl/resources/base.rb +3 -0
  44. data/lib/deepl/resources/document_handle.rb +57 -0
  45. data/lib/deepl/resources/document_translation_status.rb +54 -0
  46. data/lib/deepl/resources/glossary.rb +3 -0
  47. data/lib/deepl/resources/language.rb +3 -0
  48. data/lib/deepl/resources/language_pair.rb +3 -0
  49. data/lib/deepl/resources/text.rb +3 -0
  50. data/lib/deepl/resources/usage.rb +3 -0
  51. data/lib/deepl/utils/backoff_timer.rb +46 -0
  52. data/lib/deepl/utils/exception_builder.rb +18 -13
  53. data/lib/deepl.rb +47 -0
  54. data/lib/http_client_options.rb +22 -0
  55. data/license_checker.sh +8 -0
  56. data/spec/api/api_spec.rb +8 -4
  57. data/spec/api/configuration_spec.rb +92 -18
  58. data/spec/api/deepl_spec.rb +225 -86
  59. data/spec/fixtures/vcr_cassettes/deepl_document.yml +95 -0
  60. data/spec/fixtures/vcr_cassettes/deepl_document_download.yml +1214 -0
  61. data/spec/fixtures/vcr_cassettes/deepl_glossaries.yml +812 -23
  62. data/spec/fixtures/vcr_cassettes/deepl_languages.yml +28 -17
  63. data/spec/fixtures/vcr_cassettes/deepl_translate.yml +161 -53
  64. data/spec/fixtures/vcr_cassettes/deepl_usage.yml +93 -3
  65. data/spec/fixtures/vcr_cassettes/glossaries.yml +1237 -15
  66. data/spec/fixtures/vcr_cassettes/languages.yml +159 -44
  67. data/spec/fixtures/vcr_cassettes/translate_texts.yml +9742 -12
  68. data/spec/fixtures/vcr_cassettes/usage.yml +134 -2
  69. data/spec/integration_tests/document_api_spec.rb +143 -0
  70. data/spec/integration_tests/integration_test_utils.rb +170 -0
  71. data/spec/requests/glossary/create_spec.rb +23 -13
  72. data/spec/requests/glossary/destroy_spec.rb +33 -17
  73. data/spec/requests/glossary/entries_spec.rb +31 -17
  74. data/spec/requests/glossary/find_spec.rb +31 -17
  75. data/spec/requests/glossary/language_pairs_spec.rb +17 -7
  76. data/spec/requests/glossary/list_spec.rb +21 -11
  77. data/spec/requests/languages_spec.rb +31 -21
  78. data/spec/requests/translate_spec.rb +125 -131
  79. data/spec/requests/usage_spec.rb +17 -7
  80. data/spec/resources/glossary_spec.rb +15 -12
  81. data/spec/resources/language_pair_spec.rb +10 -7
  82. data/spec/resources/language_spec.rb +21 -18
  83. data/spec/resources/text_spec.rb +10 -7
  84. data/spec/resources/usage_spec.rb +16 -13
  85. data/spec/spec_helper.rb +63 -6
  86. metadata +32 -9
@@ -1,31 +1,34 @@
1
+ # Copyright 2018 Daniel Herzog
2
+ # Use of this source code is governed by an MIT
3
+ # license that can be found in the LICENSE.md file.
1
4
  # frozen_string_literal: true
2
5
 
3
6
  require 'spec_helper'
4
7
 
5
8
  describe DeepL::Resources::Usage do
6
- subject { described_class.new(3, 5, nil, nil) }
9
+ subject(:usage) { described_class.new(3, 5, nil, nil) }
7
10
 
8
11
  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
+ context 'when building a basic object' do
13
+ it 'creates a resource' do
14
+ expect(usage).to be_a(described_class)
12
15
  end
13
16
 
14
- it 'should assign the attributes' do
15
- expect(subject.character_count).to eq(3)
16
- expect(subject.character_limit).to eq(5)
17
+ it 'assigns the attributes' do
18
+ expect(usage.character_count).to eq(3)
19
+ expect(usage.character_limit).to eq(5)
17
20
  end
18
21
 
19
- it 'should not exceed the quota' do
20
- expect(subject.quota_exceeded?).to be_falsey
22
+ it 'does not exceed the quota' do
23
+ expect(usage).not_to be_quota_exceeded
21
24
  end
22
25
  end
23
26
 
24
- context 'When building a quota exceeded object' do
25
- subject { described_class.new(5, 5, nil, nil) }
27
+ context 'when building a quota exceeded object' do
28
+ subject(:usage) { described_class.new(5, 5, nil, nil) }
26
29
 
27
- it 'should exceed the quota' do
28
- expect(subject.quota_exceeded?).to be_truthy
30
+ it 'exceeds the quota' do
31
+ expect(usage).to be_quota_exceeded
29
32
  end
30
33
  end
31
34
  end
data/spec/spec_helper.rb CHANGED
@@ -1,18 +1,56 @@
1
+ # Copyright 2018 Daniel Herzog
2
+ # Use of this source code is governed by an MIT
3
+ # license that can be found in the LICENSE.md file.
1
4
  # frozen_string_literal: true
2
5
 
3
6
  # Coverage
4
7
  require 'simplecov'
5
8
  SimpleCov.start
6
9
 
7
- require 'codecov'
8
- SimpleCov.formatter = SimpleCov::Formatter::Codecov
10
+ require 'simplecov-cobertura'
11
+ SimpleCov.formatter = SimpleCov::Formatter::CoberturaFormatter
9
12
 
10
13
  # Load lib
11
14
  require_relative '../lib/deepl'
15
+ require_relative 'integration_tests/integration_test_utils'
12
16
 
13
17
  # Lib config
14
18
  ENV['DEEPL_AUTH_KEY'] ||= 'TEST-TOKEN'
15
19
 
20
+ # General helpers
21
+ def build_deepl_api
22
+ DeepL::API.new(DeepL::Configuration.new)
23
+ end
24
+
25
+ uri_ignoring_deepl_api_subdomain = lambda do |request1, request2|
26
+ deepl_api_regexp = %r{https?://api.*\.deepl\.com/}
27
+ uri1 = request1.uri
28
+ uri2 = request2.uri
29
+ uri1_match = uri1.match(deepl_api_regexp)
30
+ uri2_match = uri2.match(deepl_api_regexp)
31
+ if uri1_match && uri2_match
32
+ uri1_without_deepl_domain = uri1.gsub(uri1_match[0], '')
33
+ uri2_without_deepl_domain = uri2.gsub(uri2_match[0], '')
34
+ uri1_without_deepl_domain == uri2_without_deepl_domain
35
+ else
36
+ uri1 == uri2
37
+ end
38
+ end
39
+
40
+ headers_ignoring_user_agent = lambda do |request1, request2|
41
+ user_agent_key = 'User-Agent'
42
+ # Pass by reference, so we need to use a copy of the headers
43
+ headers1 = request1.headers.dup
44
+ headers2 = request2.headers.dup
45
+ headers1_has_user_agent = headers1.key?(user_agent_key)
46
+ headers2_has_user_agent = headers2.key?(user_agent_key)
47
+ return false if headers1_has_user_agent != headers2_has_user_agent
48
+
49
+ headers1.delete(user_agent_key)
50
+ headers2.delete(user_agent_key)
51
+ headers1 == headers2
52
+ end
53
+
16
54
  # VCR tapes configuration
17
55
  require 'vcr'
18
56
  VCR.configure do |config|
@@ -20,12 +58,31 @@ VCR.configure do |config|
20
58
  config.hook_into :webmock
21
59
  config.filter_sensitive_data('VALID_TOKEN') { ENV.fetch('DEEPL_AUTH_KEY', nil) }
22
60
  config.default_cassette_options = {
61
+ # Uncomment this line when adding new tests, run the tests once, then comment it again
23
62
  # record: :new_episodes,
24
- match_requests_on: %i[method uri body headers]
63
+ match_requests_on: [:method, uri_ignoring_deepl_api_subdomain, :body,
64
+ headers_ignoring_user_agent]
25
65
  }
26
66
  end
27
67
 
28
- # General helpers
29
- def build_deepl_api
30
- DeepL::API.new(DeepL::Configuration.new(host: 'https://api-free.deepl.com'))
68
+ # Test helpers
69
+
70
+ def replace_env_preserving_deepl_vars
71
+ env_auth_key = ENV.fetch('DEEPL_AUTH_KEY', false)
72
+ env_server_url = ENV.fetch('DEEPL_SERVER_URL', false)
73
+ env_mock_server_port = ENV.fetch('DEEPL_MOCK_SERVER_PORT', false)
74
+ tmp_env = ENV.to_hash
75
+ ENV.clear
76
+ ENV['DEEPL_AUTH_KEY'] = (env_auth_key || 'VALID')
77
+ ENV['DEEPL_SERVER_URL'] = (env_server_url || '')
78
+ ENV['DEEPL_MOCK_SERVER_PORT'] = (env_mock_server_port || '')
79
+ tmp_env
80
+ end
81
+
82
+ def replace_env_preserving_deepl_vars_except_mock_server
83
+ env_auth_key = ENV.fetch('DEEPL_AUTH_KEY', false)
84
+ tmp_env = ENV.to_hash
85
+ ENV.clear
86
+ ENV['DEEPL_AUTH_KEY'] = (env_auth_key || 'VALID')
87
+ tmp_env
31
88
  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.5.2
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - Daniel Herzog
7
+ - DeepL SE
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-25 00:00:00.000000000 Z
11
+ date: 2024-09-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: juwelier
@@ -38,28 +38,38 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- description: 'A simple ruby wrapper for the DeepL translation API (v1). For more information,
42
- check this: https://www.deepl.com/docs/api-reference.html'
43
- email: info@danielherzog.es
41
+ description: 'Official Ruby library for the DeepL language translation API (v2). For
42
+ more information, check this: https://www.deepl.com/docs/api-reference.html'
43
+ email: open-source@deepl.com
44
44
  executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files:
47
+ - CHANGELOG.md
47
48
  - LICENSE.md
48
49
  - README.md
50
+ - license_checker.sh
49
51
  files:
50
52
  - ".circleci/config.yml"
53
+ - ".github/workflows/add_issues_to_kanban.yml"
54
+ - ".gitlab-ci.yml"
51
55
  - ".rubocop.yml"
56
+ - CHANGELOG.md
57
+ - CODE_OF_CONDUCT.md
58
+ - CONTRIBUTING.md
52
59
  - Gemfile
53
60
  - LICENSE.md
54
61
  - README.md
55
62
  - Rakefile
63
+ - SECURITY.md
56
64
  - VERSION
57
65
  - deepl-rb.gemspec
58
66
  - lib/deepl.rb
59
67
  - lib/deepl/api.rb
60
68
  - lib/deepl/configuration.rb
69
+ - lib/deepl/document_api.rb
61
70
  - lib/deepl/exceptions/authorization_failed.rb
62
71
  - lib/deepl/exceptions/bad_request.rb
72
+ - lib/deepl/exceptions/document_translation_error.rb
63
73
  - lib/deepl/exceptions/error.rb
64
74
  - lib/deepl/exceptions/limit_exceeded.rb
65
75
  - lib/deepl/exceptions/not_found.rb
@@ -67,8 +77,12 @@ files:
67
77
  - lib/deepl/exceptions/quota_exceeded.rb
68
78
  - lib/deepl/exceptions/request_entity_too_large.rb
69
79
  - lib/deepl/exceptions/request_error.rb
80
+ - lib/deepl/exceptions/server_error.rb
70
81
  - lib/deepl/glossary_api.rb
71
82
  - lib/deepl/requests/base.rb
83
+ - lib/deepl/requests/document/download.rb
84
+ - lib/deepl/requests/document/get_status.rb
85
+ - lib/deepl/requests/document/upload.rb
72
86
  - lib/deepl/requests/glossary/create.rb
73
87
  - lib/deepl/requests/glossary/destroy.rb
74
88
  - lib/deepl/requests/glossary/entries.rb
@@ -79,15 +93,22 @@ files:
79
93
  - lib/deepl/requests/translate.rb
80
94
  - lib/deepl/requests/usage.rb
81
95
  - lib/deepl/resources/base.rb
96
+ - lib/deepl/resources/document_handle.rb
97
+ - lib/deepl/resources/document_translation_status.rb
82
98
  - lib/deepl/resources/glossary.rb
83
99
  - lib/deepl/resources/language.rb
84
100
  - lib/deepl/resources/language_pair.rb
85
101
  - lib/deepl/resources/text.rb
86
102
  - lib/deepl/resources/usage.rb
103
+ - lib/deepl/utils/backoff_timer.rb
87
104
  - lib/deepl/utils/exception_builder.rb
105
+ - lib/http_client_options.rb
106
+ - license_checker.sh
88
107
  - spec/api/api_spec.rb
89
108
  - spec/api/configuration_spec.rb
90
109
  - spec/api/deepl_spec.rb
110
+ - spec/fixtures/vcr_cassettes/deepl_document.yml
111
+ - spec/fixtures/vcr_cassettes/deepl_document_download.yml
91
112
  - spec/fixtures/vcr_cassettes/deepl_glossaries.yml
92
113
  - spec/fixtures/vcr_cassettes/deepl_languages.yml
93
114
  - spec/fixtures/vcr_cassettes/deepl_translate.yml
@@ -96,6 +117,8 @@ files:
96
117
  - spec/fixtures/vcr_cassettes/languages.yml
97
118
  - spec/fixtures/vcr_cassettes/translate_texts.yml
98
119
  - spec/fixtures/vcr_cassettes/usage.yml
120
+ - spec/integration_tests/document_api_spec.rb
121
+ - spec/integration_tests/integration_test_utils.rb
99
122
  - spec/requests/glossary/create_spec.rb
100
123
  - spec/requests/glossary/destroy_spec.rb
101
124
  - spec/requests/glossary/entries_spec.rb
@@ -111,7 +134,7 @@ files:
111
134
  - spec/resources/text_spec.rb
112
135
  - spec/resources/usage_spec.rb
113
136
  - spec/spec_helper.rb
114
- homepage: http://github.com/wikiti/deepl-rb
137
+ homepage: https://github.com/DeepLcom/deepl-rb
115
138
  licenses:
116
139
  - MIT
117
140
  metadata: {}
@@ -130,8 +153,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
153
  - !ruby/object:Gem::Version
131
154
  version: '0'
132
155
  requirements: []
133
- rubygems_version: 3.3.7
156
+ rubygems_version: 3.4.6
134
157
  signing_key:
135
158
  specification_version: 4
136
- summary: A simple ruby wrapper for the DeepL API
159
+ summary: Official Ruby library for the DeepL language translation API.
137
160
  test_files: []