Repository URL to install this package:
|
Version:
7.3.3 ▾
|
# frozen_string_literal: true
module Faculty
# Module to provide access to the database helpers interface
module DatabaseHelper
SCHEMAS = Hash.new { |h, k| h[k] = {} }
# Search utility class
class HashRedirector
def initialize(hash)
@hash = hash
end
def get(key)
@hash.fetch(key, nil)
end
def find(subkey)
raise KeyError, "Cannot find #{subkey}. Have you added the schema and tables to database table helpers?"
end
end
# Search utility class with auto-detection
class SchemaRedirector < HashRedirector
def initialize(search_order)
@search_order = search_order
super(SCHEMAS)
end
def get(key)
hash = super
Interface.new(HashRedirector.new(hash)) if hash
end
def find(subkey)
@search_order.each do |key|
object = @hash.dig(key, subkey)
return object if object
end
super
end
end
# Main interface into the DB Helpers
class Interface < BasicObject
def initialize(redirector)
@redirector = redirector
end
def method_missing(name, *_)
@redirector.get(name) || @redirector.find(name)
end
def respond_to_missing?(name)
return true if @redirector.get(name)
return true if @redirector.find(name)
false
end
end
def dbt
Interface.new(SchemaRedirector.new(dbt_search_order))
end
def dbt_search_order
[]
end
end
end