class StackedConfig::Layers::ProjectLayer

Attributes

project_file_basename[R]
started_from_directory[R]

Public Class Methods

new(file_or_directory, project_file_basename=nil) click to toggle source
# File lib/stacked_config/layers/project_layer.rb, line 8
def initialize(file_or_directory, project_file_basename=nil)
  if Dir.exists? file_or_directory
    raise 'You have to provide the basename of the project file !' if project_file_basename.nil?
    @started_from_directory = File.expand_path file_or_directory
    self.project_file_basename = project_file_basename
  else
    raise "Invalid project file '#{file_or_directory}' !" unless File.readable? file_or_directory
    normalized = File.expand_path file_or_directory
    @started_from_directory = File.dirname normalized
    self.project_file_basename = File.basename normalized
  end
end

Public Instance Methods

file_name() click to toggle source
# File lib/stacked_config/layers/project_layer.rb, line 21
def file_name
  @file_name ||= find_root_file project_file_basename, started_from_directory
end
project_file_basename=(file) click to toggle source
# File lib/stacked_config/layers/project_layer.rb, line 29
def project_file_basename=(file)
  @file_name = nil
  @project_file_basename = file
end
project_root() click to toggle source
# File lib/stacked_config/layers/project_layer.rb, line 25
def project_root
  File.dirname file_name
end

Private Instance Methods

find_root_file(file_basename, initial_directory) click to toggle source
# File lib/stacked_config/layers/project_layer.rb, line 36
def find_root_file(file_basename, initial_directory)
  prev_dir = nil
  cur_dir = initial_directory
  found_file = nil

  raise "Invalid directory '#{initial_directory}'" unless File.readable? initial_directory

  while found_file.nil? and cur_dir != prev_dir
    candidate_file = File.join cur_dir, file_basename
    if File.readable? candidate_file
      found_file = candidate_file
    end
    prev_dir = cur_dir
    cur_dir = File.expand_path '..', cur_dir
  end

  raise "Cannot find any root file named '#{file_basename}' starting from '#{initial_directory}'." if found_file.nil?

  found_file
end