Class: Gm::Notepad::TableRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/gm/notepad/table_registry.rb

Overview

Responsible for loading and registering all of the named tables

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(line_evaluator: default_line_evaluator, paths: [], table_extension: ".txt") ⇒ TableRegistry

Returns a new instance of TableRegistry.



19
20
21
22
23
24
# File 'lib/gm/notepad/table_registry.rb', line 19

def initialize(line_evaluator: default_line_evaluator, paths: [], table_extension: ".txt")
  self.line_evaluator = line_evaluator
  self.table_extension = table_extension
  self.paths = paths
  @registry = {}
end

Class Method Details

.load_for(paths:, table_extension: ".txt") ⇒ Object



8
9
10
11
12
13
14
15
16
17
# File 'lib/gm/notepad/table_registry.rb', line 8

def self.load_for(paths:, table_extension: ".txt")
  table_registry = new(paths: paths, table_extension: table_extension)
  paths.each do |path|
    Dir.glob(File.join(path, "**/*#{table_extension}")).each do |filename|
      table_name = File.basename(filename, table_extension)
      table_registry.register_by_filename(table_name: table_name, filename: filename)
    end
  end
  table_registry
end

Instance Method Details

#append(table_name:, line:, write:) ⇒ Object



38
39
40
41
42
43
44
45
46
47
# File 'lib/gm/notepad/table_registry.rb', line 38

def append(table_name:, line:, write:)
  table = nil
  begin
    table = fetch_table(name: table_name)
  rescue KeyError => e
    filename = File.join(paths.first || ".", "#{table_name}#{table_extension}")
    table = register(table_name: table_name, lines: [], filename: filename)
  end
  table.append(line: line, write: write)
end

#evaluate(line:) ⇒ Object



65
66
67
# File 'lib/gm/notepad/table_registry.rb', line 65

def evaluate(line:)
  line_evaluator.call(line: line, table_lookup_function: method(:lookup))
end

#fetch_table(name:) ⇒ Object



34
35
36
# File 'lib/gm/notepad/table_registry.rb', line 34

def fetch_table(name:)
  @registry.fetch(name)
end

#lookup(table_name:, **kwargs) ⇒ Object



58
59
60
61
62
63
# File 'lib/gm/notepad/table_registry.rb', line 58

def lookup(table_name:, **kwargs)
  table = @registry.fetch(table_name)
  table.lookup(**kwargs)
rescue KeyError
  "(undefined #{table_name})"
end

#register_by_filename(table_name:, filename:) ⇒ Object



49
50
51
52
# File 'lib/gm/notepad/table_registry.rb', line 49

def register_by_filename(table_name:, filename:)
  content = File.read(filename)
  register(table_name: table_name, lines: content.split("\n"), filename: filename)
end

#register_by_string(table_name:, string:) ⇒ Object



54
55
56
# File 'lib/gm/notepad/table_registry.rb', line 54

def register_by_string(table_name:, string:)
  register(table_name: table_name, lines: string.split("\n"))
end

#table_namesObject



30
31
32
# File 'lib/gm/notepad/table_registry.rb', line 30

def table_names
  @registry.keys.sort
end