yandex-translator 0.3.2 → 0.3.3

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
- SHA1:
3
- metadata.gz: 5fc290d5bb7e60019840ed1ccf2bf3a9daee757c
4
- data.tar.gz: 8449622d63f4b9224cb7895e4718efe272181e26
2
+ SHA256:
3
+ metadata.gz: 33dd6ce30ad7100ad136fcf7f8f2e049a400c16cdd9da103079eb38f06a3cd0a
4
+ data.tar.gz: ee468daf5fd2cceee8df1a5321c01a4bd10ae756cc57a7c39d35591e41af57ff
5
5
  SHA512:
6
- metadata.gz: 77bcd16a58d77a1d5236f6735a7bd410b576623c1308c1fb9638b22246f2acf394331b8d56adee4eae9038d55e0582b5b138b7d03785632911f6e4e16f6751af
7
- data.tar.gz: 36b1d8f4951e47b9926fb3d8aef021208e8bbe5d63459116e32db2096f3781f4b75feb25ffef64dde114e270f2f4fe0ab5375ef00a3a7fe1304e9ef8600a6c98
6
+ metadata.gz: '09e0b903459da0b4e3874ea73aae1e7fab313a58a7e1762a03dfa8204de1b149d8707584d35c1097c2fe60a5d7c64fc0615e8b4c37d8d4e452560913f0444b9d'
7
+ data.tar.gz: 8dcf303d9806fee8b8605e54f0bb6f6930559faae150a895eb8d15e87c5d02d997a2e3b1e265f509362a32624e3cfad6fec93db237c3a79c84bb1a6879c39d5e
data/.gitignore CHANGED
@@ -13,6 +13,7 @@ lib/bundler/man
13
13
  pkg
14
14
  rdoc
15
15
  spec/reports
16
+ spec/secrets.yml
16
17
  test/tmp
17
18
  test/version_tmp
18
19
  tmp
@@ -1,6 +1,15 @@
1
+
1
2
  module Yandex
3
+
4
+ class JsonParser < HTTParty::Parser
5
+ def json
6
+ ::JSON.parse(body)
7
+ end
8
+ end
9
+
2
10
  class Translator
3
11
  include HTTParty
12
+ parser JsonParser
4
13
  base_uri 'https://translate.yandex.net/api/v1.5/tr.json'
5
14
 
6
15
  attr_reader :api_key
@@ -17,8 +26,8 @@ module Yandex
17
26
  translator.get_langs
18
27
  end
19
28
 
20
- def translate(text, *lang)
21
- translator.translate(text, *lang)
29
+ def translate(text, from: nil, to: nil)
30
+ translator.translate(text, from: from, to: to)
22
31
  end
23
32
 
24
33
  def detect(text)
@@ -42,13 +51,10 @@ module Yandex
42
51
  lang == '' ? nil : lang
43
52
  end
44
53
 
45
- def translate(text, *lang)
46
- if lang.last.is_a?(Hash)
47
- lang_options = lang.last
48
- lang = [lang_options[:to], lang_options[:from]].compact
49
- end
54
+ def translate(text, from: nil, to: nil, format: 'plain')
55
+ lang = (to.nil? && from.nil?) ? [] : [to, from].compact
50
56
 
51
- options = { text: text, lang: lang.reverse.join('-') }
57
+ options = { text: text, lang: lang.reverse.join('-'), format: format }
52
58
 
53
59
  result = visit('/translate', options)['text']
54
60
 
@@ -1,5 +1,5 @@
1
1
  module Yandex
2
2
  class Translator
3
- VERSION = '0.3.2'
3
+ VERSION = '0.3.3'
4
4
  end
5
5
  end
@@ -1,4 +1,5 @@
1
1
  require 'spec_helper'
2
+ require 'vcr'
2
3
 
3
4
  describe Yandex::Translator do
4
5
  let(:api_key) { 'secret' }
@@ -0,0 +1,90 @@
1
+ require 'spec_helper'
2
+ require 'vcr'
3
+
4
+ describe Yandex::Translator do
5
+ let(:api_key) { RSpec.configuration.yandex_api_key }
6
+ subject(:translator) { Yandex::Translator.new(api_key) }
7
+
8
+ describe '::translate' do
9
+ before do
10
+ expect_any_instance_of(Yandex::Translator).to receive(:translate)
11
+ Yandex::Translator.api_key = api_key
12
+ end
13
+ end
14
+
15
+ describe '#translate' do
16
+ it 'returns ru translalation ' do
17
+ VCR.use_cassette('get_translated_ru_text') do
18
+ response = translator.translate('Car', 'ru')
19
+ expect(response).to eq("Автомобиль")
20
+ end
21
+ end
22
+
23
+ it 'returns pl translalation' do
24
+ VCR.use_cassette('get_translated_pl_text') do
25
+ response = translator.translate('Car', 'pl')
26
+ expect(response).to eq("Samochód")
27
+ end
28
+ end
29
+
30
+ it 'accepts options' do
31
+ VCR.use_cassette('accepts options') do
32
+ response = translator.translate('Car', from: :ru)
33
+ expect(response).to eq("Автомобиль")
34
+ end
35
+ end
36
+
37
+ context 'with two languages' do
38
+ it 'accepts options' do
39
+ VCR.use_cassette('accepts options') do
40
+ response = translator.translate('Samochód', from: :pl, to: :ru)
41
+ expect(response).to eq("Автомобиль")
42
+ end
43
+ end
44
+
45
+ it 'accepts languages list' do
46
+ VCR.use_cassette('accepts options') do
47
+ response = translator.translate('Car', :ru, :en)
48
+ expect(response).to eq("Автомобиль")
49
+ end
50
+ end
51
+ end
52
+
53
+ context 'with wrong api key' do
54
+ let(:wrong_translator) { Yandex::Translator.new('wrong_api_key') }
55
+
56
+ it 'returns translation error' do
57
+ expect{
58
+ VCR.use_cassette('wrong_api_key') do
59
+ wrong_translator.translate('Car', :ru, :en)
60
+ end
61
+ }.to raise_error(Yandex::ApiError, "API key is invalid")
62
+ end
63
+ end
64
+ end
65
+
66
+ describe '#detect' do
67
+ let(:detected_translation) {
68
+ VCR.use_cassette('#detect') do
69
+ translator.detect('Car')
70
+ end
71
+ }
72
+
73
+ it 'returns detected language' do
74
+ expect(detected_translation).to eq 'en'
75
+ end
76
+ end
77
+
78
+ describe '#langs' do
79
+ let(:list_of_langs) {
80
+ VCR.use_cassette('#langs') do
81
+ translator.langs
82
+ end
83
+ }
84
+
85
+ it 'returns array of dirs' do
86
+ expect(list_of_langs).to include 'en-ru', 'uk-pl', 'pl-ru'
87
+ end
88
+
89
+ end
90
+ end
@@ -1,8 +1,20 @@
1
1
  require 'rspec'
2
2
  require 'yandex-translator'
3
3
  require 'webmock/rspec'
4
- include WebMock
4
+ require 'vcr'
5
+ include WebMock::API
5
6
 
6
7
  RSpec.configure do |config|
8
+ if File.exists? ('spec/secrets.yml')
9
+ YANDEX_API_KEY = YAML.load_file('spec/secrets.yml')
10
+ else
11
+ YANDEX_API_KEY = {}
12
+ end
13
+ config.add_setting :yandex_api_key, :default => YANDEX_API_KEY['yandex_translator_api_key']
14
+ end
7
15
 
16
+ VCR.configure do |c|
17
+ c.cassette_library_dir = 'spec/vcr'
18
+ c.hook_into :webmock
19
+ c.filter_sensitive_data('<YANDEX_API_KEY>') { RSpec.configuration.yandex_api_key }
8
20
  end
@@ -0,0 +1,42 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://translate.yandex.net/api/v1.5/tr.json/detect
6
+ body:
7
+ encoding: UTF-8
8
+ string: text=Car&key=<YANDEX_API_KEY>
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/1.6.2
23
+ Date:
24
+ - Fri, 19 May 2017 10:25:21 GMT
25
+ Content-Type:
26
+ - application/json; charset=utf-8
27
+ Content-Length:
28
+ - '24'
29
+ Connection:
30
+ - keep-alive
31
+ Keep-Alive:
32
+ - timeout=120
33
+ Cache-Control:
34
+ - no-store
35
+ X-Content-Type-Options:
36
+ - nosniff
37
+ body:
38
+ encoding: UTF-8
39
+ string: '{"code":200,"lang":"en"}'
40
+ http_version:
41
+ recorded_at: Fri, 19 May 2017 10:25:21 GMT
42
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,40 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://translate.yandex.net/api/v1.5/tr.json/getLangs
6
+ body:
7
+ encoding: UTF-8
8
+ string: key=<YANDEX_API_KEY>
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/1.6.2
23
+ Content-Type:
24
+ - application/json; charset=utf-8
25
+ Transfer-Encoding:
26
+ - chunked
27
+ Connection:
28
+ - keep-alive
29
+ Keep-Alive:
30
+ - timeout=120
31
+ Date:
32
+ - Fri, 19 May 2017 10:25:21 GMT
33
+ X-Content-Type-Options:
34
+ - nosniff
35
+ body:
36
+ encoding: ASCII-8BIT
37
+ string: '{"dirs":["az-ru","be-bg","be-cs","be-de","be-en","be-es","be-fr","be-it","be-pl","be-ro","be-ru","be-sr","be-tr","bg-be","bg-ru","bg-uk","ca-en","ca-ru","cs-be","cs-en","cs-ru","cs-uk","da-en","da-ru","de-be","de-en","de-es","de-fr","de-it","de-ru","de-tr","de-uk","el-en","el-ru","en-be","en-ca","en-cs","en-da","en-de","en-el","en-es","en-et","en-fi","en-fr","en-hu","en-it","en-lt","en-lv","en-mk","en-nl","en-no","en-pt","en-ru","en-sk","en-sl","en-sq","en-sv","en-tr","en-uk","es-be","es-de","es-en","es-ru","es-uk","et-en","et-ru","fi-en","fi-ru","fr-be","fr-de","fr-en","fr-ru","fr-uk","hr-ru","hu-en","hu-ru","hy-ru","it-be","it-de","it-en","it-ru","it-uk","lt-en","lt-ru","lv-en","lv-ru","mk-en","mk-ru","nl-en","nl-ru","no-en","no-ru","pl-be","pl-ru","pl-uk","pt-en","pt-ru","ro-be","ro-ru","ro-uk","ru-az","ru-be","ru-bg","ru-ca","ru-cs","ru-da","ru-de","ru-el","ru-en","ru-es","ru-et","ru-fi","ru-fr","ru-hr","ru-hu","ru-hy","ru-it","ru-lt","ru-lv","ru-mk","ru-nl","ru-no","ru-pl","ru-pt","ru-ro","ru-sk","ru-sl","ru-sq","ru-sr","ru-sv","ru-tr","ru-uk","sk-en","sk-ru","sl-en","sl-ru","sq-en","sq-ru","sr-be","sr-ru","sr-uk","sv-en","sv-ru","tr-be","tr-de","tr-en","tr-ru","tr-uk","uk-bg","uk-cs","uk-de","uk-en","uk-es","uk-fr","uk-it","uk-pl","uk-ro","uk-ru","uk-sr","uk-tr"]}'
38
+ http_version:
39
+ recorded_at: Fri, 19 May 2017 10:25:21 GMT
40
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,43 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://translate.yandex.net/api/v1.5/tr.json/translate
6
+ body:
7
+ encoding: UTF-8
8
+ string: text=Car&lang=ru&key=<YANDEX_API_KEY>
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/1.6.2
23
+ Date:
24
+ - Fri, 19 May 2017 10:25:20 GMT
25
+ Content-Type:
26
+ - application/json; charset=utf-8
27
+ Content-Length:
28
+ - '59'
29
+ Connection:
30
+ - keep-alive
31
+ Keep-Alive:
32
+ - timeout=120
33
+ X-Content-Type-Options:
34
+ - nosniff
35
+ Cache-Control:
36
+ - no-store
37
+ body:
38
+ encoding: ASCII-8BIT
39
+ string: !binary |-
40
+ eyJjb2RlIjoyMDAsImxhbmciOiJlbi1ydSIsInRleHQiOlsi0JDQstGC0L7QvNC+0LHQuNC70YwiXX0=
41
+ http_version:
42
+ recorded_at: Fri, 19 May 2017 10:25:20 GMT
43
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,43 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://translate.yandex.net/api/v1.5/tr.json/translate
6
+ body:
7
+ encoding: UTF-8
8
+ string: text=Car&lang=pl&key=<YANDEX_API_KEY>
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/1.6.2
23
+ Date:
24
+ - Fri, 19 May 2017 10:25:19 GMT
25
+ Content-Type:
26
+ - application/json; charset=utf-8
27
+ Content-Length:
28
+ - '48'
29
+ Connection:
30
+ - keep-alive
31
+ Keep-Alive:
32
+ - timeout=120
33
+ X-Content-Type-Options:
34
+ - nosniff
35
+ Cache-Control:
36
+ - no-store
37
+ body:
38
+ encoding: ASCII-8BIT
39
+ string: !binary |-
40
+ eyJjb2RlIjoyMDAsImxhbmciOiJlbi1wbCIsInRleHQiOlsiU2Ftb2Now7NkIl19
41
+ http_version:
42
+ recorded_at: Fri, 19 May 2017 10:25:19 GMT
43
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,43 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://translate.yandex.net/api/v1.5/tr.json/translate
6
+ body:
7
+ encoding: UTF-8
8
+ string: text=Car&lang=ru&key=<YANDEX_API_KEY>
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/1.6.2
23
+ Date:
24
+ - Fri, 19 May 2017 10:25:18 GMT
25
+ Content-Type:
26
+ - application/json; charset=utf-8
27
+ Content-Length:
28
+ - '59'
29
+ Connection:
30
+ - keep-alive
31
+ Keep-Alive:
32
+ - timeout=120
33
+ X-Content-Type-Options:
34
+ - nosniff
35
+ Cache-Control:
36
+ - no-store
37
+ body:
38
+ encoding: ASCII-8BIT
39
+ string: !binary |-
40
+ eyJjb2RlIjoyMDAsImxhbmciOiJlbi1ydSIsInRleHQiOlsi0JDQstGC0L7QvNC+0LHQuNC70YwiXX0=
41
+ http_version:
42
+ recorded_at: Fri, 19 May 2017 10:25:18 GMT
43
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,42 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://translate.yandex.net/api/v1.5/tr.json/translate
6
+ body:
7
+ encoding: UTF-8
8
+ string: text=Car&lang=en-ru&key=wrong_api_key
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: 403
19
+ message: Forbidden
20
+ headers:
21
+ Server:
22
+ - nginx/1.6.2
23
+ Date:
24
+ - Fri, 19 May 2017 10:25:20 GMT
25
+ Content-Type:
26
+ - application/json; charset=utf-8
27
+ Content-Length:
28
+ - '43'
29
+ Connection:
30
+ - keep-alive
31
+ Keep-Alive:
32
+ - timeout=120
33
+ X-Content-Type-Options:
34
+ - nosniff
35
+ Cache-Control:
36
+ - no-store
37
+ body:
38
+ encoding: UTF-8
39
+ string: '{"code":401,"message":"API key is invalid"}'
40
+ http_version:
41
+ recorded_at: Fri, 19 May 2017 10:25:20 GMT
42
+ recorded_with: VCR 3.0.3
@@ -15,6 +15,7 @@ Gem::Specification.new do |gem|
15
15
  gem.add_dependency 'httparty', '>= 0.13.4'
16
16
  gem.add_development_dependency 'rspec', '~> 3.1'
17
17
  gem.add_development_dependency 'webmock'
18
+ gem.add_development_dependency 'vcr'
18
19
 
19
20
  gem.files = `git ls-files`.split($/)
20
21
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yandex-translator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artur Egorov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-21 00:00:00.000000000 Z
11
+ date: 2020-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: vcr
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  description: Library for Yandex Translate API
56
70
  email:
57
71
  - artur@egorov.in
@@ -68,7 +82,14 @@ files:
68
82
  - lib/yandex/translator.rb
69
83
  - lib/yandex/translator/version.rb
70
84
  - spec/lib/yandex/translator_spec.rb
85
+ - spec/lib/yandex/translator_vcr_spec.rb
71
86
  - spec/spec_helper.rb
87
+ - spec/vcr/_detect.yml
88
+ - spec/vcr/_langs.yml
89
+ - spec/vcr/accepts_options.yml
90
+ - spec/vcr/get_translated_pl_text.yml
91
+ - spec/vcr/get_translated_ru_text.yml
92
+ - spec/vcr/wrong_api_key.yml
72
93
  - yandex-translator.gemspec
73
94
  homepage: ''
74
95
  licenses: []
@@ -89,10 +110,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
89
110
  version: '0'
90
111
  requirements: []
91
112
  rubyforge_project:
92
- rubygems_version: 2.2.0
113
+ rubygems_version: 2.7.6
93
114
  signing_key:
94
115
  specification_version: 4
95
116
  summary: Yandex Translate API
96
117
  test_files:
97
118
  - spec/lib/yandex/translator_spec.rb
119
+ - spec/lib/yandex/translator_vcr_spec.rb
98
120
  - spec/spec_helper.rb
121
+ - spec/vcr/_detect.yml
122
+ - spec/vcr/_langs.yml
123
+ - spec/vcr/accepts_options.yml
124
+ - spec/vcr/get_translated_pl_text.yml
125
+ - spec/vcr/get_translated_ru_text.yml
126
+ - spec/vcr/wrong_api_key.yml