usps_flags 0.4.1 → 0.5.0
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 +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
|