usps_flags 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +0 -3
- data/.travis.yml +1 -0
- data/Gemfile.lock +17 -1
- data/lib/usps_flags/config.rb +38 -33
- data/lib/usps_flags/core/ensign.rb +34 -26
- data/lib/usps_flags/core/field.rb +56 -39
- data/lib/usps_flags/core/headers.rb +34 -30
- data/lib/usps_flags/core/icons/star.rb +12 -18
- data/lib/usps_flags/core/icons/trident.rb +46 -93
- data/lib/usps_flags/core/icons/trident_parts/hashes.rb +69 -0
- data/lib/usps_flags/core/icons/trumpet.rb +14 -10
- data/lib/usps_flags/core/pennant.rb +25 -28
- data/lib/usps_flags/core/trident_specs/circle.rb +3 -3
- data/lib/usps_flags/core/trident_specs/delta.rb +4 -4
- data/lib/usps_flags/core/trident_specs/long.rb +2 -2
- data/lib/usps_flags/core/trident_specs/short.rb +13 -13
- data/lib/usps_flags/core/tridents.rb +1 -1
- data/lib/usps_flags/core/us.rb +14 -16
- data/lib/usps_flags/generate/flag.rb +53 -34
- data/lib/usps_flags/generate/private.rb +199 -0
- data/lib/usps_flags/generate.rb +37 -185
- data/lib/usps_flags/helpers/builders.rb +70 -35
- data/lib/usps_flags/helpers/spec_arrows.rb +76 -26
- data/lib/usps_flags/helpers/valid_flags.rb +55 -0
- data/lib/usps_flags/helpers.rb +15 -52
- data/spec/spec_helper.rb +1 -3
- data/spec/usps_flags/core_spec.rb +27 -25
- data/spec/usps_flags/generate_spec.rb +24 -10
- data/spec/usps_flags/helpers_spec.rb +10 -3
- data/spec/usps_flags_spec.rb +5 -4
- data/usps_flags.gemspec +3 -2
- metadata +25 -2
@@ -6,37 +6,28 @@
|
|
6
6
|
# @private
|
7
7
|
class USPSFlags::Generate::Flag
|
8
8
|
class << self
|
9
|
-
def officer(rank: nil,
|
9
|
+
def officer(rank: nil, outfile: nil, scale: nil, field: true)
|
10
10
|
raise ArgumentError, 'No rank specified.' if rank.nil?
|
11
11
|
|
12
12
|
@rank = rank.to_s.upcase
|
13
13
|
@field = field
|
14
14
|
|
15
|
-
svg = ''
|
15
|
+
svg = +''
|
16
16
|
svg << USPSFlags::Core.headers(scale: scale, title: @rank)
|
17
17
|
modify_rank_for_insignia
|
18
18
|
@flag_details = USPSFlags::Helpers.flag_details(@rank)
|
19
19
|
@trident_color = @field ? :white : @flag_details[:color]
|
20
|
-
svg << officer_flag_body
|
20
|
+
svg << officer_flag_body(@flag_details[:style])
|
21
21
|
|
22
22
|
USPSFlags::Helpers.output(svg, outfile: outfile)
|
23
23
|
end
|
24
24
|
|
25
25
|
def special(type, level:, field: true)
|
26
26
|
# Paths were designed for a base fly of 3000 pixels, but the base was changed for more useful fractions.
|
27
|
-
svg = ''
|
27
|
+
svg = +''
|
28
28
|
svg << "<g transform=\"translate(#{USPSFlags::Config::BASE_FLY / 10})\">" unless field
|
29
29
|
svg << "<g transform=\"scale(#{Rational(USPSFlags::Config::BASE_FLY, 3000).to_f})\">"
|
30
|
-
svg <<
|
31
|
-
when :a
|
32
|
-
USPSFlags::Core.binoculars(level)
|
33
|
-
when :f
|
34
|
-
USPSFlags::Core.trumpet(level)
|
35
|
-
when :fc
|
36
|
-
USPSFlags::Core.anchor
|
37
|
-
when :pc
|
38
|
-
USPSFlags::Core.lighthouse
|
39
|
-
end
|
30
|
+
svg << special_icon(type, level)
|
40
31
|
svg << '</g>'
|
41
32
|
svg << '</g>' unless field
|
42
33
|
|
@@ -45,7 +36,7 @@ class USPSFlags::Generate::Flag
|
|
45
36
|
|
46
37
|
def pennant(type: 'CRUISE', outfile: nil, scale: nil)
|
47
38
|
type = type.upcase
|
48
|
-
svg = ''
|
39
|
+
svg = +''
|
49
40
|
title = { 'CRUISE' => 'Cruise Pennant', 'OIC' => 'Officer-in-Charge Pennant' }[type]
|
50
41
|
svg << USPSFlags::Core.headers(pennant: true, scale: scale, title: title)
|
51
42
|
svg << USPSFlags::Core.pennant(type)
|
@@ -55,7 +46,7 @@ class USPSFlags::Generate::Flag
|
|
55
46
|
end
|
56
47
|
|
57
48
|
def ensign(outfile: nil, scale: nil)
|
58
|
-
svg = ''
|
49
|
+
svg = +''
|
59
50
|
svg << USPSFlags::Core.headers(scale: scale, title: 'USPS Ensign')
|
60
51
|
svg << USPSFlags::Core.ensign
|
61
52
|
svg << USPSFlags::Core.footer
|
@@ -66,7 +57,7 @@ class USPSFlags::Generate::Flag
|
|
66
57
|
def wheel(outfile: nil, scale: nil)
|
67
58
|
width = 4327.4667
|
68
59
|
height = 4286.9333
|
69
|
-
svg = ''
|
60
|
+
svg = +''
|
70
61
|
svg << USPSFlags::Core.headers(width: width, height: height, scale: scale, title: 'USPS Ensign Wheel')
|
71
62
|
svg << USPSFlags::Core.wheel
|
72
63
|
svg << USPSFlags::Core.footer
|
@@ -78,7 +69,7 @@ class USPSFlags::Generate::Flag
|
|
78
69
|
base_hoist = 2000.to_f
|
79
70
|
hoist = scale.nil? ? base_hoist : (base_hoist / scale)
|
80
71
|
fly = hoist * 1.91
|
81
|
-
svg = ''
|
72
|
+
svg = +''
|
82
73
|
svg << USPSFlags::Core.headers(width: fly, height: hoist, scale: scale, title: 'US Ensign')
|
83
74
|
svg << USPSFlags::Core.us
|
84
75
|
svg << USPSFlags::Core.footer
|
@@ -88,30 +79,58 @@ class USPSFlags::Generate::Flag
|
|
88
79
|
|
89
80
|
private
|
90
81
|
|
82
|
+
def special_icon(type, level)
|
83
|
+
{
|
84
|
+
a: USPSFlags::Core.binoculars(level), f: USPSFlags::Core.trumpet(level),
|
85
|
+
fc: USPSFlags::Core.anchor, pc: USPSFlags::Core.lighthouse
|
86
|
+
}[type]
|
87
|
+
end
|
88
|
+
|
91
89
|
def get_officer_flag
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
90
|
+
[
|
91
|
+
get_national_bridge_flag, get_bridge_flag, get_offset_flag, get_special_flag
|
92
|
+
].compact.first || get_trident_flag
|
93
|
+
end
|
94
|
+
|
95
|
+
def get_national_bridge_flag
|
96
|
+
return unless cc? || vc?
|
97
|
+
|
98
|
+
return USPSFlags::Core::Tridents.cc(@flag_details[:type], trident_color: @trident_color) if cc?
|
99
|
+
return USPSFlags::Core::Tridents.vc(@flag_details[:type], trident_color: @trident_color) if vc?
|
100
|
+
end
|
101
|
+
|
102
|
+
def get_bridge_flag
|
103
|
+
return unless three? || two?
|
104
|
+
|
105
|
+
if three?
|
97
106
|
USPSFlags::Core::Tridents.three(@flag_details[:type], trident_color: @trident_color, field_color: @flag_details[:color])
|
98
107
|
elsif two?
|
99
108
|
USPSFlags::Core::Tridents.two(@flag_details[:type], trident_color: @trident_color, field_color: @flag_details[:color])
|
100
|
-
elsif offset?
|
101
|
-
USPSFlags::Core::Tridents.offset(@flag_details[:type], field_color: @flag_details[:color], field: @field)
|
102
|
-
elsif special?
|
103
|
-
special(@flag_details[:type], level: @flag_details[:level], field: @field)
|
104
|
-
else
|
105
|
-
USPSFlags::Core.trident(@flag_details[:type], field_color: @flag_details[:color])
|
106
109
|
end
|
107
110
|
end
|
108
111
|
|
109
|
-
def
|
110
|
-
|
111
|
-
|
112
|
-
|
112
|
+
def get_offset_flag
|
113
|
+
return unless offset?
|
114
|
+
|
115
|
+
USPSFlags::Core::Tridents.offset(@flag_details[:type], field_color: @flag_details[:color], field: @field)
|
116
|
+
end
|
117
|
+
|
118
|
+
def get_special_flag
|
119
|
+
return unless special?
|
120
|
+
|
121
|
+
special(@flag_details[:type], level: @flag_details[:level], field: @field)
|
122
|
+
end
|
123
|
+
|
124
|
+
def get_trident_flag
|
125
|
+
USPSFlags::Core.trident(@flag_details[:type], field_color: @flag_details[:color])
|
126
|
+
end
|
127
|
+
|
128
|
+
def officer_flag_body(style)
|
129
|
+
svg = +''
|
130
|
+
svg << USPSFlags::Core.field(style: style, color: @flag_details[:color]) if @field
|
131
|
+
svg << '<g transform="translate(-150, 400)"><g transform="scale(0.58333)">' if style == :past
|
113
132
|
svg << get_officer_flag
|
114
|
-
svg << '</g></g>' if
|
133
|
+
svg << '</g></g>' if style == :past
|
115
134
|
svg << USPSFlags::Core.footer
|
116
135
|
svg
|
117
136
|
end
|
@@ -0,0 +1,199 @@
|
|
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
|
+
module USPSFlags::Generate::Private
|
8
|
+
private
|
9
|
+
|
10
|
+
def any_all_arg?(svg, png, zips, reset)
|
11
|
+
svg || png || zips || reset
|
12
|
+
end
|
13
|
+
|
14
|
+
def all_arg_error
|
15
|
+
raise(
|
16
|
+
USPSFlags::Errors::StaticFilesGenerationError,
|
17
|
+
'At least one argument switch must be true out of [svg, png, zips, reset].'
|
18
|
+
)
|
19
|
+
end
|
20
|
+
|
21
|
+
def track_time(simple: false)
|
22
|
+
overall_start_time = Time.now
|
23
|
+
yield
|
24
|
+
end_time = Time.now - overall_start_time
|
25
|
+
simple ? end_time : USPSFlags::Helpers.log("\nTotal run time: #{end_time} s\n\n")
|
26
|
+
end
|
27
|
+
|
28
|
+
def remove_static_files
|
29
|
+
['SVG', 'PNG', 'ZIP'].each do |dir|
|
30
|
+
dir_path = "#{USPSFlags.configuration.flags_dir}/#{dir}"
|
31
|
+
::FileUtils.rm_rf(::Dir.glob("#{dir_path}/*")) if ::Dir.exist?(dir_path)
|
32
|
+
end
|
33
|
+
['SVG/insignia', 'PNG/insignia'].each { |dir| ::FileUtils.mkdir_p("#{USPSFlags.configuration.flags_dir}/#{dir}") }
|
34
|
+
USPSFlags::Helpers.log "\n - Cleared previous files.\n"
|
35
|
+
end
|
36
|
+
|
37
|
+
def set_file_paths
|
38
|
+
@svg_file = "#{USPSFlags.configuration.flags_dir}/SVG/#{@flag}.svg"
|
39
|
+
@png_file = @svg_file.gsub('/SVG/', '/PNG/').gsub('.svg', '.png')
|
40
|
+
@svg_ins_file = @svg_file.gsub('/SVG/', '/SVG/insignia/')
|
41
|
+
@png_ins_file = @svg_file.gsub('/SVG/', '/PNG/insignia/').gsub('.svg', '.png')
|
42
|
+
[@svg_file, @png_file, @svg_ins_file, @png_ins_file]
|
43
|
+
end
|
44
|
+
|
45
|
+
def static_generation_header
|
46
|
+
puts "\nSVGs generate a single file.",
|
47
|
+
'PNGs generate full-res, 1500w, 1000w, 500w, and thumbnail files.',
|
48
|
+
'Corresponding rank insignia (including smaller sizes) are also generated, as appropriate.'
|
49
|
+
USPSFlags::Helpers.log "\nGeneration location: #{USPSFlags.configuration.flags_dir}\n"
|
50
|
+
USPSFlags::Helpers.log "\n#{Time.now.strftime('%Y%m%d.%H%M%S%z')} – Generating static files...\n\n"
|
51
|
+
USPSFlags::Helpers.log "Flag | SVG | PNG | Run time\n".rjust(USPSFlags::Helpers.max_flag_name_length + 31),
|
52
|
+
"\n".rjust(USPSFlags::Helpers.max_flag_name_length + 32, '-')
|
53
|
+
end
|
54
|
+
|
55
|
+
def generate_zip(type)
|
56
|
+
no_dir = [USPSFlags::Errors::ZipGenerationError, 'Flags directory not found.']
|
57
|
+
raise *no_dir unless ::Dir.exist?("#{USPSFlags.configuration.flags_dir}/ZIP")
|
58
|
+
|
59
|
+
zip = "#{USPSFlags.configuration.flags_dir}/ZIP/USPS_Flags.#{type}.zip"
|
60
|
+
::File.delete(zip) if ::File.exist?(zip)
|
61
|
+
write_zip_file(zip, type)
|
62
|
+
|
63
|
+
puts "Generated #{type.upcase} Zip"
|
64
|
+
end
|
65
|
+
|
66
|
+
def write_zip_file(zip, type)
|
67
|
+
::Zip::File.open(zip, ::Zip::File::CREATE) do |z|
|
68
|
+
::Dir.glob("#{USPSFlags.configuration.flags_dir}/#{type.upcase}/**/*").each do |f|
|
69
|
+
add_to_zip(z, f)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def add_to_zip(z, f)
|
75
|
+
filename = f.split('/').last
|
76
|
+
filename = "insignia/#{filename}" if f.split('/').last(2).first == 'insignia'
|
77
|
+
z.add(filename, f)
|
78
|
+
end
|
79
|
+
|
80
|
+
def generate_static_images_for(flag, svg: true, png: true)
|
81
|
+
run_time = track_time(simple: true) do
|
82
|
+
@flag = flag.upcase
|
83
|
+
USPSFlags::Helpers.log "#{@flag.rjust(USPSFlags::Helpers.max_flag_name_length)} |"
|
84
|
+
set_file_paths
|
85
|
+
generate_requested_images(svg, png)
|
86
|
+
end
|
87
|
+
|
88
|
+
USPSFlags::Helpers.log " | #{run_time.round(4).to_s[(0..5)].ljust(6, '0')} s\n"
|
89
|
+
end
|
90
|
+
|
91
|
+
def generate_requested_images(svg, png)
|
92
|
+
svg ? generate_static_svg : USPSFlags::Helpers.log('-')
|
93
|
+
png ? generate_static_png : USPSFlags::Helpers.log('- ')
|
94
|
+
end
|
95
|
+
|
96
|
+
def generate_static_svg
|
97
|
+
USPSFlags::Helpers.log ' '
|
98
|
+
|
99
|
+
generate_regular_svg
|
100
|
+
generate_insignia_svg
|
101
|
+
end
|
102
|
+
|
103
|
+
def generate_regular_svg
|
104
|
+
return if file_found?(@svg_file)
|
105
|
+
|
106
|
+
svg @flag, outfile: @svg_file, scale: 1
|
107
|
+
USPSFlags::Helpers.log 'S'
|
108
|
+
end
|
109
|
+
|
110
|
+
def generate_insignia_svg
|
111
|
+
return if no_insignia?
|
112
|
+
|
113
|
+
svg @flag, field: false, outfile: @svg_ins_file, scale: 1
|
114
|
+
USPSFlags::Helpers.log 'I'
|
115
|
+
end
|
116
|
+
|
117
|
+
def set_temp_svg(svg)
|
118
|
+
@temp_svg_path = "#{USPSFlags.configuration.flags_dir}/temp.svg"
|
119
|
+
temp_svg = ::File.new(@temp_svg_path, 'w+')
|
120
|
+
temp_svg.write(svg)
|
121
|
+
temp_svg.flush
|
122
|
+
@temp_svg_path
|
123
|
+
end
|
124
|
+
|
125
|
+
def delete_temp_svg?
|
126
|
+
!@temp_svg_path.to_s.empty? && ::File.exist?(@temp_svg_path)
|
127
|
+
end
|
128
|
+
|
129
|
+
def generate_static_png
|
130
|
+
USPSFlags::Helpers.log ' | '
|
131
|
+
generate_fullsize_png
|
132
|
+
generate_fullsize_png_insignia
|
133
|
+
generate_reduced_size_pngs
|
134
|
+
end
|
135
|
+
|
136
|
+
def generate_fullsize_png
|
137
|
+
return if file_found?(@png_file)
|
138
|
+
|
139
|
+
png(File.read(@svg_file), outfile: @png_file)
|
140
|
+
USPSFlags::Helpers.log 'F'
|
141
|
+
end
|
142
|
+
|
143
|
+
def generate_fullsize_png_insignia
|
144
|
+
return if no_insignia?
|
145
|
+
return if file_found?(@png_ins_file)
|
146
|
+
|
147
|
+
png(File.read(@svg_ins_file), outfile: @png_ins_file, trim: true)
|
148
|
+
USPSFlags::Helpers.log 'I'
|
149
|
+
end
|
150
|
+
|
151
|
+
def generate_reduced_size_pngs
|
152
|
+
USPSFlags::Helpers.png_sizes.keys.each do |size|
|
153
|
+
size, size_key = USPSFlags::Helpers.size_and_key(size: size, flag: @flag)
|
154
|
+
@sized_png_file = "#{USPSFlags.configuration.flags_dir}/PNG/#{@flag}.#{size_key}.png"
|
155
|
+
@sized_png_ins_file = @sized_png_file.gsub('/PNG/', '/PNG/insignia/')
|
156
|
+
|
157
|
+
generate_smaller_png(size, size_key)
|
158
|
+
generate_smaller_png_insignia(size, size_key)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
def generate_smaller_png(size, size_key)
|
163
|
+
return if file_found?(@sized_png_file)
|
164
|
+
return if too_big?(@png_file, size)
|
165
|
+
|
166
|
+
USPSFlags::Helpers.resize_png(@png_file, file: @flag, size: size, size_key: size_key)
|
167
|
+
USPSFlags::Helpers.log USPSFlags::Helpers.png_sizes[size_key]
|
168
|
+
end
|
169
|
+
|
170
|
+
def generate_smaller_png_insignia(size, size_key)
|
171
|
+
return if no_insignia?
|
172
|
+
return if file_found?(@sized_png_ins_file)
|
173
|
+
return if too_big?(@png_ins_file, size)
|
174
|
+
|
175
|
+
USPSFlags::Helpers.resize_png(@png_ins_file, file: "insignia/#{@flag}", size: size, size_key: size_key)
|
176
|
+
USPSFlags::Helpers.log 'i'
|
177
|
+
end
|
178
|
+
|
179
|
+
def no_insignia?
|
180
|
+
return false if USPSFlags::Helpers.valid_flags(:insignia).include?(@flag)
|
181
|
+
|
182
|
+
USPSFlags::Helpers.log '-'
|
183
|
+
true
|
184
|
+
end
|
185
|
+
|
186
|
+
def file_found?(file)
|
187
|
+
return false unless ::File.exist?(file)
|
188
|
+
|
189
|
+
USPSFlags::Helpers.log '.'
|
190
|
+
true
|
191
|
+
end
|
192
|
+
|
193
|
+
def too_big?(file, size)
|
194
|
+
return false unless size > MiniMagick::Image.open(file)[:width]
|
195
|
+
|
196
|
+
USPSFlags::Helpers.log '+'
|
197
|
+
true
|
198
|
+
end
|
199
|
+
end
|
data/lib/usps_flags/generate.rb
CHANGED
@@ -2,7 +2,10 @@
|
|
2
2
|
|
3
3
|
# Controller class for generating files.
|
4
4
|
class USPSFlags::Generate
|
5
|
+
require 'usps_flags/generate/private'
|
6
|
+
|
5
7
|
class << self
|
8
|
+
include USPSFlags::Generate::Private
|
6
9
|
# The primary controller method. Generates an SVG file or SVG data.
|
7
10
|
#
|
8
11
|
# @param [String] flag The flag type to generate.
|
@@ -15,17 +18,9 @@ class USPSFlags::Generate
|
|
15
18
|
|
16
19
|
USPSFlags::Helpers.ensure_dir_for_file(outfile)
|
17
20
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
USPSFlags::Generate::Flag.ensign(outfile: outfile, scale: scale)
|
22
|
-
elsif flag == 'US'
|
23
|
-
USPSFlags::Generate::Flag.us(outfile: outfile, scale: scale)
|
24
|
-
elsif flag == 'WHEEL'
|
25
|
-
USPSFlags::Generate::Flag.wheel(outfile: outfile, scale: scale)
|
26
|
-
else
|
27
|
-
USPSFlags::Generate::Flag.officer(rank: flag, outfile: outfile, scale: scale, field: field)
|
28
|
-
end
|
21
|
+
output = special_flag(flag, outfile, scale)
|
22
|
+
output ||= USPSFlags::Generate::Flag.officer(rank: flag, outfile: outfile, scale: scale, field: field)
|
23
|
+
output
|
29
24
|
end
|
30
25
|
|
31
26
|
# Convert SVG data into a PNG file.
|
@@ -41,13 +36,7 @@ class USPSFlags::Generate
|
|
41
36
|
|
42
37
|
USPSFlags::Helpers.ensure_dir_for_file(outfile)
|
43
38
|
|
44
|
-
|
45
|
-
convert << '-background' << background
|
46
|
-
convert << '-format' << 'png'
|
47
|
-
convert << '-trim' if trim
|
48
|
-
convert << @temp_svg_path
|
49
|
-
convert << outfile
|
50
|
-
end
|
39
|
+
generate_png(background, trim, outfile)
|
51
40
|
ensure
|
52
41
|
::File.delete(@temp_svg_path) if delete_temp_svg?
|
53
42
|
end
|
@@ -59,13 +48,13 @@ class USPSFlags::Generate
|
|
59
48
|
# @param [Boolean] zips Whether to create zip archives for all images created. Does not create a zip for skipped formats.
|
60
49
|
# @param [Boolean] reset Whether to delete all previous files before generating new files.
|
61
50
|
def all(svg: true, png: true, zips: true, reset: true)
|
62
|
-
|
51
|
+
all_arg_error unless any_all_arg?(svg, png, zips, reset)
|
63
52
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
53
|
+
track_time do
|
54
|
+
remove_static_files if reset
|
55
|
+
images(svg: svg, png: png) if svg || png
|
56
|
+
zips(svg: svg, png: png) if zips
|
57
|
+
end
|
69
58
|
end
|
70
59
|
|
71
60
|
# Generate zip archives of current static image files.
|
@@ -73,7 +62,12 @@ class USPSFlags::Generate
|
|
73
62
|
# @param [Boolean] svg Generate zip archive of SVG images.
|
74
63
|
# @param [Boolean] png Generate zip archive of PNG images.
|
75
64
|
def zips(svg: true, png: true)
|
76
|
-
|
65
|
+
unless svg || png
|
66
|
+
raise(
|
67
|
+
USPSFlags::Errors::ZipGenerationError,
|
68
|
+
'At least one argument switch must be true out of [svg, png].'
|
69
|
+
)
|
70
|
+
end
|
77
71
|
|
78
72
|
generate_zip('svg') if svg
|
79
73
|
generate_zip('png') if png
|
@@ -98,7 +92,7 @@ class USPSFlags::Generate
|
|
98
92
|
# @param [String] scale The image scale divisor factor.
|
99
93
|
# @return [String] Returns the SVG data.
|
100
94
|
def spec(outfile: nil, fly: USPSFlags::Config::BASE_FLY, unit: nil, scale: nil, scaled_border: false)
|
101
|
-
svg = ''
|
95
|
+
svg = +''
|
102
96
|
svg << USPSFlags::Core.headers(scale: scale, title: 'USPS Trident Specifications')
|
103
97
|
svg << USPSFlags::Core.trident_spec(fly: fly, unit: unit, scaled_border: scaled_border)
|
104
98
|
svg << USPSFlags::Core.footer
|
@@ -108,169 +102,27 @@ class USPSFlags::Generate
|
|
108
102
|
|
109
103
|
private
|
110
104
|
|
111
|
-
def
|
112
|
-
|
113
|
-
|
114
|
-
::
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
@svg_file = "#{USPSFlags.configuration.flags_dir}/SVG/#{@flag}.svg"
|
122
|
-
@png_file = @svg_file.gsub('/SVG/', '/PNG/').gsub('.svg', '.png')
|
123
|
-
@svg_ins_file = @svg_file.gsub('/SVG/', '/SVG/insignia/')
|
124
|
-
@png_ins_file = @svg_file.gsub('/SVG/', '/PNG/insignia/').gsub('.svg', '.png')
|
125
|
-
[@svg_file, @png_file, @svg_ins_file, @png_ins_file]
|
126
|
-
end
|
127
|
-
|
128
|
-
def static_generation_header
|
129
|
-
puts "\nSVGs generate a single file.",
|
130
|
-
'PNGs generate full-res, 1500w, 1000w, 500w, and thumbnail files.',
|
131
|
-
'Corresponding rank insignia (including smaller sizes) are also generated, as appropriate.'
|
132
|
-
USPSFlags::Helpers.log "\nGeneration location: #{USPSFlags.configuration.flags_dir}\n"
|
133
|
-
USPSFlags::Helpers.log "\n#{Time.now.strftime('%Y%m%d.%H%M%S%z')} – Generating static files...\n\n"
|
134
|
-
USPSFlags::Helpers.log "Flag | SVG | PNG | Run time\n".rjust(USPSFlags::Helpers.max_flag_name_length + 31),
|
135
|
-
"\n".rjust(USPSFlags::Helpers.max_flag_name_length + 32, '-')
|
136
|
-
end
|
137
|
-
|
138
|
-
def generate_zip(type)
|
139
|
-
raise USPSFlags::Errors::ZipGenerationError, 'Flags directory not found.' unless ::Dir.exist?("#{USPSFlags.configuration.flags_dir}/ZIP")
|
140
|
-
|
141
|
-
zip = "#{USPSFlags.configuration.flags_dir}/ZIP/USPS_Flags.#{type}.zip"
|
142
|
-
::File.delete(zip) if ::File.exist?(zip)
|
143
|
-
|
144
|
-
::Zip::File.open(zip, Zip::File::CREATE) do |z|
|
145
|
-
::Dir.glob("#{USPSFlags.configuration.flags_dir}/#{type.upcase}/**/*").each do |f|
|
146
|
-
add_to_zip(z, f)
|
147
|
-
end
|
105
|
+
def special_flag(flag, outfile, scale)
|
106
|
+
case flag
|
107
|
+
when 'CRUISE', 'OIC'
|
108
|
+
USPSFlags::Generate::Flag.pennant(type: flag, outfile: outfile, scale: scale)
|
109
|
+
when 'ENSIGN'
|
110
|
+
USPSFlags::Generate::Flag.ensign(outfile: outfile, scale: scale)
|
111
|
+
when 'US'
|
112
|
+
USPSFlags::Generate::Flag.us(outfile: outfile, scale: scale)
|
113
|
+
when 'WHEEL'
|
114
|
+
USPSFlags::Generate::Flag.wheel(outfile: outfile, scale: scale)
|
148
115
|
end
|
149
|
-
puts "Generated #{type.upcase} Zip"
|
150
|
-
end
|
151
|
-
|
152
|
-
def add_to_zip(z, f)
|
153
|
-
filename = f.split('/').last
|
154
|
-
filename = "insignia/#{filename}" if f.split('/').last(2).first == 'insignia'
|
155
|
-
z.add(filename, f)
|
156
|
-
end
|
157
|
-
|
158
|
-
def generate_static_images_for(flag, svg: true, png: true)
|
159
|
-
start_time = Time.now
|
160
|
-
@flag = flag.upcase
|
161
|
-
USPSFlags::Helpers.log "#{@flag.rjust(USPSFlags::Helpers.max_flag_name_length)} |"
|
162
|
-
|
163
|
-
set_file_paths
|
164
|
-
|
165
|
-
svg ? generate_static_svg : USPSFlags::Helpers.log('-')
|
166
|
-
png ? generate_static_png : USPSFlags::Helpers.log('- ')
|
167
|
-
|
168
|
-
run_time = (Time.now - start_time).round(4).to_s[(0..5)].ljust(6, '0')
|
169
|
-
USPSFlags::Helpers.log " | #{run_time} s\n"
|
170
|
-
end
|
171
|
-
|
172
|
-
def generate_static_svg
|
173
|
-
USPSFlags::Helpers.log ' '
|
174
|
-
|
175
|
-
generate_regular_svg
|
176
|
-
generate_insignia_svg
|
177
|
-
end
|
178
|
-
|
179
|
-
def generate_regular_svg
|
180
|
-
return if file_found?(@svg_file)
|
181
|
-
|
182
|
-
svg @flag, outfile: @svg_file, scale: 1
|
183
|
-
USPSFlags::Helpers.log 'S'
|
184
|
-
end
|
185
|
-
|
186
|
-
def generate_insignia_svg
|
187
|
-
return if no_insignia?
|
188
|
-
|
189
|
-
svg @flag, field: false, outfile: @svg_ins_file, scale: 1
|
190
|
-
USPSFlags::Helpers.log 'I'
|
191
|
-
end
|
192
|
-
|
193
|
-
def set_temp_svg(svg)
|
194
|
-
@temp_svg_path = "#{USPSFlags.configuration.flags_dir}/temp.svg"
|
195
|
-
temp_svg = ::File.new(@temp_svg_path, 'w+')
|
196
|
-
temp_svg.write(svg)
|
197
|
-
temp_svg.flush
|
198
|
-
@temp_svg_path
|
199
|
-
end
|
200
|
-
|
201
|
-
def delete_temp_svg?
|
202
|
-
!@temp_svg_path.to_s.empty? && ::File.exist?(@temp_svg_path)
|
203
|
-
end
|
204
|
-
|
205
|
-
def generate_static_png
|
206
|
-
USPSFlags::Helpers.log ' | '
|
207
|
-
generate_fullsize_png
|
208
|
-
generate_fullsize_png_insignia
|
209
|
-
generate_reduced_size_pngs
|
210
|
-
end
|
211
|
-
|
212
|
-
def generate_fullsize_png
|
213
|
-
return if file_found?(@png_file)
|
214
|
-
|
215
|
-
png(File.read(@svg_file), outfile: @png_file)
|
216
|
-
USPSFlags::Helpers.log 'F'
|
217
|
-
end
|
218
|
-
|
219
|
-
def generate_fullsize_png_insignia
|
220
|
-
return if no_insignia?
|
221
|
-
return if file_found?(@png_ins_file)
|
222
|
-
|
223
|
-
png(File.read(@svg_ins_file), outfile: @png_ins_file, trim: true)
|
224
|
-
USPSFlags::Helpers.log 'I'
|
225
116
|
end
|
226
117
|
|
227
|
-
def
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
generate_smaller_png_insignia(size, size_key)
|
118
|
+
def generate_png(background, trim, outfile)
|
119
|
+
MiniMagick::Tool::Convert.new do |convert|
|
120
|
+
convert << '-background' << background
|
121
|
+
convert << '-format' << 'png'
|
122
|
+
convert << '-trim' if trim
|
123
|
+
convert << @temp_svg_path
|
124
|
+
convert << outfile
|
235
125
|
end
|
236
126
|
end
|
237
|
-
|
238
|
-
def generate_smaller_png(size, size_key)
|
239
|
-
return if file_found?(@sized_png_file)
|
240
|
-
return if too_big?(@png_file, size)
|
241
|
-
|
242
|
-
USPSFlags::Helpers.resize_png(@png_file, file: @flag, size: size, size_key: size_key)
|
243
|
-
USPSFlags::Helpers.log USPSFlags::Helpers.png_sizes[size_key]
|
244
|
-
end
|
245
|
-
|
246
|
-
def generate_smaller_png_insignia(size, size_key)
|
247
|
-
return if no_insignia?
|
248
|
-
return if file_found?(@sized_png_ins_file)
|
249
|
-
return if too_big?(@png_ins_file, size)
|
250
|
-
|
251
|
-
USPSFlags::Helpers.resize_png(@png_ins_file, file: "insignia/#{@flag}", size: size, size_key: size_key)
|
252
|
-
USPSFlags::Helpers.log 'i'
|
253
|
-
end
|
254
|
-
|
255
|
-
def no_insignia?
|
256
|
-
return false if USPSFlags::Helpers.valid_flags(:insignia).include?(@flag)
|
257
|
-
|
258
|
-
USPSFlags::Helpers.log '-'
|
259
|
-
true
|
260
|
-
end
|
261
|
-
|
262
|
-
def file_found?(file)
|
263
|
-
return false unless ::File.exist?(file)
|
264
|
-
|
265
|
-
USPSFlags::Helpers.log '.'
|
266
|
-
true
|
267
|
-
end
|
268
|
-
|
269
|
-
def too_big?(file, size)
|
270
|
-
return false unless size > MiniMagick::Image.open(file)[:width]
|
271
|
-
|
272
|
-
USPSFlags::Helpers.log '+'
|
273
|
-
true
|
274
|
-
end
|
275
127
|
end
|
276
128
|
end
|