translaunder 1.0.0
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 +7 -0
- data/.gitignore +63 -0
- data/.rspec +2 -0
- data/.travis.yml +14 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +78 -0
- data/LICENSE +22 -0
- data/README.md +30 -0
- data/Rakefile +6 -0
- data/bin/translaunder +16 -0
- data/lib/translaunder/data_request.rb +33 -0
- data/lib/translaunder/input_parser.rb +32 -0
- data/lib/translaunder/main.rb +28 -0
- data/lib/translaunder/output_manager.rb +43 -0
- data/lib/translaunder/response_parser.rb +32 -0
- data/lib/translaunder/version.rb +5 -0
- data/lib/translaunder.rb +12 -0
- data/spec/fixtures/one_sentence.txt +1 -0
- data/spec/fixtures/three_sentences.txt +1 -0
- data/spec/fixtures/two_sentences.txt +1 -0
- data/spec/spec_helper.rb +46 -0
- data/spec/translaunder/data_request_spec.rb +28 -0
- data/spec/translaunder/input_parser_spec.rb +40 -0
- data/spec/translaunder/main_spec.rb +26 -0
- data/spec/translaunder/output_manager_spec.rb +21 -0
- data/spec/translaunder/response_parser_spec.rb +38 -0
- data/translaunder.gemspec +25 -0
- metadata +164 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 65de882876147e5b90b0a23d32a4a0a1ffc6887e
|
|
4
|
+
data.tar.gz: 236c022e4efab9f333a19cb6087278c0e3145ab9
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 346e940f3be8d7c9954afa085df208423c46262f1b4ba81854dd9617a309557d316b1533efb4db8c192c2f5173a059612e01fab09098e9b507cd6a7b71a63b64
|
|
7
|
+
data.tar.gz: 6a340c5cbfcf3ab0b61c9b1b78c28098de9ab9d699df562669f9ccc6340bae833e7c6c01081cfec922dfbece062b1dc1b00a7cef7221a604786309afb2147f98
|
data/.gitignore
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
### https://raw.github.com/github/gitignore/3ebb3221ccf9103909529bb81627ca335162e9c1/ruby.gitignore
|
|
2
|
+
|
|
3
|
+
*.gem
|
|
4
|
+
*.rbc
|
|
5
|
+
/.config
|
|
6
|
+
/coverage/
|
|
7
|
+
/InstalledFiles
|
|
8
|
+
/pkg/
|
|
9
|
+
/spec/reports/
|
|
10
|
+
/test/tmp/
|
|
11
|
+
/test/version_tmp/
|
|
12
|
+
/tmp/
|
|
13
|
+
|
|
14
|
+
## Specific to RubyMotion:
|
|
15
|
+
.dat*
|
|
16
|
+
.repl_history
|
|
17
|
+
build/
|
|
18
|
+
|
|
19
|
+
## Documentation cache and generated files:
|
|
20
|
+
/.yardoc/
|
|
21
|
+
/_yardoc/
|
|
22
|
+
/doc/
|
|
23
|
+
/rdoc/
|
|
24
|
+
|
|
25
|
+
## Environment normalisation:
|
|
26
|
+
/.bundle/
|
|
27
|
+
/vendor/bundle
|
|
28
|
+
/lib/bundler/man/
|
|
29
|
+
|
|
30
|
+
# for a library or gem, you might want to ignore these files since the code is
|
|
31
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
32
|
+
# Gemfile.lock
|
|
33
|
+
# .ruby-version
|
|
34
|
+
# .ruby-gemset
|
|
35
|
+
|
|
36
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
|
37
|
+
.rvmrc
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
### https://raw.github.com/github/gitignore/3ebb3221ccf9103909529bb81627ca335162e9c1/Global/osx.gitignore
|
|
41
|
+
|
|
42
|
+
.DS_Store
|
|
43
|
+
.AppleDouble
|
|
44
|
+
.LSOverride
|
|
45
|
+
|
|
46
|
+
# Icon must end with two \r
|
|
47
|
+
Icon
|
|
48
|
+
|
|
49
|
+
# Thumbnails
|
|
50
|
+
._*
|
|
51
|
+
|
|
52
|
+
# Files that might appear on external disk
|
|
53
|
+
.Spotlight-V100
|
|
54
|
+
.Trashes
|
|
55
|
+
|
|
56
|
+
# Directories potentially created on remote AFP share
|
|
57
|
+
.AppleDB
|
|
58
|
+
.AppleDesktop
|
|
59
|
+
Network Trash Folder
|
|
60
|
+
Temporary Items
|
|
61
|
+
.apdisk
|
|
62
|
+
|
|
63
|
+
|
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
translaunder (1.0.0)
|
|
5
|
+
|
|
6
|
+
GEM
|
|
7
|
+
remote: https://rubygems.org/
|
|
8
|
+
specs:
|
|
9
|
+
addressable (2.3.8)
|
|
10
|
+
coveralls (0.8.2)
|
|
11
|
+
json (~> 1.8)
|
|
12
|
+
rest-client (>= 1.6.8, < 2)
|
|
13
|
+
simplecov (~> 0.10.0)
|
|
14
|
+
term-ansicolor (~> 1.3)
|
|
15
|
+
thor (~> 0.19.1)
|
|
16
|
+
crack (0.4.2)
|
|
17
|
+
safe_yaml (~> 1.0.0)
|
|
18
|
+
diff-lcs (1.2.5)
|
|
19
|
+
docile (1.1.5)
|
|
20
|
+
domain_name (0.5.24)
|
|
21
|
+
unf (>= 0.0.5, < 1.0.0)
|
|
22
|
+
http-cookie (1.0.2)
|
|
23
|
+
domain_name (~> 0.5)
|
|
24
|
+
json (1.8.3)
|
|
25
|
+
mime-types (2.6.1)
|
|
26
|
+
netrc (0.10.3)
|
|
27
|
+
nyan-cat-formatter (0.11)
|
|
28
|
+
rspec (>= 2.99, >= 2.14.2, < 4)
|
|
29
|
+
rake (10.4.2)
|
|
30
|
+
rest-client (1.8.0)
|
|
31
|
+
http-cookie (>= 1.0.2, < 2.0)
|
|
32
|
+
mime-types (>= 1.16, < 3.0)
|
|
33
|
+
netrc (~> 0.7)
|
|
34
|
+
rspec (3.3.0)
|
|
35
|
+
rspec-core (~> 3.3.0)
|
|
36
|
+
rspec-expectations (~> 3.3.0)
|
|
37
|
+
rspec-mocks (~> 3.3.0)
|
|
38
|
+
rspec-core (3.3.2)
|
|
39
|
+
rspec-support (~> 3.3.0)
|
|
40
|
+
rspec-expectations (3.3.1)
|
|
41
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
42
|
+
rspec-support (~> 3.3.0)
|
|
43
|
+
rspec-mocks (3.3.2)
|
|
44
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
45
|
+
rspec-support (~> 3.3.0)
|
|
46
|
+
rspec-support (3.3.0)
|
|
47
|
+
safe_yaml (1.0.4)
|
|
48
|
+
simplecov (0.10.0)
|
|
49
|
+
docile (~> 1.1.0)
|
|
50
|
+
json (~> 1.8)
|
|
51
|
+
simplecov-html (~> 0.10.0)
|
|
52
|
+
simplecov-html (0.10.0)
|
|
53
|
+
term-ansicolor (1.3.2)
|
|
54
|
+
tins (~> 1.0)
|
|
55
|
+
thor (0.19.1)
|
|
56
|
+
tins (1.5.4)
|
|
57
|
+
unf (0.1.4)
|
|
58
|
+
unf_ext
|
|
59
|
+
unf_ext (0.0.7.1)
|
|
60
|
+
vcr (2.9.3)
|
|
61
|
+
webmock (1.21.0)
|
|
62
|
+
addressable (>= 2.3.6)
|
|
63
|
+
crack (>= 0.3.2)
|
|
64
|
+
|
|
65
|
+
PLATFORMS
|
|
66
|
+
ruby
|
|
67
|
+
|
|
68
|
+
DEPENDENCIES
|
|
69
|
+
coveralls
|
|
70
|
+
nyan-cat-formatter
|
|
71
|
+
rake
|
|
72
|
+
rspec
|
|
73
|
+
translaunder!
|
|
74
|
+
vcr
|
|
75
|
+
webmock
|
|
76
|
+
|
|
77
|
+
BUNDLED WITH
|
|
78
|
+
1.10.6
|
data/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2014 app2641
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
data/README.md
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
TransLaunder [](https://travis-ci.org/app2641/translaunder) [](https://coveralls.io/github/app2641/translaunder?branch=master)
|
|
2
|
+
====
|
|
3
|
+
|
|
4
|
+
Google翻訳の結果をロンダリングする Gem です。
|
|
5
|
+
|
|
6
|
+
## Description
|
|
7
|
+
|
|
8
|
+
Googleの翻訳結果を複数適用したテキストを返します。
|
|
9
|
+
|
|
10
|
+
## Demo
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
bin/translaunder ja en 事なきを得る
|
|
14
|
+
=> 私はKotonakiを取得
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Install
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
gem install translaunder
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## License
|
|
24
|
+
|
|
25
|
+
[MIT](https://github.com/app2641/translaunder/blob/master/LICENSE)
|
|
26
|
+
|
|
27
|
+
## Author
|
|
28
|
+
|
|
29
|
+
[app2641](https://github.com/app2641)
|
|
30
|
+
|
data/Rakefile
ADDED
data/bin/translaunder
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#! /usr/bin/env ruby
|
|
2
|
+
require 'rubygems'
|
|
3
|
+
|
|
4
|
+
lib_path = File.dirname(__FILE__)+'/../lib'
|
|
5
|
+
$LOAD_PATH.unshift(lib_path) unless $LOAD_PATH.include?(lib_path)
|
|
6
|
+
|
|
7
|
+
require 'translaunder'
|
|
8
|
+
|
|
9
|
+
begin
|
|
10
|
+
params = TransLaunder::InputParser.new(ARGV).parse
|
|
11
|
+
TransLaunder::Main.new(params).translate
|
|
12
|
+
rescue Interrupt # user pressed CTRL+C
|
|
13
|
+
STDERR.puts "\nTranslaunder: exiting due to user request"
|
|
14
|
+
exit 130
|
|
15
|
+
end
|
|
16
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#encoding: utf-8
|
|
2
|
+
require 'net/http'
|
|
3
|
+
require 'uri'
|
|
4
|
+
|
|
5
|
+
module TransLaunder
|
|
6
|
+
class DataRequest
|
|
7
|
+
def initialize params
|
|
8
|
+
@params = params
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def request
|
|
12
|
+
url = generate_url
|
|
13
|
+
|
|
14
|
+
uri = URI.parse url
|
|
15
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
|
16
|
+
http.use_ssl = true
|
|
17
|
+
request = Net::HTTP::Get.new(uri.request_uri)
|
|
18
|
+
http.request(request)
|
|
19
|
+
rescue SocketError
|
|
20
|
+
OutputManager::display_no_internet_msg
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def generate_url
|
|
26
|
+
text = URI.encode @params[:text]
|
|
27
|
+
"https://translate.google.com/translate_a/single?client=t"+
|
|
28
|
+
"&sl=#{@params[:source_lang]}&tl=#{@params[:target_lang]}&hl=ja"+
|
|
29
|
+
"&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&dt=at"+
|
|
30
|
+
"&ie=UTF-8&oe=UTF-8&otf=1&ssel=0&tsel=0&kc=6&q=#{text}"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#encoding: utf-8
|
|
2
|
+
module TransLaunder
|
|
3
|
+
class InputParser
|
|
4
|
+
def initialize input
|
|
5
|
+
@input = input
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def parse
|
|
9
|
+
validate
|
|
10
|
+
|
|
11
|
+
{
|
|
12
|
+
source_lang: @input.shift.to_sym,
|
|
13
|
+
target_lang: @input.shift.to_sym,
|
|
14
|
+
text: @input.join(' ')
|
|
15
|
+
}
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
def validate
|
|
21
|
+
OutputManager::display_help_and_quit if @input.index('-h') || @input.empty?
|
|
22
|
+
OutputManager::display_version_and_quit if @input.index("-v")
|
|
23
|
+
raise ArgumentError if @input.length < 3
|
|
24
|
+
|
|
25
|
+
@input.first(2).each do |lang|
|
|
26
|
+
raise ArgumentError unless [2, 4].include? lang.length
|
|
27
|
+
end
|
|
28
|
+
rescue ArgumentError
|
|
29
|
+
OutputManager::display_error_msg
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#encoding: utf-8
|
|
2
|
+
module TransLaunder
|
|
3
|
+
class Main
|
|
4
|
+
def initialize params
|
|
5
|
+
@params = params
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def translate
|
|
9
|
+
text = get_translate_text
|
|
10
|
+
|
|
11
|
+
@params = {
|
|
12
|
+
source_lang: @params[:target_lang],
|
|
13
|
+
target_lang: @params[:source_lang],
|
|
14
|
+
text: text
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
text = get_translate_text
|
|
18
|
+
OutputManager::display_translation text
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
def get_translate_text
|
|
24
|
+
response = DataRequest.new(@params).request
|
|
25
|
+
ResponseParser.new(response.body).parse
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#encoding: utf-8
|
|
2
|
+
module TransLaunder
|
|
3
|
+
class OutputManager
|
|
4
|
+
def self.display_help_and_quit
|
|
5
|
+
puts <<-EOS
|
|
6
|
+
========= TRANSLAUNDER =========
|
|
7
|
+
Usage:
|
|
8
|
+
translaunder 'source_language' 'target_language' 'text'
|
|
9
|
+
|
|
10
|
+
Example:
|
|
11
|
+
translaunder ja en 'やあカウボーイ、馬はどこ?'
|
|
12
|
+
=> 'ちょっとカウボーイ、どこに馬がいるのですか?'
|
|
13
|
+
|
|
14
|
+
Options:
|
|
15
|
+
-t - speech synthesis
|
|
16
|
+
-s - synonyms list
|
|
17
|
+
|
|
18
|
+
Check docs at: github.com/app2641/translaunder
|
|
19
|
+
EOS
|
|
20
|
+
exit
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.display_version_and_quit
|
|
24
|
+
puts "TransLaunder #{TransLaunder::VERSION}"
|
|
25
|
+
exit
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.display_error_msg
|
|
29
|
+
puts "TRANSLAUNDER: Wrong data."
|
|
30
|
+
puts "Example: 'translaunder ja en カウボーイ' => 'カウボーイ'"
|
|
31
|
+
exit
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def self.display_no_internet_msg
|
|
35
|
+
puts "TRANSLAUNDER: There seems to be a problem with your internet connection"
|
|
36
|
+
exit
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def self.display_translation text
|
|
40
|
+
puts "=> #{text}"
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#encoding: utf-8
|
|
2
|
+
require 'json'
|
|
3
|
+
|
|
4
|
+
module TransLaunder
|
|
5
|
+
class ResponseParser
|
|
6
|
+
def initialize text
|
|
7
|
+
@text = text
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def parse
|
|
11
|
+
@text = decode @text
|
|
12
|
+
extract_text
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
def decode text
|
|
18
|
+
encoding = 'UTF-8'
|
|
19
|
+
text.gsub!(/(\\x26#39;)/, "'")
|
|
20
|
+
text.force_encoding(encoding).encode(encoding)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def extract_text
|
|
24
|
+
texts = @text.split("[[[")[1].sub!(/\]\].*/, ']').gsub!(/"/, '').split("],[")
|
|
25
|
+
texts.map! do |t|
|
|
26
|
+
t = t.split(",")
|
|
27
|
+
t.first unless t.first.empty?
|
|
28
|
+
end
|
|
29
|
+
texts.join("")
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
data/lib/translaunder.rb
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'translaunder/data_request'
|
|
4
|
+
require 'translaunder/input_parser'
|
|
5
|
+
require 'translaunder/main'
|
|
6
|
+
require 'translaunder/output_manager'
|
|
7
|
+
require 'translaunder/response_parser'
|
|
8
|
+
require 'translaunder/version'
|
|
9
|
+
|
|
10
|
+
module TransLaunder
|
|
11
|
+
end
|
|
12
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[[["I get Kotonaki","事なきを得る",,,0],[,,,"Kotonakiwoeru"]],,"ja",,,[["私 は 得る を",1,[["I get",473,true,false],["Do I get",0,true,false]],[[3,6]],"事なきを得る",0,2],["事なき",2,[["Kotonaki",528,true,false]],[[0,3]],,2,3]],0.11888992,,[["ja"],,[0.11888992]]]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[[["good morning. ","おはよう。",,,10],["Hello. ","こんにちは。",,,10],["good evening","こんばんは",,,10],[,,,"Ohayō. Kon'nichiwa. Konbanwa"]],,"ja",,,[["おはよう。",32000,[["good morning.",0,true,false]],[[0,5]],"おはよう。",0,0],["こんにちは。",64001,[["Hello.",0,true,false],["Hi there",0,true,false]],[[0,6]],"こんにちは。",0,0],["こんばんは",96002,[["good evening",0,true,false],["Evening",0,true,false]],[[0,5]],"こんばんは",0,0]],0.11888992,,[["ja"],,[0.11888992]]]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[[["I'm sorry . ","ごめん。",,,0],["It goodbye","さよならだ",,,0],[,,,"Gomen. Sayonarada"]],,"ja",,,[["ごめん",1,[["I'm sorry",768,true,false],["Sorry",148,true,false],["Gomen",0,true,false],["Am sorry",0,true,false]],[[0,3]],"ごめん。",0,3],[".",2,[[".",768,false,false]],[[3,4]],,3,4],["だ",4,[["It",314,true,false],["I",177,true,false],["But",118,true,false],["It is",45,true,false]],[[4,5]],"さよならだ",0,1],["さよなら",5,[["goodbye",314,true,false],["Sayonara",0,true,false],["Farewell",0,true,false],["bye",0,true,false],["good bye",0,true,false]],[[0,4]],,1,2]],0.11888992,,[["ja"],,[0.11888992]]]
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'bundler/setup'
|
|
3
|
+
require 'vcr'
|
|
4
|
+
require 'webmock/rspec'
|
|
5
|
+
require 'coveralls'
|
|
6
|
+
Coveralls.wear!
|
|
7
|
+
require_relative '../lib/translaunder'
|
|
8
|
+
|
|
9
|
+
RSpec.configure do |config|
|
|
10
|
+
original_stderr = $stderr
|
|
11
|
+
original_stdout = $stdout
|
|
12
|
+
|
|
13
|
+
config.mock_with :rspec do |c|
|
|
14
|
+
c.syntax = [:should, :expect]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
config.expect_with :rspec do |c|
|
|
18
|
+
c.syntax = [:should, :expect]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
#for nyan cat formatter
|
|
22
|
+
config.before(:each) do
|
|
23
|
+
sleep(0.10)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# redirect output to file
|
|
27
|
+
config.before(:suite) do
|
|
28
|
+
$stderr = File.new(File.join(File.dirname(__FILE__), 'output.txt'), 'w')
|
|
29
|
+
$stdout = File.new(File.join(File.dirname(__FILE__), 'output.txt'), 'w')
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
config.after(:suite) do
|
|
33
|
+
$stderr = original_stderr
|
|
34
|
+
$stdout = original_stdout
|
|
35
|
+
system "echo '=======Specs output:======='"
|
|
36
|
+
system "cat spec/output.txt"
|
|
37
|
+
File.delete(File.join(File.dirname(__FILE__), 'output.txt'))
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
VCR.configure do |c|
|
|
42
|
+
c.cassette_library_dir = 'spec/fixtures/'
|
|
43
|
+
c.hook_into :webmock
|
|
44
|
+
c.allow_http_connections_when_no_cassette = true
|
|
45
|
+
end
|
|
46
|
+
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#encoding: utf-8
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
|
|
4
|
+
describe TransLaunder::DataRequest do
|
|
5
|
+
describe 'request method' do
|
|
6
|
+
let(:params) { {source_lang: 'ja', target_lang: 'en', text: '事なきを得る'} }
|
|
7
|
+
let(:data_request) { TransLaunder::DataRequest.new(params) }
|
|
8
|
+
let(:http) { double 'http' }
|
|
9
|
+
|
|
10
|
+
before do
|
|
11
|
+
expect(http).to receive(:request)
|
|
12
|
+
expect(http).to receive(:use_ssl=)
|
|
13
|
+
|
|
14
|
+
allow(Net::HTTP).to receive(:new).and_return(http)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'GoogleTranslateへhttpリクエストする' do
|
|
18
|
+
expect { data_request.request }.not_to raise_error
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'エラーが起きたらヘルプメッセージを表示する' do
|
|
22
|
+
allow(http).to receive(:request).and_raise(SocketError)
|
|
23
|
+
expect(TransLaunder::OutputManager).to receive(:display_no_internet_msg)
|
|
24
|
+
data_request.request
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#encoding: utf-8
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
|
|
4
|
+
describe TransLaunder::InputParser do
|
|
5
|
+
describe '#validate' do
|
|
6
|
+
context '入力値が空の場合' do
|
|
7
|
+
it 'ヘルプメッセージを表示する' do
|
|
8
|
+
parser = TransLaunder::InputParser.new []
|
|
9
|
+
expect { parser.parse }.to raise_error SystemExit
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
context '配列の個数が足りない場合' do
|
|
14
|
+
it 'エラーメッセージを表示する' do
|
|
15
|
+
parser = TransLaunder::InputParser.new ['ja', 'en']
|
|
16
|
+
expect { parser.parse }.to raise_error SystemExit
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
context 'オプションの指定がある場合' do
|
|
21
|
+
it 'v オプション' do
|
|
22
|
+
parser = TransLaunder::InputParser.new ['-v']
|
|
23
|
+
expect { parser.parse }.to raise_error SystemExit
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'h オプション' do
|
|
27
|
+
parser = TransLaunder::InputParser.new ['-h']
|
|
28
|
+
expect { parser.parse }.to raise_error SystemExit
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context '正常な処理' do
|
|
33
|
+
it 'ハッシュを返す' do
|
|
34
|
+
parser = TransLaunder::InputParser.new ['ja', 'en', '事なきを得る']
|
|
35
|
+
expect(parser.parse).to eq({ source_lang: :ja, target_lang: :en, text: '事なきを得る' })
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#encoding: UTF-8
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
|
|
4
|
+
describe TransLaunder::Main do
|
|
5
|
+
describe '#translate' do
|
|
6
|
+
before do
|
|
7
|
+
response = double 'response_mock'
|
|
8
|
+
expect(response).to receive(:body).twice.and_return(:good_response)
|
|
9
|
+
|
|
10
|
+
data_request = double 'data_request_mock'
|
|
11
|
+
expect(data_request).to receive(:request).twice.and_return(response)
|
|
12
|
+
expect(TransLaunder::DataRequest).to receive(:new).twice.and_return(data_request)
|
|
13
|
+
|
|
14
|
+
response_parser = double 'response_parser_mock'
|
|
15
|
+
expect(response_parser).to receive(:parse).twice
|
|
16
|
+
expect(TransLaunder::ResponseParser).to receive(:new).twice.and_return(response_parser)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
context '事なきを得る' do
|
|
20
|
+
it 'translate' do
|
|
21
|
+
TransLaunder::Main.new(source_lang: 'ja', target_lang: 'en', text: '事なきを得る').translate
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#encoding: utf-8
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
|
|
4
|
+
describe TransLaunder::OutputManager do
|
|
5
|
+
describe 'output' do
|
|
6
|
+
it 'display error message' do
|
|
7
|
+
methods = [:display_help_and_quit, :display_version_and_quit, :display_error_msg,
|
|
8
|
+
:display_no_internet_msg]
|
|
9
|
+
|
|
10
|
+
methods.each do |method|
|
|
11
|
+
expect {TransLaunder::OutputManager.send(method)}.to raise_error SystemExit
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it 'display translate message' do
|
|
16
|
+
expect {TransLaunder::OutputManager.send(:display_translation, 'foo')}.to \
|
|
17
|
+
output("=> foo\n").to_stdout
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#encoding: utf-8
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
|
|
4
|
+
describe TransLaunder::ResponseParser do
|
|
5
|
+
context 'センテンスがひとつの場合' do
|
|
6
|
+
let(:parser) do
|
|
7
|
+
text = File.open('spec/fixtures/one_sentence.txt').read
|
|
8
|
+
TransLaunder::ResponseParser.new text
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
example '事なきを得る' do
|
|
12
|
+
expect(parser.parse).to eq "I get Kotonaki"
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
context 'センテンスがふたつの場合' do
|
|
17
|
+
let(:parser) do
|
|
18
|
+
text = File.open('spec/fixtures/two_sentences.txt').read
|
|
19
|
+
TransLaunder::ResponseParser.new text
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
example 'ごめん。さよならだ' do
|
|
23
|
+
expect(parser.parse).to eq "I'm sorry . It goodbye"
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
context 'センテンスがみっつの場合' do
|
|
28
|
+
let(:parser) do
|
|
29
|
+
text = File.open('spec/fixtures/three_sentences.txt').read
|
|
30
|
+
TransLaunder::ResponseParser.new text
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
example 'おはよう。こんにちは。こんばんは' do
|
|
34
|
+
expect(parser.parse).to eq 'good morning. Hello. good evening'
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require 'translaunder/version'
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |gem|
|
|
7
|
+
gem.name = "translaunder"
|
|
8
|
+
gem.version = TransLaunder::VERSION
|
|
9
|
+
gem.authors = ["app2641"]
|
|
10
|
+
gem.email = ["app2641@gmail.com"]
|
|
11
|
+
gem.summary = %q{Google翻訳の結果をロンダリングします}
|
|
12
|
+
gem.description = %q{ リクエストしたテキストをGoogle翻訳で複数回翻訳して表示します }
|
|
13
|
+
gem.homepage = "http://github.com/app2641/translaunder"
|
|
14
|
+
gem.files = `git ls-files`.split("\n")
|
|
15
|
+
gem.executables = ['translaunder']
|
|
16
|
+
gem.test_files = gem.files.grep(%r{^(spec)/})
|
|
17
|
+
gem.require_paths = ["lib"]
|
|
18
|
+
gem.license = "MIT"
|
|
19
|
+
gem.add_development_dependency "rspec"
|
|
20
|
+
gem.add_development_dependency "vcr"
|
|
21
|
+
gem.add_development_dependency "webmock"
|
|
22
|
+
gem.add_development_dependency "rake"
|
|
23
|
+
gem.add_development_dependency "coveralls"
|
|
24
|
+
gem.add_development_dependency "nyan-cat-formatter"
|
|
25
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: translaunder
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- app2641
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2015-09-03 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: rspec
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - '>='
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0'
|
|
20
|
+
type: :development
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - '>='
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: vcr
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - '>='
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - '>='
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: webmock
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - '>='
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - '>='
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: rake
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - '>='
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - '>='
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: coveralls
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - '>='
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '0'
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - '>='
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: nyan-cat-formatter
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - '>='
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '0'
|
|
90
|
+
type: :development
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - '>='
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '0'
|
|
97
|
+
description: ' リクエストしたテキストをGoogle翻訳で複数回翻訳して表示します '
|
|
98
|
+
email:
|
|
99
|
+
- app2641@gmail.com
|
|
100
|
+
executables:
|
|
101
|
+
- translaunder
|
|
102
|
+
extensions: []
|
|
103
|
+
extra_rdoc_files: []
|
|
104
|
+
files:
|
|
105
|
+
- .gitignore
|
|
106
|
+
- .rspec
|
|
107
|
+
- .travis.yml
|
|
108
|
+
- Gemfile
|
|
109
|
+
- Gemfile.lock
|
|
110
|
+
- LICENSE
|
|
111
|
+
- README.md
|
|
112
|
+
- Rakefile
|
|
113
|
+
- bin/translaunder
|
|
114
|
+
- lib/translaunder.rb
|
|
115
|
+
- lib/translaunder/data_request.rb
|
|
116
|
+
- lib/translaunder/input_parser.rb
|
|
117
|
+
- lib/translaunder/main.rb
|
|
118
|
+
- lib/translaunder/output_manager.rb
|
|
119
|
+
- lib/translaunder/response_parser.rb
|
|
120
|
+
- lib/translaunder/version.rb
|
|
121
|
+
- spec/fixtures/one_sentence.txt
|
|
122
|
+
- spec/fixtures/three_sentences.txt
|
|
123
|
+
- spec/fixtures/two_sentences.txt
|
|
124
|
+
- spec/spec_helper.rb
|
|
125
|
+
- spec/translaunder/data_request_spec.rb
|
|
126
|
+
- spec/translaunder/input_parser_spec.rb
|
|
127
|
+
- spec/translaunder/main_spec.rb
|
|
128
|
+
- spec/translaunder/output_manager_spec.rb
|
|
129
|
+
- spec/translaunder/response_parser_spec.rb
|
|
130
|
+
- translaunder.gemspec
|
|
131
|
+
homepage: http://github.com/app2641/translaunder
|
|
132
|
+
licenses:
|
|
133
|
+
- MIT
|
|
134
|
+
metadata: {}
|
|
135
|
+
post_install_message:
|
|
136
|
+
rdoc_options: []
|
|
137
|
+
require_paths:
|
|
138
|
+
- lib
|
|
139
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
140
|
+
requirements:
|
|
141
|
+
- - '>='
|
|
142
|
+
- !ruby/object:Gem::Version
|
|
143
|
+
version: '0'
|
|
144
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
|
+
requirements:
|
|
146
|
+
- - '>='
|
|
147
|
+
- !ruby/object:Gem::Version
|
|
148
|
+
version: '0'
|
|
149
|
+
requirements: []
|
|
150
|
+
rubyforge_project:
|
|
151
|
+
rubygems_version: 2.0.14
|
|
152
|
+
signing_key:
|
|
153
|
+
specification_version: 4
|
|
154
|
+
summary: Google翻訳の結果をロンダリングします
|
|
155
|
+
test_files:
|
|
156
|
+
- spec/fixtures/one_sentence.txt
|
|
157
|
+
- spec/fixtures/three_sentences.txt
|
|
158
|
+
- spec/fixtures/two_sentences.txt
|
|
159
|
+
- spec/spec_helper.rb
|
|
160
|
+
- spec/translaunder/data_request_spec.rb
|
|
161
|
+
- spec/translaunder/input_parser_spec.rb
|
|
162
|
+
- spec/translaunder/main_spec.rb
|
|
163
|
+
- spec/translaunder/output_manager_spec.rb
|
|
164
|
+
- spec/translaunder/response_parser_spec.rb
|