class Falcon::Configuration::Loader
def self.load_file(configuration, path)
def self.load_file(configuration, path) path = File.realpath(path) root = File.dirname(path) loader = self.new(configuration, root) loader.instance_eval(File.read(path), path) end
def add(name, *parents, &block)
def add(name, *parents, &block) raise KeyError.new("#{name} is already set", key: name) if @environments.key?(name) @environments[name] = merge(name, *parents, &block) end
def host(name, *parents, &block)
def host(name, *parents, &block) environment = merge(name, :host, *parents, &block) environment[:root] = @root environment[:authority] = name @configuration.add(environment.flatten) end
def initialize(configuration, root = nil)
def initialize(configuration, root = nil) @loaded = {} @configuration = configuration @environments = {} @root = root end
def load(*features)
def load(*features) features.each do |feature| next if @loaded.include?(feature) relative_path = File.join(__dir__, "configuration", "#{feature}.rb") self.instance_eval(File.read(relative_path), relative_path) @loaded[feature] = relative_path end end
def merge(name, *parents, &block)
def merge(name, *parents, &block) environments = parents.map{|name| @environments.fetch(name)} parent = Build::Environment.combine(*environments) Build::Environment.new(parent, name: name, &block) end
def proxy(name, *parents, &block)
def proxy(name, *parents, &block) environment = merge(name, :proxy, *parents, &block) environment[:root] = @root environment[:authority] = name @configuration.add(environment.flatten) end
def rack(name, *parents, &block)
def rack(name, *parents, &block) environment = merge(name, :rack, *parents, &block) environment[:root] = @root environment[:authority] = name @configuration.add(environment.flatten) end
def supervisor
def supervisor name = File.join(@root, "supervisor") environment = merge(name, :supervisor) environment[:root] = @root @configuration.add(environment.flatten) end