deepl-rb 3.9.0 → 3.10.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 +4 -4
- data/.gitlab-ci.yml +70 -52
- data/.rubocop.yml +26 -0
- data/CHANGELOG.md +429 -18
- data/Gemfile +4 -0
- data/README.md +981 -223
- data/Rakefile +18 -5
- data/VERSION +1 -1
- data/deepl-rb.gemspec +6 -6
- data/lib/deepl/admin_client.rb +183 -0
- data/lib/deepl/api.rb +30 -6
- data/lib/deepl/app_info.rb +20 -0
- data/lib/deepl/client.rb +969 -0
- data/lib/deepl/configuration.rb +56 -10
- data/lib/deepl/constants/admin_usage_group_by.rb +13 -0
- data/lib/deepl/constants/custom_tag_usage_aggregate_by.rb +13 -0
- data/lib/deepl/constants/document_status_code.rb +17 -0
- data/lib/deepl/constants/language_include.rb +17 -0
- data/lib/deepl/constants/language_resource_name.rb +21 -0
- data/lib/deepl/constants/tag_handling_version.rb +14 -0
- data/lib/deepl/deprecation.rb +42 -0
- data/lib/deepl/document_api.rb +41 -22
- data/lib/deepl/exceptions/bad_request.rb +1 -3
- data/lib/deepl/exceptions/connection_error.rb +37 -0
- data/lib/deepl/exceptions/document_not_ready_error.rb +17 -0
- data/lib/deepl/exceptions/document_translation_error.rb +17 -1
- data/lib/deepl/exceptions/error.rb +13 -1
- data/lib/deepl/exceptions/not_found.rb +8 -3
- data/lib/deepl/exceptions/not_supported.rb +6 -0
- data/lib/deepl/exceptions/request_error.rb +19 -2
- data/lib/deepl/exceptions/server_error.rb +7 -1
- data/lib/deepl/exceptions/validation_error.rb +14 -0
- data/lib/deepl/requests/admin/base.rb +94 -0
- data/lib/deepl/requests/admin/create_developer_key.rb +38 -0
- data/lib/deepl/requests/admin/custom_tag_usage_analytics.rb +38 -0
- data/lib/deepl/requests/admin/list_developer_keys.rb +28 -0
- data/lib/deepl/requests/admin/update_developer_key.rb +35 -0
- data/lib/deepl/requests/admin/usage_analytics.rb +36 -0
- data/lib/deepl/requests/base.rb +229 -59
- data/lib/deepl/requests/correct.rb +57 -0
- data/lib/deepl/requests/document/download.rb +11 -3
- data/lib/deepl/requests/document/get_status.rb +2 -2
- data/lib/deepl/requests/document/upload.rb +43 -10
- data/lib/deepl/requests/glossary/create.rb +6 -2
- data/lib/deepl/requests/glossary/language_pairs.rb +20 -4
- data/lib/deepl/requests/language_resources.rb +41 -0
- data/lib/deepl/requests/languages.rb +28 -4
- data/lib/deepl/requests/languages_for_resource.rb +54 -0
- data/lib/deepl/requests/multilingual_glossary/create.rb +37 -0
- data/lib/deepl/requests/multilingual_glossary/destroy.rb +36 -0
- data/lib/deepl/requests/multilingual_glossary/destroy_dictionary.rb +51 -0
- data/lib/deepl/requests/multilingual_glossary/entries.rb +66 -0
- data/lib/deepl/requests/multilingual_glossary/find.rb +35 -0
- data/lib/deepl/requests/multilingual_glossary/helpers.rb +63 -0
- data/lib/deepl/requests/multilingual_glossary/list.rb +39 -0
- data/lib/deepl/requests/multilingual_glossary/replace_dictionary.rb +41 -0
- data/lib/deepl/requests/multilingual_glossary/update.rb +40 -0
- data/lib/deepl/requests/rephrase.rb +5 -9
- data/lib/deepl/requests/spoken_terms/create.rb +37 -0
- data/lib/deepl/requests/spoken_terms/destroy.rb +36 -0
- data/lib/deepl/requests/spoken_terms/destroy_term_list.rb +41 -0
- data/lib/deepl/requests/spoken_terms/entries.rb +46 -0
- data/lib/deepl/requests/spoken_terms/find.rb +35 -0
- data/lib/deepl/requests/spoken_terms/helpers.rb +67 -0
- data/lib/deepl/requests/spoken_terms/list.rb +35 -0
- data/lib/deepl/requests/spoken_terms/replace_term_list.rb +41 -0
- data/lib/deepl/requests/spoken_terms/update.rb +40 -0
- data/lib/deepl/requests/style_profile/base.rb +83 -0
- data/lib/deepl/requests/style_profile/create.rb +35 -0
- data/lib/deepl/requests/style_profile/destroy.rb +34 -0
- data/lib/deepl/requests/style_profile/find.rb +33 -0
- data/lib/deepl/requests/style_profile/list.rb +43 -0
- data/lib/deepl/requests/style_profile/update.rb +35 -0
- data/lib/deepl/requests/style_rule/create.rb +1 -1
- data/lib/deepl/requests/style_rule/create_custom_instruction.rb +4 -2
- data/lib/deepl/requests/style_rule/destroy.rb +4 -2
- data/lib/deepl/requests/style_rule/destroy_custom_instruction.rb +5 -3
- data/lib/deepl/requests/style_rule/find.rb +4 -2
- data/lib/deepl/requests/style_rule/find_custom_instruction.rb +5 -3
- data/lib/deepl/requests/style_rule/helpers.rb +35 -0
- data/lib/deepl/requests/style_rule/list.rb +1 -1
- data/lib/deepl/requests/style_rule/update.rb +4 -2
- data/lib/deepl/requests/style_rule/update_configured_rules.rb +4 -2
- data/lib/deepl/requests/style_rule/update_custom_instruction.rb +5 -3
- data/lib/deepl/requests/translate.rb +52 -20
- data/lib/deepl/requests/translation_memory/base.rb +1 -4
- data/lib/deepl/requests/translation_memory/create_export.rb +1 -1
- data/lib/deepl/requests/translation_memory/create_import.rb +1 -1
- data/lib/deepl/requests/translation_memory/destroy.rb +1 -1
- data/lib/deepl/requests/translation_memory/download_export.rb +4 -0
- data/lib/deepl/requests/translation_memory/find.rb +1 -1
- data/lib/deepl/requests/translation_memory/find_job.rb +1 -1
- data/lib/deepl/requests/translation_memory/list.rb +2 -1
- data/lib/deepl/requests/translation_memory/segments.rb +3 -2
- data/lib/deepl/requests/translation_memory/storage_base.rb +40 -8
- data/lib/deepl/requests/translation_memory/upload_file.rb +1 -1
- data/lib/deepl/requests/usage.rb +28 -1
- data/lib/deepl/requests/write_improvements.rb +35 -0
- data/lib/deepl/resources/admin_usage_report.rb +73 -0
- data/lib/deepl/resources/custom_tag_usage_report.rb +59 -0
- data/lib/deepl/resources/developer_key.rb +57 -0
- data/lib/deepl/resources/document_handle.rb +24 -25
- data/lib/deepl/resources/document_translation_status.rb +23 -4
- data/lib/deepl/resources/language.rb +10 -2
- data/lib/deepl/resources/language_resource.rb +57 -0
- data/lib/deepl/resources/language_support.rb +56 -0
- data/lib/deepl/resources/multilingual_glossary.rb +112 -0
- data/lib/deepl/resources/spoken_terms.rb +61 -0
- data/lib/deepl/resources/style_profile.rb +44 -0
- data/lib/deepl/resources/style_rule.rb +3 -0
- data/lib/deepl/resources/text.rb +18 -2
- data/lib/deepl/resources/translation_memory.rb +8 -2
- data/lib/deepl/resources/translation_memory_import.rb +1 -1
- data/lib/deepl/resources/translation_memory_job.rb +23 -3
- data/lib/deepl/resources/translation_memory_segments.rb +8 -6
- data/lib/deepl/resources/usage.rb +93 -4
- data/lib/deepl/style_rule_api.rb +11 -0
- data/lib/deepl/translation_memory_api.rb +104 -24
- data/lib/deepl/utils/client_builder.rb +54 -0
- data/lib/deepl/utils/document_poller.rb +70 -0
- data/lib/deepl/utils/exception_builder.rb +3 -2
- data/lib/deepl/utils/http_client_builder.rb +79 -0
- data/lib/deepl/utils/number_parser.rb +34 -0
- data/lib/deepl/utils/term_validator.rb +33 -0
- data/lib/deepl/utils/time_parser.rb +14 -0
- data/lib/deepl.rb +166 -41
- data/lib/http_client_options.rb +21 -1
- data/lib/version.rb +1 -1
- data/spec/fixtures.rb +33 -0
- data/spec/offline/admin_client_spec.rb +551 -0
- data/spec/offline/client_spec.rb +273 -0
- data/spec/{api → offline}/configuration_spec.rb +45 -3
- data/spec/{constants → offline}/constants_spec.rb +23 -1
- data/spec/offline/correct_text_spec.rb +50 -0
- data/spec/offline/deprecation_spec.rb +32 -0
- data/spec/offline/errors_spec.rb +92 -0
- data/spec/offline/glossaries_spec.rb +98 -0
- data/spec/offline/http_client_spec.rb +319 -0
- data/spec/offline/languages_spec.rb +155 -0
- data/spec/offline/module_methods_spec.rb +13 -0
- data/spec/offline/multilingual_glossaries_spec.rb +358 -0
- data/spec/offline/offline_helper.rb +71 -0
- data/spec/offline/rephrase_text_spec.rb +73 -0
- data/spec/offline/spoken_terms_spec.rb +215 -0
- data/spec/offline/style_profiles_spec.rb +266 -0
- data/spec/offline/style_rules_spec.rb +318 -0
- data/spec/offline/translate_document_spec.rb +606 -0
- data/spec/offline/translate_text_spec.rb +286 -0
- data/spec/offline/translation_memories_client_spec.rb +256 -0
- data/spec/offline/translation_memories_spec.rb +463 -0
- data/spec/offline/usage_spec.rb +151 -0
- data/spec/real_api/admin_client_spec.rb +77 -0
- data/spec/real_api/correct_text_spec.rb +20 -0
- data/spec/real_api/glossaries_spec.rb +28 -0
- data/spec/real_api/languages_spec.rb +27 -0
- data/spec/real_api/multilingual_glossaries_spec.rb +53 -0
- data/spec/real_api/proxy_spec.rb +41 -0
- data/spec/real_api/real_api_helper.rb +65 -0
- data/spec/real_api/rephrase_text_spec.rb +16 -0
- data/spec/real_api/spoken_terms_spec.rb +56 -0
- data/spec/real_api/style_profiles_spec.rb +46 -0
- data/spec/real_api/style_rules_spec.rb +46 -0
- data/spec/real_api/translate_document_spec.rb +18 -0
- data/spec/real_api/translate_text_spec.rb +16 -0
- data/spec/real_api/translation_memories_spec.rb +56 -0
- data/spec/real_api/usage_spec.rb +20 -0
- data/spec/spec_helper.rb +1 -50
- metadata +116 -76
- data/.circleci/config.yml +0 -27
- data/.github/workflows/add_issues_to_kanban.yml +0 -16
- data/spec/api/api_spec.rb +0 -20
- data/spec/api/deepl_spec.rb +0 -262
- data/spec/integration_tests/document_api_spec.rb +0 -211
- data/spec/integration_tests/document_error_paths_spec.rb +0 -33
- data/spec/integration_tests/glossary_api_spec.rb +0 -114
- data/spec/integration_tests/glossary_error_paths_spec.rb +0 -107
- data/spec/integration_tests/integration_test_utils.rb +0 -178
- data/spec/integration_tests/languages_api_spec.rb +0 -54
- data/spec/integration_tests/languages_error_paths_spec.rb +0 -25
- data/spec/integration_tests/rephrase_api_spec.rb +0 -90
- data/spec/integration_tests/rephrase_error_paths_spec.rb +0 -53
- data/spec/integration_tests/smoke_test_spec.rb +0 -24
- data/spec/integration_tests/style_rule_api_spec.rb +0 -117
- data/spec/integration_tests/style_rule_error_paths_spec.rb +0 -45
- data/spec/integration_tests/translate_api_spec.rb +0 -117
- data/spec/integration_tests/translate_error_paths_spec.rb +0 -48
- data/spec/integration_tests/translation_memory_api_spec.rb +0 -244
- data/spec/integration_tests/translation_memory_error_paths_spec.rb +0 -87
- data/spec/integration_tests/usage_api_spec.rb +0 -29
- data/spec/integration_tests/usage_error_paths_spec.rb +0 -18
- data/spec/requests/document/upload_spec.rb +0 -130
- data/spec/requests/extra_body_parameters_types_spec.rb +0 -82
- data/spec/requests/glossary/create_spec.rb +0 -44
- data/spec/requests/glossary/destroy_spec.rb +0 -27
- data/spec/requests/glossary/entries_spec.rb +0 -27
- data/spec/requests/glossary/find_spec.rb +0 -28
- data/spec/requests/glossary/language_pairs_spec.rb +0 -27
- data/spec/requests/glossary/list_spec.rb +0 -27
- data/spec/requests/languages_spec.rb +0 -27
- data/spec/requests/rephrase_spec.rb +0 -46
- data/spec/requests/style_rule/create_custom_instruction_spec.rb +0 -30
- data/spec/requests/style_rule/create_spec.rb +0 -29
- data/spec/requests/style_rule/destroy_custom_instruction_spec.rb +0 -28
- data/spec/requests/style_rule/destroy_spec.rb +0 -27
- data/spec/requests/style_rule/find_custom_instruction_spec.rb +0 -29
- data/spec/requests/style_rule/find_spec.rb +0 -28
- data/spec/requests/style_rule/list_spec.rb +0 -27
- data/spec/requests/style_rule/update_configured_rules_spec.rb +0 -31
- data/spec/requests/style_rule/update_custom_instruction_spec.rb +0 -32
- data/spec/requests/style_rule/update_spec.rb +0 -29
- data/spec/requests/translate_spec.rb +0 -338
- data/spec/requests/translation_memory/create_export_spec.rb +0 -37
- data/spec/requests/translation_memory/create_import_spec.rb +0 -61
- data/spec/requests/translation_memory/destroy_spec.rb +0 -36
- data/spec/requests/translation_memory/download_export_spec.rb +0 -54
- data/spec/requests/translation_memory/find_job_spec.rb +0 -37
- data/spec/requests/translation_memory/find_spec.rb +0 -36
- data/spec/requests/translation_memory/list_spec.rb +0 -27
- data/spec/requests/translation_memory/segments_spec.rb +0 -58
- data/spec/requests/translation_memory/upload_file_spec.rb +0 -55
- data/spec/requests/usage_spec.rb +0 -27
- data/spec/resources/custom_instruction_spec.rb +0 -32
- data/spec/resources/glossary_spec.rb +0 -38
- data/spec/resources/language_pair_spec.rb +0 -23
- data/spec/resources/language_spec.rb +0 -45
- data/spec/resources/style_rule_spec.rb +0 -68
- data/spec/resources/text_spec.rb +0 -23
- data/spec/resources/translation_memory_export_spec.rb +0 -38
- data/spec/resources/translation_memory_import_spec.rb +0 -30
- data/spec/resources/translation_memory_job_spec.rb +0 -109
- data/spec/resources/translation_memory_segments_spec.rb +0 -78
- data/spec/resources/translation_memory_spec.rb +0 -52
- data/spec/resources/usage_spec.rb +0 -35
- data/spec/support/live_mock_server.rb +0 -12
- data/spec/support/managed_glossary.rb +0 -65
- data/spec/support/managed_style_rule.rb +0 -17
- data/spec/support/managed_translation_memory.rb +0 -55
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# Copyright 2026 DeepL SE (https://www.deepl.com)
|
|
2
|
-
# Use of this source code is governed by an MIT
|
|
3
|
-
# license that can be found in the LICENSE.md file.
|
|
4
|
-
# frozen_string_literal: true
|
|
5
|
-
|
|
6
|
-
require 'spec_helper'
|
|
7
|
-
|
|
8
|
-
describe DeepL::Requests::TranslationMemory::UploadFile do
|
|
9
|
-
subject(:upload_file) { described_class.new(api, upload_url, file_content) }
|
|
10
|
-
|
|
11
|
-
around do |tests|
|
|
12
|
-
tmp_env = replace_env_preserving_deepl_vars_except_mock_server
|
|
13
|
-
tests.call
|
|
14
|
-
ENV.replace(tmp_env)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
let(:api) { build_deepl_api }
|
|
18
|
-
let(:upload_url) { 'https://storage.example.com/upload/tm?signature=abc' }
|
|
19
|
-
let(:file_content) { '<tmx version="1.4"/>' }
|
|
20
|
-
|
|
21
|
-
describe '#initialize' do
|
|
22
|
-
context 'when building a request' do
|
|
23
|
-
it 'creates a request object' do
|
|
24
|
-
expect(upload_file).to be_a(described_class)
|
|
25
|
-
expect(upload_file.content_type).to eq(described_class::DEFAULT_CONTENT_TYPE)
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
context 'when no upload URL is given' do
|
|
30
|
-
let(:upload_url) { '' }
|
|
31
|
-
|
|
32
|
-
it 'raises an error' do
|
|
33
|
-
expect { upload_file }.to raise_error(DeepL::Exceptions::Error, /must not be empty/)
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
describe '#to_s' do
|
|
39
|
-
context 'when building a request' do
|
|
40
|
-
it 'puts to the pre-signed storage URL' do
|
|
41
|
-
expect(upload_file.to_s).to eq('PUT /upload/tm?signature=abc')
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
describe '#details' do
|
|
47
|
-
context 'when building a request' do
|
|
48
|
-
# The upload URL points outside of the DeepL API, so the auth key must not be sent there.
|
|
49
|
-
it 'does not send the DeepL authorization header' do
|
|
50
|
-
expect(upload_file.details).not_to include('Authorization')
|
|
51
|
-
expect(upload_file.details).to include('User-Agent')
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
data/spec/requests/usage_spec.rb
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
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.
|
|
4
|
-
# frozen_string_literal: true
|
|
5
|
-
|
|
6
|
-
require 'spec_helper'
|
|
7
|
-
|
|
8
|
-
describe DeepL::Requests::Usage do
|
|
9
|
-
subject(:usage_req) { described_class.new(api, options) }
|
|
10
|
-
|
|
11
|
-
around do |tests|
|
|
12
|
-
tmp_env = replace_env_preserving_deepl_vars_except_mock_server
|
|
13
|
-
tests.call
|
|
14
|
-
ENV.replace(tmp_env)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
let(:api) { build_deepl_api }
|
|
18
|
-
let(:options) { {} }
|
|
19
|
-
|
|
20
|
-
describe '#initialize' do
|
|
21
|
-
context 'when building a request' do
|
|
22
|
-
it 'creates a request object' do
|
|
23
|
-
expect(usage_req).to be_a(described_class)
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# Copyright 2026 DeepL SE (https://www.deepl.com)
|
|
2
|
-
# Use of this source code is governed by an MIT
|
|
3
|
-
# license that can be found in the LICENSE.md file.
|
|
4
|
-
# frozen_string_literal: true
|
|
5
|
-
|
|
6
|
-
require 'spec_helper'
|
|
7
|
-
|
|
8
|
-
describe DeepL::Resources::CustomInstruction do
|
|
9
|
-
subject(:custom_instruction) do
|
|
10
|
-
described_class.new({
|
|
11
|
-
'id' => 'ci-1',
|
|
12
|
-
'label' => 'Formal',
|
|
13
|
-
'prompt' => 'Always use formal language',
|
|
14
|
-
'source_language' => 'en'
|
|
15
|
-
})
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
describe '#initialize' do
|
|
19
|
-
context 'when building a basic object' do
|
|
20
|
-
it 'creates a resource' do
|
|
21
|
-
expect(custom_instruction).to be_a(described_class)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it 'assigns the attributes' do
|
|
25
|
-
expect(custom_instruction.id).to eq('ci-1')
|
|
26
|
-
expect(custom_instruction.label).to eq('Formal')
|
|
27
|
-
expect(custom_instruction.prompt).to eq('Always use formal language')
|
|
28
|
-
expect(custom_instruction.source_language).to eq('en')
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# Copyright 2022 Daniel Herzog
|
|
2
|
-
# Use of this source code is governed by an MIT
|
|
3
|
-
# license that can be found in the LICENSE.md file.
|
|
4
|
-
# frozen_string_literal: true
|
|
5
|
-
|
|
6
|
-
require 'spec_helper'
|
|
7
|
-
|
|
8
|
-
describe DeepL::Resources::Glossary do
|
|
9
|
-
subject(:glossary) do
|
|
10
|
-
described_class.new({
|
|
11
|
-
'glossary_id' => 'def3a26b-3e84-45b3-84ae-0c0aaf3525f7',
|
|
12
|
-
'name' => 'Mein Glossar',
|
|
13
|
-
'ready' => true,
|
|
14
|
-
'source_lang' => 'EN',
|
|
15
|
-
'target_lang' => 'DE',
|
|
16
|
-
'creation_time' => '2021-08-03T14:16:18.329Z',
|
|
17
|
-
'entry_count' => 1
|
|
18
|
-
}, nil, nil)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
describe '#initialize' do
|
|
22
|
-
context 'when building a basic object' do
|
|
23
|
-
it 'creates a resource' do
|
|
24
|
-
expect(glossary).to be_a(described_class)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it 'assigns the attributes' do
|
|
28
|
-
expect(glossary.id).to eq('def3a26b-3e84-45b3-84ae-0c0aaf3525f7')
|
|
29
|
-
expect(glossary.name).to eq('Mein Glossar')
|
|
30
|
-
expect(glossary.ready).to be(true)
|
|
31
|
-
expect(glossary.source_lang).to eq('EN')
|
|
32
|
-
expect(glossary.target_lang).to eq('DE')
|
|
33
|
-
expect(glossary.creation_time).to eq('2021-08-03T14:16:18.329Z')
|
|
34
|
-
expect(glossary.entry_count).to eq(1)
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# Copyright 2022 Daniel Herzog
|
|
2
|
-
# Use of this source code is governed by an MIT
|
|
3
|
-
# license that can be found in the LICENSE.md file.
|
|
4
|
-
# frozen_string_literal: true
|
|
5
|
-
|
|
6
|
-
require 'spec_helper'
|
|
7
|
-
|
|
8
|
-
describe DeepL::Resources::LanguagePair do
|
|
9
|
-
subject(:language_pair) { described_class.new('en', 'de', nil, nil) }
|
|
10
|
-
|
|
11
|
-
describe '#initialize' do
|
|
12
|
-
context 'when building a basic object' do
|
|
13
|
-
it 'creates a resource' do
|
|
14
|
-
expect(language_pair).to be_a(described_class)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it 'assigns the attributes' do
|
|
18
|
-
expect(language_pair.source_lang).to eq('en')
|
|
19
|
-
expect(language_pair.target_lang).to eq('de')
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# Copyright 2021 Daniel Herzog
|
|
2
|
-
# Use of this source code is governed by an MIT
|
|
3
|
-
# license that can be found in the LICENSE.md file.
|
|
4
|
-
# frozen_string_literal: true
|
|
5
|
-
|
|
6
|
-
require 'spec_helper'
|
|
7
|
-
|
|
8
|
-
describe DeepL::Resources::Language do
|
|
9
|
-
subject(:language) { described_class.new('EN', 'English', nil, nil, nil) }
|
|
10
|
-
|
|
11
|
-
describe '#initialize' do
|
|
12
|
-
context 'when building a basic object' do
|
|
13
|
-
it 'creates a resource' do
|
|
14
|
-
expect(language).to be_a(described_class)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it 'assigns the attributes' do
|
|
18
|
-
expect(language.code).to eq('EN')
|
|
19
|
-
expect(language.name).to eq('English')
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it 'does not define the supports formality method' do
|
|
23
|
-
expect { language.supports_formality? }.to raise_error(DeepL::Exceptions::NotSupported)
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
context 'when building a target language object' do
|
|
28
|
-
subject(:language) { described_class.new('EN', 'English', true, nil, nil) }
|
|
29
|
-
|
|
30
|
-
it 'creates a resource' do
|
|
31
|
-
expect(language).to be_a(described_class)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it 'assigns the attributes' do
|
|
35
|
-
expect(language.code).to eq('EN')
|
|
36
|
-
expect(language.name).to eq('English')
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it 'includes the supports formality method' do
|
|
40
|
-
expect { language.supports_formality? }.not_to raise_error
|
|
41
|
-
expect(language).to be_supports_formality
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
# Copyright 2026 DeepL SE (https://www.deepl.com)
|
|
2
|
-
# Use of this source code is governed by an MIT
|
|
3
|
-
# license that can be found in the LICENSE.md file.
|
|
4
|
-
# frozen_string_literal: true
|
|
5
|
-
|
|
6
|
-
require 'spec_helper'
|
|
7
|
-
|
|
8
|
-
describe DeepL::Resources::StyleRule do
|
|
9
|
-
subject(:style_rule) do
|
|
10
|
-
described_class.new({
|
|
11
|
-
'style_id' => 'dca2e053-8ae5-45e6-a0d2-881156e7f4e4',
|
|
12
|
-
'name' => 'Default Style Rule',
|
|
13
|
-
'creation_time' => '2025-01-01T00:00:00Z',
|
|
14
|
-
'updated_time' => '2025-01-02T00:00:00Z',
|
|
15
|
-
'language' => 'en',
|
|
16
|
-
'version' => 1
|
|
17
|
-
}, nil, nil)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
describe '#initialize' do
|
|
21
|
-
context 'when building a basic object' do
|
|
22
|
-
it 'creates a resource' do
|
|
23
|
-
expect(style_rule).to be_a(described_class)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it 'assigns the attributes' do
|
|
27
|
-
expect(style_rule.style_id).to eq('dca2e053-8ae5-45e6-a0d2-881156e7f4e4')
|
|
28
|
-
expect(style_rule.name).to eq('Default Style Rule')
|
|
29
|
-
expect(style_rule.language).to eq('en')
|
|
30
|
-
expect(style_rule.version).to eq(1)
|
|
31
|
-
expect(style_rule.creation_time).to eq(Time.parse('2025-01-01T00:00:00Z'))
|
|
32
|
-
expect(style_rule.updated_time).to eq(Time.parse('2025-01-02T00:00:00Z'))
|
|
33
|
-
expect(style_rule.configured_rules).to be_nil
|
|
34
|
-
expect(style_rule.custom_instructions).to be_nil
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
context 'when building an object with configured rules and custom instructions' do
|
|
39
|
-
subject(:style_rule) do
|
|
40
|
-
described_class.new({
|
|
41
|
-
'style_id' => 'dca2e053-8ae5-45e6-a0d2-881156e7f4e4',
|
|
42
|
-
'name' => 'Detailed Style Rule',
|
|
43
|
-
'language' => 'en',
|
|
44
|
-
'version' => 1,
|
|
45
|
-
'configured_rules' => {
|
|
46
|
-
'dates_and_times' => { 'calendar_era' => 'use_bc_and_ad' }
|
|
47
|
-
},
|
|
48
|
-
'custom_instructions' => [
|
|
49
|
-
{ 'id' => 'ci-1', 'label' => 'Test', 'prompt' => 'Be formal' }
|
|
50
|
-
]
|
|
51
|
-
}, nil, nil)
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it 'maps configured_rules into a ConfiguredRules resource' do
|
|
55
|
-
expect(style_rule.configured_rules).to be_a(DeepL::Resources::ConfiguredRules)
|
|
56
|
-
expect(style_rule.configured_rules.dates_and_times)
|
|
57
|
-
.to eq({ 'calendar_era' => 'use_bc_and_ad' })
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
it 'maps custom_instructions into an array of CustomInstruction resources' do
|
|
61
|
-
expect(style_rule.custom_instructions).to all(be_a(DeepL::Resources::CustomInstruction))
|
|
62
|
-
expect(style_rule.custom_instructions.first.id).to eq('ci-1')
|
|
63
|
-
expect(style_rule.custom_instructions.first.label).to eq('Test')
|
|
64
|
-
expect(style_rule.custom_instructions.first.prompt).to eq('Be formal')
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
data/spec/resources/text_spec.rb
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
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.
|
|
4
|
-
# frozen_string_literal: true
|
|
5
|
-
|
|
6
|
-
require 'spec_helper'
|
|
7
|
-
|
|
8
|
-
describe DeepL::Resources::Text do
|
|
9
|
-
subject(:text) { described_class.new('Target', 'es', nil, nil, nil) }
|
|
10
|
-
|
|
11
|
-
describe '#initialize' do
|
|
12
|
-
context 'when building a basic object' do
|
|
13
|
-
it 'creates a resource' do
|
|
14
|
-
expect(text).to be_a(described_class)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it 'assigns the attributes' do
|
|
18
|
-
expect(text.text).to eq('Target')
|
|
19
|
-
expect(text.detected_source_language).to eq('es')
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# Copyright 2026 DeepL SE (https://www.deepl.com)
|
|
2
|
-
# Use of this source code is governed by an MIT
|
|
3
|
-
# license that can be found in the LICENSE.md file.
|
|
4
|
-
# frozen_string_literal: true
|
|
5
|
-
|
|
6
|
-
require 'spec_helper'
|
|
7
|
-
|
|
8
|
-
describe DeepL::Resources::TranslationMemoryExport do
|
|
9
|
-
subject(:translation_memory_export) { described_class.new(response, false, nil, nil) }
|
|
10
|
-
|
|
11
|
-
let(:response) do
|
|
12
|
-
{
|
|
13
|
-
'job_id' => '5b1a0a52-1f3b-4b7f-9f6b-9d4d3f5b6c7d',
|
|
14
|
-
'parameters' => { 'translation_memory_id' => 'a74d88fb-ed2a-4943-a664-a4512398b994' }
|
|
15
|
-
}
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
describe '#initialize' do
|
|
19
|
-
it 'creates a resource' do
|
|
20
|
-
expect(translation_memory_export).to be_a(described_class)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
it 'assigns the attributes of a newly created export' do
|
|
24
|
-
expect(translation_memory_export.job_id).to eq('5b1a0a52-1f3b-4b7f-9f6b-9d4d3f5b6c7d')
|
|
25
|
-
expect(translation_memory_export.translation_memory_id)
|
|
26
|
-
.to eq('a74d88fb-ed2a-4943-a664-a4512398b994')
|
|
27
|
-
expect(translation_memory_export.reused_existing?).to be(false)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
context 'when the API reused a previously completed export' do
|
|
31
|
-
subject(:translation_memory_export) { described_class.new(response, true, nil, nil) }
|
|
32
|
-
|
|
33
|
-
it 'reports the export as reused' do
|
|
34
|
-
expect(translation_memory_export.reused_existing?).to be(true)
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
# Copyright 2026 DeepL SE (https://www.deepl.com)
|
|
2
|
-
# Use of this source code is governed by an MIT
|
|
3
|
-
# license that can be found in the LICENSE.md file.
|
|
4
|
-
# frozen_string_literal: true
|
|
5
|
-
|
|
6
|
-
require 'spec_helper'
|
|
7
|
-
|
|
8
|
-
describe DeepL::Resources::TranslationMemoryImport do
|
|
9
|
-
subject(:translation_memory_import) do
|
|
10
|
-
described_class.new({
|
|
11
|
-
'job_id' => '5b1a0a52-1f3b-4b7f-9f6b-9d4d3f5b6c7d',
|
|
12
|
-
'upload_url' => 'https://storage.example.com/upload',
|
|
13
|
-
'expires_at' => '2026-01-01T00:00:00Z'
|
|
14
|
-
}, nil, nil)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
describe '#initialize' do
|
|
18
|
-
it 'creates a resource' do
|
|
19
|
-
expect(translation_memory_import).to be_a(described_class)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it 'assigns the attributes' do
|
|
23
|
-
expect(translation_memory_import.job_id).to eq('5b1a0a52-1f3b-4b7f-9f6b-9d4d3f5b6c7d')
|
|
24
|
-
expect(translation_memory_import.upload_url).to eq('https://storage.example.com/upload')
|
|
25
|
-
expect(translation_memory_import.expires_at).to eq(Time.parse('2026-01-01T00:00:00Z'))
|
|
26
|
-
expect(translation_memory_import.to_s)
|
|
27
|
-
.to eq('TranslationMemoryImport: ID: 5b1a0a52-1f3b-4b7f-9f6b-9d4d3f5b6c7d')
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
# Copyright 2026 DeepL SE (https://www.deepl.com)
|
|
2
|
-
# Use of this source code is governed by an MIT
|
|
3
|
-
# license that can be found in the LICENSE.md file.
|
|
4
|
-
# frozen_string_literal: true
|
|
5
|
-
|
|
6
|
-
require 'spec_helper'
|
|
7
|
-
|
|
8
|
-
describe DeepL::Resources::TranslationMemoryJob do
|
|
9
|
-
subject(:job) { described_class.new(response, nil, nil) }
|
|
10
|
-
|
|
11
|
-
let(:response) do
|
|
12
|
-
{
|
|
13
|
-
'job_id' => '5b1a0a52-1f3b-4b7f-9f6b-9d4d3f5b6c7d',
|
|
14
|
-
'product' => 'translation_memory',
|
|
15
|
-
'operation' => 'import',
|
|
16
|
-
'creation_time' => '2026-01-01T00:00:00Z',
|
|
17
|
-
'updated_time' => '2026-01-02T00:00:00Z',
|
|
18
|
-
'source_file' => { 'content_type' => 'application/xml', 'content_length' => 128 },
|
|
19
|
-
'parameters' => { 'display_name' => 'Legal' },
|
|
20
|
-
'results' => [
|
|
21
|
-
{ 'status' => 'completed', 'translation_memory_id' => 'tm-1',
|
|
22
|
-
'skipped_segment_count' => 2 }
|
|
23
|
-
]
|
|
24
|
-
}
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
describe '#initialize' do
|
|
28
|
-
it 'creates a resource' do
|
|
29
|
-
expect(job).to be_a(described_class)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it 'assigns the job level attributes' do
|
|
33
|
-
expect(job.job_id).to eq('5b1a0a52-1f3b-4b7f-9f6b-9d4d3f5b6c7d')
|
|
34
|
-
expect(job.product).to eq('translation_memory')
|
|
35
|
-
expect(job.operation).to eq('import')
|
|
36
|
-
expect(job.creation_time).to eq(Time.parse('2026-01-01T00:00:00Z'))
|
|
37
|
-
expect(job.updated_time).to eq(Time.parse('2026-01-02T00:00:00Z'))
|
|
38
|
-
expect(job.display_name).to eq('Legal')
|
|
39
|
-
expect(job.source_content_type).to eq('application/xml')
|
|
40
|
-
expect(job.source_content_length).to eq(128)
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
it 'maps the single result and delegates the status helpers to it' do
|
|
44
|
-
expect(job.result).to be_a(DeepL::Resources::TranslationMemoryJobResult)
|
|
45
|
-
expect(job.status).to eq('completed')
|
|
46
|
-
expect(job.finished?).to be(true)
|
|
47
|
-
expect(job.awaiting_input?).to be(false)
|
|
48
|
-
expect(job.error?).to be(false)
|
|
49
|
-
expect(job.result.translation_memory_id).to eq('tm-1')
|
|
50
|
-
expect(job.result.skipped_segment_count).to eq(2)
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
context 'when the job is awaiting its file upload' do
|
|
55
|
-
let(:response) do
|
|
56
|
-
{ 'job_id' => 'job-1', 'operation' => 'import',
|
|
57
|
-
'results' => [{ 'status' => 'awaiting_input',
|
|
58
|
-
'status_metadata' => { 'required_action' => 'Waiting for upload' } }] }
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
it 'exposes the required action and does not report the job as finished' do
|
|
62
|
-
expect(job.awaiting_input?).to be(true)
|
|
63
|
-
expect(job.finished?).to be(false)
|
|
64
|
-
expect(job.result.required_action).to eq('Waiting for upload')
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
context 'when the export job completed' do
|
|
69
|
-
let(:response) do
|
|
70
|
-
{ 'job_id' => 'job-2', 'operation' => 'export',
|
|
71
|
-
'parameters' => { 'translation_memory_id' => 'tm-1' },
|
|
72
|
-
'results' => [{ 'status' => 'completed', 'download_url' => 'https://example.com/tmx',
|
|
73
|
-
'expires_at' => '2026-01-03T00:00:00Z' }] }
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
it 'exposes the download URL and its expiry' do
|
|
77
|
-
expect(job.translation_memory_id).to eq('tm-1')
|
|
78
|
-
expect(job.result.download_url).to eq('https://example.com/tmx')
|
|
79
|
-
expect(job.result.expires_at).to eq(Time.parse('2026-01-03T00:00:00Z'))
|
|
80
|
-
expect(job.to_s).to eq('TranslationMemoryJob: export - ID: job-2 - Status: completed')
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
context 'when the job failed' do
|
|
85
|
-
let(:response) do
|
|
86
|
-
{ 'job_id' => 'job-3', 'operation' => 'import',
|
|
87
|
-
'results' => [{ 'status' => 'failed', 'error' => { 'message' => 'Invalid TMX' } }] }
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
it 'reports the error and treats the job as finished' do
|
|
91
|
-
expect(job.error?).to be(true)
|
|
92
|
-
expect(job.finished?).to be(true)
|
|
93
|
-
expect(job.error_message).to eq('Invalid TMX')
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
context 'when the API returned no result' do
|
|
98
|
-
let(:response) { { 'job_id' => 'job-4', 'operation' => 'import' } }
|
|
99
|
-
|
|
100
|
-
it 'reports neither a status nor an error' do
|
|
101
|
-
expect(job.result).to be_nil
|
|
102
|
-
expect(job.status).to be_nil
|
|
103
|
-
expect(job.finished?).to be(false)
|
|
104
|
-
expect(job.awaiting_input?).to be(false)
|
|
105
|
-
expect(job.error?).to be(false)
|
|
106
|
-
expect(job.error_message).to be_nil
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
end
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
# Copyright 2026 DeepL SE (https://www.deepl.com)
|
|
2
|
-
# Use of this source code is governed by an MIT
|
|
3
|
-
# license that can be found in the LICENSE.md file.
|
|
4
|
-
# frozen_string_literal: true
|
|
5
|
-
|
|
6
|
-
require 'spec_helper'
|
|
7
|
-
|
|
8
|
-
describe DeepL::Resources::TranslationMemorySegments do
|
|
9
|
-
subject(:segments_page) { described_class.new(response, nil, nil) }
|
|
10
|
-
|
|
11
|
-
let(:response) do
|
|
12
|
-
{
|
|
13
|
-
'segments' => [
|
|
14
|
-
{
|
|
15
|
-
'source_segment_id' => 'tm-1-source-0',
|
|
16
|
-
'source_text' => 'Quelltext Nummer 0',
|
|
17
|
-
'creation_time' => '2026-01-01T00:00:00Z',
|
|
18
|
-
'updated_time' => '2026-01-02T00:00:00Z',
|
|
19
|
-
'last_used_time' => '2026-01-03T00:00:00Z',
|
|
20
|
-
'targets' => [
|
|
21
|
-
{
|
|
22
|
-
'target_segment_id' => 'tm-1-target-en-0',
|
|
23
|
-
'target_language' => 'en',
|
|
24
|
-
'target_text' => 'Source text number 0',
|
|
25
|
-
'creation_time' => '2026-01-01T00:00:00Z',
|
|
26
|
-
'updated_time' => '2026-01-02T00:00:00Z',
|
|
27
|
-
'last_used_time' => '2026-01-03T00:00:00Z'
|
|
28
|
-
}
|
|
29
|
-
]
|
|
30
|
-
}
|
|
31
|
-
],
|
|
32
|
-
'segment_count' => 12,
|
|
33
|
-
'next_page_cursor' => 'NQ'
|
|
34
|
-
}
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
describe '#initialize' do
|
|
38
|
-
it 'creates a resource' do
|
|
39
|
-
expect(segments_page).to be_a(described_class)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it 'assigns the page level attributes' do
|
|
43
|
-
expect(segments_page.segment_count).to eq(12)
|
|
44
|
-
expect(segments_page.next_page_cursor).to eq('NQ')
|
|
45
|
-
expect(segments_page.next_page?).to be(true)
|
|
46
|
-
expect(segments_page.to_s).to eq('1 of 12 segment(s)')
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
it 'maps the segments into resources' do
|
|
50
|
-
segment = segments_page.segments.first
|
|
51
|
-
expect(segment).to be_a(DeepL::Resources::TranslationMemorySegment)
|
|
52
|
-
expect(segment.source_segment_id).to eq('tm-1-source-0')
|
|
53
|
-
expect(segment.source_text).to eq('Quelltext Nummer 0')
|
|
54
|
-
expect(segment.creation_time).to eq(Time.parse('2026-01-01T00:00:00Z'))
|
|
55
|
-
expect(segment.updated_time).to eq(Time.parse('2026-01-02T00:00:00Z'))
|
|
56
|
-
expect(segment.last_used_time).to eq(Time.parse('2026-01-03T00:00:00Z'))
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
it 'maps the target segments into resources' do
|
|
60
|
-
target = segments_page.segments.first.targets.first
|
|
61
|
-
expect(target).to be_a(DeepL::Resources::TranslationMemoryTargetSegment)
|
|
62
|
-
expect(target.target_segment_id).to eq('tm-1-target-en-0')
|
|
63
|
-
expect(target.target_language).to eq('en')
|
|
64
|
-
expect(target.target_text).to eq('Source text number 0')
|
|
65
|
-
expect(target.to_s).to eq('en: Source text number 0')
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
context 'when the response is the last page' do
|
|
70
|
-
let(:response) { { 'segments' => [], 'segment_count' => 12 } }
|
|
71
|
-
|
|
72
|
-
it 'reports no further page' do
|
|
73
|
-
expect(segments_page.segments).to eq([])
|
|
74
|
-
expect(segments_page.next_page_cursor).to be_nil
|
|
75
|
-
expect(segments_page.next_page?).to be(false)
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
# Copyright 2026 DeepL SE (https://www.deepl.com)
|
|
2
|
-
# Use of this source code is governed by an MIT
|
|
3
|
-
# license that can be found in the LICENSE.md file.
|
|
4
|
-
# frozen_string_literal: true
|
|
5
|
-
|
|
6
|
-
require 'spec_helper'
|
|
7
|
-
|
|
8
|
-
describe DeepL::Resources::TranslationMemory do
|
|
9
|
-
subject(:translation_memory) do
|
|
10
|
-
described_class.new({
|
|
11
|
-
'translation_memory_id' => 'a74d88fb-ed2a-4943-a664-a4512398b994',
|
|
12
|
-
'name' => 'Legal',
|
|
13
|
-
'source_language' => 'en',
|
|
14
|
-
'target_languages' => %w[es de],
|
|
15
|
-
'segment_count' => 3542,
|
|
16
|
-
'creation_time' => '2026-01-01T00:00:00Z',
|
|
17
|
-
'updated_time' => '2026-01-02T00:00:00Z'
|
|
18
|
-
}, nil, nil)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
describe '#initialize' do
|
|
22
|
-
context 'when building a basic object' do
|
|
23
|
-
it 'creates a resource' do
|
|
24
|
-
expect(translation_memory).to be_a(described_class)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it 'assigns the attributes' do
|
|
28
|
-
expect(translation_memory.translation_memory_id)
|
|
29
|
-
.to eq('a74d88fb-ed2a-4943-a664-a4512398b994')
|
|
30
|
-
expect(translation_memory.name).to eq('Legal')
|
|
31
|
-
expect(translation_memory.source_language).to eq('en')
|
|
32
|
-
expect(translation_memory.target_languages).to eq(%w[es de])
|
|
33
|
-
expect(translation_memory.segment_count).to eq(3542)
|
|
34
|
-
expect(translation_memory.creation_time).to eq(Time.parse('2026-01-01T00:00:00Z'))
|
|
35
|
-
expect(translation_memory.updated_time).to eq(Time.parse('2026-01-02T00:00:00Z'))
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
context 'when the optional timestamps are missing' do
|
|
40
|
-
subject(:translation_memory) do
|
|
41
|
-
described_class.new({ 'translation_memory_id' => 'tm-1', 'name' => 'Legal' }, nil, nil)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
it 'leaves the timestamps nil and defaults the collections' do
|
|
45
|
-
expect(translation_memory.creation_time).to be_nil
|
|
46
|
-
expect(translation_memory.updated_time).to be_nil
|
|
47
|
-
expect(translation_memory.target_languages).to eq([])
|
|
48
|
-
expect(translation_memory.segment_count).to eq(0)
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
@@ -1,35 +0,0 @@
|
|
|
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.
|
|
4
|
-
# frozen_string_literal: true
|
|
5
|
-
|
|
6
|
-
require 'spec_helper'
|
|
7
|
-
|
|
8
|
-
describe DeepL::Resources::Usage do
|
|
9
|
-
subject(:usage) { described_class.new(3, 5, nil, nil) }
|
|
10
|
-
|
|
11
|
-
describe '#initialize' do
|
|
12
|
-
context 'when building a basic object' do
|
|
13
|
-
it 'creates a resource' do
|
|
14
|
-
expect(usage).to be_a(described_class)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it 'assigns the attributes' do
|
|
18
|
-
expect(usage.character_count).to eq(3)
|
|
19
|
-
expect(usage.character_limit).to eq(5)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it 'does not exceed the quota' do
|
|
23
|
-
expect(usage).not_to be_quota_exceeded
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
context 'when building a quota exceeded object' do
|
|
28
|
-
subject(:usage) { described_class.new(5, 5, nil, nil) }
|
|
29
|
-
|
|
30
|
-
it 'exceeds the quota' do
|
|
31
|
-
expect(usage).to be_quota_exceeded
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# Copyright 2026 DeepL SE (https://www.deepl.com)
|
|
2
|
-
# Use of this source code is governed by an MIT
|
|
3
|
-
# license that can be found in the LICENSE file.
|
|
4
|
-
# frozen_string_literal: true
|
|
5
|
-
|
|
6
|
-
# Shared setup for integration specs that hit the live mock server: expose an
|
|
7
|
-
# API the server rejects as unauthorized without mutating global DeepL state.
|
|
8
|
-
RSpec.shared_context 'with a live mock server' do
|
|
9
|
-
let(:unauthorized_api) do
|
|
10
|
-
DeepL::API.new(DeepL::Configuration.new(auth_key: 'invalid'))
|
|
11
|
-
end
|
|
12
|
-
end
|