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