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