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.
@@ -6,37 +6,28 @@
6
6
  # @private
7
7
  class USPSFlags::Generate::Flag
8
8
  class << self
9
- def officer(rank: nil, width: USPSFlags::Config::BASE_FLY, outfile: nil, scale: nil, field: true)
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 << case type
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
- if cc?
93
- USPSFlags::Core::Tridents.cc(@flag_details[:type], trident_color: @trident_color)
94
- elsif vc?
95
- USPSFlags::Core::Tridents.vc(@flag_details[:type], trident_color: @trident_color)
96
- elsif three?
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 officer_flag_body
110
- svg = ''
111
- svg << USPSFlags::Core.field(style: @flag_details[:style], color: @flag_details[:color]) if @field
112
- svg << '<g transform="translate(-150, 400)"><g transform="scale(0.58333)">' if @flag_details[:style] == :past
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 @flag_details[:style] == :past
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
@@ -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
- if ['CRUISE', 'OIC'].include?(flag)
19
- USPSFlags::Generate::Flag.pennant(type: flag, outfile: outfile, scale: scale)
20
- elsif flag == 'ENSIGN'
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
- MiniMagick::Tool::Convert.new do |convert|
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
- raise USPSFlags::Errors::StaticFilesGenerationError, 'At least one argument switch must be true out of [svg, png, zips, reset].' unless svg || png || zips || reset
51
+ all_arg_error unless any_all_arg?(svg, png, zips, reset)
63
52
 
64
- overall_start_time = Time.now
65
- remove_static_files if reset
66
- images(svg: svg, png: png) if svg || png
67
- zips(svg: svg, png: png) if zips
68
- USPSFlags::Helpers.log "\nTotal run time: #{Time.now - overall_start_time} s\n\n"
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
- raise USPSFlags::Errors::ZipGenerationError, 'At least one argument switch must be true out of [svg, png].' unless svg || png
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 remove_static_files
112
- ['SVG', 'PNG', 'ZIP'].each do |dir|
113
- dir_path = "#{USPSFlags.configuration.flags_dir}/#{dir}"
114
- ::FileUtils.rm_rf(::Dir.glob("#{dir_path}/*")) if ::Dir.exist?(dir_path)
115
- end
116
- ['SVG/insignia', 'PNG/insignia'].each { |dir| ::FileUtils.mkdir_p("#{USPSFlags.configuration.flags_dir}/#{dir}") }
117
- USPSFlags::Helpers.log "\n - Cleared previous files.\n"
118
- end
119
-
120
- def set_file_paths
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 generate_reduced_size_pngs
228
- USPSFlags::Helpers.png_sizes.keys.each do |size|
229
- size, size_key = USPSFlags::Helpers.size_and_key(size: size, flag: @flag)
230
- @sized_png_file = "#{USPSFlags.configuration.flags_dir}/PNG/#{@flag}.#{size_key}.png"
231
- @sized_png_ins_file = @sized_png_file.gsub('/PNG/', '/PNG/insignia/')
232
-
233
- generate_smaller_png(size, size_key)
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