usps_flags 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +22 -11
- data/.travis.yml +1 -1
- data/Gemfile.lock +5 -2
- data/README.md +6 -0
- data/lib/usps_flags.rb +35 -44
- data/lib/usps_flags/config.rb +89 -87
- data/lib/usps_flags/core.rb +44 -42
- data/lib/usps_flags/core/ensign.rb +53 -49
- data/lib/usps_flags/core/field.rb +96 -92
- data/lib/usps_flags/core/footer.rb +9 -5
- data/lib/usps_flags/core/headers.rb +58 -48
- data/lib/usps_flags/core/icons.rb +11 -7
- data/lib/usps_flags/core/icons/anchor.rb +62 -56
- data/lib/usps_flags/core/icons/binoculars.rb +21 -15
- data/lib/usps_flags/core/icons/lighthouse.rb +28 -22
- data/lib/usps_flags/core/icons/star.rb +21 -15
- data/lib/usps_flags/core/icons/trident.rb +136 -127
- data/lib/usps_flags/core/icons/trident_parts/hashes.rb +62 -55
- data/lib/usps_flags/core/icons/trumpet.rb +34 -28
- data/lib/usps_flags/core/pennant.rb +50 -46
- data/lib/usps_flags/core/trident_spec.rb +135 -131
- data/lib/usps_flags/core/trident_specs.rb +11 -7
- data/lib/usps_flags/core/trident_specs/base.rb +36 -26
- data/lib/usps_flags/core/trident_specs/circle.rb +36 -30
- data/lib/usps_flags/core/trident_specs/delta.rb +41 -30
- data/lib/usps_flags/core/trident_specs/header.rb +56 -50
- data/lib/usps_flags/core/trident_specs/horizontal.rb +80 -0
- data/lib/usps_flags/core/trident_specs/long.rb +41 -25
- data/lib/usps_flags/core/trident_specs/overlay.rb +40 -0
- data/lib/usps_flags/core/trident_specs/short.rb +30 -156
- data/lib/usps_flags/core/trident_specs/vertical.rb +108 -0
- data/lib/usps_flags/core/tridents.rb +54 -50
- data/lib/usps_flags/core/us.rb +40 -44
- data/lib/usps_flags/core/wheel.rb +7 -3
- data/lib/usps_flags/errors.rb +25 -23
- data/lib/usps_flags/generate.rb +111 -107
- data/lib/usps_flags/generate/flag.rb +160 -157
- data/lib/usps_flags/generate/generator_methods.rb +139 -0
- data/lib/usps_flags/generate/helper_methods.rb +88 -0
- data/lib/usps_flags/helpers.rb +163 -165
- data/lib/usps_flags/helpers/builders.rb +92 -85
- data/lib/usps_flags/helpers/spec_arrows.rb +127 -123
- data/lib/usps_flags/helpers/valid_flags.rb +45 -41
- data/lib/usps_flags/rational.rb +35 -0
- data/spec/usps_flags/config_spec.rb +17 -10
- data/spec/usps_flags/core_spec.rb +31 -31
- data/spec/usps_flags/generate_spec.rb +76 -73
- data/spec/usps_flags/helpers_spec.rb +8 -8
- data/spec/usps_flags/rational_spec.rb +17 -0
- data/spec/usps_flags_spec.rb +19 -21
- data/usps_flags.gemspec +7 -6
- metadata +34 -10
- data/lib/rational.rb +0 -39
- data/lib/usps_flags/generate/private.rb +0 -199
- data/spec/rational_spec.rb +0 -19
@@ -0,0 +1,139 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
|
3
|
+
# Private methods for USPSFlags::Generator.
|
4
|
+
#
|
5
|
+
# These methods should never need to be called directly.
|
6
|
+
# @private
|
7
|
+
class USPSFlags
|
8
|
+
class Generate
|
9
|
+
module GeneratorMethods
|
10
|
+
# This module defined no public methods
|
11
|
+
def _; end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def static_generation_header
|
16
|
+
puts "\nSVGs generate a single file.",
|
17
|
+
'PNGs generate full-res, 1500w, 1000w, 500w, and thumbnail files.',
|
18
|
+
'Corresponding rank insignia (including smaller sizes) are also generated, as appropriate.'
|
19
|
+
USPSFlags::Helpers.log "\nGeneration location: #{USPSFlags.configuration.flags_dir}\n"
|
20
|
+
USPSFlags::Helpers.log "\n#{Time.now.strftime('%Y%m%d.%H%M%S%z')} – Generating static files...\n\n"
|
21
|
+
length = USPSFlags::Helpers.max_flag_name_length + 31
|
22
|
+
USPSFlags::Helpers.log "Flag | SVG | PNG | Run time\n".rjust(length),
|
23
|
+
"\n".rjust(USPSFlags::Helpers.max_flag_name_length + 32, '-')
|
24
|
+
end
|
25
|
+
|
26
|
+
def generate_zip(type)
|
27
|
+
no_dir = [USPSFlags::Errors::ZipGenerationError, 'Flags directory not found.']
|
28
|
+
raise(*no_dir) unless ::Dir.exist?("#{USPSFlags.configuration.flags_dir}/ZIP")
|
29
|
+
|
30
|
+
zip = "#{USPSFlags.configuration.flags_dir}/ZIP/USPS_Flags.#{type}.zip"
|
31
|
+
::File.delete(zip) if ::File.exist?(zip)
|
32
|
+
write_zip_file(zip, type)
|
33
|
+
|
34
|
+
puts "Generated #{type.upcase} Zip"
|
35
|
+
end
|
36
|
+
|
37
|
+
def write_zip_file(zip, type)
|
38
|
+
::Zip::File.open(zip, ::Zip::File::CREATE) do |z|
|
39
|
+
::Dir.glob("#{USPSFlags.configuration.flags_dir}/#{type.upcase}/**/*").each do |f|
|
40
|
+
add_to_zip(z, f)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def add_to_zip(z, f)
|
46
|
+
filename = f.split('/').last
|
47
|
+
filename = "insignia/#{filename}" if f.split('/').last(2).first == 'insignia'
|
48
|
+
z.add(filename, f)
|
49
|
+
end
|
50
|
+
|
51
|
+
def generate_static_images_for(flag, svg: true, png: true)
|
52
|
+
run_time = track_time(simple: true) do
|
53
|
+
@flag = flag.upcase
|
54
|
+
USPSFlags::Helpers.log "#{@flag.rjust(USPSFlags::Helpers.max_flag_name_length)} |"
|
55
|
+
set_file_paths
|
56
|
+
generate_requested_images(svg, png)
|
57
|
+
end
|
58
|
+
|
59
|
+
USPSFlags::Helpers.log " | #{run_time.round(4).to_s[(0..5)].ljust(6, '0')} s\n"
|
60
|
+
end
|
61
|
+
|
62
|
+
def generate_requested_images(svg, png)
|
63
|
+
svg ? generate_static_svg : USPSFlags::Helpers.log('-')
|
64
|
+
png ? generate_static_png : USPSFlags::Helpers.log('- ')
|
65
|
+
end
|
66
|
+
|
67
|
+
def generate_static_svg
|
68
|
+
USPSFlags::Helpers.log ' '
|
69
|
+
|
70
|
+
generate_regular_svg
|
71
|
+
generate_insignia_svg
|
72
|
+
end
|
73
|
+
|
74
|
+
def generate_regular_svg
|
75
|
+
return if file_found?(@svg_file)
|
76
|
+
|
77
|
+
svg @flag, outfile: @svg_file, scale: 1
|
78
|
+
USPSFlags::Helpers.log 'S'
|
79
|
+
end
|
80
|
+
|
81
|
+
def generate_insignia_svg
|
82
|
+
return if no_insignia?
|
83
|
+
|
84
|
+
svg @flag, field: false, outfile: @svg_ins_file, scale: 1
|
85
|
+
USPSFlags::Helpers.log 'I'
|
86
|
+
end
|
87
|
+
|
88
|
+
def generate_static_png
|
89
|
+
USPSFlags::Helpers.log ' | '
|
90
|
+
generate_fullsize_png
|
91
|
+
generate_fullsize_png_insignia
|
92
|
+
generate_reduced_size_pngs
|
93
|
+
end
|
94
|
+
|
95
|
+
def generate_fullsize_png
|
96
|
+
return if file_found?(@png_file)
|
97
|
+
|
98
|
+
png(File.read(@svg_file), outfile: @png_file)
|
99
|
+
USPSFlags::Helpers.log 'F'
|
100
|
+
end
|
101
|
+
|
102
|
+
def generate_fullsize_png_insignia
|
103
|
+
return if no_insignia?
|
104
|
+
return if file_found?(@png_ins_file)
|
105
|
+
|
106
|
+
png(File.read(@svg_ins_file), outfile: @png_ins_file, trim: true)
|
107
|
+
USPSFlags::Helpers.log 'I'
|
108
|
+
end
|
109
|
+
|
110
|
+
def generate_reduced_size_pngs
|
111
|
+
USPSFlags::Helpers.png_sizes.keys.each do |size|
|
112
|
+
size, size_key = USPSFlags::Helpers.size_and_key(size: size, flag: @flag)
|
113
|
+
@sized_png_file = "#{USPSFlags.configuration.flags_dir}/PNG/#{@flag}.#{size_key}.png"
|
114
|
+
@sized_png_ins_file = @sized_png_file.gsub('/PNG/', '/PNG/insignia/')
|
115
|
+
|
116
|
+
generate_smaller_png(size, size_key)
|
117
|
+
generate_smaller_png_insignia(size, size_key)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def generate_smaller_png(size, size_key)
|
122
|
+
return if file_found?(@sized_png_file)
|
123
|
+
return if too_big?(@png_file, size)
|
124
|
+
|
125
|
+
USPSFlags::Helpers.resize_png(@png_file, file: @flag, size: size, size_key: size_key)
|
126
|
+
USPSFlags::Helpers.log USPSFlags::Helpers.png_sizes[size_key]
|
127
|
+
end
|
128
|
+
|
129
|
+
def generate_smaller_png_insignia(size, size_key)
|
130
|
+
return if no_insignia?
|
131
|
+
return if file_found?(@sized_png_ins_file)
|
132
|
+
return if too_big?(@png_ins_file, size)
|
133
|
+
|
134
|
+
USPSFlags::Helpers.resize_png(@png_ins_file, file: "insignia/#{@flag}", size: size, size_key: size_key)
|
135
|
+
USPSFlags::Helpers.log 'i'
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
|
3
|
+
# Private methods for USPSFlags::Generator.
|
4
|
+
#
|
5
|
+
# These methods should never need to be called directly.
|
6
|
+
# @private
|
7
|
+
class USPSFlags
|
8
|
+
class Generate
|
9
|
+
module HelperMethods
|
10
|
+
# This module defined no public methods
|
11
|
+
def _; end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def remove_static_files
|
16
|
+
%w[SVG PNG ZIP].each do |dir|
|
17
|
+
dir_path = "#{USPSFlags.configuration.flags_dir}/#{dir}"
|
18
|
+
::FileUtils.rm_rf(::Dir.glob("#{dir_path}/*")) if ::Dir.exist?(dir_path)
|
19
|
+
end
|
20
|
+
|
21
|
+
['SVG/insignia', 'PNG/insignia'].each do |dir|
|
22
|
+
::FileUtils.mkdir_p("#{USPSFlags.configuration.flags_dir}/#{dir}")
|
23
|
+
end
|
24
|
+
|
25
|
+
USPSFlags::Helpers.log "\n - Cleared previous files.\n"
|
26
|
+
end
|
27
|
+
|
28
|
+
def set_file_paths
|
29
|
+
@svg_file = "#{USPSFlags.configuration.flags_dir}/SVG/#{@flag}.svg"
|
30
|
+
@png_file = @svg_file.gsub('/SVG/', '/PNG/').gsub('.svg', '.png')
|
31
|
+
@svg_ins_file = @svg_file.gsub('/SVG/', '/SVG/insignia/')
|
32
|
+
@png_ins_file = @svg_file.gsub('/SVG/', '/PNG/insignia/').gsub('.svg', '.png')
|
33
|
+
[@svg_file, @png_file, @svg_ins_file, @png_ins_file]
|
34
|
+
end
|
35
|
+
|
36
|
+
def set_temp_svg(svg)
|
37
|
+
@temp_svg_path = "#{USPSFlags.configuration.flags_dir}/temp.svg"
|
38
|
+
temp_svg = ::File.new(@temp_svg_path, 'w+')
|
39
|
+
temp_svg.write(svg)
|
40
|
+
temp_svg.flush
|
41
|
+
@temp_svg_path
|
42
|
+
end
|
43
|
+
|
44
|
+
def delete_temp_svg?
|
45
|
+
!@temp_svg_path.to_s.empty? && ::File.exist?(@temp_svg_path)
|
46
|
+
end
|
47
|
+
|
48
|
+
def any_all_arg?(svg, png, zips, reset)
|
49
|
+
svg || png || zips || reset
|
50
|
+
end
|
51
|
+
|
52
|
+
def all_arg_error
|
53
|
+
raise(
|
54
|
+
USPSFlags::Errors::StaticFilesGenerationError,
|
55
|
+
'At least one argument switch must be true out of [svg, png, zips, reset].'
|
56
|
+
)
|
57
|
+
end
|
58
|
+
|
59
|
+
def track_time(simple: false)
|
60
|
+
overall_start_time = Time.now
|
61
|
+
yield
|
62
|
+
end_time = Time.now - overall_start_time
|
63
|
+
simple ? end_time : USPSFlags::Helpers.log("\nTotal run time: #{end_time} s\n\n")
|
64
|
+
end
|
65
|
+
|
66
|
+
def no_insignia?
|
67
|
+
return false if USPSFlags::Helpers.valid_flags(:insignia).include?(@flag)
|
68
|
+
|
69
|
+
USPSFlags::Helpers.log '-'
|
70
|
+
true
|
71
|
+
end
|
72
|
+
|
73
|
+
def file_found?(file)
|
74
|
+
return false unless ::File.exist?(file)
|
75
|
+
|
76
|
+
USPSFlags::Helpers.log '.'
|
77
|
+
true
|
78
|
+
end
|
79
|
+
|
80
|
+
def too_big?(file, size)
|
81
|
+
return false unless size > MiniMagick::Image.open(file)[:width]
|
82
|
+
|
83
|
+
USPSFlags::Helpers.log '+'
|
84
|
+
true
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
data/lib/usps_flags/helpers.rb
CHANGED
@@ -1,199 +1,197 @@
|
|
1
1
|
# frozen_string_literal: false
|
2
2
|
|
3
3
|
# Container class for helper methods.
|
4
|
-
class USPSFlags
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
# Resizes and saves a PNG image.
|
28
|
-
#
|
29
|
-
# One of the params [file, outfile] is required, and outfile takes precedence.
|
30
|
-
#
|
31
|
-
# @param [String] png_file Path to the PNG file to resize.
|
32
|
-
# @param [String] file Abbreviated key for the output file (e.g. "LTC", "insignia/FLT").
|
33
|
-
# @param [String] outfile Path to the output file.
|
34
|
-
# @param [String] size Actual size to output as.
|
35
|
-
# @param [String] size_key Size suffix to attach to the file name.
|
36
|
-
def resize_png(png_file, file: nil, outfile: nil, size:, size_key: nil)
|
37
|
-
raise USPSFlags::Errors::PNGConversionError if outfile.nil? && file.nil?
|
38
|
-
raise USPSFlags::Errors::PNGConversionError if outfile.nil? && size_key.nil?
|
39
|
-
|
40
|
-
output_file_name = outfile || "#{USPSFlags.configuration.flags_dir}/PNG/#{file}.#{size_key}.png"
|
41
|
-
resize_convert(size, png_file, output_file_name)
|
42
|
-
end
|
4
|
+
class USPSFlags
|
5
|
+
class Helpers
|
6
|
+
require 'usps_flags/helpers/valid_flags'
|
7
|
+
|
8
|
+
class << self
|
9
|
+
# Valid options for flag generation.
|
10
|
+
#
|
11
|
+
# @param [Symbol] type Specify subset of flags.
|
12
|
+
# @option type [Symbol] :all All flags
|
13
|
+
# @option type [Symbol] :officer Officer flags
|
14
|
+
# @option type [Symbol] :insignia Insignia-eligible officer flags (no past officers)
|
15
|
+
# @option type [Symbol] :squadron Squadron-level officer flags
|
16
|
+
# @option type [Symbol] :district District-level officer flags
|
17
|
+
# @option type [Symbol] :national National-level officer flags
|
18
|
+
# @option type [Symbol] :special Special flags
|
19
|
+
# @option type [Symbol] :us US flag
|
20
|
+
# @return [Array] Valid options for flag generation (based on the provided type).
|
21
|
+
def valid_flags(type = :all)
|
22
|
+
USPSFlags::Helpers::ValidFlags.load_valid_flags
|
23
|
+
USPSFlags::Helpers::ValidFlags.load_special_flags
|
24
|
+
USPSFlags::Helpers::ValidFlags.load_valid_flag_groups
|
25
|
+
USPSFlags::Helpers::ValidFlags.valid_flags_for(type)
|
26
|
+
end
|
43
27
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
28
|
+
# Resizes and saves a PNG image.
|
29
|
+
#
|
30
|
+
# One of the params [file, outfile] is required, and outfile takes precedence.
|
31
|
+
#
|
32
|
+
# @param [String] png_file Path to the PNG file to resize.
|
33
|
+
# @param [String] file Abbreviated key for the output file (e.g. "LTC", "insignia/FLT").
|
34
|
+
# @param [String] outfile Path to the output file.
|
35
|
+
# @param [String] size Actual size to output as.
|
36
|
+
# @param [String] size_key Size suffix to attach to the file name.
|
37
|
+
def resize_png(png_file, file: nil, outfile: nil, size:, size_key: nil)
|
38
|
+
raise USPSFlags::Errors::PNGConversionError if outfile.nil? && file.nil?
|
39
|
+
raise USPSFlags::Errors::PNGConversionError if outfile.nil? && size_key.nil?
|
40
|
+
|
41
|
+
output_file_name = outfile || "#{USPSFlags.configuration.flags_dir}/PNG/#{file}.#{size_key}.png"
|
42
|
+
resize_convert(size, png_file, output_file_name)
|
43
|
+
end
|
51
44
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
color: flag_color(rank),
|
60
|
-
type: flag_type(rank),
|
61
|
-
level: flag_level(rank),
|
62
|
-
count: flag_count(rank)
|
63
|
-
}
|
64
|
-
end
|
45
|
+
# Gets the maximum length among valid flags.
|
46
|
+
#
|
47
|
+
# This is used USPSFlags::Generate, and should never need to be called directly.
|
48
|
+
# @private
|
49
|
+
def max_flag_name_length
|
50
|
+
valid_flags(:all).map(&:length).max
|
51
|
+
end
|
65
52
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
53
|
+
# Gets the generation details for the given rank.
|
54
|
+
#
|
55
|
+
# This is used USPSFlags::Generate, and should never need to be called directly.
|
56
|
+
# @private
|
57
|
+
def flag_details(rank)
|
58
|
+
{
|
59
|
+
style: flag_style(rank),
|
60
|
+
color: flag_color(rank),
|
61
|
+
type: flag_type(rank),
|
62
|
+
level: flag_level(rank),
|
63
|
+
count: flag_count(rank)
|
64
|
+
}
|
65
|
+
end
|
73
66
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
67
|
+
# Image sizes for generated PNG images.
|
68
|
+
#
|
69
|
+
# This is used USPSFlags::Generate, and should never need to be called directly.
|
70
|
+
# @private
|
71
|
+
def png_sizes
|
72
|
+
{ 1500 => 'H', 1000 => 'K', 500 => 'D', 'thumb' => 'T' }
|
73
|
+
end
|
80
74
|
|
81
|
-
size
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
75
|
+
# Gets size key for saving PNG images.
|
76
|
+
#
|
77
|
+
# This is used USPSFlags::Generate, and should never need to be called directly.
|
78
|
+
# @private
|
79
|
+
def size_and_key(size:, flag:)
|
80
|
+
return [size, size] unless size == 'thumb'
|
81
|
+
|
82
|
+
size = case flag
|
83
|
+
when 'ENSIGN'
|
84
|
+
200
|
85
|
+
when 'US'
|
86
|
+
300
|
87
|
+
else
|
88
|
+
150
|
89
|
+
end
|
90
|
+
|
91
|
+
[size, 'thumb']
|
88
92
|
end
|
89
93
|
|
90
|
-
|
91
|
-
|
94
|
+
# Prints message(s) to the console and logs them.
|
95
|
+
#
|
96
|
+
# This should never need to be called directly.
|
97
|
+
# @private
|
98
|
+
def log(*messages)
|
99
|
+
::FileUtils.mkdir_p(USPSFlags.configuration.log_path)
|
100
|
+
outputs = [STDOUT]
|
92
101
|
|
93
|
-
|
94
|
-
|
95
|
-
# This should never need to be called directly.
|
96
|
-
# @private
|
97
|
-
def log(*messages)
|
98
|
-
::FileUtils.mkdir_p(USPSFlags.configuration.log_path)
|
99
|
-
outputs = [STDOUT]
|
102
|
+
log_file = File.open("#{USPSFlags.configuration.log_path}/flag.log", 'a')
|
103
|
+
outputs << log_file
|
100
104
|
|
101
|
-
|
102
|
-
|
105
|
+
messages.each do |message|
|
106
|
+
outputs.each { |f| f.write(message) }
|
107
|
+
end
|
103
108
|
|
104
|
-
|
105
|
-
|
109
|
+
messages
|
110
|
+
ensure
|
111
|
+
log_file.close if log_file.is_a?(File)
|
106
112
|
end
|
107
113
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
#
|
115
|
-
# This should never need to be called directly.
|
116
|
-
# @private
|
117
|
-
def ensure_dir_for_file(path)
|
118
|
-
return false if path.nil? || path.empty? || !path.scan('/')
|
114
|
+
# Ensures the directory for the specified path exists.
|
115
|
+
#
|
116
|
+
# This should never need to be called directly.
|
117
|
+
# @private
|
118
|
+
def ensure_dir_for_file(path)
|
119
|
+
return false if path.nil? || path.empty? || !path.scan('/')
|
119
120
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
121
|
+
dirs = path.split('/')
|
122
|
+
dirs.pop
|
123
|
+
::FileUtils.mkdir_p(dirs.join('/')).first
|
124
|
+
end
|
124
125
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
126
|
+
# Prints output to the console or saves to a file, then returns the generated data.
|
127
|
+
#
|
128
|
+
# This should never need to be called directly.
|
129
|
+
# @private
|
130
|
+
def output(svg, outfile: nil)
|
131
|
+
if outfile.nil?
|
132
|
+
puts svg, "\n"
|
133
|
+
elsif outfile != ''
|
134
|
+
ensure_dir_for_file(outfile)
|
135
|
+
f = ::File.new(outfile, 'w+')
|
136
|
+
f.write(svg)
|
137
|
+
f.close
|
138
|
+
end
|
139
|
+
svg
|
140
|
+
end
|
140
141
|
|
141
|
-
|
142
|
+
private
|
142
143
|
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
144
|
+
def resize_convert(size, png_file, output_file_name)
|
145
|
+
MiniMagick::Tool::Convert.new do |convert|
|
146
|
+
convert << '-background' << 'none'
|
147
|
+
convert << '-format' << 'png'
|
148
|
+
convert << '-resize' << size.to_s
|
149
|
+
convert << png_file
|
150
|
+
convert << output_file_name
|
151
|
+
end
|
150
152
|
end
|
151
|
-
end
|
152
153
|
|
153
|
-
|
154
|
-
|
155
|
-
|
154
|
+
def flag_style(rank)
|
155
|
+
return :past if valid_flags(:past).include?(rank)
|
156
|
+
return :swallowtail if valid_flags(:swallowtail).include?(rank)
|
156
157
|
|
157
|
-
|
158
|
-
|
158
|
+
:regular
|
159
|
+
end
|
159
160
|
|
160
|
-
|
161
|
-
|
162
|
-
|
161
|
+
def flag_color(rank)
|
162
|
+
return :blue if valid_flags(:command).include?(rank)
|
163
|
+
return :red if valid_flags(:bridge).include?(rank)
|
163
164
|
|
164
|
-
|
165
|
-
|
165
|
+
:white
|
166
|
+
end
|
166
167
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
168
|
+
def flag_level(rank)
|
169
|
+
return :n if rank.match?(/N.*/)
|
170
|
+
return :d if rank.match?(/D.*/)
|
171
|
+
return :s if rank == 'FLT'
|
172
|
+
end
|
172
173
|
|
173
|
-
|
174
|
-
|
175
|
-
|
174
|
+
def flag_count(rank)
|
175
|
+
return 3 if valid_flags(:command).include?(rank)
|
176
|
+
return 2 if valid_flags(:bridge).include?(rank)
|
176
177
|
|
177
|
-
|
178
|
-
|
178
|
+
1
|
179
|
+
end
|
180
|
+
|
181
|
+
def flag_type(rank)
|
182
|
+
specifics = { 'PORTCAP' => :pc, 'FLEETCAP' => :fc, 'STFC' => :stf }
|
183
|
+
return specifics[rank] if specifics.key?(rank)
|
184
|
+
return :a if rank.match?(/.AIDE/)
|
185
|
+
return :f if rank.match?(/.?FLT/)
|
179
186
|
|
180
|
-
def flag_type(rank) # Complexity
|
181
|
-
specifics = { 'PORTCAP' => :pc, 'FLEETCAP' => :fc, 'STFC' => :stf }
|
182
|
-
if specifics.keys.include?(rank)
|
183
|
-
specifics[rank]
|
184
|
-
elsif rank.match? /.AIDE/
|
185
|
-
:a
|
186
|
-
elsif rank.match? /.?FLT/
|
187
|
-
:f
|
188
|
-
else
|
189
187
|
get_line_flag_level(rank)
|
190
188
|
end
|
191
|
-
end
|
192
189
|
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
190
|
+
def get_line_flag_level(rank)
|
191
|
+
return :s if valid_flags(:squadron).include?(rank)
|
192
|
+
return :d if valid_flags(:district).include?(rank)
|
193
|
+
return :n if valid_flags(:national).include?(rank)
|
194
|
+
end
|
197
195
|
end
|
198
196
|
end
|
199
197
|
end
|