to_lang 0.2.0 → 0.2.1
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/README.textile +2 -0
- data/lib/to_lang/connector.rb +15 -23
- data/lib/to_lang/version.rb +1 -1
- data/spec/to_lang/connector_spec.rb +8 -4
- metadata +2 -2
data/README.textile
CHANGED
@@ -14,6 +14,8 @@ Google Translate attempts to detect the source language, but you can specify it
|
|
14
14
|
|
15
15
|
The dynamic methods are simply syntactic sugar for @String#translate@, which you can use directly as well.
|
16
16
|
|
17
|
+
Google Translate currently has a limit of 5,000 characters on input, so any strings longer than that will raise an exception.
|
18
|
+
|
17
19
|
h2. Examples
|
18
20
|
|
19
21
|
Load and initialize *to_lang*:
|
data/lib/to_lang/connector.rb
CHANGED
@@ -5,10 +5,16 @@ module ToLang
|
|
5
5
|
# Responsible for making the actual HTTP request to the Google Translate API.
|
6
6
|
#
|
7
7
|
class Connector
|
8
|
+
include HTTParty
|
9
|
+
|
8
10
|
# The base URL for all requests to the Google Translate API.
|
9
11
|
#
|
10
12
|
API_URL = "https://www.googleapis.com/language/translate/v2"
|
11
13
|
|
14
|
+
# The maximum number of characters the string to translate can be.
|
15
|
+
#
|
16
|
+
MAX_STRING_LENGTH = 5000
|
17
|
+
|
12
18
|
# The Google Translate API key to use when making API calls.
|
13
19
|
#
|
14
20
|
# @return [String] The Google Translate API key.
|
@@ -20,6 +26,7 @@ module ToLang
|
|
20
26
|
# @return [ToLang::Connector] The new {ToLang::Connector} instance.
|
21
27
|
def initialize(key)
|
22
28
|
@key = key
|
29
|
+
self.class.headers "X-HTTP-Method-Override" => "GET"
|
23
30
|
end
|
24
31
|
|
25
32
|
# Makes a request to the Google Translate API.
|
@@ -30,37 +37,22 @@ module ToLang
|
|
30
37
|
# @option options [String] :from The language code for the language of @q@.
|
31
38
|
# @option options [Symbol] :debug Debug output to return instead of the translated string. Must be one of @:request@, @:response@, or @:all@.
|
32
39
|
#
|
33
|
-
# @raise [RuntimeError]
|
40
|
+
# @raise [RuntimeError] If the string is too long or if Google Translate returns any errors.
|
34
41
|
# @return [String, Hash] The translated string or debugging output, as requested.
|
35
42
|
#
|
36
43
|
def request(q, target, options = {})
|
37
|
-
|
38
|
-
|
44
|
+
raise "The string to translate cannot be greater than #{MAX_STRING_LENGTH} characters" if q.size > MAX_STRING_LENGTH
|
45
|
+
|
46
|
+
request_hash = { :key => @key, :q => q, :target => target }
|
47
|
+
request_hash[:source] = options[:from] if options[:from]
|
48
|
+
return request_hash if options[:debug] == :request
|
39
49
|
|
40
|
-
response =
|
41
|
-
return { :request => request, :response => response.parsed_response } if options[:debug] == :all
|
50
|
+
response = self.class.post(API_URL, { :body => request_hash })
|
42
51
|
return response.parsed_response if options[:debug] == :response
|
52
|
+
return { :request => request_hash, :response => response.parsed_response } if options[:debug] == :all
|
43
53
|
|
44
54
|
raise response.parsed_response["error"]["message"] if response.parsed_response["error"] && response.parsed_response["error"]["message"]
|
45
55
|
CGI.unescapeHTML(response.parsed_response["data"]["translations"][0]["translatedText"])
|
46
56
|
end
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
# Constructs the URL that will be used by {#request}.
|
51
|
-
#
|
52
|
-
# @param [String] q The string to translate.
|
53
|
-
# @param [String] target The language code for the language to translate to.
|
54
|
-
# @param [Hash] options A hash of options.
|
55
|
-
# @option options [String] :from The language code for the language of @q@.
|
56
|
-
#
|
57
|
-
# @return [String] The URL to request for the API call.
|
58
|
-
#
|
59
|
-
def request_url(q, target, options)
|
60
|
-
source = options[:from]
|
61
|
-
url = "#{API_URL}?key=#{@key}&q=#{CGI.escape(q)}&target=#{target}"
|
62
|
-
url += "&source=#{source}" if source
|
63
|
-
url
|
64
|
-
end
|
65
57
|
end
|
66
58
|
end
|
data/lib/to_lang/version.rb
CHANGED
@@ -12,7 +12,7 @@ describe ToLang::Connector do
|
|
12
12
|
describe "#request" do
|
13
13
|
def stub_response(parsed_response)
|
14
14
|
mock_response = mock('HTTParty::Response', :parsed_response => parsed_response)
|
15
|
-
|
15
|
+
ToLang::Connector.stub(:post).and_return(mock_response)
|
16
16
|
end
|
17
17
|
|
18
18
|
def stub_good_response(translated_text)
|
@@ -59,8 +59,7 @@ describe ToLang::Connector do
|
|
59
59
|
|
60
60
|
context "when debugging the request" do
|
61
61
|
it "returns the request URL" do
|
62
|
-
|
63
|
-
@connector.request("hello world", "es", :from => "en", :debug => :request).should == "https://www.googleapis.com/language/translate/v2?key=apikey&q=hello+world&target=es&source=en"
|
62
|
+
@connector.request("hello world", "es", :from => "en", :debug => :request).should == { :key=> "apikey", :q => "hello world", :target => "es", :source => "en" }
|
64
63
|
end
|
65
64
|
end
|
66
65
|
|
@@ -75,8 +74,13 @@ describe ToLang::Connector do
|
|
75
74
|
it "returns a hash with the request URL and the full parsed response" do
|
76
75
|
expected_response = stub_good_response("hola mundo")
|
77
76
|
output = @connector.request("hello world", "es", :from => "en", :debug => :all)
|
78
|
-
output.should == { :request => "
|
77
|
+
output.should == { :request => { :key=> "apikey", :q => "hello world", :target => "es", :source => "en" }, :response => expected_response }
|
79
78
|
end
|
80
79
|
end
|
80
|
+
|
81
|
+
it "raises an exception if the encoding string is longer than the maximum allowed characters" do
|
82
|
+
str = 'x' * (ToLang::Connector::MAX_STRING_LENGTH + 1)
|
83
|
+
expect { @connector.request(str, "en", :from => "ja")}.to raise_error(RuntimeError, "The string to translate cannot be greater than #{ToLang::Connector::MAX_STRING_LENGTH} characters")
|
84
|
+
end
|
81
85
|
end
|
82
86
|
end
|