class Gm::Notepad::TableRegistry

Responsible for loading and registering all of the named tables

Public Class Methods

build_and_load() click to toggle source
# File lib/gm/notepad/table_registry.rb, line 11
def self.build_and_load
  new { load! }
end
new(*args, &block) click to toggle source
Calls superclass method
# File lib/gm/notepad/table_registry.rb, line 22
def initialize(*args, &block)
  super
  instance_exec(&block) if block_given?
end

Public Instance Methods

append(table_name:, line:, write:) click to toggle source
# File lib/gm/notepad/table_registry.rb, line 37
def append(table_name:, line:, write:)
  table = nil
  begin
    table = fetch_table(name: table_name)
  rescue MissingTableError
    filename = File.join(filesystem_directory, "#{table_name}#{table_extension}")
    table = register(table_name: table_name, lines: [], filename: filename)
  end
  table.append(line: line, write: write)
end
evaluate(line:) click to toggle source
# File lib/gm/notepad/table_registry.rb, line 64
def evaluate(line:)
  line_evaluator.call(line: line)
end
fetch_table(name:) click to toggle source
# File lib/gm/notepad/table_registry.rb, line 31
def fetch_table(name:)
  registry.fetch(name.downcase)
rescue KeyError
  raise MissingTableError.new(name: name.downcase)
end
lookup(table_name:, **kwargs) click to toggle source
# File lib/gm/notepad/table_registry.rb, line 57
def lookup(table_name:, **kwargs)
  table = fetch_table(name: table_name)
  table.lookup(**kwargs)
rescue MissingTableError, MissingTableEntryError => e
  e.to_buffer_message
end
register_by_filename(table_name:, filename:) click to toggle source
# File lib/gm/notepad/table_registry.rb, line 48
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:) click to toggle source
# File lib/gm/notepad/table_registry.rb, line 53
def register_by_string(table_name:, string:)
  register(table_name: table_name, lines: string.split("\n"))
end
table_names() click to toggle source
# File lib/gm/notepad/table_registry.rb, line 27
def table_names
  registry.keys.sort
end

Private Instance Methods

load!() click to toggle source
# File lib/gm/notepad/table_registry.rb, line 70
def load!
  paths.each do |path|
    Dir.glob(File.join(path, "**/*#{table_extension}")).each do |filename|
      table_name = File.basename(filename, table_extension)
      register_by_filename(table_name: table_name, filename: filename)
    end
  end
end
register(table_name:, lines:, filename: nil) click to toggle source
# File lib/gm/notepad/table_registry.rb, line 79
def register(table_name:, lines:, filename: nil)
  table_name = table_name.downcase
  raise DuplicateKeyError.new(key: table_name, object: self) if registry.key?(table_name.downcase)
  registry[table_name] = Table.new(table_name: table_name, lines: lines, filename: filename)
end