Sha256: 3caef9f157ed09ab911264a6fc12d5d922e1087865baad0223ee9d22a273acb4

Contents?: true

Size: 1.75 KB

Versions: 8

Compression:

Stored size: 1.75 KB

Contents

require_relative "index_formula"

module Fontist
  module Indexes
    class BaseIndex
      def self.from_yaml
        @from_yaml ||= begin
          unless File.exist?(path)
            raise Errors::FormulaIndexNotFoundError.new("Please fetch `#{path}` index with `fontist update`.")
          end

          data = YAML.load_file(path)
          new(data)
        end
      end

      def self.path
        raise NotImplementedError, "Please define path of an index"
      end

      def self.rebuild
        index = new
        index.build
        index.to_yaml
      end

      def initialize(data = {})
        @index = {}

        data.each_pair do |key, paths|
          paths.each do |path|
            add_index_formula(key, IndexFormula.new(path))
          end
        end
      end

      def build
        Formula.all.each do |formula|
          add_formula(formula)
        end
      end

      def add_formula(_formula)
        raise NotImplementedError, "Please define how to add formula to an index, use #add_index_formula"
      end

      def add_index_formula(key_raw, index_formula)
        key = normalize_key(key_raw)
        @index[key] ||= []
        @index[key] << index_formula unless @index[key].include?(index_formula)
      end

      def load_formulas(key)
        index_formulas(key).map(&:to_full)
      end

      def load_index_formulas(key)
        index_formulas(key)
      end

      def to_yaml
        File.write(self.class.path, YAML.dump(to_h))
      end

      def to_h
        @index.map do |key, index_formulas|
          [key, index_formulas.map(&:to_s)]
        end.to_h
      end

      private

      def index_formulas(key)
        @index[normalize_key(key)] || []
      end

      def normalize_key(key)
        key
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
fontist-1.8.12 lib/fontist/indexes/base_index.rb
fontist-1.8.11 lib/fontist/indexes/base_index.rb
fontist-1.8.10 lib/fontist/indexes/base_index.rb
fontist-1.8.9 lib/fontist/indexes/base_index.rb
fontist-1.8.8 lib/fontist/indexes/base_index.rb
fontist-1.8.7 lib/fontist/indexes/base_index.rb
fontist-1.8.6 lib/fontist/indexes/base_index.rb
fontist-1.8.5 lib/fontist/indexes/base_index.rb