Class: Fontist::Formula
- Inherits:
-
Object
- Object
- Fontist::Formula
- Defined in:
- lib/fontist/formula.rb
Constant Summary collapse
- NAMESPACES =
{ "sil" => "SIL", "macos" => "macOS", }.freeze
Class Method Summary collapse
- .all ⇒ Object
- .all_keys ⇒ Object
- .find(font_name) ⇒ Object
- .find_by_font_file(font_file) ⇒ Object
- .find_by_key(key) ⇒ Object
- .find_by_key_or_name(name) ⇒ Object
- .find_by_name(name) ⇒ Object
- .find_fonts(font_name) ⇒ Object
- .find_many(font_name) ⇒ Object
- .find_styles(font_name, style_name) ⇒ Object
- .name_to_key(name) ⇒ Object
- .new_from_file(path) ⇒ Object
- .update_formulas_repo ⇒ Object
Instance Method Summary collapse
- #copyright ⇒ Object
- #description ⇒ Object
- #digest ⇒ Object
- #downloadable? ⇒ Boolean
- #extract ⇒ Object
- #file_size ⇒ Object
- #font_by_name(name) ⇒ Object
- #fonts ⇒ Object
- #fonts_by_name(name) ⇒ Object
- #homepage ⇒ Object
-
#initialize(data, path) ⇒ Formula
constructor
A new instance of Formula.
- #instructions ⇒ Object
- #key ⇒ Object
- #license ⇒ Object
- #license_required ⇒ Object
- #license_url ⇒ Object
- #manual? ⇒ Boolean
- #min_fontist ⇒ Object
- #name ⇒ Object
- #path ⇒ Object
- #platforms ⇒ Object
- #resources ⇒ Object
- #source ⇒ Object
- #style_override(font) ⇒ Object
- #to_index_formula ⇒ Object
Constructor Details
#initialize(data, path) ⇒ Formula
Returns a new instance of Formula.
98 99 100 101 |
# File 'lib/fontist/formula.rb', line 98 def initialize(data, path) @data = data @path = real_path(path) end |
Class Method Details
.all ⇒ Object
17 18 19 20 21 |
# File 'lib/fontist/formula.rb', line 17 def self.all Dir[Fontist.formulas_path.join("**/*.yml").to_s].map do |path| Formula.new_from_file(path) end end |
.all_keys ⇒ Object
23 24 25 26 27 |
# File 'lib/fontist/formula.rb', line 23 def self.all_keys Dir[Fontist.formulas_path.join("**/*.yml").to_s].map do |path| path.sub("#{Fontist.formulas_path}/", "").sub(".yml", "") end end |
.find(font_name) ⇒ Object
29 30 31 |
# File 'lib/fontist/formula.rb', line 29 def self.find(font_name) Indexes::FontIndex.from_yaml.load_formulas(font_name).first end |
.find_by_font_file(font_file) ⇒ Object
80 81 82 83 84 85 86 87 88 |
# File 'lib/fontist/formula.rb', line 80 def self.find_by_font_file(font_file) key = Indexes::FilenameIndex .from_yaml .load_index_formulas(File.basename(font_file)) .map(&:name) .first find_by_key(key) end |
.find_by_key(key) ⇒ Object
63 64 65 66 67 68 |
# File 'lib/fontist/formula.rb', line 63 def self.find_by_key(key) path = Fontist.formulas_path.join("#{key}.yml") return unless File.exist?(path) new_from_file(path) end |
.find_by_key_or_name(name) ⇒ Object
59 60 61 |
# File 'lib/fontist/formula.rb', line 59 def self.find_by_key_or_name(name) find_by_key(name) || find_by_name(name) end |
.find_by_name(name) ⇒ Object
70 71 72 73 74 |
# File 'lib/fontist/formula.rb', line 70 def self.find_by_name(name) key = name_to_key(name) find_by_key(key) end |
.find_fonts(font_name) ⇒ Object
37 38 39 40 41 42 43 44 45 |
# File 'lib/fontist/formula.rb', line 37 def self.find_fonts(font_name) formulas = Indexes::FontIndex.from_yaml.load_formulas(font_name) formulas.map do |formula| formula.fonts.select do |f| f.name.casecmp?(font_name) end end.flatten end |
.find_many(font_name) ⇒ Object
33 34 35 |
# File 'lib/fontist/formula.rb', line 33 def self.find_many(font_name) Indexes::FontIndex.from_yaml.load_formulas(font_name) end |
.find_styles(font_name, style_name) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/fontist/formula.rb', line 47 def self.find_styles(font_name, style_name) formulas = Indexes::FontIndex.from_yaml.load_formulas(font_name) formulas.map do |formula| formula.fonts.map do |f| f.styles.select do |s| f.name.casecmp?(font_name) && s.type.casecmp?(style_name) end end end.flatten end |
.name_to_key(name) ⇒ Object
76 77 78 |
# File 'lib/fontist/formula.rb', line 76 def self.name_to_key(name) name.downcase.gsub(" ", "_") end |
.new_from_file(path) ⇒ Object
90 91 92 93 94 95 96 |
# File 'lib/fontist/formula.rb', line 90 def self.new_from_file(path) data = YAML.safe_load( File.read(path), permitted_classes: [Date, Symbol, Time] ) new(data, path) end |
Instance Method Details
#copyright ⇒ Object
143 144 145 |
# File 'lib/fontist/formula.rb', line 143 def copyright @data["copyright"] end |
#description ⇒ Object
135 136 137 |
# File 'lib/fontist/formula.rb', line 135 def description @data["description"] end |
#digest ⇒ Object
201 202 203 |
# File 'lib/fontist/formula.rb', line 201 def digest @data["digest"] end |
#downloadable? ⇒ Boolean
111 112 113 |
# File 'lib/fontist/formula.rb', line 111 def downloadable? @data.key?("resources") end |
#extract ⇒ Object
167 168 169 |
# File 'lib/fontist/formula.rb', line 167 def extract Helpers.parse_to_object(@data["extract"]) end |
#file_size ⇒ Object
171 172 173 174 175 |
# File 'lib/fontist/formula.rb', line 171 def file_size return unless @data["resources"] @data["resources"].values.first["file_size"]&.to_i end |
#font_by_name(name) ⇒ Object
185 186 187 188 189 |
# File 'lib/fontist/formula.rb', line 185 def font_by_name(name) fonts.find do |font| font.name.casecmp?(name) end end |
#fonts ⇒ Object
197 198 199 |
# File 'lib/fontist/formula.rb', line 197 def fonts @fonts ||= Helpers.parse_to_object(fonts_by_family) end |
#fonts_by_name(name) ⇒ Object
191 192 193 194 195 |
# File 'lib/fontist/formula.rb', line 191 def fonts_by_name(name) fonts.select do |font| font.name.casecmp?(name) end end |
#homepage ⇒ Object
139 140 141 |
# File 'lib/fontist/formula.rb', line 139 def homepage @data["homepage"] end |
#instructions ⇒ Object
181 182 183 |
# File 'lib/fontist/formula.rb', line 181 def instructions @data["instructions"] end |
#key ⇒ Object
125 126 127 128 |
# File 'lib/fontist/formula.rb', line 125 def key @key ||= {} @key[@path] ||= key_from_path end |
#license ⇒ Object
151 152 153 |
# File 'lib/fontist/formula.rb', line 151 def license @data["open_license"] || @data["requires_license_agreement"] end |
#license_required ⇒ Object
155 156 157 |
# File 'lib/fontist/formula.rb', line 155 def license_required @data["requires_license_agreement"] ? true : false end |
#license_url ⇒ Object
147 148 149 |
# File 'lib/fontist/formula.rb', line 147 def license_url @data["license_url"] end |
#manual? ⇒ Boolean
107 108 109 |
# File 'lib/fontist/formula.rb', line 107 def manual? !downloadable? end |
#min_fontist ⇒ Object
163 164 165 |
# File 'lib/fontist/formula.rb', line 163 def min_fontist @data["min_fontist"] end |
#name ⇒ Object
130 131 132 133 |
# File 'lib/fontist/formula.rb', line 130 def name @name ||= {} @name[key] ||= namespace.empty? ? base_name : "#{namespace}/#{base_name}" end |
#path ⇒ Object
121 122 123 |
# File 'lib/fontist/formula.rb', line 121 def path @path end |
#platforms ⇒ Object
159 160 161 |
# File 'lib/fontist/formula.rb', line 159 def platforms @data["platforms"] end |
#resources ⇒ Object
177 178 179 |
# File 'lib/fontist/formula.rb', line 177 def resources Helpers.parse_to_object(@data["resources"]&.values) end |
#source ⇒ Object
115 116 117 118 119 |
# File 'lib/fontist/formula.rb', line 115 def source return unless @data["resources"] @data["resources"].values.first["source"] end |
#style_override(font) ⇒ Object
205 206 207 208 209 210 211 |
# File 'lib/fontist/formula.rb', line 205 def style_override(font) fonts .map(&:styles) .flatten .detect { |s| s.family_name == font } &.dig(:override) || {} end |
#to_index_formula ⇒ Object
103 104 105 |
# File 'lib/fontist/formula.rb', line 103 def to_index_formula Indexes::IndexFormula.new(path) end |