usps_flags 0.5.1 → 0.5.2
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/Gemfile.lock +1 -1
- data/lib/modules.yml +24 -0
- data/lib/usps_flags.rb +5 -57
- data/lib/usps_flags/configuration.rb +57 -0
- data/lib/usps_flags/core.rb +1 -1
- data/lib/usps_flags/core/trident_specs.rb +5 -0
- data/lib/usps_flags/core/trident_specs/base.rb +3 -3
- data/lib/usps_flags/core/trident_specs/build.rb +142 -0
- data/lib/usps_flags/core/trident_specs/horizontal.rb +7 -7
- data/lib/usps_flags/core/trident_specs/overlay.rb +1 -1
- data/lib/usps_flags/core/trident_specs/vertical.rb +11 -11
- data/usps_flags.gemspec +2 -2
- metadata +5 -3
- data/lib/usps_flags/core/trident_spec.rb +0 -144
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 81903e12eb16e794cf65e42f308bac5f1a31eafbec1bdb338de3cf162b3eaa7c
|
4
|
+
data.tar.gz: f05fd9c77801a80bb30e0c5e6b94727c1585a6bc2dff316adca65aad11a51eeb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3bb2c5d8072a94e5c34d4ab6f45755db623e81be902b6256d20767a6ad6dca3bf5eccccc9c2b2e63bf0f59a16a2726675f9befdc0b86e34192f731b12aefdc7d
|
7
|
+
data.tar.gz: a3450ce9bb0fa69b173c52feeb6344d06cee8a2bfb5ff27dfa3eadc955c2022b5387bac647f385bb145de3f7fae903bae52642805eb7b08a507988be958a11b2
|
data/Gemfile.lock
CHANGED
data/lib/modules.yml
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
usps_flags:
|
2
|
+
- rational
|
3
|
+
- config
|
4
|
+
- configuration
|
5
|
+
- helpers
|
6
|
+
- core
|
7
|
+
- generate
|
8
|
+
- errors
|
9
|
+
usps_flags/helpers:
|
10
|
+
- builders
|
11
|
+
- spec_arrows
|
12
|
+
usps_flags/core:
|
13
|
+
- icons
|
14
|
+
- ensign
|
15
|
+
- field
|
16
|
+
- footer
|
17
|
+
- headers
|
18
|
+
- pennant
|
19
|
+
- tridents
|
20
|
+
- trident_specs
|
21
|
+
- us
|
22
|
+
- wheel
|
23
|
+
usps_flags/generate:
|
24
|
+
- flag
|
data/lib/usps_flags.rb
CHANGED
@@ -5,18 +5,12 @@
|
|
5
5
|
# @author Julian Fiander
|
6
6
|
# @since 0.1.5
|
7
7
|
class USPSFlags
|
8
|
-
MODULES ||= {
|
9
|
-
'usps_flags' => %w[rational config helpers core generate errors],
|
10
|
-
'usps_flags/helpers' => %w[builders spec_arrows],
|
11
|
-
'usps_flags/core' => %w[
|
12
|
-
icons ensign field footer headers pennant tridents trident_specs trident_spec us wheel
|
13
|
-
],
|
14
|
-
'usps_flags/generate' => %w[flag]
|
15
|
-
}.freeze
|
16
|
-
|
17
8
|
require 'fileutils'
|
18
9
|
require 'zip'
|
19
10
|
require 'mini_magick'
|
11
|
+
require 'yaml'
|
12
|
+
|
13
|
+
MODULES ||= ::YAML.safe_load(File.read('lib/modules.yml')).freeze
|
20
14
|
|
21
15
|
MODULES.each do |parent, bases|
|
22
16
|
bases.each do |base|
|
@@ -25,54 +19,8 @@ class USPSFlags
|
|
25
19
|
end
|
26
20
|
end
|
27
21
|
|
28
|
-
|
29
|
-
|
30
|
-
@configuration ||= USPSFlags::Config.new
|
31
|
-
end
|
32
|
-
|
33
|
-
# Configuration constructor.
|
34
|
-
def self.configure
|
35
|
-
yield(configuration) if block_given?
|
36
|
-
ensure_directories
|
37
|
-
@configuration
|
38
|
-
end
|
39
|
-
|
40
|
-
# Ensures the directory structure exists.
|
41
|
-
#
|
42
|
-
# @private
|
43
|
-
def self.ensure_directories
|
44
|
-
get_dir_configs
|
45
|
-
prepare_dir_configs
|
46
|
-
prepare_flags_dir
|
47
|
-
::FileUtils.mkdir_p(USPSFlags.configuration.log_path)
|
48
|
-
end
|
49
|
-
|
50
|
-
# Gets all configuration variables that specify a dir.
|
51
|
-
#
|
52
|
-
# @private
|
53
|
-
def self.get_dir_configs
|
54
|
-
@dirs = USPSFlags.configuration.instance_variables.map(&:to_s)
|
55
|
-
.map { |v| v.match(/.*?_dir/) }.compact.map(&:to_s)
|
56
|
-
end
|
57
|
-
|
58
|
-
# Ensures that directories exist (and are cleared, if configured).
|
59
|
-
#
|
60
|
-
# @private
|
61
|
-
def self.prepare_dir_configs
|
62
|
-
@dirs.each do |dir|
|
63
|
-
dir_path = @configuration.instance_variable_get(dir)
|
64
|
-
::FileUtils.rm_rf(dir_path) if @configuration.clear
|
65
|
-
::FileUtils.mkdir_p(dir_path)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
# Ensures that the flags_dir subdirectories exist.
|
70
|
-
#
|
71
|
-
# @private
|
72
|
-
def self.prepare_flags_dir
|
73
|
-
::FileUtils.mkdir_p("#{@configuration.flags_dir}/PNG/insignia")
|
74
|
-
::FileUtils.mkdir_p("#{@configuration.flags_dir}/SVG/insignia")
|
75
|
-
::FileUtils.mkdir_p("#{@configuration.flags_dir}/ZIP")
|
22
|
+
class << self
|
23
|
+
include USPSFlags::Configuration
|
76
24
|
end
|
77
25
|
|
78
26
|
# Constructor for individual flags.
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
|
3
|
+
# User input configuration module.
|
4
|
+
class USPSFlags
|
5
|
+
module Configuration
|
6
|
+
# Configuration accessor.
|
7
|
+
def configuration
|
8
|
+
@configuration ||= USPSFlags::Config.new
|
9
|
+
end
|
10
|
+
|
11
|
+
# Configuration constructor.
|
12
|
+
def configure
|
13
|
+
yield(configuration) if block_given?
|
14
|
+
ensure_directories
|
15
|
+
@configuration
|
16
|
+
end
|
17
|
+
|
18
|
+
# Ensures the directory structure exists.
|
19
|
+
#
|
20
|
+
# @private
|
21
|
+
def ensure_directories
|
22
|
+
get_dir_configs
|
23
|
+
prepare_dir_configs
|
24
|
+
prepare_flags_dir
|
25
|
+
::FileUtils.mkdir_p(USPSFlags.configuration.log_path)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Gets all configuration variables that specify a dir.
|
29
|
+
#
|
30
|
+
# @private
|
31
|
+
def get_dir_configs
|
32
|
+
@dirs = USPSFlags.configuration.instance_variables.map(&:to_s).map do |v|
|
33
|
+
v.match(/.*?_dir/)
|
34
|
+
end.compact.map(&:to_s)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Ensures that directories exist (and are cleared, if configured).
|
38
|
+
#
|
39
|
+
# @private
|
40
|
+
def prepare_dir_configs
|
41
|
+
@dirs.each do |dir|
|
42
|
+
dir_path = @configuration.instance_variable_get(dir)
|
43
|
+
::FileUtils.rm_rf(dir_path) if @configuration.clear
|
44
|
+
::FileUtils.mkdir_p(dir_path)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Ensures that the flags_dir subdirectories exist.
|
49
|
+
#
|
50
|
+
# @private
|
51
|
+
def prepare_flags_dir
|
52
|
+
::FileUtils.mkdir_p("#{@configuration.flags_dir}/PNG/insignia")
|
53
|
+
::FileUtils.mkdir_p("#{@configuration.flags_dir}/SVG/insignia")
|
54
|
+
::FileUtils.mkdir_p("#{@configuration.flags_dir}/ZIP")
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/lib/usps_flags/core.rb
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
class USPSFlags
|
8
8
|
class Core
|
9
9
|
def self.trident_spec(fly: 24, unit: 'in', scaled_border: false)
|
10
|
-
USPSFlags::Core::
|
10
|
+
USPSFlags::Core::TridentSpecs::Build.new(fly: fly, unit: unit, scaled_border: scaled_border).svg
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.headers(width: nil, height: nil, pennant: false, scale: nil, title: 'USPS Flag')
|
@@ -7,12 +7,17 @@
|
|
7
7
|
class USPSFlags
|
8
8
|
class Core
|
9
9
|
module TridentSpecs
|
10
|
+
SA = USPSFlags::Helpers::SpecArrows
|
11
|
+
BF = USPSFlags::Config::BASE_FLY
|
12
|
+
BH = USPSFlags::Config::BASE_HOIST
|
13
|
+
|
10
14
|
require 'usps_flags/core/trident_specs/base'
|
11
15
|
require 'usps_flags/core/trident_specs/header'
|
12
16
|
require 'usps_flags/core/trident_specs/short'
|
13
17
|
require 'usps_flags/core/trident_specs/delta'
|
14
18
|
require 'usps_flags/core/trident_specs/long'
|
15
19
|
require 'usps_flags/core/trident_specs/circle'
|
20
|
+
require 'usps_flags/core/trident_specs/build'
|
16
21
|
end
|
17
22
|
end
|
18
23
|
end
|
@@ -12,9 +12,9 @@ class USPSFlags
|
|
12
12
|
require 'usps_flags/core/trident_specs/horizontal'
|
13
13
|
require 'usps_flags/core/trident_specs/overlay'
|
14
14
|
|
15
|
-
SA = USPSFlags::Helpers::SpecArrows
|
16
|
-
BF = USPSFlags::Config::BASE_FLY
|
17
|
-
BH = USPSFlags::Config::BASE_HOIST
|
15
|
+
# SA = USPSFlags::Helpers::SpecArrows
|
16
|
+
# BF = USPSFlags::Config::BASE_FLY
|
17
|
+
# BH = USPSFlags::Config::BASE_HOIST
|
18
18
|
|
19
19
|
def initialize(options = {})
|
20
20
|
@config = options[:config]
|
@@ -0,0 +1,142 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
|
3
|
+
# Core SVG data for the trident specification sheet.
|
4
|
+
#
|
5
|
+
# This class should never need to be called directly.
|
6
|
+
# @private
|
7
|
+
class USPSFlags
|
8
|
+
class Core
|
9
|
+
module TridentSpecs
|
10
|
+
class Build
|
11
|
+
def initialize(fly: 24, unit: 'in', scaled_border: false)
|
12
|
+
@config = USPSFlags.configuration.trident
|
13
|
+
@scaled_border = scaled_border
|
14
|
+
configure_sizes(fly)
|
15
|
+
configure_labels(unit)
|
16
|
+
end
|
17
|
+
|
18
|
+
def svg
|
19
|
+
svg = spec_header
|
20
|
+
svg << add_short_trident
|
21
|
+
svg << add_delta_trident
|
22
|
+
svg << add_national_tridents
|
23
|
+
|
24
|
+
svg
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def box_left
|
30
|
+
(BF * 27 / 32) / 2
|
31
|
+
end
|
32
|
+
|
33
|
+
def box_right
|
34
|
+
(BF * 37 / 32) / 2
|
35
|
+
end
|
36
|
+
|
37
|
+
def add_short_trident
|
38
|
+
box_top = BH / 4
|
39
|
+
box_bottom = BH * 3 / 4
|
40
|
+
add_trident(:Short, box_top, box_bottom, box_left, box_right)
|
41
|
+
end
|
42
|
+
|
43
|
+
def add_delta_trident
|
44
|
+
box_top = BH * 3 / 16
|
45
|
+
box_bottom = BH * 13 / 16
|
46
|
+
add_trident(:Delta, box_top, box_bottom, box_left, box_right)
|
47
|
+
end
|
48
|
+
|
49
|
+
def add_national_tridents
|
50
|
+
box_top = BH / 8
|
51
|
+
box_bottom = BH * 7 / 8
|
52
|
+
add_trident(:Circle, box_top, box_bottom, box_left, box_right) +
|
53
|
+
add_trident(:Long, box_top, box_bottom, box_left, box_right)
|
54
|
+
end
|
55
|
+
|
56
|
+
def configure_sizes(fly)
|
57
|
+
@fly = Rational(fly)
|
58
|
+
get_hoist_from_fly(@fly)
|
59
|
+
configure_hoist_fraction
|
60
|
+
configure_fly_fraction
|
61
|
+
end
|
62
|
+
|
63
|
+
def get_hoist_from_fly(fly)
|
64
|
+
hoist = (fly * Rational(2, 3))
|
65
|
+
@hoist = if hoist == hoist.to_i
|
66
|
+
hoist.to_i
|
67
|
+
else
|
68
|
+
hoist
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def configure_hoist_fraction
|
73
|
+
@hoist_fraction = ''
|
74
|
+
if @hoist == @hoist.to_i
|
75
|
+
@hoist = @hoist.to_i
|
76
|
+
else
|
77
|
+
@hoist, @hoist_fraction = USPSFlags::Rational.new(@hoist).to_simplified_a
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def configure_fly_fraction
|
82
|
+
@fly_fraction = ''
|
83
|
+
if @fly == @fly.to_i
|
84
|
+
@fly = @fly.to_i
|
85
|
+
else
|
86
|
+
@fly, @fly_fraction = USPSFlags::Rational.new(@fly).to_simplified_a
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def configure_labels(unit)
|
91
|
+
@label_font_size = if Math.sqrt(@fly) > 24
|
92
|
+
BF * Math.log(24, Math.sqrt(@fly)) / 60
|
93
|
+
else
|
94
|
+
BF / 60
|
95
|
+
end
|
96
|
+
|
97
|
+
@unit_text = unit.nil? ? '' : unit.to_s
|
98
|
+
@unit = unit
|
99
|
+
|
100
|
+
configure_barb_label
|
101
|
+
end
|
102
|
+
|
103
|
+
def configure_barb_label
|
104
|
+
barb_label = Rational(@config[:main_point_barb]) * @fly / BF
|
105
|
+
@barb_label = if barb_label == barb_label.to_i
|
106
|
+
"#{barb_label.to_i}#{@unit_text}"
|
107
|
+
else
|
108
|
+
"#{USPSFlags::Rational.new(barb_label).to_simplified_s}#{@unit_text}"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def spec_header
|
113
|
+
USPSFlags::Core::TridentSpecs::Header.new(
|
114
|
+
fly: @fly, fly_fraction: @fly_fraction, hoist: @hoist, hoist_fraction: @hoist_fraction,
|
115
|
+
unit_text: @unit_text, scaled_border: @scaled_border
|
116
|
+
).p
|
117
|
+
end
|
118
|
+
|
119
|
+
def add_trident(type, box_top, box_bottom, box_left, box_right)
|
120
|
+
sym = { Short: :s, Delta: :d, Circle: :stf, Long: :n }[type]
|
121
|
+
|
122
|
+
Object.const_get("USPSFlags::Core::TridentSpecs::#{type}").new(
|
123
|
+
bt: box_top, bb: box_bottom, bl: box_left, br: box_right,
|
124
|
+
fly: @fly, unit: @unit, heading: heading(sym), config: @config
|
125
|
+
).p
|
126
|
+
end
|
127
|
+
|
128
|
+
def heading(type_sym)
|
129
|
+
type, description = {
|
130
|
+
s: ['Short', 'Squadron Officers'], d: ['Delta', 'District Officers'],
|
131
|
+
stf: ['Circle', 'Staff Commanders Only'], n: ['Long', 'National Officers']
|
132
|
+
}[type_sym]
|
133
|
+
|
134
|
+
<<~SVG
|
135
|
+
<text x="#{BF / 2}" y="#{BH * 1 / 40}" font-family="sans-serif" font-size="#{BH / 30}px" font-weight="bold" fill="#BF0D3E" text-anchor="middle">#{type}</text>
|
136
|
+
<text x="#{BF / 2}" y="#{BH * 5 / 80}" font-family="sans-serif" font-size="#{BH / 40}px" fill="#BF0D3E" text-anchor="middle">#{description}</text>
|
137
|
+
SVG
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
@@ -18,12 +18,12 @@ class USPSFlags
|
|
18
18
|
<!-- Bottom -->
|
19
19
|
#{bottom_bar_width} <!-- Bar width -->
|
20
20
|
#{bottom_hash_width} <!-- Hash width -->
|
21
|
-
#{
|
21
|
+
#{SA.horizontal(@box_bottom + @config[:bar_width] * 4, @box_left, @box_right, pointer_left: @box_bottom, pointer_right: @box_bottom, fly: @fly, unit: @unit)} <!-- Boundary width -->
|
22
22
|
SVG
|
23
23
|
end
|
24
24
|
|
25
25
|
def bottom_bar_width
|
26
|
-
|
26
|
+
SA.horizontal(
|
27
27
|
@box_bottom + @config[:bar_width], @config[:center_point] - @config[:bar_width] / 2,
|
28
28
|
@config[:center_point] + @config[:bar_width] / 2,
|
29
29
|
pointer_left: @box_bottom, pointer_right: @box_bottom, fly: @fly, unit: @unit
|
@@ -31,7 +31,7 @@ class USPSFlags
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def bottom_hash_width
|
34
|
-
|
34
|
+
SA.horizontal(
|
35
35
|
@box_bottom + @config[:bar_width] * 2.5, @config[:center_point] - @config[:hash_width] / 2,
|
36
36
|
@config[:center_point] + @config[:hash_width] / 2,
|
37
37
|
pointer_left: bottom_hash_width_pointer_left, pointer_right: bottom_hash_width_pointer_right,
|
@@ -56,18 +56,18 @@ class USPSFlags
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def top_side_point_width
|
59
|
-
|
59
|
+
SA.horizontal(
|
60
60
|
@box_top - @config[:bar_width], @box_left, @box_left + @config[:bar_width] * 3 / 2,
|
61
61
|
pointer_left: @box_top, pointer_right: @box_top + @config[:bar_width] * 4 / 5 + @config[:side_point_height],
|
62
|
-
label_offset: -
|
62
|
+
label_offset: -BF / 60, fly: @fly, unit: @unit
|
63
63
|
)
|
64
64
|
end
|
65
65
|
|
66
66
|
def top_main_point_width
|
67
|
-
|
67
|
+
SA.horizontal(
|
68
68
|
@box_top - @config[:bar_width] * 2.5, top_main_point_top, @config[:center_point] + @config[:bar_width],
|
69
69
|
pointer_left: @box_top + @config[:center_point_height], fly: @fly, unit: @unit,
|
70
|
-
pointer_right: @box_top + @config[:center_point_height], label_offset: -
|
70
|
+
pointer_right: @box_top + @config[:center_point_height], label_offset: -BF / 60
|
71
71
|
)
|
72
72
|
end
|
73
73
|
|
@@ -18,7 +18,7 @@ class USPSFlags
|
|
18
18
|
<!-- Overlay -->
|
19
19
|
<!-- Main point barb -->
|
20
20
|
#{overlay_lines}
|
21
|
-
<text x="#{@config[:center_point] + @config[:bar_width] * 9 / 8}" y="#{@box_top + @config[:center_point_height] - @config[:main_point_barb]}" font-family="sans-serif" font-size="#{
|
21
|
+
<text x="#{@config[:center_point] + @config[:bar_width] * 9 / 8}" y="#{@box_top + @config[:center_point_height] - @config[:main_point_barb]}" font-family="sans-serif" font-size="#{BF / 100}px" fill="#041E42" text-anchor="left">#{@barb_label}</text>
|
22
22
|
SVG
|
23
23
|
end
|
24
24
|
|
@@ -16,7 +16,7 @@ class USPSFlags
|
|
16
16
|
def right
|
17
17
|
<<~SVG
|
18
18
|
<!-- Right -->
|
19
|
-
#{
|
19
|
+
#{SA.vertical(@box_right + @config[:bar_width], @box_top, @box_top + @config[:bar_width] * 4 / 5, pointer_top: @box_right, pointer_bottom: @box_right, fly: @fly, unit: @unit)} <!-- Side spike top gap -->
|
20
20
|
#{right_top_gap_to_hash_gap} <!-- Top gap to hash gap -->
|
21
21
|
#{right_crossbar_to_hash_gap} <!-- Crossbar to hash gap -->
|
22
22
|
|
@@ -26,7 +26,7 @@ class USPSFlags
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def right_top_gap_to_hash_gap
|
29
|
-
|
29
|
+
SA.vertical(
|
30
30
|
@box_right + @config[:bar_width], @box_top + @config[:bar_width] * 4 / 5, right_top_gap_bottom,
|
31
31
|
pointer_bottom: @box_right, fly: @fly, unit: @unit
|
32
32
|
)
|
@@ -37,7 +37,7 @@ class USPSFlags
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def right_crossbar_to_hash_gap
|
40
|
-
|
40
|
+
SA.vertical(
|
41
41
|
@box_right + @config[:bar_width], right_crossbar_top, right_crossbar_bottom,
|
42
42
|
pointer_bottom: @config[:center_point] + @config[:hash_width] / 2, fly: @fly, unit: @unit
|
43
43
|
)
|
@@ -52,7 +52,7 @@ class USPSFlags
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def right_hash
|
55
|
-
|
55
|
+
SA.vertical(
|
56
56
|
@box_right + @config[:bar_width], right_hash_top, right_hash_bottom,
|
57
57
|
pointer_bottom: @config[:center_point] + @config[:hash_width] / 2, fly: @fly, unit: @unit
|
58
58
|
)
|
@@ -67,7 +67,7 @@ class USPSFlags
|
|
67
67
|
end
|
68
68
|
|
69
69
|
def right_hash_to_bottom
|
70
|
-
|
70
|
+
SA.vertical(
|
71
71
|
@box_right + @config[:bar_width],
|
72
72
|
@box_top + @config[:bar_width] * 38 / 10 + @config[:side_point_height] + @config[:side_spike_height],
|
73
73
|
@box_bottom, pointer_bottom: @box_right, fly: @fly, unit: @unit
|
@@ -77,24 +77,24 @@ class USPSFlags
|
|
77
77
|
def left
|
78
78
|
<<~SVG
|
79
79
|
<!-- Left -->
|
80
|
-
#{
|
80
|
+
#{SA.vertical(@box_left - @config[:bar_width] * 5.25, @box_top, @box_bottom, pointer_top: @box_left, pointer_bottom: @box_left, fly: @fly, unit: @unit)} <!-- Boundary height -->
|
81
81
|
#{left_main_point_height} <!-- Main point height -->
|
82
82
|
#{left_side_point_height} <!-- Side point height -->
|
83
83
|
SVG
|
84
84
|
end
|
85
85
|
|
86
86
|
def left_main_point_height
|
87
|
-
|
87
|
+
SA.vertical(
|
88
88
|
@box_left - @config[:bar_width] * 0.75, @box_top, @box_top + @config[:center_point_height],
|
89
|
-
pointer_bottom: @config[:center_point] - @config[:bar_width], label_offset: -
|
90
|
-
label_offset_y: -
|
89
|
+
pointer_bottom: @config[:center_point] - @config[:bar_width], label_offset: -BF / 24,
|
90
|
+
label_offset_y: -BF / 60, label_align: 'middle', fly: @fly, unit: @unit
|
91
91
|
)
|
92
92
|
end
|
93
93
|
|
94
94
|
def left_side_point_height
|
95
|
-
|
95
|
+
SA.vertical(
|
96
96
|
@box_left - @config[:bar_width] * 1.5, @box_top + @config[:bar_width] * 4 / 5, left_side_point_bottom,
|
97
|
-
pointer_top: @box_left, pointer_bottom: @box_left + @config[:bar_width], label_offset: -
|
97
|
+
pointer_top: @box_left, pointer_bottom: @box_left + @config[:bar_width], label_offset: -BF / 24,
|
98
98
|
label_align: 'middle', fly: @fly, unit: @unit
|
99
99
|
)
|
100
100
|
end
|
data/usps_flags.gemspec
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'usps_flags'
|
5
|
-
s.version = '0.5.
|
6
|
-
s.date = '2019-06-
|
5
|
+
s.version = '0.5.2'
|
6
|
+
s.date = '2019-06-14'
|
7
7
|
s.summary = 'Flag generator for United States Power Squadrons'
|
8
8
|
s.description = 'A flag image (PNG, SVG) generator for United States Power Squadrons.'
|
9
9
|
s.homepage = 'http://rubygems.org/gems/usps_flags'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: usps_flags
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Julian Fiander
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-06-
|
11
|
+
date: 2019-06-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: file_utils
|
@@ -187,8 +187,10 @@ files:
|
|
187
187
|
- LICENSE
|
188
188
|
- README.md
|
189
189
|
- Rakefile
|
190
|
+
- lib/modules.yml
|
190
191
|
- lib/usps_flags.rb
|
191
192
|
- lib/usps_flags/config.rb
|
193
|
+
- lib/usps_flags/configuration.rb
|
192
194
|
- lib/usps_flags/core.rb
|
193
195
|
- lib/usps_flags/core/ensign.rb
|
194
196
|
- lib/usps_flags/core/field.rb
|
@@ -203,9 +205,9 @@ files:
|
|
203
205
|
- lib/usps_flags/core/icons/trident_parts/hashes.rb
|
204
206
|
- lib/usps_flags/core/icons/trumpet.rb
|
205
207
|
- lib/usps_flags/core/pennant.rb
|
206
|
-
- lib/usps_flags/core/trident_spec.rb
|
207
208
|
- lib/usps_flags/core/trident_specs.rb
|
208
209
|
- lib/usps_flags/core/trident_specs/base.rb
|
210
|
+
- lib/usps_flags/core/trident_specs/build.rb
|
209
211
|
- lib/usps_flags/core/trident_specs/circle.rb
|
210
212
|
- lib/usps_flags/core/trident_specs/delta.rb
|
211
213
|
- lib/usps_flags/core/trident_specs/header.rb
|
@@ -1,144 +0,0 @@
|
|
1
|
-
# frozen_string_literal: false
|
2
|
-
|
3
|
-
# Core SVG data for the trident specification sheet.
|
4
|
-
#
|
5
|
-
# This class should never need to be called directly.
|
6
|
-
# @private
|
7
|
-
class USPSFlags
|
8
|
-
class Core
|
9
|
-
class TridentSpec
|
10
|
-
SA = USPSFlags::Helpers::SpecArrows
|
11
|
-
BF = USPSFlags::Config::BASE_FLY
|
12
|
-
BH = USPSFlags::Config::BASE_HOIST
|
13
|
-
|
14
|
-
def initialize(fly: 24, unit: 'in', scaled_border: false)
|
15
|
-
@config = USPSFlags.configuration.trident
|
16
|
-
@scaled_border = scaled_border
|
17
|
-
configure_sizes(fly)
|
18
|
-
configure_labels(unit)
|
19
|
-
end
|
20
|
-
|
21
|
-
def svg
|
22
|
-
svg = spec_header
|
23
|
-
svg << add_short_trident
|
24
|
-
svg << add_delta_trident
|
25
|
-
svg << add_national_tridents
|
26
|
-
|
27
|
-
svg
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def box_left
|
33
|
-
(BF * 27 / 32) / 2
|
34
|
-
end
|
35
|
-
|
36
|
-
def box_right
|
37
|
-
(BF * 37 / 32) / 2
|
38
|
-
end
|
39
|
-
|
40
|
-
def add_short_trident
|
41
|
-
box_top = BH / 4
|
42
|
-
box_bottom = BH * 3 / 4
|
43
|
-
add_trident(:Short, box_top, box_bottom, box_left, box_right)
|
44
|
-
end
|
45
|
-
|
46
|
-
def add_delta_trident
|
47
|
-
box_top = BH * 3 / 16
|
48
|
-
box_bottom = BH * 13 / 16
|
49
|
-
add_trident(:Delta, box_top, box_bottom, box_left, box_right)
|
50
|
-
end
|
51
|
-
|
52
|
-
def add_national_tridents
|
53
|
-
box_top = BH / 8
|
54
|
-
box_bottom = BH * 7 / 8
|
55
|
-
add_trident(:Circle, box_top, box_bottom, box_left, box_right) +
|
56
|
-
add_trident(:Long, box_top, box_bottom, box_left, box_right)
|
57
|
-
end
|
58
|
-
|
59
|
-
def configure_sizes(fly)
|
60
|
-
@fly = Rational(fly)
|
61
|
-
get_hoist_from_fly(@fly)
|
62
|
-
configure_hoist_fraction
|
63
|
-
configure_fly_fraction
|
64
|
-
end
|
65
|
-
|
66
|
-
def get_hoist_from_fly(fly)
|
67
|
-
hoist = (fly * Rational(2, 3))
|
68
|
-
@hoist = if hoist == hoist.to_i
|
69
|
-
hoist.to_i
|
70
|
-
else
|
71
|
-
hoist
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
def configure_hoist_fraction
|
76
|
-
@hoist_fraction = ''
|
77
|
-
if @hoist == @hoist.to_i
|
78
|
-
@hoist = @hoist.to_i
|
79
|
-
else
|
80
|
-
@hoist, @hoist_fraction = USPSFlags::Rational.new(@hoist).to_simplified_a
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def configure_fly_fraction
|
85
|
-
@fly_fraction = ''
|
86
|
-
if @fly == @fly.to_i
|
87
|
-
@fly = @fly.to_i
|
88
|
-
else
|
89
|
-
@fly, @fly_fraction = USPSFlags::Rational.new(@fly).to_simplified_a
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
def configure_labels(unit)
|
94
|
-
@label_font_size = if Math.sqrt(@fly) > 24
|
95
|
-
BF * Math.log(24, Math.sqrt(@fly)) / 60
|
96
|
-
else
|
97
|
-
BF / 60
|
98
|
-
end
|
99
|
-
|
100
|
-
@unit_text = unit.nil? ? '' : unit.to_s
|
101
|
-
@unit = unit
|
102
|
-
|
103
|
-
configure_barb_label
|
104
|
-
end
|
105
|
-
|
106
|
-
def configure_barb_label
|
107
|
-
barb_label = Rational(@config[:main_point_barb]) * @fly / BF
|
108
|
-
@barb_label = if barb_label == barb_label.to_i
|
109
|
-
"#{barb_label.to_i}#{@unit_text}"
|
110
|
-
else
|
111
|
-
"#{USPSFlags::Rational.new(barb_label).to_simplified_s}#{@unit_text}"
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
def spec_header
|
116
|
-
USPSFlags::Core::TridentSpecs::Header.new(
|
117
|
-
fly: @fly, fly_fraction: @fly_fraction, hoist: @hoist, hoist_fraction: @hoist_fraction,
|
118
|
-
unit_text: @unit_text, scaled_border: @scaled_border
|
119
|
-
).p
|
120
|
-
end
|
121
|
-
|
122
|
-
def add_trident(type, box_top, box_bottom, box_left, box_right)
|
123
|
-
sym = { Short: :s, Delta: :d, Circle: :stf, Long: :n }[type]
|
124
|
-
|
125
|
-
Object.const_get("USPSFlags::Core::TridentSpecs::#{type}").new(
|
126
|
-
bt: box_top, bb: box_bottom, bl: box_left, br: box_right,
|
127
|
-
fly: @fly, unit: @unit, heading: heading(sym), config: @config
|
128
|
-
).p
|
129
|
-
end
|
130
|
-
|
131
|
-
def heading(type_sym)
|
132
|
-
type, description = {
|
133
|
-
s: ['Short', 'Squadron Officers'], d: ['Delta', 'District Officers'],
|
134
|
-
stf: ['Circle', 'Staff Commanders Only'], n: ['Long', 'National Officers']
|
135
|
-
}[type_sym]
|
136
|
-
|
137
|
-
<<~SVG
|
138
|
-
<text x="#{BF / 2}" y="#{BH * 1 / 40}" font-family="sans-serif" font-size="#{BH / 30}px" font-weight="bold" fill="#BF0D3E" text-anchor="middle">#{type}</text>
|
139
|
-
<text x="#{BF / 2}" y="#{BH * 5 / 80}" font-family="sans-serif" font-size="#{BH / 40}px" fill="#BF0D3E" text-anchor="middle">#{description}</text>
|
140
|
-
SVG
|
141
|
-
end
|
142
|
-
end
|
143
|
-
end
|
144
|
-
end
|