Class: Fontist::Indexes::BaseIndex

Inherits:
Object
  • Object
show all
Defined in:
lib/fontist/indexes/base_index.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data = {}) ⇒ BaseIndex

Returns a new instance of BaseIndex.



35
36
37
38
39
40
41
42
43
# File 'lib/fontist/indexes/base_index.rb', line 35

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

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

Class Method Details

.from_yamlObject



6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/fontist/indexes/base_index.rb', line 6

def self.from_yaml
  @from_yaml ||= begin
    unless Dir.exist?(Fontist.formulas_repo_path)
      raise Errors::MainRepoNotFoundError.new(
        "Please fetch formulas with `fontist update`.",
      )
    end

    rebuild unless File.exist?(path)

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

.pathObject

Raises:

  • (NotImplementedError)


21
22
23
# File 'lib/fontist/indexes/base_index.rb', line 21

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

.rebuildObject



29
30
31
32
33
# File 'lib/fontist/indexes/base_index.rb', line 29

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

.reset_cacheObject



25
26
27
# File 'lib/fontist/indexes/base_index.rb', line 25

def self.reset_cache
  @from_yaml = nil
end

Instance Method Details

#add_formula(_formula) ⇒ Object

Raises:

  • (NotImplementedError)


51
52
53
# File 'lib/fontist/indexes/base_index.rb', line 51

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

#add_index_formula(key_raw, index_formula) ⇒ Object



55
56
57
58
59
# File 'lib/fontist/indexes/base_index.rb', line 55

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

#buildObject



45
46
47
48
49
# File 'lib/fontist/indexes/base_index.rb', line 45

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

#load_formulas(key) ⇒ Object



61
62
63
# File 'lib/fontist/indexes/base_index.rb', line 61

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

#load_index_formulas(key) ⇒ Object



65
66
67
# File 'lib/fontist/indexes/base_index.rb', line 65

def load_index_formulas(key)
  index_formulas(key)
end

#to_hObject



75
76
77
78
79
# File 'lib/fontist/indexes/base_index.rb', line 75

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

#to_yamlObject



69
70
71
72
73
# File 'lib/fontist/indexes/base_index.rb', line 69

def to_yaml
  dir = File.dirname(self.class.path)
  FileUtils.mkdir_p(dir) unless File.exist?(dir)
  File.write(self.class.path, YAML.dump(to_h))
end