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.
      95 96 97 98  | 
    
      # File 'lib/fontist/formula.rb', line 95 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  | 
    
      # File 'lib/fontist/formula.rb', line 90 def self.new_from_file(path) data = YAML.load_file(path) new(data, path) end  | 
  
Instance Method Details
#copyright ⇒ Object
      140 141 142  | 
    
      # File 'lib/fontist/formula.rb', line 140 def copyright @data["copyright"] end  | 
  
#description ⇒ Object
      132 133 134  | 
    
      # File 'lib/fontist/formula.rb', line 132 def description @data["description"] end  | 
  
#digest ⇒ Object
      198 199 200  | 
    
      # File 'lib/fontist/formula.rb', line 198 def digest @data["digest"] end  | 
  
#downloadable? ⇒ Boolean
      108 109 110  | 
    
      # File 'lib/fontist/formula.rb', line 108 def downloadable? @data.key?("resources") end  | 
  
#extract ⇒ Object
      164 165 166  | 
    
      # File 'lib/fontist/formula.rb', line 164 def extract Helpers.parse_to_object(@data["extract"]) end  | 
  
#file_size ⇒ Object
      168 169 170 171 172  | 
    
      # File 'lib/fontist/formula.rb', line 168 def file_size return unless @data["resources"] @data["resources"].values.first["file_size"]&.to_i end  | 
  
#font_by_name(name) ⇒ Object
      182 183 184 185 186  | 
    
      # File 'lib/fontist/formula.rb', line 182 def font_by_name(name) fonts.find do |font| font.name.casecmp?(name) end end  | 
  
#fonts ⇒ Object
      194 195 196  | 
    
      # File 'lib/fontist/formula.rb', line 194 def fonts @fonts ||= Helpers.parse_to_object(fonts_by_family) end  | 
  
#fonts_by_name(name) ⇒ Object
      188 189 190 191 192  | 
    
      # File 'lib/fontist/formula.rb', line 188 def fonts_by_name(name) fonts.select do |font| font.name.casecmp?(name) end end  | 
  
#homepage ⇒ Object
      136 137 138  | 
    
      # File 'lib/fontist/formula.rb', line 136 def homepage @data["homepage"] end  | 
  
#instructions ⇒ Object
      178 179 180  | 
    
      # File 'lib/fontist/formula.rb', line 178 def instructions @data["instructions"] end  | 
  
#key ⇒ Object
      122 123 124 125  | 
    
      # File 'lib/fontist/formula.rb', line 122 def key @key ||= {} @key[@path] ||= key_from_path end  | 
  
#license ⇒ Object
      148 149 150  | 
    
      # File 'lib/fontist/formula.rb', line 148 def license @data["open_license"] || @data["requires_license_agreement"] end  | 
  
#license_required ⇒ Object
      152 153 154  | 
    
      # File 'lib/fontist/formula.rb', line 152 def license_required @data["requires_license_agreement"] ? true : false end  | 
  
#license_url ⇒ Object
      144 145 146  | 
    
      # File 'lib/fontist/formula.rb', line 144 def license_url @data["license_url"] end  | 
  
#manual? ⇒ Boolean
      104 105 106  | 
    
      # File 'lib/fontist/formula.rb', line 104 def manual? !downloadable? end  | 
  
#min_fontist ⇒ Object
      160 161 162  | 
    
      # File 'lib/fontist/formula.rb', line 160 def min_fontist @data["min_fontist"] end  | 
  
#name ⇒ Object
      127 128 129 130  | 
    
      # File 'lib/fontist/formula.rb', line 127 def name @name ||= {} @name[key] ||= namespace.empty? ? base_name : "#{namespace}/#{base_name}" end  | 
  
#path ⇒ Object
      118 119 120  | 
    
      # File 'lib/fontist/formula.rb', line 118 def path @path end  | 
  
#platforms ⇒ Object
      156 157 158  | 
    
      # File 'lib/fontist/formula.rb', line 156 def platforms @data["platforms"] end  | 
  
#resources ⇒ Object
      174 175 176  | 
    
      # File 'lib/fontist/formula.rb', line 174 def resources Helpers.parse_to_object(@data["resources"]&.values) end  | 
  
#source ⇒ Object
      112 113 114 115 116  | 
    
      # File 'lib/fontist/formula.rb', line 112 def source return unless @data["resources"] @data["resources"].values.first["source"] end  | 
  
#style_override(font) ⇒ Object
      202 203 204 205 206 207 208  | 
    
      # File 'lib/fontist/formula.rb', line 202 def style_override(font) fonts .map(&:styles) .flatten .detect { |s| s.family_name == font } &.dig(:override) || {} end  | 
  
#to_index_formula ⇒ Object
      100 101 102  | 
    
      # File 'lib/fontist/formula.rb', line 100 def to_index_formula Indexes::IndexFormula.new(path) end  |