jekyll-chatgpt-translate 0.0.31 → 0.0.33

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8c50e5ce734d7a12ddcedbbcc4602453d5c0a7e78352a6e12bfbe04abfcf149e
4
- data.tar.gz: 66f6a5668e0d37fd32a1f9573e34036b3155cf864238afb48116c8be4cd19e64
3
+ metadata.gz: bcbe51d1f51e425e01eeb95267bfe08ebb5e57eba3add1b071fd5ba96b43c0de
4
+ data.tar.gz: 00d09ef020ba4fea3f6029a3b78d89ce9595428bf4621fa6f20e66f87e6c6266
5
5
  SHA512:
6
- metadata.gz: b5adeb2316daff862f639e9318f5636d3651c69ea5fd50c42c3ddc86e13a7ac97406491fe7f0acf5bfe5d0550135a0568abeed790d1b70ccb3a593a89fc279b6
7
- data.tar.gz: cf233bb2b67710883367515aaffffe4304d4c7f2b4c9571e276ed1323c90793bbddef1045067d5e84ca04dbb93fb946614bb5d05bbe71571bbfc589011af3c66
6
+ metadata.gz: 8c685004776a719fca54ecfcf4e8a66e27b728ad1af9d2e40efdc9cfd8cf531cbc98d89103089636da67285c2596537b992159de78838d8045016dd622faaf50
7
+ data.tar.gz: 3430c908c2273a2b8c28d628334b4333ed80d61b52498b5dd365e27fec1631a0260fe54bff159e9e1ecc8b669bfb20f464df63d02abcce1f734f31a57d4631e7
data/.rubocop.yml CHANGED
@@ -22,7 +22,7 @@ Metrics/BlockLength:
22
22
  Metrics/CyclomaticComplexity:
23
23
  Max: 30
24
24
  Metrics/PerceivedComplexity:
25
- Max: 30
25
+ Max: 40
26
26
  Layout/EmptyLineAfterGuardClause:
27
27
  Enabled: false
28
28
  Naming/FileName:
data/Gemfile CHANGED
@@ -32,4 +32,4 @@ gem 'rake', '13.0.6', require: false
32
32
  gem 'rubocop', '1.56.2', require: false
33
33
  gem 'rubocop-rspec', '2.23.2', require: false
34
34
  gem 'simplecov', '0.22.0', require: false
35
- gem 'webmock', '3.18.1', require: false
35
+ gem 'webmock', '3.19.1', require: false
data/features/cli.feature CHANGED
@@ -168,3 +168,41 @@ Feature: Simple site building
168
168
  And File "_site/2023/01/01/hello.html" contains "/bye.html"
169
169
  And File "_site/2023/02/02/bye.html" exists
170
170
  And File "_site/2023/02/02/bye.html" contains "/hello.html"
171
+
172
+ Scenario: No translation at all
173
+ Given I have a "_config.yml" file with content:
174
+ """
175
+ url: https://www.yegor256.com
176
+ markdown: kramdown
177
+ plugins:
178
+ - jekyll-chatgpt-translate
179
+ chatgpt-translate:
180
+ source: en
181
+ threshold: 0
182
+ api_key: "it-is-not-used, because EN to EN translation"
183
+ layout: default
184
+ targets:
185
+ -
186
+ language: en
187
+ permalink: :slug.html
188
+ """
189
+ And I have a "_layouts/default.html" file with content:
190
+ """
191
+ {{ content }}
192
+ """
193
+ And I have a "_posts/2023-01-01-hello.md" file with content:
194
+ """
195
+ ---
196
+ title: foo
197
+ ---
198
+ {% if page.chatgpt-translate.model %}
199
+ TRANSLATED :(
200
+ {% else %}
201
+ NO TRANSLATION! :)
202
+ {% endif %}
203
+ """
204
+ Then I build Jekyll site
205
+ And Exit code is zero
206
+ And Stdout contains "The page is absent, need to translate"
207
+ And File "_site/2023/01/01/hello.html" exists
208
+ And File "_site/2023/01/01/hello.html" contains "NO TRANSLATION!"
@@ -28,7 +28,7 @@ Gem::Specification.new do |s|
28
28
  s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
29
29
  s.required_ruby_version = '>= 2.6'
30
30
  s.name = 'jekyll-chatgpt-translate'
31
- s.version = '0.0.31'
31
+ s.version = '0.0.33'
32
32
  s.license = 'MIT'
33
33
  s.summary = 'Translate Jekyll Pages Through ChatGPT'
34
34
  s.description = [
@@ -60,7 +60,7 @@ class GptTranslate::Generator < Jekyll::Generator
60
60
  copied = 0
61
61
  model = config['model'] || 'gpt-3.5-turbo'
62
62
  marker = "Translated by ChatGPT #{model}#{version.empty? ? '' : "/#{version}"}"
63
- site.posts.docs.shuffle.each do |doc|
63
+ site.posts.docs.shuffle.each_with_index do |doc, pos|
64
64
  plain = GptTranslate::Plain.new(doc.content).to_s
65
65
  config['targets'].each do |target|
66
66
  start = Time.now
@@ -86,12 +86,14 @@ class GptTranslate::Generator < Jekyll::Generator
86
86
  )
87
87
  html = config['no_download'].nil? ? GptTranslate::Ping.new(site, link).download : nil
88
88
  needed = false
89
+ added = false
89
90
  if html.nil?
90
91
  Jekyll.logger.info("The page is absent, need to translate #{link.inspect}")
91
92
  needed = true
92
93
  else
93
94
  copied += 1
94
95
  site.static_files << DownloadedFile.new(site, link, html)
96
+ added = true
95
97
  if version.empty?
96
98
  Jekyll.logger.info("Re-translation not required, since version is empty: #{link.inspect}")
97
99
  elsif html.include?(marker)
@@ -103,7 +105,7 @@ class GptTranslate::Generator < Jekyll::Generator
103
105
  end
104
106
  end
105
107
  if translated >= threshold
106
- Jekyll.logger.info("We are over the threshold: #{translated} > #{threshold}")
108
+ Jekyll.logger.info("Page ##{pos} is ignored, we are over the threshold of #{threshold}: #{link}")
107
109
  elsif needed
108
110
  gpt = GptTranslate::ChatGPT.new(
109
111
  key,
@@ -124,10 +126,12 @@ class GptTranslate::Generator < Jekyll::Generator
124
126
  )
125
127
  site.pages << Jekyll::Page.new(site, site.source, File.dirname(path), File.basename(path))
126
128
  site.static_files.delete_if { |f| f.is_a?(DownloadedFile) && f.link == link }
129
+ added = true
127
130
  translated += 1
128
131
  Jekyll.logger.info("Translated via ChatGPT \
129
132
  in #{(Time.now - start).round(2)}s: #{path} (#{File.size(path)} bytes)")
130
133
  end
134
+ next unless added
131
135
  doc.data['chatgpt-translate'] ||= {}
132
136
  doc.data['chatgpt-translate']['model'] ||= model
133
137
  doc.data['chatgpt-translate']['urls'] ||= {}
@@ -57,8 +57,7 @@ class GptTranslate::Ping
57
57
  html = response.body if response.is_a?(Net::HTTPSuccess)
58
58
  Jekyll.logger.debug("GET #{uri.inspect}: #{response.code}")
59
59
  rescue Errno::ECONNREFUSED, Errno::EADDRNOTAVAIL => e
60
- Jekyll.logger.debug("Failed to ping #{uri.inspect}: #{e.message}")
61
- Jekyll.logger.info("The page is absent (#{e.class.name}): #{uri.inspect}")
60
+ Jekyll.logger.debug("Failed to ping #{uri.inspect} (#{e.class.name}): #{e.message}")
62
61
  end
63
62
  html
64
63
  end
@@ -54,6 +54,10 @@ class GptTranslate::Prompt
54
54
  to[3],
55
55
  ', don\'t translate technical terms and proper nouns'
56
56
  ].join
57
- "#{head}:\n\n#{@par}"
57
+ if @par.include?('"') || @par.split.count >= 8
58
+ "#{head}:\n\n#{@par}"
59
+ else
60
+ "#{head}: \"#{@par}\""
61
+ end
58
62
  end
59
63
  end
@@ -23,5 +23,5 @@
23
23
  # SOFTWARE.
24
24
 
25
25
  module GptTranslate
26
- VERSION = '0.0.31'
26
+ VERSION = '0.0.33'
27
27
  end
data/test/test_prompt.rb CHANGED
@@ -31,24 +31,24 @@ require_relative '../lib/jekyll-chatgpt-translate/prompt'
31
31
  # Copyright:: Copyright (c) 2023 Yegor Bugayenko
32
32
  # License:: MIT
33
33
  class GptTranslate::PromptTest < Minitest::Test
34
- def par(body, source, target)
34
+ def head(source, target)
35
35
  [
36
36
  'Please, translate the following Markdown paragraph',
37
37
  " from #{source} to #{target},",
38
- " don't translate technical terms and proper nouns:\n\n#{body}"
38
+ " don't translate technical terms and proper nouns"
39
39
  ].join
40
40
  end
41
41
 
42
42
  def test_english_to_russian
43
43
  assert_equal(
44
- par('Hello, dude!', 'English', 'Russian'),
45
- GptTranslate::Prompt.new('Hello, dude!', 'en', 'ru').to_s
44
+ "#{head('English', 'Russian')}:\n\nHello, dude, how are you doing today in this fair city?",
45
+ GptTranslate::Prompt.new('Hello, dude, how are you doing today in this fair city?', 'en', 'ru').to_s
46
46
  )
47
47
  end
48
48
 
49
49
  def test_english_to_chinese
50
50
  assert_equal(
51
- par('Hello, Jeff!', 'English', 'Chinese'),
51
+ "#{head('English', 'Chinese')}: \"Hello, Jeff!\"",
52
52
  GptTranslate::Prompt.new('Hello, Jeff!', 'en', 'zh').to_s
53
53
  )
54
54
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-chatgpt-translate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.31
4
+ version: 0.0.33
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-29 00:00:00.000000000 Z
11
+ date: 2023-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: iri