lib/usps_flags/generate.rb in usps_flags-0.2.6 vs lib/usps_flags/generate.rb in usps_flags-0.3.0
- old
+ new
@@ -26,33 +26,38 @@
# Convert SVG data into a PNG file.
#
# @param [String] svg The SVG data.
# @param [String] outfile The path to save the PNG file to. (Required because the file is not accessible if this is left blank.)
# @param [Boolean] trim Whether to trim the generated PNG file of excess transparency.
- def png(svg, outfile:, trim: false)
- temp_svg = ::File.new("temp.svg", "w+")
+ def png(svg, outfile: nil, trim: false)
+ temp_svg_file = "temp.svg"
+ temp_svg = ::File.new(temp_svg_file, "w+")
temp_svg.write(svg)
temp_svg.flush
+ raise USPSFlags::Errors::PNGGenerationError, svg: svg if outfile.nil? || outfile.empty?
+
MiniMagick::Tool::Convert.new do |convert|
convert << "-background" << "none"
convert << "-format" << "png"
convert << "-trim" if trim
convert << temp_svg.path
convert << outfile
end
ensure
- ::File.delete(temp_svg) if ::File.exist?(temp_svg)
+ ::File.delete(temp_svg_file) if ::File.exist?(temp_svg_file)
end
# Generate all static SVG and PNG files, and automaticall generates zip archives for download.
#
# @param [Boolean] svg Whether to generate SVG images.
# @param [Boolean] png Whether to generate PNG images.
# @param [Boolean] zips Whether to create zip archives for all images created. Does not create a zip for skipped formats.
# @param [Boolean] reset Whether to delete all previous files before generating new files.
def all(svg: true, png: true, zips: true, reset: true)
+ raise USPSFlags::Errors::StaticFilesGenerationError, "At least one argument switch must be true out of [svg, png, zips]." unless svg || png || zips
+
remove_static_files if reset
puts "\nSVGs generate a single file.",
"PNGs generate full-res, 1500w, 1000w, 500w, and thumbnail files.",
"Corresponding rank insignia (including smaller sizes) are also generated, as appropriate."
@@ -70,28 +75,35 @@
zips(svg: svg, png: png) if zips
USPSFlags::Helpers.log "\nTotal run time: #{Time.now - overall_start_time} s\n\n"
nil
+ rescue => e
+ raise e if e.is_a?(USPSFlags::Errors::StaticFilesGenerationError)
+ raise USPSFlags::Errors::StaticFilesGenerationError, cause: e
end
# Generate zip archives of current static image files.
#
# @param [Boolean] svg Generate zip archive of SVG images.
# @param [Boolean] png Generate zip archive of PNG images.
def zips(svg: true, png: true)
+ raise USPSFlags::Errors::ZipGenerationError, "At least one argument switch must be true out of [svg, png]." unless svg || png
begin
generate_zip("svg") if svg
rescue Errno::EACCES => e
- puts "Error: Failed to generate SVG Zip -> #{e.message}"
+ raise USPSFlags::Errors::ZipGenerationError, type: :svg, cause: e
end
begin
generate_zip("png") if png
rescue Errno::EACCES => e
- puts "Error: Failed to generate SVG Zip -> #{e.message}"
+ raise USPSFlags::Errors::ZipGenerationError, type: :png, cause: e
end
+ rescue => e
+ raise e if e.is_a?(USPSFlags::Errors::ZipGenerationError)
+ raise USPSFlags::Errors::ZipGenerationError, cause: e
end
# Generate trident spec sheet as an SVG image.
#
# @param [String] outfile The path to save the SVG file to. If not set, prints to console.
@@ -109,11 +121,14 @@
USPSFlags::Helpers.output(svg, outfile: outfile)
end
private
def remove_static_files
- ["SVG", "PNG", "ZIP"].each { |dir| ::FileUtils.rm_rf(Dir.glob("#{USPSFlags::Config.flags_dir}/#{dir}/*")) }
+ ["SVG", "PNG", "ZIP"].each do |dir|
+ dir_path = "#{USPSFlags::Config.flags_dir}/#{dir}"
+ ::FileUtils.rm_rf(::Dir.glob("#{dir_path}/*")) if ::Dir.exist?(dir_path)
+ end
["SVG/insignia", "PNG/insignia"].each { |dir| ::FileUtils.mkdir_p("#{USPSFlags::Config.flags_dir}/#{dir}") }
USPSFlags::Helpers.log "\n - Cleared previous files.\n"
end
def set_file_paths(flag)
@@ -176,21 +191,17 @@
USPSFlags::Helpers.log "-"
else
svg flag, field: false, outfile: @svg_ins_file, scale: 1
USPSFlags::Helpers.log "I"
end
- rescue => e
- USPSFlags::Helpers.log "x -> #{e.message}"
end
def generate_static_png(flag)
USPSFlags::Helpers.log " | "
generate_fullsize_png
generate_fullsize_png_insignia(flag)
- generate_reduced_size_pngs
- rescue => e
- USPSFlags::Helpers.log "x -> #{e.message}"
+ generate_reduced_size_pngs(flag)
end
def generate_fullsize_png
png(File.read(@svg_file), outfile: @png_file) unless ::File.exist?(@png_file)
USPSFlags::Helpers.log "F"
@@ -203,10 +214,10 @@
png(File.read(@svg_ins_file), outfile: @png_ins_file, trim: true) unless ::File.exist?(@png_ins_file)
USPSFlags::Helpers.log "I"
end
end
- def generate_reduced_size_pngs
+ def generate_reduced_size_pngs(flag)
USPSFlags::Helpers.png_sizes.keys.each do |size|
USPSFlags::Helpers.log(".") and next if ::File.exist?("#{USPSFlags::Config.flags_dir}/PNG/#{flag}.#{size}.png")
size, size_key = USPSFlags::Helpers.size_and_key(size: size, flag: flag)
generate_smaller_png(flag, size, size_key)
generate_smaller_png_insignia(flag, size, size_key)