jekyll-chatgpt-translate 0.0.31 → 0.0.33

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
  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