class App::Configurator

Configuratior namespace

Constants

DEFAULT_ENVIRONMENT
FILES_EXTENSION

Attributes

environment[RW]
files_path[RW]

Public Class Methods

new() click to toggle source
# File lib/config/app.rb, line 59
def initialize
  @environment = DEFAULT_ENVIRONMENT
end

Public Instance Methods

global_name=(name) click to toggle source
# File lib/config/app.rb, line 79
def global_name=(name)
  Object.send(:remove_const, name) if Object.const_defined?(name)
  Object.const_set(name, App.config)
end
load!(name, filter: nil ) click to toggle source

options allowed:

environment: 'production' filter: 'filter character'

# File lib/config/app.rb, line 74
def load!(name, filter: nil )
  filename = config_filename(name)
  generate_attr_reader(name, load_formatted_data(filename, filter))
end
load_all!() click to toggle source
# File lib/config/app.rb, line 63
def load_all!
  files = Dir.glob("#{files_path}/*.#{FILES_EXTENSION}")
  names = files.map { |f| File.basename(f).split(".").first }.uniq

  names.each { |name| load!(name) }
end

Private Instance Methods

config_filename(name) click to toggle source
# File lib/config/app.rb, line 91
def config_filename(name)
  filename = "#{name}.yaml"
  filename_with_env = filename.gsub(FILES_EXTENSION, "#{environment}.#{FILES_EXTENSION}")

  found_file = get_file_that_exists([filename, filename_with_env])
  return found_file unless found_file.nil?

  raise "Configuration file '#{filename}' or '#{filename_with_env}' doesn't exist on path '#{files_path}'"
end
convert_to_struct(object) click to toggle source
# File lib/config/app.rb, line 143
def convert_to_struct(object)
  case object
  when Hash
    object.each { |key, value| object[key] = convert_to_struct(value) }
    Configurator::Struct.new(object)
  when Array
    object.map!(&method(:convert_to_struct))
  else
    object
  end
end
file_exists?(path) click to toggle source
# File lib/config/app.rb, line 121
def file_exists?(path)
  File.exist? path
end
file_full_path(filename) click to toggle source
# File lib/config/app.rb, line 125
def file_full_path(filename)
  "#{files_path}/#{filename}"
end
filtered_data(data, filter) click to toggle source
# File lib/config/app.rb, line 106
def filtered_data(data, filter)
  filter.nil? ? data : data[filter]
end
formatted_data(data, filter:, struct:) click to toggle source
# File lib/config/app.rb, line 101
def formatted_data(data, filter:, struct:)
  data = filtered_data(data, filter)
  struct ? convert_to_struct(data) : data
end
generate_attr_reader(name, data) click to toggle source

generate accessors for loaded data accessors will return objects which are deep copy of themselves

# File lib/config/app.rb, line 135
def generate_attr_reader(name, data)
  define_singleton_method(name) do
    Marshal.load(Marshal.dump(data))
  end

  send(name)
end
get_file_that_exists(filenames) click to toggle source
# File lib/config/app.rb, line 110
def get_file_that_exists(filenames)
  found_file = nil

  filenames.each do |filename|
    found_file = filename if file_exists?(file_full_path(filename))
    break if found_file
  end

  found_file
end
load_formatted_data(filename, filter) click to toggle source
# File lib/config/app.rb, line 86
def load_formatted_data(filename, filter)
  hash_data = load_from_yaml(filename)
  formatted_data(hash_data, filter: filter, struct: true)
end
load_from_yaml(filename) click to toggle source
# File lib/config/app.rb, line 129
def load_from_yaml(filename)
  SecureYaml.load(File.open(file_full_path(filename)))
end