lib/usps_flags/helpers.rb in usps_flags-0.5.0 vs lib/usps_flags/helpers.rb in usps_flags-0.5.1

- old
+ new

@@ -1,199 +1,197 @@ # frozen_string_literal: false # Container class for helper methods. -class USPSFlags::Helpers - require 'usps_flags/helpers/valid_flags' +class USPSFlags + class Helpers + require 'usps_flags/helpers/valid_flags' - class << self - # Valid options for flag generation. - # - # @param [Symbol] type Specify subset of flags. - # @option type [Symbol] :all All flags - # @option type [Symbol] :officer Officer flags - # @option type [Symbol] :insignia Insignia-eligible officer flags (no past officers) - # @option type [Symbol] :squadron Squadron-level officer flags - # @option type [Symbol] :district District-level officer flags - # @option type [Symbol] :national National-level officer flags - # @option type [Symbol] :special Special flags - # @option type [Symbol] :us US flag - # @return [Array] Valid options for flag generation (based on the provided type). - def valid_flags(type = :all) - USPSFlags::Helpers::ValidFlags.load_valid_flags - USPSFlags::Helpers::ValidFlags.load_special_flags - USPSFlags::Helpers::ValidFlags.load_valid_flag_groups - USPSFlags::Helpers::ValidFlags.valid_flags_for(type) - end + class << self + # Valid options for flag generation. + # + # @param [Symbol] type Specify subset of flags. + # @option type [Symbol] :all All flags + # @option type [Symbol] :officer Officer flags + # @option type [Symbol] :insignia Insignia-eligible officer flags (no past officers) + # @option type [Symbol] :squadron Squadron-level officer flags + # @option type [Symbol] :district District-level officer flags + # @option type [Symbol] :national National-level officer flags + # @option type [Symbol] :special Special flags + # @option type [Symbol] :us US flag + # @return [Array] Valid options for flag generation (based on the provided type). + def valid_flags(type = :all) + USPSFlags::Helpers::ValidFlags.load_valid_flags + USPSFlags::Helpers::ValidFlags.load_special_flags + USPSFlags::Helpers::ValidFlags.load_valid_flag_groups + USPSFlags::Helpers::ValidFlags.valid_flags_for(type) + end - # Resizes and saves a PNG image. - # - # One of the params [file, outfile] is required, and outfile takes precedence. - # - # @param [String] png_file Path to the PNG file to resize. - # @param [String] file Abbreviated key for the output file (e.g. "LTC", "insignia/FLT"). - # @param [String] outfile Path to the output file. - # @param [String] size Actual size to output as. - # @param [String] size_key Size suffix to attach to the file name. - def resize_png(png_file, file: nil, outfile: nil, size:, size_key: nil) - raise USPSFlags::Errors::PNGConversionError if outfile.nil? && file.nil? - raise USPSFlags::Errors::PNGConversionError if outfile.nil? && size_key.nil? + # Resizes and saves a PNG image. + # + # One of the params [file, outfile] is required, and outfile takes precedence. + # + # @param [String] png_file Path to the PNG file to resize. + # @param [String] file Abbreviated key for the output file (e.g. "LTC", "insignia/FLT"). + # @param [String] outfile Path to the output file. + # @param [String] size Actual size to output as. + # @param [String] size_key Size suffix to attach to the file name. + def resize_png(png_file, file: nil, outfile: nil, size:, size_key: nil) + raise USPSFlags::Errors::PNGConversionError if outfile.nil? && file.nil? + raise USPSFlags::Errors::PNGConversionError if outfile.nil? && size_key.nil? - output_file_name = outfile || "#{USPSFlags.configuration.flags_dir}/PNG/#{file}.#{size_key}.png" - resize_convert(size, png_file, output_file_name) - end + output_file_name = outfile || "#{USPSFlags.configuration.flags_dir}/PNG/#{file}.#{size_key}.png" + resize_convert(size, png_file, output_file_name) + end - # Gets the maximum length among valid flags. - # - # This is used USPSFlags::Generate, and should never need to be called directly. - # @private - def max_flag_name_length - valid_flags(:all).map(&:length).max - end + # Gets the maximum length among valid flags. + # + # This is used USPSFlags::Generate, and should never need to be called directly. + # @private + def max_flag_name_length + valid_flags(:all).map(&:length).max + end - # Gets the generation details for the given rank. - # - # This is used USPSFlags::Generate, and should never need to be called directly. - # @private - def flag_details(rank) - { - style: flag_style(rank), - color: flag_color(rank), - type: flag_type(rank), - level: flag_level(rank), - count: flag_count(rank) - } - end + # Gets the generation details for the given rank. + # + # This is used USPSFlags::Generate, and should never need to be called directly. + # @private + def flag_details(rank) + { + style: flag_style(rank), + color: flag_color(rank), + type: flag_type(rank), + level: flag_level(rank), + count: flag_count(rank) + } + end - # Image sizes for generated PNG images. - # - # This is used USPSFlags::Generate, and should never need to be called directly. - # @private - def png_sizes - { 1500 => 'H', 1000 => 'K', 500 => 'D', 'thumb' => 'T' } - end + # Image sizes for generated PNG images. + # + # This is used USPSFlags::Generate, and should never need to be called directly. + # @private + def png_sizes + { 1500 => 'H', 1000 => 'K', 500 => 'D', 'thumb' => 'T' } + end - # Gets size key for saving PNG images. - # - # This is used USPSFlags::Generate, and should never need to be called directly. - # @private - def size_and_key(size:, flag:) - return [size, size] unless size == 'thumb' + # Gets size key for saving PNG images. + # + # This is used USPSFlags::Generate, and should never need to be called directly. + # @private + def size_and_key(size:, flag:) + return [size, size] unless size == 'thumb' - size = case flag - when 'ENSIGN' - 200 - when 'US' - 300 - else - 150 + size = case flag + when 'ENSIGN' + 200 + when 'US' + 300 + else + 150 + end + + [size, 'thumb'] end - [size, 'thumb'] - end + # Prints message(s) to the console and logs them. + # + # This should never need to be called directly. + # @private + def log(*messages) + ::FileUtils.mkdir_p(USPSFlags.configuration.log_path) + outputs = [STDOUT] - # Prints message(s) to the console and logs them. - # - # This should never need to be called directly. - # @private - def log(*messages) - ::FileUtils.mkdir_p(USPSFlags.configuration.log_path) - outputs = [STDOUT] + log_file = File.open("#{USPSFlags.configuration.log_path}/flag.log", 'a') + outputs << log_file - log_file = File.open("#{USPSFlags.configuration.log_path}/flag.log", 'a') - outputs << log_file + messages.each do |message| + outputs.each { |f| f.write(message) } + end - messages.each do |message| - outputs.each { |f| f.write(message) } + messages + ensure + log_file.close if log_file.is_a?(File) end - messages - ensure - log_file.close if log_file.is_a?(File) - end + # Ensures the directory for the specified path exists. + # + # This should never need to be called directly. + # @private + def ensure_dir_for_file(path) + return false if path.nil? || path.empty? || !path.scan('/') - # Ensures the directory for the specified path exists. - # - # This should never need to be called directly. - # @private - def ensure_dir_for_file(path) - return false if path.nil? || path.empty? || !path.scan('/') + dirs = path.split('/') + dirs.pop + ::FileUtils.mkdir_p(dirs.join('/')).first + end - dirs = path.split('/') - dirs.pop - ::FileUtils.mkdir_p(dirs.join('/')).first - end - - # Prints output to the console or saves to a file, then returns the generated data. - # - # This should never need to be called directly. - # @private - def output(svg, outfile: nil) - if outfile.nil? - puts svg, "\n" - elsif outfile != '' - ensure_dir_for_file(outfile) - f = ::File.new(outfile, 'w+') - f.write(svg) - f.close + # Prints output to the console or saves to a file, then returns the generated data. + # + # This should never need to be called directly. + # @private + def output(svg, outfile: nil) + if outfile.nil? + puts svg, "\n" + elsif outfile != '' + ensure_dir_for_file(outfile) + f = ::File.new(outfile, 'w+') + f.write(svg) + f.close + end + svg end - svg - end - private + private - def resize_convert(size, png_file, output_file_name) - MiniMagick::Tool::Convert.new do |convert| - convert << '-background' << 'none' - convert << '-format' << 'png' - convert << '-resize' << "#{size}" - convert << png_file - convert << output_file_name + def resize_convert(size, png_file, output_file_name) + MiniMagick::Tool::Convert.new do |convert| + convert << '-background' << 'none' + convert << '-format' << 'png' + convert << '-resize' << size.to_s + convert << png_file + convert << output_file_name + end end - end - def flag_style(rank) - return :past if valid_flags(:past).include?(rank) - return :swallowtail if valid_flags(:swallowtail).include?(rank) + def flag_style(rank) + return :past if valid_flags(:past).include?(rank) + return :swallowtail if valid_flags(:swallowtail).include?(rank) - :regular - end + :regular + end - def flag_color(rank) - return :blue if valid_flags(:command).include?(rank) - return :red if valid_flags(:bridge).include?(rank) + def flag_color(rank) + return :blue if valid_flags(:command).include?(rank) + return :red if valid_flags(:bridge).include?(rank) - :white - end + :white + end - def flag_level(rank) - return :n if rank.match? /N.*/ - return :d if rank.match? /D.*/ - return :s if rank == 'FLT' - end + def flag_level(rank) + return :n if rank.match?(/N.*/) + return :d if rank.match?(/D.*/) + return :s if rank == 'FLT' + end - def flag_count(rank) - return 3 if valid_flags(:command).include?(rank) - return 2 if valid_flags(:bridge).include?(rank) + def flag_count(rank) + return 3 if valid_flags(:command).include?(rank) + return 2 if valid_flags(:bridge).include?(rank) - 1 - end + 1 + end - def flag_type(rank) # Complexity - specifics = { 'PORTCAP' => :pc, 'FLEETCAP' => :fc, 'STFC' => :stf } - if specifics.keys.include?(rank) - specifics[rank] - elsif rank.match? /.AIDE/ - :a - elsif rank.match? /.?FLT/ - :f - else + def flag_type(rank) + specifics = { 'PORTCAP' => :pc, 'FLEETCAP' => :fc, 'STFC' => :stf } + return specifics[rank] if specifics.key?(rank) + return :a if rank.match?(/.AIDE/) + return :f if rank.match?(/.?FLT/) + get_line_flag_level(rank) end - end - def get_line_flag_level(rank) - return :s if valid_flags(:squadron).include?(rank) - return :d if valid_flags(:district).include?(rank) - return :n if valid_flags(:national).include?(rank) + def get_line_flag_level(rank) + return :s if valid_flags(:squadron).include?(rank) + return :d if valid_flags(:district).include?(rank) + return :n if valid_flags(:national).include?(rank) + end end end end