rufregle 2.0.0 → 2.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8d01902f91959c64ce0f3334d38da418dd33c1c4
4
- data.tar.gz: 7a0f370388656346b1f2964b41012f2235dfa2fa
3
+ metadata.gz: 6eb919aa0fe36fc1c440ae8a5d76b1fb9532c737
4
+ data.tar.gz: 2dd8d823e2b7240538ab7fde6724ed01a315ae27
5
5
  SHA512:
6
- metadata.gz: 80b1931f5988d83ec52ad52e0462f17822f77e4c0229c8afbdd3ade3cc6f97a0f47c6b89e4e6a0fae912b9809d46436b084989e04ce19d5194b30b0f820b0556
7
- data.tar.gz: 865292ad80b24d9e16e2b041c19e67e26a3e8e101f556bdc9fa4aec95761470559b136a8ca1e4fe1507f18aaf41ed55ed33a372edfef40757697f3be908b4427
6
+ metadata.gz: e4f3729a12d1932f0c2328b2683c16929fb1d3fc4b3d73be7546157ba2ae92763fc7803a36843c853d283ba6519b5694e3a9994939aa6fa0ded16b2a913227e9
7
+ data.tar.gz: 71842e72de45c627d523cc573b04a17e6cce37344d980de77c83eb15166f299d79ae4e9e436a1cc917cf40e79523249583c067996b23fe7d1f66728e0200f455
data/.gitignore ADDED
@@ -0,0 +1,37 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /spec/examples.txt
9
+ /test/tmp/
10
+ /test/version_tmp/
11
+ /tmp/
12
+
13
+ ## Specific to RubyMotion:
14
+ .dat*
15
+ .repl_history
16
+ build/
17
+
18
+ ## Documentation cache and generated files:
19
+ /.yardoc/
20
+ /_yardoc/
21
+ /doc/
22
+ /rdoc/
23
+
24
+ ## Environment normalisation:
25
+ /.bundle/
26
+ /vendor/bundle
27
+ /lib/bundler/man/
28
+
29
+ # for a library or gem, you might want to ignore these files since the code is
30
+ # intended to run in multiple environments; otherwise, check them in:
31
+ # Gemfile.lock
32
+ # .ruby-version
33
+ # .ruby-gemset
34
+
35
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
36
+ .rvmrc
37
+ *~
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.2.0
5
+
6
+ install: gem install test-unit
7
+
8
+ deploy:
9
+ provider: rubygems
10
+ api_key: "23d97812d6f00a43c13d6f2f731afaf0."
data/README.md ADDED
@@ -0,0 +1,74 @@
1
+ Rufregle
2
+ -----
3
+ [![Version](http://img.shields.io/gem/v/rufregle.svg)](https://rubygems.org/gems/rufregle)[![Build Status](https://travis-ci.org/CristianOliveiraDaRosa/rufregle.svg)](https://travis-ci.org/CristianOliveiraDaRosa/rufregle)
4
+
5
+ Ruby Free Google Translate gem or Rufregle
6
+
7
+ Simple unofficial free google translate library.
8
+
9
+ #How it works?
10
+
11
+ It uses an alternative google url to request the translate that's why this lib may have performance issues.
12
+ Recommended to use only in prototypes applications.
13
+
14
+ ###Is it free?
15
+
16
+ Yes.
17
+
18
+ ###Should I use it in my Production Application?
19
+
20
+ Maybe. You need performance?
21
+
22
+
23
+ #Using
24
+ More simple than that?
25
+
26
+ Installing gem
27
+ ```
28
+ $ gem install rufregle
29
+
30
+ ```
31
+
32
+ Using on code:
33
+ ```
34
+ result = Rufregle.new.translate("Hello World", "en", "pt")
35
+ p "#{result[:translated]}"
36
+ ```
37
+
38
+ # Tests
39
+ Runing all tests
40
+
41
+ ```
42
+ rake test
43
+ ```
44
+
45
+ ### Integration
46
+ ```
47
+ rake integration_test
48
+ ```
49
+
50
+ ### Unit Tests
51
+ ```
52
+ rake integration_test
53
+ ```
54
+
55
+ Contributing
56
+ ===
57
+ 1. Fork it!
58
+ 2. Create your feature branch: `git checkout -b my-new-feature`
59
+ 3. Commit your changes: `git commit -am 'Add some feature'`
60
+ 4. Push to the branch: `git push origin my-new-feature`
61
+ 5. Submit a pull request
62
+
63
+ After that include your name in "Authors" section!
64
+
65
+ ** Pull Request should have unit tests **
66
+
67
+ License
68
+ ====
69
+ This project is under MIT licence
70
+
71
+ Authors
72
+ =====
73
+
74
+ Cristian Oliveira - www.cristianoliveira.com.br
data/Rakefile ADDED
@@ -0,0 +1,19 @@
1
+ require 'rake/testtask'
2
+
3
+ UNIT_TEST_PATTERN = 'test/unit/**/*_test.rb'
4
+ INTEGRATION_TEST_PATTERN = 'test/integration/**/*_test.rb'
5
+
6
+ Rake::TestTask.new(:test) do |t|
7
+ t.test_files = FileList[UNIT_TEST_PATTERN]
8
+ end
9
+
10
+ Rake::TestTask.new(:unit_test) do |t|
11
+ t.test_files = FileList[UNIT_TEST_PATTERN]
12
+ end
13
+
14
+ Rake::TestTask.new(:integration_test) do |t|
15
+ t.test_files = FileList[INTEGRATION_TEST_PATTERN]
16
+ end
17
+
18
+ desc "Run tests"
19
+ task :default => :test
@@ -0,0 +1,26 @@
1
+ module FreeGoogle
2
+ ##
3
+ # Responsible for extract translated result from a received raw text
4
+
5
+ class Extractor
6
+ ENCODE = 'utf-8'
7
+
8
+ ##
9
+ # Extract translation
10
+ # @param rawdata [String] Raw text without formating
11
+ # @return [String] Translated text
12
+ #
13
+ # Example of how raw data look like:
14
+ # [[["Olá","Hello",,,10]],,"en"]
15
+ #
16
+
17
+ def extract(rawdata)
18
+ return "" if rawdata.nil? || rawdata.empty?
19
+
20
+ encoded = rawdata.force_encoding(ENCODE)
21
+ translations = encoded[/\["(.*?)","/]
22
+
23
+ translations[2..-4]
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,17 @@
1
+ require_relative 'extractor'
2
+ require_relative 'requester'
3
+ require_relative 'translator'
4
+
5
+ ##
6
+ # Responsible for create instance of {FreeGoogle::Translator}
7
+ # It holds all dependencies for this creation
8
+
9
+ module FreeGoogle
10
+ class Factory
11
+ def self.create()
12
+ extractor = FreeGoogle::Extractor.new
13
+ http_requester = FreeGoogle::Requester.new
14
+ FreeGoogle::Translator.new(extractor, http_requester)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require 'open-uri'
2
+ require 'net/http'
3
+
4
+ ##
5
+ # Responsible for HTTP requests
6
+ module FreeGoogle
7
+ class Requester
8
+
9
+ ##
10
+ # Http request using GET method.
11
+
12
+ def request(url)
13
+ url = URI::encode(url)
14
+ Net::HTTP.get(URI.parse(url))
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,25 @@
1
+ ##
2
+ # Implementation of Translator using alternative URL API to request translations
3
+
4
+ module FreeGoogle
5
+ class Translator
6
+
7
+ GOOGLE_URL_API = "https://translate.google.com/translate_a/"
8
+ GOOGLE_PARAMS = "single?client=z&sl=%s&tl=%s-CN&ie=UTF-8&oe=UTF-8&dt=t&dt=rm&q=%s"
9
+
10
+ def initialize(extractor, http_requester)
11
+ @translation_extractor = extractor
12
+ @http_requester = http_requester
13
+ end
14
+
15
+ def translate(text_to_translate, language_from, language_to)
16
+ parameters = GOOGLE_PARAMS % [ language_from, language_to , text_to_translate]
17
+ url = GOOGLE_URL_API + parameters
18
+
19
+ raw_data = @http_requester.request(url)
20
+ translated = @translation_extractor.extract(raw_data)
21
+
22
+ {translated: translated, original: text_to_translate}
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,16 @@
1
+ ##
2
+ # A Blueprint of how a Translator class must be.
3
+
4
+ class Translator
5
+ ##
6
+ # Return a translated text of a given +text+ +from+ language +to+ another language
7
+ #
8
+ # @param text [String] text to be translated.
9
+ # @param from [String] language from
10
+ # @param to [String] language to
11
+ # @return [String] translated text
12
+
13
+ def translate(text, from, to)
14
+ raise "Method do_translate must be implemented"
15
+ end
16
+ end
data/rufregle.gemspec ADDED
@@ -0,0 +1,12 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'rufregle'
3
+ s.version = '2.0.1'
4
+ s.date = '2015-09-19'
5
+ s.summary = "Free google translate!"
6
+ s.description = "Simple Free google translate."
7
+ s.authors = ["Cristian Oliveira"]
8
+ s.email = 'contato@cristianoliveira.com.br'
9
+ s.files = `git ls-files`.split($/)
10
+ s.homepage = 'https://github.com/CristianOliveiraDaRosa/rufregle'
11
+ s.license = 'MIT'
12
+ end
@@ -0,0 +1,62 @@
1
+ #!/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ require 'test/unit'
5
+ require_relative '../../lib/rufregle.rb'
6
+ require_relative '../../lib/translators/free_google/factory.rb'
7
+
8
+ class RufregleTest < Test::Unit::TestCase
9
+
10
+ def test_english_to_portuguese_hello
11
+ #given
12
+ word = "Hello"
13
+ expected = "Olá"
14
+
15
+ #when
16
+ result = Rufregle.new.translate(word, :en , :pt)
17
+
18
+ #then
19
+ assert_equal(expected, result[:translated])
20
+ end
21
+
22
+ def test_english_to_portuguese_hello_get_original
23
+ #given
24
+ word = "Hello"
25
+ expected = "Hello"
26
+
27
+ #when
28
+ result = Rufregle.new.translate(expected, :en , :pt)
29
+
30
+ #then
31
+ assert_equal(expected, result[:original])
32
+ end
33
+
34
+ def test_prhase_translate
35
+ #given
36
+ phrase = "Isso é uma frase traduzida"
37
+ expected = "This is a translated phrase"
38
+
39
+ #when
40
+ result = Rufregle.new.translate(phrase, :pt, :en)
41
+
42
+ #then
43
+ assert_equal(expected, result[:translated])
44
+ end
45
+
46
+ def test_given_new_translator
47
+ #given
48
+ phrase = "Isso é uma frase traduzida"
49
+ expected = "This is a translated phrase"
50
+ translator = FreeGoogle::Factory.create()
51
+ rufregle = Rufregle.new
52
+
53
+ #when
54
+ rufregle.translator = translator
55
+ result = rufregle.translate(phrase, :pt, :en)
56
+
57
+ #then
58
+ assert_equal(expected, result[:translated])
59
+ end
60
+
61
+
62
+ end
@@ -0,0 +1,36 @@
1
+ require 'test/unit'
2
+ require_relative '../../lib/rufregle'
3
+ require_relative '../../lib/rufregle'
4
+
5
+ class RufregleTest < Test::Unit::TestCase
6
+
7
+ def setup
8
+ @translator = StubedTranslator.new
9
+ @rufregle = Rufregle.new
10
+ @rufregle.translator = @translator
11
+ end
12
+
13
+ def test_it_should_raise_error
14
+ assert_raise RuntimeError do @rufregle.translate(nil, nil, nil) end
15
+ assert_raise RuntimeError do @rufregle.translate("", "", "") end
16
+ assert_raise RuntimeError do @rufregle.translate("aaa", "", "") end
17
+ assert_raise RuntimeError do @rufregle.translate("aaa", "aaa", "") end
18
+ end
19
+
20
+ def test_it_should_not_raise_error
21
+ # given
22
+ translation = "Text translated"
23
+ @translator.result = translation
24
+
25
+ # then
26
+ assert_equal translation, @rufregle.translate("aaa", "aaa", "aaa")
27
+ end
28
+
29
+ class StubedTranslator
30
+ attr_accessor :result
31
+
32
+ def translate(text, from, to)
33
+ return @result
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,53 @@
1
+ require 'test/unit'
2
+ require_relative '../../../../lib/translators/free_google/extractor'
3
+
4
+ ##
5
+ # Tests for {FreeGoogle::Extractor}
6
+
7
+ class ExtractorTest < Test::Unit::TestCase
8
+
9
+ def setup
10
+ @translation_extractor = FreeGoogle::Extractor.new
11
+ end
12
+
13
+ def test_it_should_return_empty_string
14
+ assert_equal "", @translation_extractor.extract("")
15
+ assert_equal "", @translation_extractor.extract(nil)
16
+ end
17
+
18
+ def test_it_should_return_only_the_translation_text
19
+ # given
20
+ rawdata = '[["translation","original",,,10]'
21
+ expected = "translation"
22
+
23
+ # when
24
+ result = @translation_extractor.extract(rawdata)
25
+
26
+ # then
27
+ assert_equal expected, result
28
+ end
29
+
30
+ def test_it_should_ignore_inside_quotes
31
+ # given
32
+ rawdata = '[["translation\'s","original",,,10]'
33
+ expected = "translation\'s"
34
+
35
+ # when
36
+ result = @translation_extractor.extract(rawdata)
37
+
38
+ # then
39
+ assert_equal expected, result
40
+ end
41
+
42
+ def test_it_should_ignore_inside_double_quotes
43
+ # given
44
+ rawdata = '[["this has it "", bla bla","original",,,10]'
45
+ expected = 'this has it "", bla bla'
46
+
47
+ # when
48
+ result = @translation_extractor.extract(rawdata)
49
+
50
+ # then
51
+ assert_equal expected, result
52
+ end
53
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rufregle
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cristian Oliveira
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-17 00:00:00.000000000 Z
11
+ date: 2015-09-19 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Simple Free google translate.
14
14
  email: contato@cristianoliveira.com.br
@@ -16,7 +16,22 @@ executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []
18
18
  files:
19
+ - ".gitignore"
20
+ - ".travis.yml"
21
+ - README.md
22
+ - Rakefile
19
23
  - lib/rufregle.rb
24
+ - lib/translators/free_google/extractor.rb
25
+ - lib/translators/free_google/factory.rb
26
+ - lib/translators/free_google/requester.rb
27
+ - lib/translators/free_google/translator.rb
28
+ - lib/translators/translator.rb
29
+ - rufregle-0.0.2.gem
30
+ - rufregle-1.0.2.gem
31
+ - rufregle.gemspec
32
+ - test/integration/rufregle_test.rb
33
+ - test/unit/rufregle_test.rb
34
+ - test/unit/translators/freegoogle/extractor_test.rb
20
35
  homepage: https://github.com/CristianOliveiraDaRosa/rufregle
21
36
  licenses:
22
37
  - MIT
@@ -37,8 +52,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
37
52
  version: '0'
38
53
  requirements: []
39
54
  rubyforge_project:
40
- rubygems_version: 2.4.6
55
+ rubygems_version: 2.2.2
41
56
  signing_key:
42
57
  specification_version: 4
43
58
  summary: Free google translate!
44
59
  test_files: []
60
+ has_rdoc: