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.
@@ -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