togglate 0.1.2 → 0.1.3
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 +4 -4
- data/lib/togglate/block_wrapper.rb +32 -16
- data/lib/togglate/cli.rb +2 -1
- data/lib/togglate/version.rb +1 -1
- data/lib/togglate.rb +0 -1
- data/spec/togglate_block_wrapper_spec.rb +90 -0
- data/spec/togglate_spec.rb +0 -61
- data/togglate.gemspec +1 -1
- metadata +6 -5
- data/lib/togglate/core_ext.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7d5c239c406f9d4efc4110ed2bdbd52b8883a20b
|
4
|
+
data.tar.gz: 18e0df107f759b24428304dcf50eec2f38a3a95b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8486218902d6329ca64ce0ecf2566ef793ad7440b7837f8ce63615d4f3ea5717f5952ca8c1efa867e9342e26179e4c414031eb2d8af04340422c2852488d497a
|
7
|
+
data.tar.gz: b685a75c8849329e5a9df1644adc5fe409843b3fe88f17331c6a93b0f0ab22f73995b2745081b569b57c284e07afcee02abc96cf9889816981bb7c107b3acfaf
|
@@ -16,36 +16,44 @@ class Togglate::BlockWrapper
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def run
|
19
|
-
|
19
|
+
wrap_chunks build_chunks
|
20
20
|
end
|
21
21
|
|
22
22
|
private
|
23
|
-
def
|
23
|
+
def build_chunks(block_tags:[/^```/, /^{%/])
|
24
24
|
in_block = false
|
25
25
|
@text.each_line.chunk do |line|
|
26
26
|
in_block = !in_block if block_tags.any? { |ex| line.match ex }
|
27
|
-
|
27
|
+
blank_line?(line) && !in_block
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
def
|
32
|
-
|
33
|
-
|
31
|
+
def blank_line?(line, blank_line_re:/^\s*$/)
|
32
|
+
!line.match(blank_line_re).nil?
|
33
|
+
end
|
34
|
+
|
35
|
+
def wrap_chunks(chunks)
|
36
|
+
wrap_lines = chunks.inject([]) do |m, (is_blank_line, lines)|
|
37
|
+
if is_blank_line || @wrap_exceptions.any? { |ex| lines[0].match ex }
|
34
38
|
m.push *lines
|
35
39
|
else
|
36
|
-
|
37
|
-
hash_value = lines.join.hash
|
38
|
-
sentences_to_translate[hash_value] = lines.join
|
39
|
-
m.push hash_value
|
40
|
-
else
|
41
|
-
m.push @pretext
|
42
|
-
end
|
40
|
+
m.push pretext(lines)
|
43
41
|
m.push "\n\n", @wrapper[0], "\n", *lines, @wrapper[1], "\n"
|
44
42
|
end
|
45
43
|
end
|
46
44
|
@translate ? hash_to_translation(wrap_lines).join : wrap_lines.join
|
47
45
|
end
|
48
46
|
|
47
|
+
def pretext(lines)
|
48
|
+
if @translate
|
49
|
+
hash_value = lines.join.hash
|
50
|
+
sentences_to_translate[hash_value] = lines.join
|
51
|
+
hash_value
|
52
|
+
else
|
53
|
+
@pretext
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
49
57
|
def set_translate_opt(opt)
|
50
58
|
case opt
|
51
59
|
when Hash, FalseClass, NilClass
|
@@ -66,12 +74,10 @@ class Togglate::BlockWrapper
|
|
66
74
|
lines.map { |line| translates[line] || line }
|
67
75
|
end
|
68
76
|
|
69
|
-
using CoreExt
|
70
|
-
|
71
77
|
def request_translation
|
72
78
|
Mymemory.config.email = @email if @email
|
73
79
|
res = {}
|
74
|
-
sentences_to_translate
|
80
|
+
thread_with(sentences_to_translate) do |k, text|
|
75
81
|
begin
|
76
82
|
timeout(@timeout) { res[k] = ::Mymemory.translate(text, @translate) }
|
77
83
|
rescue Timeout::Error
|
@@ -80,4 +86,14 @@ class Togglate::BlockWrapper
|
|
80
86
|
end
|
81
87
|
res
|
82
88
|
end
|
89
|
+
|
90
|
+
def thread_with(hash)
|
91
|
+
mem = []
|
92
|
+
hash.map do |*item|
|
93
|
+
Thread.new(*item) do |*_item|
|
94
|
+
mem << yield(*_item)
|
95
|
+
end
|
96
|
+
end.each(&:join)
|
97
|
+
mem
|
98
|
+
end
|
83
99
|
end
|
data/lib/togglate/cli.rb
CHANGED
@@ -12,7 +12,8 @@ module Togglate
|
|
12
12
|
def create(file)
|
13
13
|
text = File.read(file)
|
14
14
|
opts = symbolize_keys(options)
|
15
|
-
|
15
|
+
blocks = [/^```/, /^ {4}/, /^{%/]
|
16
|
+
opts.update(wrap_exceptions:blocks) if opts[:code_block]
|
16
17
|
opts.update(translate:nil) if opts[:translate].empty?
|
17
18
|
puts Togglate.create(text, opts)
|
18
19
|
rescue => e
|
data/lib/togglate/version.rb
CHANGED
data/lib/togglate.rb
CHANGED
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Togglate::BlockWrapper do
|
4
|
+
before do
|
5
|
+
@text = "#title\n\n\ntext\n"
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "#build_chunks" do
|
9
|
+
it "returns chunked array" do
|
10
|
+
wrapper = Togglate::BlockWrapper.new(@text)
|
11
|
+
exp = [[false, ["#title\n"]],
|
12
|
+
[true, ["\n", "\n"]],
|
13
|
+
[false, ["text\n"]]]
|
14
|
+
expect(wrapper.send(:build_chunks).to_a).to eq exp
|
15
|
+
end
|
16
|
+
|
17
|
+
context "with liquid tags" do
|
18
|
+
it "wraps liquid tag blocks as target blocks" do
|
19
|
+
text =<<-EOS
|
20
|
+
#title
|
21
|
+
|
22
|
+
text
|
23
|
+
|
24
|
+
{% highlight bash %}
|
25
|
+
bash code
|
26
|
+
|
27
|
+
here
|
28
|
+
{% endhighlight %}
|
29
|
+
EOS
|
30
|
+
|
31
|
+
wrapper = Togglate::BlockWrapper.new(text)
|
32
|
+
exp = [[false, ["#title\n"]],
|
33
|
+
[true, ["\n"]],
|
34
|
+
[false, ["text\n"]],
|
35
|
+
[true, ["\n"]],
|
36
|
+
[false, ["{% highlight bash %}\n",
|
37
|
+
"bash code\n",
|
38
|
+
"\n",
|
39
|
+
"here\n",
|
40
|
+
"{% endhighlight %}\n"]]]
|
41
|
+
expect(wrapper.send(:build_chunks).to_a).to eq exp
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "#wrap_chunks" do
|
47
|
+
it "returns wrapped text" do
|
48
|
+
wrapper = Togglate::BlockWrapper.new(@text)
|
49
|
+
chunks = wrapper.send(:build_chunks)
|
50
|
+
exp = "[translation here]\n\n<!--original\n#title\n-->\n\n\n[translation here]\n\n<!--original\ntext\n-->\n"
|
51
|
+
expect(wrapper.send(:wrap_chunks, chunks)).to eq exp
|
52
|
+
end
|
53
|
+
|
54
|
+
context "optional pre-text" do
|
55
|
+
it "returns wrapped text with a custom text" do
|
56
|
+
wrapper = Togglate::BlockWrapper.new(@text, pretext:"-- translation --")
|
57
|
+
chunks = wrapper.send(:build_chunks)
|
58
|
+
exp = "-- translation --\n\n<!--original\n"
|
59
|
+
expect(wrapper.send(:wrap_chunks, chunks)).to match(exp)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "Embed results of MyMemory translation service" do
|
65
|
+
describe ".new with translate option" do
|
66
|
+
it "sets en-ja option when passed true" do
|
67
|
+
wrapper = Togglate::BlockWrapper.new('I need you.', translate:true)
|
68
|
+
opt = {to: :ja}
|
69
|
+
expect(wrapper.instance_variable_get('@translate')).to eq opt
|
70
|
+
end
|
71
|
+
|
72
|
+
it "sets passed options" do
|
73
|
+
opt = {from: :en, to: :it, email:true}
|
74
|
+
wrapper = Togglate::BlockWrapper.new('I need you.', translate:opt)
|
75
|
+
expect(wrapper.instance_variable_get('@translate')).to eq opt
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "#wrap_chunks" do
|
80
|
+
it "sets translated sentences to pretext" do
|
81
|
+
text = "#Title\n\nProgramming is fun.\n"
|
82
|
+
opt = {from: :en, to: :ja}
|
83
|
+
wrapper = Togglate::BlockWrapper.new(text, translate:opt)
|
84
|
+
chunks = wrapper.send(:build_chunks)
|
85
|
+
exp = /プログラミングは楽しいです.*<!--original/m
|
86
|
+
expect(wrapper.send(:wrap_chunks, chunks)).to match(exp)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
data/spec/togglate_spec.rb
CHANGED
@@ -20,64 +20,3 @@ describe Togglate do
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
23
|
-
|
24
|
-
describe Togglate::BlockWrapper do
|
25
|
-
before do
|
26
|
-
@text = "#title\n\n\ntext\n"
|
27
|
-
end
|
28
|
-
|
29
|
-
describe "#chunk_by_space" do
|
30
|
-
it "returns chunked array" do
|
31
|
-
wrapper = Togglate::BlockWrapper.new(@text)
|
32
|
-
exp = [[false, ["#title\n"]],
|
33
|
-
[true, ["\n", "\n"]],
|
34
|
-
[false, ["text\n"]]]
|
35
|
-
expect(wrapper.send(:chunk_by_space).to_a).to eq exp
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe "#wrap_with" do
|
40
|
-
it "returns wrapped text" do
|
41
|
-
wrapper = Togglate::BlockWrapper.new(@text)
|
42
|
-
chunks = wrapper.send(:chunk_by_space)
|
43
|
-
exp = "[translation here]\n\n<!--original\n#title\n-->\n\n\n[translation here]\n\n<!--original\ntext\n-->\n"
|
44
|
-
expect(wrapper.send(:wrap_with, chunks)).to eq exp
|
45
|
-
end
|
46
|
-
|
47
|
-
context "optional pre-text" do
|
48
|
-
it "returns wrapped text with a custom text" do
|
49
|
-
wrapper = Togglate::BlockWrapper.new(@text, pretext:"-- translation --")
|
50
|
-
chunks = wrapper.send(:chunk_by_space)
|
51
|
-
exp = "-- translation --\n\n<!--original\n"
|
52
|
-
expect(wrapper.send(:wrap_with, chunks)).to match(exp)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
describe "Embed results of MyMemory translation service" do
|
58
|
-
describe ".new with translate option" do
|
59
|
-
it "sets en-ja option when passed true" do
|
60
|
-
wrapper = Togglate::BlockWrapper.new('I need you.', translate:true)
|
61
|
-
opt = {to: :ja}
|
62
|
-
expect(wrapper.instance_variable_get('@translate')).to eq opt
|
63
|
-
end
|
64
|
-
|
65
|
-
it "sets passed options" do
|
66
|
-
opt = {from: :en, to: :it, email:true}
|
67
|
-
wrapper = Togglate::BlockWrapper.new('I need you.', translate:opt)
|
68
|
-
expect(wrapper.instance_variable_get('@translate')).to eq opt
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe "#wrap_with" do
|
73
|
-
it "sets translated sentences to pretext" do
|
74
|
-
text = "#Title\n\nProgramming is fun.\n"
|
75
|
-
opt = {from: :en, to: :ja}
|
76
|
-
wrapper = Togglate::BlockWrapper.new(text, translate:opt)
|
77
|
-
chunks = wrapper.send(:chunk_by_space)
|
78
|
-
exp = /プログラミングは楽しいです.*<!--original/m
|
79
|
-
expect(wrapper.send(:wrap_with, chunks)).to match(exp)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
data/togglate.gemspec
CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
18
|
spec.require_paths = ["lib"]
|
19
|
-
spec.required_ruby_version = '>=2.
|
19
|
+
spec.required_ruby_version = '>=2.0.0'
|
20
20
|
|
21
21
|
spec.add_dependency "thor"
|
22
22
|
spec.add_dependency "mymemory"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: togglate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kyoendo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03
|
11
|
+
date: 2014-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -113,12 +113,12 @@ files:
|
|
113
113
|
- lib/togglate.rb
|
114
114
|
- lib/togglate/block_wrapper.rb
|
115
115
|
- lib/togglate/cli.rb
|
116
|
-
- lib/togglate/core_ext.rb
|
117
116
|
- lib/togglate/version.rb
|
118
117
|
- spec/fixtures/README.ja.md
|
119
118
|
- spec/fixtures/README.md
|
120
119
|
- spec/fixtures/translated_text.json
|
121
120
|
- spec/spec_helper.rb
|
121
|
+
- spec/togglate_block_wrapper_spec.rb
|
122
122
|
- spec/togglate_cli_spec.rb
|
123
123
|
- spec/togglate_spec.rb
|
124
124
|
- togglate.gemspec
|
@@ -134,7 +134,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
134
134
|
requirements:
|
135
135
|
- - ">="
|
136
136
|
- !ruby/object:Gem::Version
|
137
|
-
version: 2.
|
137
|
+
version: 2.0.0
|
138
138
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
139
|
requirements:
|
140
140
|
- - ">="
|
@@ -142,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
142
142
|
version: '0'
|
143
143
|
requirements: []
|
144
144
|
rubyforge_project:
|
145
|
-
rubygems_version: 2.2.
|
145
|
+
rubygems_version: 2.2.2
|
146
146
|
signing_key:
|
147
147
|
specification_version: 4
|
148
148
|
summary: Create base text for translation, in which original is togglable
|
@@ -151,6 +151,7 @@ test_files:
|
|
151
151
|
- spec/fixtures/README.md
|
152
152
|
- spec/fixtures/translated_text.json
|
153
153
|
- spec/spec_helper.rb
|
154
|
+
- spec/togglate_block_wrapper_spec.rb
|
154
155
|
- spec/togglate_cli_spec.rb
|
155
156
|
- spec/togglate_spec.rb
|
156
157
|
has_rdoc:
|