Skip to content

Commit 7eec606

Browse files
authored
Merge pull request #123 from thinreports/fix-error-enoent-on-delete-temporary-file
Fix Error::ENOENT on delete temporary file
2 parents 6276fd9 + 3664ca0 commit 7eec606

3 files changed

Lines changed: 21 additions & 21 deletions

File tree

lib/thinreports/basic_report/generator/pdf/document/graphics/image.rb

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,8 @@ def image_dimensions(filename_or_io, x, y, w, h, options = {})
7171
end
7272

7373
def clean_temp_images
74-
temp_image_registry.each_value do |image_path|
75-
File.delete(image_path) if File.exist?(image_path)
76-
end
74+
temp_image_registry.each_value(&:close!)
75+
temp_image_registry.clear
7776
end
7877

7978
def temp_image_registry

test/basic_report/units/generator/pdf/document/graphics/test_image.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,24 @@ def test_image_box
3636
assert_equal 6, analyze_pdf_images(@document.render).count
3737
end
3838

39+
def test_clean_temp_images
40+
@document.base64image(Base64.encode64(read_data_file('image_normal.png')), 0, 0, 100, 100)
41+
@document.base64image(Base64.encode64(read_data_file('image_normal.jpg')), 0, 0, 100, 100)
42+
43+
assert_equal 2, @document.temp_image_registry.size
44+
45+
image_file_and_paths = @document.temp_image_registry.values.map { |image| [image, image.path] }
46+
47+
@document.clean_temp_images
48+
49+
assert_empty @document.temp_image_registry
50+
51+
image_file_and_paths.each do |file, path|
52+
assert_nil file.path
53+
refute File.exist?(path)
54+
end
55+
end
56+
3957
def each_image(&block)
4058
%w(
4159
image_normal.png

test/feature_test.rb

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,7 @@ def dir
2222
class Base < Minitest::Test
2323
class << self
2424
def feature(&block)
25-
define_method(:test_feature) do
26-
# In CI (GitHub Actions), the following error occurs rarely.
27-
#
28-
# > Errno::ENOENT: No such file or directory @ apply2files
29-
#
30-
# Probably GC related. It is not a fundamental solution, but for now,
31-
# the problem is reproduced only by CI, so we will deal with it by disabling GC.
32-
disable_gc { instance_exec(&block) }
33-
end
25+
define_method(:test_feature, &block)
3426
end
3527
end
3628

@@ -67,15 +59,6 @@ def actual_pdf
6759
def expect_pdf
6860
dir.join('expect.pdf')
6961
end
70-
71-
def disable_gc
72-
was_disabled = GC.disable
73-
begin
74-
yield
75-
ensure
76-
GC.enable unless was_disabled
77-
end
78-
end
7962
end
8063
end
8164
end

0 commit comments

Comments
 (0)