y-translate 0.2.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f84446310cb02365ebe8a3b3345dd87b85fe2291
4
+ data.tar.gz: 6f24c386fcd2b6da0d509c027d8563be69526a80
5
+ SHA512:
6
+ metadata.gz: a3da430286dcbb65cb6583e7ccdfe61fe83c8da940be2f77aa3933ce958a5a1caf30a653f4aab1a91c777bf8edec5f0a1f0bdacd362ab2246a1258179f9eb147
7
+ data.tar.gz: 94aa34f71cc3e2d8bda1b97a9cb077acd4b4bb5d296739ef022e85f9e56a48d549217760e399f05a23043c531bce5fc4403ee08430b7b3f0391c6c6eb28d7d4c
@@ -0,0 +1,48 @@
1
+ require 'y/translate/error'
2
+ require 'http'
3
+
4
+ module Y
5
+ module Translate
6
+ class API
7
+ BASE_URI = 'https://translate.yandex.net/api/v1.5/tr.json'.freeze
8
+
9
+ METHOD_GET_LANGS = 'getLangs'.freeze
10
+ METHOD_DETECT = 'detect'.freeze
11
+ METHOD_TRANSLATE = 'translate'.freeze
12
+
13
+ attr_accessor :key
14
+
15
+ def initialize(key)
16
+ @key = key
17
+ end
18
+
19
+ class << self
20
+ attr_accessor :api
21
+ end
22
+
23
+ def self.key=(key)
24
+ @api = new(key)
25
+ end
26
+
27
+ def self.key
28
+ api.key
29
+ end
30
+
31
+ def self.request(type, method, params = {})
32
+ url = URI.parse("#{BASE_URI}/#{method}")
33
+ params[:key] = key
34
+
35
+ begin
36
+ response = HTTP.send(type, url, params: params)
37
+ rescue
38
+ raise Error.new
39
+ end
40
+
41
+ code = response.code.to_i
42
+ raise Error.new(code) if Error::ERROR_CODES.key?(code)
43
+
44
+ response.parse
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,15 @@
1
+ module Y
2
+ module Translate
3
+ class Configuration
4
+ DEFAULT_LANG_FROM = 'en'.freeze
5
+ DEFAULT_LANG_TO = 'ru'.freeze
6
+
7
+ attr_accessor :api_key, :lang_from, :lang_to
8
+
9
+ def initialize
10
+ @lang_from = DEFAULT_LANG_FROM
11
+ @lang_to = DEFAULT_LANG_TO
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,23 @@
1
+ module Y
2
+ module Translate
3
+ class Error < StandardError
4
+ ERROR_CODES = {
5
+ default: 'Неизвестная ошибка запроса',
6
+ 401 => 'Неправильный API-ключ',
7
+ 402 => 'API-ключ заблокирован',
8
+ 404 => 'Превышено суточное ограничение на объем переведенного текста',
9
+ 413 => 'Превышен максимально допустимый размер текста',
10
+ 422 => 'Текст не может быть переведен',
11
+ 501 => 'Заданное направление перевода не поддерживается'
12
+ }.freeze
13
+
14
+ attr_reader :code
15
+
16
+ def initialize(code = :default)
17
+ @code = code
18
+ msg = ERROR_CODES[code]
19
+ super(msg)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,5 @@
1
+ module Y
2
+ module Translate
3
+ VERSION = "0.2.0"
4
+ end
5
+ end
@@ -0,0 +1,53 @@
1
+ require 'y/translate/api'
2
+ require 'y/translate/version'
3
+ require 'y/translate/configuration'
4
+
5
+ module Y
6
+ module Translate
7
+ class << self
8
+ attr_writer :configuration
9
+ end
10
+
11
+ def self.configuration
12
+ @configuration ||= Configuration.new
13
+ end
14
+
15
+ def self.configure
16
+ yield(configuration)
17
+ API.key = configuration.api_key
18
+ end
19
+
20
+ def self.reset_default
21
+ api_key = configuration.api_key
22
+ @configuration = Configuration.new
23
+ configure do |config|
24
+ config.api_key = api_key
25
+ end
26
+ end
27
+
28
+ def self.get_langs
29
+ request(
30
+ API::METHOD_GET_LANGS,
31
+ ui: Configuration::DEFAULT_LANG_TO
32
+ )['dirs']
33
+ end
34
+
35
+ def self.detect(text)
36
+ request(API::METHOD_DETECT, text: text)['lang']
37
+ end
38
+
39
+ def self.translate(text, params = {})
40
+ params[:text] = text
41
+ params[:lang] = Configuration::DEFAULT_LANG_TO unless params.key?(:lang)
42
+ response = request(API::METHOD_TRANSLATE, params)['text']
43
+ response = response[0] if response.count == 1
44
+ response
45
+ end
46
+
47
+ private
48
+
49
+ def self.request(method, params)
50
+ API.request(:post, method, params)
51
+ end
52
+ end
53
+ end
metadata ADDED
@@ -0,0 +1,105 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: y-translate
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Voronov Dmitry
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-02-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: http
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.13'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.13'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ description: Client for Yandex translate API.
70
+ email:
71
+ - dmdropkick@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - lib/y/translate.rb
77
+ - lib/y/translate/api.rb
78
+ - lib/y/translate/configuration.rb
79
+ - lib/y/translate/error.rb
80
+ - lib/y/translate/version.rb
81
+ homepage: https://github.com/dmdropkick/y-translate
82
+ licenses:
83
+ - MIT
84
+ metadata: {}
85
+ post_install_message:
86
+ rdoc_options: []
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ requirements: []
100
+ rubyforge_project:
101
+ rubygems_version: 2.4.6
102
+ signing_key:
103
+ specification_version: 4
104
+ summary: Yandex translate API.
105
+ test_files: []