squib icon indicating copy to clipboard operation
squib copied to clipboard

Default save_pdf location is incorrect

Open wontonst opened this issue 1 year ago • 3 comments

It's saving as sheet.png instead of sheet.pdf

To Reproduce Steps to reproduce the behavior:

require 'squib'

data = Squib.csv  file: 'equipment.csv'

Squib::Deck.new cards: data['Name'].size, layout: 'equipment.yml' do
  background color: 'green'
  rect
  text str: data['Name'], layout: 'title'
  text str: data['Effects'], layout: 'description'
  text str: data['End game value'], layout: 'lower_right'
  text str: data['Cost'], layout: 'lower_left'
  png file: 'placeholder.png', layout: 'art'
  save_pdf
end

Run on latest dockerized squib

docker run --rm -v "$PWD":/usr/src/app andymeneely/squib ruby main.rb

See that sheet.png is generated. I can rename sheet.png to sheet.pdf and open it fine.

Expected behavior I expect the output file for save_pdf to default to sheet.pdf

Environment M1 mac oxs 13 docker v24

  • [x] I have updated Squib to the latest version.
  • [x] I have checked the Squib issues backlog for something similar
  • [x] I have attempted to make a minimal script demonstrating my problem
  • [x] I have reviewed the Squib Docs and there's still a problem

wontonst avatar Aug 17 '23 17:08 wontonst

Can confirm, produces a file called "sheet.png" (which MacOS won't open) on my install too. Overriding with the "file" parameter on save_pdf method fixed it, but it was a little unintuitive after following the docs.

blackwood avatar Sep 05 '23 15:09 blackwood

I started looking into this a bit when I was bothered by it, and I haven't tried to fix it yet, but I think I traced the problem...

The save_pdf method comes from /lib/squib/dsl/save_pdf.rb which uses /lib/squib/graphics/save_pdf.rb and that uses sheet.full_filename which comes from /lib/squib/args/sheet.rb where it is defined as:

def full_filename(i=nil)
  if i.nil?
	"#{dir}/#{file}"
  else
	"#{dir}/#{prefix}#{count_format % i}#{suffix}.png"
  end
end

At no point is the .png ever overridden. I'm not certain off the top of my head what the best way to fix it would be, but I think a good way that doesn't touch too many files would be making the file extension be one of the properties of sheet, and it defaults to png but can be overridden during the Sheet#full_filename call. I believe that would just require editing /lib/squib/graphics/save_pdf.rb and /lib/squib/args/sheet.rb, and wouldn't affect anything else.

joem avatar Apr 25 '24 19:04 joem

Oops. Small update to what I just wrote: it's not actually the full_filename method. Instead I think it's this file parameter in /lib/squib/args/sheet.rb not being overridden: https://github.com/andymeneely/squib/blob/1132233747bae3fc68a6aee6ce27feb132d450c8/lib/squib/args/sheet.rb#L32

joem avatar Apr 25 '24 19:04 joem