gtranslate-two 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,7 +1,5 @@
1
1
  source "http://rubygems.org"
2
- # Add dependencies required to use your gem here.
3
- # Example:
4
- # gem "activesupport", ">= 2.3.5"
2
+ gem "json"
5
3
 
6
4
  # Add dependencies to develop your gem here.
7
5
  # Include everything needed to run rake, tests, features, etc.
data/Gemfile.lock CHANGED
@@ -6,6 +6,7 @@ GEM
6
6
  bundler (~> 1.0.0)
7
7
  git (>= 1.2.5)
8
8
  rake
9
+ json (1.4.6)
9
10
  rake (0.8.7)
10
11
  rcov (0.9.9)
11
12
  shoulda (2.11.3)
@@ -16,5 +17,6 @@ PLATFORMS
16
17
  DEPENDENCIES
17
18
  bundler (~> 1.0.0)
18
19
  jeweler (~> 1.5.2)
20
+ json
19
21
  rcov
20
22
  shoulda
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} [https://code.google.com/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.3
1
+ 0.1.4
@@ -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.3"
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-01-23}
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
@@ -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; @@key; end
12
- def self.key=(key); @@key = key; end
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); translate(query, 'en').source; end
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
- url = "https://www.googleapis.com/language/translate/v2?#{params}"
21
- result = JSON.parse(open(url).read)['data']['translations'].collect do |params|
22
- GTranslatorResult.new(query, target, params, source)
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
@@ -1,7 +1,99 @@
1
1
  require 'helper'
2
2
 
3
3
  class TestGtranslateTwo < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
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: 29
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 3
10
- version: 0.1.3
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-01-23 00:00:00 +00:00
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: :development
32
- name: shoulda
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: *id002
64
+ version_requirements: *id003
51
65
  - !ruby/object:Gem::Dependency
52
- requirement: &id003 !ruby/object:Gem::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: *id003
80
+ version_requirements: *id004
67
81
  - !ruby/object:Gem::Dependency
68
- requirement: &id004 !ruby/object:Gem::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: *id004
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: []