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)