shvets-google_translate 0.5.3 → 0.5.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/Rakefile CHANGED
@@ -7,7 +7,7 @@ require 'spec/rake/spectask'
7
7
  require 'rake/rdoctask'
8
8
  require 'rcov/rcovtask'
9
9
 
10
- SPEC = Gem::Specification.load('google-translate.gemspec')
10
+ SPEC = Gem::Specification.load('google_translate.gemspec')
11
11
 
12
12
  Rake::GemPackageTask.new(SPEC) do |pkg|
13
13
  pkg.need_tar = true
@@ -34,4 +34,24 @@ Rcov::RcovTask.new do |task|
34
34
  task.verbose = true
35
35
  end
36
36
 
37
+ desc "test gem compatibility with github"
38
+ task :"github:validate" do
39
+ require 'yaml'
40
+
41
+ require 'rubygems/specification'
42
+ data = File.read("google_translate.gemspec")
43
+ spec = nil
44
+
45
+ if data !~ %r{!ruby/object:Gem::Specification}
46
+ Thread.new { spec = eval("$SAFE = 3\n#{data}") }.join
47
+ else
48
+ spec = YAML.load(data)
49
+ end
50
+
51
+ spec.validate
52
+
53
+ puts spec
54
+ puts "OK"
55
+ end
56
+
37
57
  task :default => :rcov
data/bin/translate CHANGED
@@ -3,7 +3,7 @@
3
3
  $:.unshift(File::join(File::dirname(File::dirname(__FILE__)), "lib"))
4
4
 
5
5
  require 'rubygems'
6
- require 'google_translate.rb'
6
+ require 'google_translate'
7
7
 
8
8
  class Translate
9
9
  USAGE= <<-TEXT
@@ -23,6 +23,15 @@ class Translate
23
23
  puts list.join(', ')
24
24
  end
25
25
 
26
+ def display text
27
+ if RUBY_PLATFORM =~ /mswin32/
28
+ File.open("temp.txt", "w") {|f| f.write text }
29
+ %x[notepad temp.txt]
30
+ else
31
+ puts text
32
+ end
33
+ end
34
+
26
35
  def run
27
36
  if(ARGV.size == 0)
28
37
  puts USAGE and return
@@ -44,17 +53,15 @@ class Translate
44
53
  from = $1
45
54
  to = $2
46
55
 
47
- puts @translator.translate(from.to_sym, to.to_sym, from_text)
48
-
56
+ display(@translator.translate(from.to_sym, to.to_sym, from_text))
49
57
  when /(..)/
50
58
  from_text = ARGV.join(' ')
51
59
 
52
60
  from = @translator.detect_language(from_text)['language']
53
61
  to = $1
54
62
 
55
- puts @translator.translate(from.to_sym, to.to_sym, from_text)
63
+ display(@translator.translate(from.to_sym, to.to_sym, from_text))
56
64
  end
57
-
58
65
  end
59
66
  end
60
67
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{google_translate}
5
- s.version = "0.5.3"
5
+ s.version = "0.5.4"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
 
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
11
11
  s.description = %q{Simple client for Google Translate API.}
12
12
  s.email = %q{alexander.shvets@gmail.com}
13
13
 
14
- s.files = ["CHANGES", "google_translate.gemspec", "Rakefile", "README", "lib/google_translate.rb ",
14
+ s.files = ["CHANGES", "google_translate.gemspec", "Rakefile", "README", "lib/google_translate.rb",
15
15
  "bin/translate", "bin/translate.bat", "spec/spec_helper.rb" , "spec/translate_spec.rb"]
16
16
 
17
17
  s.has_rdoc = false
@@ -0,0 +1,153 @@
1
+ # google_translate.rb
2
+
3
+ require 'open-uri'
4
+ require 'cgi'
5
+ require 'json'
6
+
7
+ module Google
8
+ class Language
9
+ attr_reader :name, :code
10
+
11
+ def initialize(name, code)
12
+ @name = name
13
+ @code = code
14
+ end
15
+
16
+ def to_s
17
+ "(" + @code + ": " + @name + ")"
18
+ end
19
+ end
20
+
21
+ class Translator
22
+ URL_STRING = "http://ajax.googleapis.com/ajax/services/language/"
23
+ URL2_STRING = "http://translate.google.com"
24
+
25
+ def translate(from, to, from_text, options={})
26
+ raise Exception.new :missing_from_language if from.nil?
27
+ raise Exception.new :missing_to_language if to.nil?
28
+ raise Exception.new :missing_text if from_text.nil?
29
+
30
+ request = URL_STRING + "translate?v=1.0&langpair=#{from}%7C#{to}&q=" + CGI.escape(from_text)
31
+
32
+ begin
33
+ response = call_service(request, [:response_status, :response_details, :response_data])
34
+
35
+ raise Exception.new :translate_server_is_down if response.empty?
36
+
37
+ raise Exception.new response[:response_details] if response[:response_status] != 200 # success
38
+
39
+ to_text = response[:response_data]['translatedText']
40
+
41
+ # to_text = encode_text(to_text) if to == :ru
42
+
43
+ (options[:html]) ? CGI.unescapeHTML(to_text) : to_text
44
+ rescue OpenURI::HTTPError
45
+ raise Exception.new :translate_server_is_down
46
+ end
47
+ end
48
+
49
+ def detect_language test_text
50
+ raise Exception.new :missing_test_text if test_text.nil?
51
+
52
+ request = URL_STRING + "detect?v=1.0&q=" + CGI.escape(test_text)
53
+
54
+ begin
55
+ response = call_service(request, [:response_data])
56
+ response_data = response[:response_data]
57
+
58
+ raise Exception.new :translate_server_is_down if response.empty?
59
+ #raise Exception.new :unreliable_detection if !response_data['isReliable']
60
+
61
+ response_data
62
+ #
63
+ rescue OpenURI::HTTPError
64
+ raise Exception.new :translate_server_is_down
65
+ end
66
+ end
67
+
68
+ def supported_languages
69
+ call_service2(URL2_STRING , [])
70
+ end
71
+
72
+ private
73
+
74
+ def camelize(str)
75
+ words = str.split('_')
76
+
77
+ words[0] + words[1..-1].map {|w| w.capitalize}.join
78
+ end
79
+
80
+ def call_service(request, keys)
81
+ response = {}
82
+
83
+ open(request) do |stream|
84
+ content = stream.read
85
+
86
+ unless content.nil?
87
+ json = JSON.parse(content)
88
+
89
+ keys.each do |key|
90
+ response[key] = json[camelize(key.to_s)]
91
+ end
92
+ end
93
+ end
94
+
95
+ response
96
+ end
97
+
98
+ def call_service2(request, keys)
99
+ response = {}
100
+
101
+ open(URI.escape(request)) do |stream|
102
+ content = stream.read
103
+
104
+ from_languages = collect_languages content, 'sl', 'old_sl'
105
+ to_languages = collect_languages content, 'tl', 'old_tl'
106
+
107
+ response[:from_languages] = from_languages
108
+ response[:to_languages] = to_languages
109
+ end
110
+
111
+ response
112
+ end
113
+
114
+ def collect_languages buffer, tag_name, tag_id
115
+ languages = []
116
+
117
+ spaces = '\s?'
118
+ quote = '(\s|\'|")?'
119
+ text = '(.*)'
120
+
121
+ re1 = /<select#{spaces}name=#{quote}#{tag_name}#{quote}#{spaces}id=#{quote}#{tag_id}#{quote}#{spaces}tabindex=0>(.*)<\/select>/
122
+ text = re1.match(buffer)[5]
123
+
124
+ re2 = /<option(\s*)value="([a-z|A-Z]*)">([a-z|A-Z]*)<\/option>/
125
+
126
+ matches = text.scan(re2)
127
+
128
+ matches.each do |m|
129
+ languages << Language.new(m[2], m[1])
130
+ end
131
+
132
+ languages
133
+ end
134
+
135
+ def encode_text text
136
+ s = ''
137
+ text.unpack("U*").each do |ch|
138
+ if (1072..1087).include? ch
139
+ s << (ch-912).chr
140
+ elsif (1088..1103).include? ch
141
+ s << (ch-864).chr
142
+ elsif (1020..1071).include? ch
143
+ s << (ch-892).chr
144
+ else
145
+ s << ch
146
+ end
147
+ end
148
+
149
+ s
150
+ end
151
+ end
152
+
153
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shvets-google_translate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.5.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Shvets
@@ -26,7 +26,7 @@ files:
26
26
  - google_translate.gemspec
27
27
  - Rakefile
28
28
  - README
29
- - "lib/google_translate.rb "
29
+ - lib/google_translate.rb
30
30
  - bin/translate
31
31
  - bin/translate.bat
32
32
  - spec/spec_helper.rb