Module: AppConfigurable

Defined in:
lib/app_configurable.rb,
lib/app_configurable/error.rb,
lib/app_configurable/version.rb

Defined Under Namespace

Modules: ClassMethods, InstanceMethods Classes: Error

Constant Summary collapse

VERSION =
'0.1.6'
@@available_config_attributes =

rubocop:disable Style/ClassVars

[]

Class Method Summary collapse

Class Method Details

.available_config_attributesArray

Returns the list of available configuration attributes, which are defined with the ‘entry` method.

Returns:

  • (Array)


24
25
26
# File 'lib/app_configurable.rb', line 24

def self.available_config_attributes
  @@available_config_attributes
end

.included(owner) ⇒ Object



16
17
18
19
# File 'lib/app_configurable.rb', line 16

def self.included(owner)
  owner.extend ClassMethods
  owner.include InstanceMethods
end

.load_configs(paths = [], raise_on_missing: false, rails_env: Rails.env) ⇒ void

This method returns an undefined value.

Parameters:

  • paths (Array) (defaults to: [])

    List of paths to load.

  • raise_on_missing (Boolean) (defaults to: false)

    Raise an error if required variables are missing, default is ‘false`.

  • rails_env (String/) (defaults to: Rails.env)

    Rails environment.



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/app_configurable.rb', line 32

def self.load_configs(paths = [], raise_on_missing: false, rails_env: Rails.env) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
  rails_env = ActiveSupport::StringInquirer.new(rails_env) unless rails_env.is_a?(ActiveSupport::StringInquirer)

  paths.map do |path|
    absolute_path = Dir.pwd + "/#{path}"

    File.directory?(absolute_path) ? Dir["#{absolute_path}/**/*.rb"].each { |f| require f } : require(absolute_path)
  end

  available_config_attributes.collect(&:receiver).uniq.each do |klass|
    klass.instance.send(:rails_env=, rails_env, swallow_errors: true)
  end

  raise_on_missing && missing_required_vars.any? && raise(Error::RequiredVarMissing, missing_required_vars.join(', '))
end

.missing_required_varsArray

Report missing required ‘ENV` variables.

Returns:

  • (Array)


50
51
52
53
54
55
56
57
58
59
# File 'lib/app_configurable.rb', line 50

def self.missing_required_vars
  out = []

  available_config_attributes.each do |method|
    method.call
  rescue Error::RequiredVarMissing
    out << "#{method.receiver.name}.#{method.name}"
  end
  out
end