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 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: []