module A9n
Based on github.com/rails/rails/blob/master/activesupport/lib/active_support/string_inquirer.rb
Constants
- ConfigurationNotLoadedError
- DEFAULT_LOG_LEVEL
- EXTENSION_LIST
- Error
- KeyNotFoundError
- MissingConfigurationDataError
- MissingConfigurationVariablesError
- MissingEnvVariableError
- NoSuchConfigurationVariableError
- RootNotSetError
- STRICT_MODE
- UnknownEnvError
- VERSION
Attributes
logger[W]
Public Class Methods
app()
click to toggle source
# File lib/a9n.rb, line 44 def app @app ||= rails_app end
app=(app_instance)
click to toggle source
# File lib/a9n.rb, line 48 def app=(app_instance) @app = app_instance end
app_env()
click to toggle source
# File lib/a9n.rb, line 40 def app_env app.env if app.respond_to?(:env) end
app_root()
click to toggle source
# File lib/a9n.rb, line 56 def app_root app.root if app.respond_to?(:root) end
default_files()
click to toggle source
# File lib/a9n.rb, line 92 def default_files files = Dir[root.join("config/{#{A9n::Scope::ROOT_NAMES.join(',')}}.#{EXTENSION_LIST}").to_s] files += Dir[root.join("config/a9n/*.#{EXTENSION_LIST}")] files.map { |f| f.sub(/.example$/, '') }.uniq.sort end
env()
click to toggle source
# File lib/a9n.rb, line 26 def env @env ||= ::A9n::StringInquirer.new( app_env || env_var('APP_ENV') || env_var('RACK_ENV') || env_var('RAILS_ENV') || raise(UnknownEnvError) ) end
env=(value)
click to toggle source
# File lib/a9n.rb, line 36 def env=(value) @env = ::A9n::StringInquirer.new(value) end
env_var(name, strict: false)
click to toggle source
# File lib/a9n.rb, line 82 def env_var(name, strict: false) raise A9n::MissingEnvVariableError, name if strict && !ENV.key?(name) if ENV[name].is_a?(::String) ENV[name].dup.force_encoding(Encoding::UTF_8).freeze else ENV[name].dup.freeze end end
groups()
click to toggle source
# File lib/a9n.rb, line 74 def groups ['default', env].compact.freeze end
load(*files)
click to toggle source
# File lib/a9n.rb, line 98 def load(*files) require_local_extension files = files.empty? ? default_files : absolute_paths_for(files) files.map { |file| load_file(file) } end
logger()
click to toggle source
# File lib/a9n.rb, line 116 def logger @logger ||= ::Logger.new($stdout, level: fetch(:log_level, DEFAULT_LOG_LEVEL)) end
method_missing(name, *args)
click to toggle source
# File lib/a9n.rb, line 120 def method_missing(name, *args) load if storage.empty? storage.send(name, *args) end
mode()
click to toggle source
# File lib/a9n.rb, line 108 def mode ENV['A9N_MODE'] || STRICT_MODE end
rails_app()
click to toggle source
# File lib/a9n.rb, line 78 def rails_app defined?(Rails) ? Rails : nil end
root()
click to toggle source
# File lib/a9n.rb, line 52 def root @root ||= app_root || root_from_bundle_env || raise(RootNotSetError) end
root=(path)
click to toggle source
# File lib/a9n.rb, line 70 def root=(path) @root = path.to_s.empty? ? nil : Pathname.new(path.to_s).freeze end
root_from_bundle_env()
click to toggle source
# File lib/a9n.rb, line 60 def root_from_bundle_env return nil unless ENV['BUNDLE_GEMFILE'] dir = File.dirname(ENV.fetch('BUNDLE_GEMFILE', nil)) return nil unless File.directory?(dir) Pathname.new(dir) end
storage()
click to toggle source
# File lib/a9n.rb, line 104 def storage @storage ||= A9n::Struct.new end
strict?()
click to toggle source
# File lib/a9n.rb, line 112 def strict? mode == STRICT_MODE end
Private Class Methods
absolute_paths_for(files)
click to toggle source
# File lib/a9n.rb, line 146 def absolute_paths_for(files) files.map { |file| Pathname.new(file).absolute? ? file : root.join('config', file).to_s } end
define_root_geters(*names)
click to toggle source
# File lib/a9n.rb, line 160 def define_root_geters(*names) names.each do |name| next if respond_to?(name) define_singleton_method(name) { storage.fetch(name) } end end
load_file(file)
click to toggle source
# File lib/a9n.rb, line 127 def load_file(file) scope = A9n::Scope.form_file_path(file) scope_data = A9n::Loader.new(file, scope, env).get setup_scope(scope, scope_data) end
require_local_extension()
click to toggle source
# File lib/a9n.rb, line 150 def require_local_extension return if root.nil? local_extension_file = File.join(root, 'config/a9n.rb') return unless File.exist?(local_extension_file) require local_extension_file end
setup_scope(scope, data)
click to toggle source
# File lib/a9n.rb, line 133 def setup_scope(scope, data) if scope.root? storage.merge(data) def_delegator(:storage, :fetch) unless respond_to?(:fetch) define_root_geters(*data.keys) else storage[scope.name] = data define_root_geters(scope.name) end data end