gtranslate-two 0.1.3 → 0.1.4
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.
- data/Gemfile +1 -3
- data/Gemfile.lock +2 -0
- data/README.rdoc +1 -1
- data/VERSION +1 -1
- data/gtranslate-two.gemspec +5 -2
- data/lib/glanguage.rb +15 -0
- data/lib/gtranslate-two.rb +50 -10
- data/test/test_gtranslate-two.rb +94 -2
- metadata +25 -11
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
data/README.rdoc
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
This is a simple Ruby gem designed to use Google Translate API v2 - unlike other gems which use the first version of the API.
|
4
4
|
|
5
|
-
Also unlike other available gems, this one requires the use of an API key, which you can get from the {Google APIs console}
|
5
|
+
Also unlike other available gems, this one requires the use of an API key, which you can get from the {Google APIs console}[https://code.google.com/apis/console/].
|
6
6
|
|
7
7
|
== Usage
|
8
8
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.4
|
data/gtranslate-two.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{gtranslate-two}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Marcin Wyszynski"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-02-23}
|
13
13
|
s.description = %q{This is a super-simple Ruby client for Google Translate API v2. You will need the developer key to work with it.}
|
14
14
|
s.email = %q{marcin.pixie@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -46,17 +46,20 @@ Gem::Specification.new do |s|
|
|
46
46
|
s.specification_version = 3
|
47
47
|
|
48
48
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
49
|
+
s.add_runtime_dependency(%q<json>, [">= 0"])
|
49
50
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
50
51
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
51
52
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
52
53
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
53
54
|
else
|
55
|
+
s.add_dependency(%q<json>, [">= 0"])
|
54
56
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
55
57
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
56
58
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
57
59
|
s.add_dependency(%q<rcov>, [">= 0"])
|
58
60
|
end
|
59
61
|
else
|
62
|
+
s.add_dependency(%q<json>, [">= 0"])
|
60
63
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
61
64
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
62
65
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
data/lib/glanguage.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
module GLanguage
|
2
|
+
|
2
3
|
Afrikaans = 'af'
|
3
4
|
Albanian = 'sq'
|
4
5
|
Arabic = 'ar'
|
@@ -51,4 +52,18 @@ module GLanguage
|
|
51
52
|
Vietnamese = 'vi'
|
52
53
|
Welsh = 'cy'
|
53
54
|
Yiddish = 'yi'
|
55
|
+
|
56
|
+
# This method will look up a particular symbol and
|
57
|
+
# try to return a correspondind constant as a string
|
58
|
+
def self.lookup(symbol)
|
59
|
+
result = self.constants.select do |const|
|
60
|
+
eval("self::#{const}").eql?(symbol)
|
61
|
+
end
|
62
|
+
if result.empty?
|
63
|
+
raise NameError, "Looks like '#{symbol}' is not a symbol of a supported language"
|
64
|
+
else
|
65
|
+
result.to_s
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
54
69
|
end
|
data/lib/gtranslate-two.rb
CHANGED
@@ -1,27 +1,67 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'gtranslatorresult')
|
2
2
|
require File.join(File.dirname(__FILE__), 'glanguage')
|
3
|
-
require 'rubygems'
|
4
|
-
require 'open-uri'
|
5
3
|
require 'json'
|
4
|
+
require 'net/https'
|
5
|
+
require 'uri'
|
6
6
|
|
7
7
|
class GTranslator
|
8
8
|
|
9
9
|
@@key = nil
|
10
10
|
|
11
|
-
def self.key
|
12
|
-
|
11
|
+
def self.key
|
12
|
+
@@key
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.key=(key)
|
16
|
+
@@key = key
|
17
|
+
end
|
13
18
|
|
14
|
-
def self.detect_language(query)
|
19
|
+
def self.detect_language(query)
|
20
|
+
translate(query, 'en').source
|
21
|
+
end
|
15
22
|
|
16
23
|
def self.translate(query, target, source=nil)
|
24
|
+
|
25
|
+
# Step 1a: make an array of required parameters to send to the Google Translate server
|
17
26
|
options = { :q => query, :target => target, :key => @@key }
|
27
|
+
|
28
|
+
# Step 1b: Add the optional source parameter if it has been explicitly specified
|
18
29
|
options[:source] = source if source
|
30
|
+
|
31
|
+
# Step 1c: Serialize the hash for the POST request
|
19
32
|
params = URI.escape(options.collect{|k,v| "#{k}=#{v}"}.join('&'))
|
20
|
-
|
21
|
-
|
22
|
-
|
33
|
+
|
34
|
+
# Step 2a: Get the Google Translate host address
|
35
|
+
uri = URI.parse('https://www.googleapis.com/language/translate/v2')
|
36
|
+
|
37
|
+
# Step 2b: Create a new HTTP client from the provided host address
|
38
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
39
|
+
|
40
|
+
# Step 2c: Force the HTTP client to use SSL and assign a proper certificate
|
41
|
+
http.use_ssl = true
|
42
|
+
http.ssl_timeout = 2
|
43
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
44
|
+
store = OpenSSL::X509::Store.new
|
45
|
+
store.set_default_paths
|
46
|
+
http.cert_store = store
|
47
|
+
|
48
|
+
# Step 2d: Make an actual POST request and grab the response and it's body
|
49
|
+
response, body = http.post(uri.path, params, { 'X-HTTP-Method-Override' => 'GET' })
|
50
|
+
|
51
|
+
# Step 3a: If the response indicates an HTTP OK code (200), parse the body as JSON
|
52
|
+
if response.is_a?(Net::HTTPOK)
|
53
|
+
# Step 3b: The JSON response has 1 or more 'translations' - out of each one...
|
54
|
+
result = JSON.parse(body)['data']['translations'].collect do |params|
|
55
|
+
#... create a new GTranslatorResult object
|
56
|
+
GTranslatorResult.new(query, target, params, source)
|
57
|
+
end
|
58
|
+
# Step 4a: If all went well, return the resulting GTranslatorResult or an array of those
|
59
|
+
# if more than one translation has been returned
|
60
|
+
return result.size == 1 ? result.first : result
|
61
|
+
else
|
62
|
+
# Step 4b: Otherwise, return the error response (generally, a Net::HTTPBadRequest)
|
63
|
+
response
|
23
64
|
end
|
24
|
-
return result.size == 1 ? result.first : result
|
25
65
|
end
|
26
|
-
|
66
|
+
|
27
67
|
end
|
data/test/test_gtranslate-two.rb
CHANGED
@@ -1,7 +1,99 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
class TestGtranslateTwo < Test::Unit::TestCase
|
4
|
-
|
5
|
-
|
4
|
+
|
5
|
+
source = GLanguage::English
|
6
|
+
target = GLanguage::Danish
|
7
|
+
query = 'Hello world!'
|
8
|
+
expected_danish_translation = 'Hej Verden!'
|
9
|
+
correct_key = 'AIzaSyCb2FdHRnpzFMei4qYAD6AOwgjOAYS1ZlY'
|
10
|
+
|
11
|
+
# Eliminating unexpected behaviors
|
12
|
+
|
13
|
+
should 'frown on an incorrect language' do
|
14
|
+
assert_raise(NameError, 'Oh noes, you should not be able to translate from Klingon') do
|
15
|
+
target = GLanguage::Klingon
|
16
|
+
end
|
6
17
|
end
|
18
|
+
|
19
|
+
should 'not lookup an incorrect language' do
|
20
|
+
assert_raise(NameError, 'Oh noes, you should not be able to look up Klingon') do
|
21
|
+
result = GLanguage.lookup('kl')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
should 'not work with an incorrect key' do
|
26
|
+
GTranslator.key = 'test_key'
|
27
|
+
result = GTranslator.translate(query, target, source)
|
28
|
+
assert_instance_of(Net::HTTPBadRequest, result, 'Oh noes, you can translate with an incorrect key')
|
29
|
+
end
|
30
|
+
|
31
|
+
should 'not work no parameters' do
|
32
|
+
GTranslator.key = correct_key
|
33
|
+
assert_raise(ArgumentError, 'Oh noes, you should not be able to translate without parameters') do
|
34
|
+
result = GTranslator.translate()
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
should 'not work just one parameter' do
|
39
|
+
GTranslator.key = correct_key
|
40
|
+
assert_raise(ArgumentError, 'Oh noes, you should not be able to translate without parameters') do
|
41
|
+
result = GTranslator.translate(query)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
should 'not work with a manually entered crazy language' do
|
46
|
+
GTranslator.key = correct_key
|
47
|
+
result = GTranslator.translate(query, 'kl')
|
48
|
+
assert_instance_of(Net::HTTPBadRequest, result, 'Oh noes, you could attempt to translate from an unsupported language')
|
49
|
+
end
|
50
|
+
|
51
|
+
# Checking for expected behaviors
|
52
|
+
|
53
|
+
should 'be able to set and return an API key' do
|
54
|
+
GTranslator.key = 'test_key'
|
55
|
+
assert_equal GTranslator.key, 'test_key', 'Oh noes, key saved incorrectly'
|
56
|
+
end
|
57
|
+
|
58
|
+
should 'be able to return a translation with both source and target langauge provided' do
|
59
|
+
GTranslator.key = correct_key
|
60
|
+
result = GTranslator.translate(query, target, source)
|
61
|
+
assert(
|
62
|
+
result.is_a?(GTranslatorResult) || result.first.is_a?(GTranslatorResult),
|
63
|
+
'Result is neither a GTranslatorResult nor an Array of those'
|
64
|
+
)
|
65
|
+
end
|
66
|
+
|
67
|
+
should 'provide a correct translation with both source and target langauge provided' do
|
68
|
+
GTranslator.key = correct_key
|
69
|
+
result = GTranslator.translate(query, target, source)
|
70
|
+
assert_equal result.translation, expected_danish_translation, 'Oh noes, translation incorrect'
|
71
|
+
end
|
72
|
+
|
73
|
+
should 'be able to return a translation with only the target langauge provided' do
|
74
|
+
GTranslator.key = correct_key
|
75
|
+
result = GTranslator.translate(query, target)
|
76
|
+
assert(
|
77
|
+
result.is_a?(GTranslatorResult) || result.first.is_a?(GTranslatorResult),
|
78
|
+
'Result is neither a GTranslatorResult nor an Array of those'
|
79
|
+
)
|
80
|
+
end
|
81
|
+
|
82
|
+
should 'provide a correct translation with only the target langauge provided' do
|
83
|
+
GTranslator.key = correct_key
|
84
|
+
result = GTranslator.translate(query, target)
|
85
|
+
assert_equal result.translation, expected_danish_translation, 'Oh noes, translation incorrect'
|
86
|
+
end
|
87
|
+
|
88
|
+
should 'correctly detect a language' do
|
89
|
+
GTranslator.key = correct_key
|
90
|
+
result = GTranslator.detect_language(query)
|
91
|
+
assert_equal result, source, 'Oh noes, translation incorrect'
|
92
|
+
end
|
93
|
+
|
94
|
+
should 'look up the language constant correctly' do
|
95
|
+
result = GLanguage.lookup(GLanguage::Danish)
|
96
|
+
assert_equal result, 'Danish', 'Oh noes, lookup failed'
|
97
|
+
end
|
98
|
+
|
7
99
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gtranslate-two
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 4
|
10
|
+
version: 0.1.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Marcin Wyszynski
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-02-23 00:00:00 +00:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -28,12 +28,26 @@ dependencies:
|
|
28
28
|
segments:
|
29
29
|
- 0
|
30
30
|
version: "0"
|
31
|
-
type: :
|
32
|
-
name:
|
31
|
+
type: :runtime
|
32
|
+
name: json
|
33
33
|
prerelease: false
|
34
34
|
version_requirements: *id001
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
requirement: &id002 !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
hash: 3
|
42
|
+
segments:
|
43
|
+
- 0
|
44
|
+
version: "0"
|
45
|
+
type: :development
|
46
|
+
name: shoulda
|
47
|
+
prerelease: false
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
37
51
|
none: false
|
38
52
|
requirements:
|
39
53
|
- - ~>
|
@@ -47,9 +61,9 @@ dependencies:
|
|
47
61
|
type: :development
|
48
62
|
name: bundler
|
49
63
|
prerelease: false
|
50
|
-
version_requirements: *
|
64
|
+
version_requirements: *id003
|
51
65
|
- !ruby/object:Gem::Dependency
|
52
|
-
requirement: &
|
66
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
53
67
|
none: false
|
54
68
|
requirements:
|
55
69
|
- - ~>
|
@@ -63,9 +77,9 @@ dependencies:
|
|
63
77
|
type: :development
|
64
78
|
name: jeweler
|
65
79
|
prerelease: false
|
66
|
-
version_requirements: *
|
80
|
+
version_requirements: *id004
|
67
81
|
- !ruby/object:Gem::Dependency
|
68
|
-
requirement: &
|
82
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
69
83
|
none: false
|
70
84
|
requirements:
|
71
85
|
- - ">="
|
@@ -77,7 +91,7 @@ dependencies:
|
|
77
91
|
type: :development
|
78
92
|
name: rcov
|
79
93
|
prerelease: false
|
80
|
-
version_requirements: *
|
94
|
+
version_requirements: *id005
|
81
95
|
description: This is a super-simple Ruby client for Google Translate API v2. You will need the developer key to work with it.
|
82
96
|
email: marcin.pixie@gmail.com
|
83
97
|
executables: []
|