app_config_for 0.0.1 → 0.0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/lib/app_config_for/errors.rb +13 -0
 - data/lib/app_config_for/gem_version.rb +16 -0
 - data/lib/app_config_for/legacy_support.rb +45 -0
 - data/lib/app_config_for/version.rb +6 -1
 - data/lib/app_config_for.rb +119 -34
 - metadata +17 -9
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 228991a28438bec90c4aa9f06b33850a5ee4034b01a7ec87a33c90fa77ace37d
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: eed01754e58c59c3ea8d58c23e809f8d9c3ae1b6fe5a3b24958a1a173f01a87c
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: d05a93814a9b8162890151e89f2e83e99f29c58478e371aeef49c63c29713a01d1c86ab3b4a28ee320d2eb639dd51879d107dd820c9f173c3bae958c626396b9
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: b9dc3d8224b2e0c05167da273faf7df940c1397022d22768af8cce85101de32993a56cc2e13bca5b2d8cb656e7885251a962486856388ad1871be9163784816e
         
     | 
| 
         @@ -22,4 +22,17 @@ module AppConfigFor 
     | 
|
| 
       22 
22 
     | 
    
         
             
                  super "Could not load configuration file: #{@file}\n#{@original_exception.message}"
         
     | 
| 
       23 
23 
     | 
    
         
             
                end
         
     | 
| 
       24 
24 
     | 
    
         
             
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              class InvalidEnvInheritanceStyle < Error
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                attr_reader :attempted, :valid
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                def initialize(attempted)
         
     | 
| 
      
 31 
     | 
    
         
            +
                  @attempted = attempted
         
     | 
| 
      
 32 
     | 
    
         
            +
                  @valid = EnvPrefixInheritanceStyles.dup
         
     | 
| 
      
 33 
     | 
    
         
            +
                  super "Invalid inheritance style #{@attempted.inspect}. Please use one of the following: #{@valid.map(&:inspect).join(', ')}"
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
       25 
38 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,45 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'active_support/core_ext/string/inflections'
         
     | 
| 
      
 2 
     | 
    
         
            +
            name = File.basename(__dir__).classify
         
     | 
| 
      
 3 
     | 
    
         
            +
            STDERR.puts "#{name}: Warning! Outdated version of ActiveSupport active! To avoid security issues, please upgrade your version of ActiveSupport to at least 6.1.4."
         
     | 
| 
      
 4 
     | 
    
         
            +
            if ActiveSupport.gem_version < Gem::Version.new('6.1.0')
         
     | 
| 
      
 5 
     | 
    
         
            +
              puts "#{name}: Loading legacy support for ActiveSupport version #{ActiveSupport.gem_version}."
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              # Quick and dirty backport. This won't be here long. Just enough to support AppConfigFor during some legacy upgrades.
         
     | 
| 
      
 8 
     | 
    
         
            +
              require "active_support/string_inquirer"
         
     | 
| 
      
 9 
     | 
    
         
            +
              require "erb"
         
     | 
| 
      
 10 
     | 
    
         
            +
              require "yaml"
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              module ActiveSupport
         
     | 
| 
      
 13 
     | 
    
         
            +
                class EnvironmentInquirer < StringInquirer
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  Environments = %w(development test production)
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  def initialize(env)
         
     | 
| 
      
 18 
     | 
    
         
            +
                    super(env)
         
     | 
| 
      
 19 
     | 
    
         
            +
                    Environments.each { |e| instance_variable_set(:"@#{e}", env == e) }
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  Environments.each { |e| define_method("#{e}?") { instance_variable_get("@#{e}") }}
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                class ConfigurationFile
         
     | 
| 
      
 26 
     | 
    
         
            +
                  def initialize(file_name)
         
     | 
| 
      
 27 
     | 
    
         
            +
                    @file_name = file_name
         
     | 
| 
      
 28 
     | 
    
         
            +
                    @config = File.read(file_name)
         
     | 
| 
      
 29 
     | 
    
         
            +
                    warn(file_name + ' contains invisible non-breaking spaces.') if @config.match?("\u00A0")
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  def self.parse(file_name)
         
     | 
| 
      
 33 
     | 
    
         
            +
                    new(file_name).parse
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                  def parse
         
     | 
| 
      
 37 
     | 
    
         
            +
                    YAML.load(ERB.new(@config).result) || {}
         
     | 
| 
      
 38 
     | 
    
         
            +
                  rescue Psych::SyntaxError => e
         
     | 
| 
      
 39 
     | 
    
         
            +
                    raise "YAML syntax error occurred while parsing #{@file_name}. Error: #{e.message}"
         
     | 
| 
      
 40 
     | 
    
         
            +
                  end
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/app_config_for.rb
    CHANGED
    
    | 
         @@ -2,27 +2,46 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require_relative "app_config_for/version"
         
     | 
| 
       4 
4 
     | 
    
         
             
            require_relative "app_config_for/errors"
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            require 'active_support/ 
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            require 'active_support/gem_version'
         
     | 
| 
      
 7 
     | 
    
         
            +
            if ActiveSupport.gem_version >= Gem::Version.new('6.1.4')
         
     | 
| 
      
 8 
     | 
    
         
            +
              require 'active_support/environment_inquirer'
         
     | 
| 
      
 9 
     | 
    
         
            +
              require 'active_support/configuration_file'
         
     | 
| 
      
 10 
     | 
    
         
            +
            else
         
     | 
| 
      
 11 
     | 
    
         
            +
              require_relative 'app_config_for/legacy_support'
         
     | 
| 
      
 12 
     | 
    
         
            +
            end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
       7 
14 
     | 
    
         
             
            require 'active_support/core_ext/object/blank'
         
     | 
| 
       8 
15 
     | 
    
         
             
            require 'active_support/core_ext/string/inflections'
         
     | 
| 
       9 
     | 
    
         
            -
            require  
     | 
| 
      
 16 
     | 
    
         
            +
            require 'active_support/core_ext/hash/indifferent_access'
         
     | 
| 
       10 
17 
     | 
    
         
             
            require 'active_support/ordered_options'
         
     | 
| 
       11 
18 
     | 
    
         
             
            require 'active_support/core_ext/object/try'
         
     | 
| 
       12 
19 
     | 
    
         | 
| 
       13 
20 
     | 
    
         
             
            module AppConfigFor
         
     | 
| 
       14 
21 
     | 
    
         | 
| 
      
 22 
     | 
    
         
            +
              EnvPrefixInheritanceStyles = %i(none namespace class namespace_class class_namespace)
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
       15 
24 
     | 
    
         
             
              def initialize(*args)
         
     | 
| 
       16 
25 
     | 
    
         
             
                add_env_prefix
         
     | 
| 
       17 
26 
     | 
    
         
             
                super
         
     | 
| 
       18 
27 
     | 
    
         
             
              end
         
     | 
| 
       19 
28 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
              def add_env_prefix(prefix = nil, at_beginning 
     | 
| 
       21 
     | 
    
         
            -
                env_prefixes( 
     | 
| 
      
 29 
     | 
    
         
            +
              def add_env_prefix(prefix = nil, at_beginning = true)
         
     | 
| 
      
 30 
     | 
    
         
            +
                env_prefixes(false, false).send(at_beginning ? :unshift : :push, AppConfigFor.prefix_from(prefix || self)).uniq!
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
              def add_config_directory(new_directory)
         
     | 
| 
      
 34 
     | 
    
         
            +
                (additional_config_directories << Pathname.new(new_directory).expand_path).uniq!
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
              def additional_config_directories
         
     | 
| 
      
 38 
     | 
    
         
            +
                @additional_config_directories ||= []
         
     | 
| 
       22 
39 
     | 
    
         
             
              end
         
     | 
| 
       23 
40 
     | 
    
         | 
| 
       24 
41 
     | 
    
         
             
              def config_directories
         
     | 
| 
       25 
     | 
    
         
            -
                directories = ['Rails'.safe_constantize&.application&.paths, try(:paths)].compact.map { |root|  
     | 
| 
      
 42 
     | 
    
         
            +
                directories = ['Rails'.safe_constantize&.application&.paths, try(:paths)].compact.map { |root| root["config"].existent.first }.compact
         
     | 
| 
      
 43 
     | 
    
         
            +
                directories.map! { |directory| Pathname.new(directory).expand_path }
         
     | 
| 
      
 44 
     | 
    
         
            +
                directories.concat additional_config_directories
         
     | 
| 
       26 
45 
     | 
    
         
             
                directories.push(Pathname.getwd + 'config')
         
     | 
| 
       27 
46 
     | 
    
         
             
                directories.uniq
         
     | 
| 
       28 
47 
     | 
    
         
             
              end
         
     | 
| 
         @@ -36,7 +55,7 @@ module AppConfigFor 
     | 
|
| 
       36 
55 
     | 
    
         
             
              end
         
     | 
| 
       37 
56 
     | 
    
         | 
| 
       38 
57 
     | 
    
         
             
              def config_files(name = nil)
         
     | 
| 
       39 
     | 
    
         
            -
                name = AppConfigFor.yml_name_from(name ||  
     | 
| 
      
 58 
     | 
    
         
            +
                name = AppConfigFor.yml_name_from(name || config_name)
         
     | 
| 
       40 
59 
     | 
    
         
             
                config_directories.map { |directory| directory + name }
         
     | 
| 
       41 
60 
     | 
    
         
             
              end
         
     | 
| 
       42 
61 
     | 
    
         | 
| 
         @@ -44,8 +63,8 @@ module AppConfigFor 
     | 
|
| 
       44 
63 
     | 
    
         
             
                !config_file(name).blank?
         
     | 
| 
       45 
64 
     | 
    
         
             
              end
         
     | 
| 
       46 
65 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
              def config_for(name,  
     | 
| 
       48 
     | 
    
         
            -
                config, shared = config_options(name).fetch_values(( 
     | 
| 
      
 66 
     | 
    
         
            +
              def config_for(name, env: nil)
         
     | 
| 
      
 67 
     | 
    
         
            +
                config, shared = config_options(name).fetch_values((env || self.env).to_sym, :shared) {nil}
         
     | 
| 
       49 
68 
     | 
    
         
             
                config ||= shared
         
     | 
| 
       50 
69 
     | 
    
         | 
| 
       51 
70 
     | 
    
         
             
                if config.is_a?(Hash)
         
     | 
| 
         @@ -56,53 +75,70 @@ module AppConfigFor 
     | 
|
| 
       56 
75 
     | 
    
         
             
                config
         
     | 
| 
       57 
76 
     | 
    
         
             
              end
         
     | 
| 
       58 
77 
     | 
    
         | 
| 
      
 78 
     | 
    
         
            +
              def config_name
         
     | 
| 
      
 79 
     | 
    
         
            +
                @config_name ||= self
         
     | 
| 
      
 80 
     | 
    
         
            +
              end
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
              def config_name=(new_config_name)
         
     | 
| 
      
 83 
     | 
    
         
            +
                @config_name = new_config_name
         
     | 
| 
      
 84 
     | 
    
         
            +
              end
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
       59 
86 
     | 
    
         
             
              def config_options(name = nil)
         
     | 
| 
       60 
87 
     | 
    
         
             
                file = name.is_a?(Pathname) ? name : config_file(name)
         
     | 
| 
       61 
88 
     | 
    
         
             
                ActiveSupport::ConfigurationFile.parse(file.to_s).deep_symbolize_keys
         
     | 
| 
       62 
89 
     | 
    
         
             
              rescue SystemCallError => exception
         
     | 
| 
       63 
90 
     | 
    
         
             
                raise ConfigNotFound.new(name.is_a?(Pathname) ? name : config_files(name), exception)
         
     | 
| 
       64 
91 
     | 
    
         
             
              rescue => exception
         
     | 
| 
       65 
     | 
    
         
            -
                raise LoadError.new(file, exception)
         
     | 
| 
      
 92 
     | 
    
         
            +
                raise file ? LoadError.new(file, exception) : exception
         
     | 
| 
       66 
93 
     | 
    
         
             
              end
         
     | 
| 
       67 
94 
     | 
    
         | 
| 
       68 
     | 
    
         
            -
              def configured( 
     | 
| 
       69 
     | 
    
         
            -
                config_for( 
     | 
| 
      
 95 
     | 
    
         
            +
              def configured(reload = false, env: nil)
         
     | 
| 
      
 96 
     | 
    
         
            +
                @configured = config_for(nil, env: env) if reload || @configured.nil?
         
     | 
| 
      
 97 
     | 
    
         
            +
                @configured
         
     | 
| 
       70 
98 
     | 
    
         
             
              end
         
     | 
| 
       71 
99 
     | 
    
         | 
| 
       72 
     | 
    
         
            -
              def env(reload 
     | 
| 
      
 100 
     | 
    
         
            +
              def env(reload = false)
         
     | 
| 
       73 
101 
     | 
    
         
             
                @env = ActiveSupport::EnvironmentInquirer.new(AppConfigFor.env_name(env_prefixes)) if reload || @env.nil?
         
     | 
| 
       74 
102 
     | 
    
         
             
                @env
         
     | 
| 
       75 
103 
     | 
    
         
             
              end
         
     | 
| 
       76 
104 
     | 
    
         | 
| 
       77 
     | 
    
         
            -
              def  
     | 
| 
      
 105 
     | 
    
         
            +
              def env_prefix_inheritance
         
     | 
| 
      
 106 
     | 
    
         
            +
                @env_prefix_inheritance ||= :namespace
         
     | 
| 
      
 107 
     | 
    
         
            +
              end
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
              def env_prefix_inheritance=(style)
         
     | 
| 
      
 110 
     | 
    
         
            +
                @env_prefix_inheritance = AppConfigFor.verified_style!(style)
         
     | 
| 
      
 111 
     | 
    
         
            +
              end
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
              def env_prefixes(all = true, dup = true)
         
     | 
| 
       78 
114 
     | 
    
         
             
                @env_prefixes ||= []
         
     | 
| 
       79 
115 
     | 
    
         
             
                if all
         
     | 
| 
       80 
     | 
    
         
            -
                  @env_prefixes + AppConfigFor. 
     | 
| 
      
 116 
     | 
    
         
            +
                  @env_prefixes + AppConfigFor.progenitor_prefixes_of(self)
         
     | 
| 
       81 
117 
     | 
    
         
             
                else
         
     | 
| 
       82 
118 
     | 
    
         
             
                  dup ? @env_prefixes.dup : @env_prefixes
         
     | 
| 
       83 
119 
     | 
    
         
             
                end
         
     | 
| 
       84 
120 
     | 
    
         
             
              end
         
     | 
| 
       85 
121 
     | 
    
         | 
| 
       86 
     | 
    
         
            -
              def remove_env_prefix(prefix, all 
     | 
| 
      
 122 
     | 
    
         
            +
              def remove_env_prefix(prefix, all = false)
         
     | 
| 
       87 
123 
     | 
    
         
             
                if all
         
     | 
| 
       88 
124 
     | 
    
         
             
                  remove_env_prefix(prefix)
         
     | 
| 
       89 
     | 
    
         
            -
                  AppConfigFor.progenitor_of(self) 
     | 
| 
      
 125 
     | 
    
         
            +
                  AppConfigFor.progenitor_of(self)&.remove_env_prefix(prefix, all)
         
     | 
| 
       90 
126 
     | 
    
         
             
                else
         
     | 
| 
       91 
     | 
    
         
            -
                  env_prefixes( 
     | 
| 
      
 127 
     | 
    
         
            +
                  env_prefixes(false, false).delete(AppConfigFor.prefix_from(prefix))
         
     | 
| 
       92 
128 
     | 
    
         
             
                end
         
     | 
| 
       93 
129 
     | 
    
         
             
              end
         
     | 
| 
       94 
130 
     | 
    
         | 
| 
       95 
131 
     | 
    
         
             
              class << self
         
     | 
| 
       96 
132 
     | 
    
         | 
| 
       97 
     | 
    
         
            -
                def add_env_prefix(prefix)
         
     | 
| 
       98 
     | 
    
         
            -
                  env_prefixes( 
     | 
| 
      
 133 
     | 
    
         
            +
                def add_env_prefix(prefix, at_beginning = true)
         
     | 
| 
      
 134 
     | 
    
         
            +
                  env_prefixes(false, false).send(at_beginning ? :unshift : :push, prefix_from(prefix)).uniq!
         
     | 
| 
       99 
135 
     | 
    
         
             
                end
         
     | 
| 
       100 
136 
     | 
    
         | 
| 
       101 
137 
     | 
    
         
             
                def env_name(prefixes = env_prefixes)
         
     | 
| 
       102 
138 
     | 
    
         
             
                  prefixes.inject(nil) { |current_env, name| current_env || ENV["#{name.to_s.upcase}_ENV"].presence } || 'development'
         
     | 
| 
       103 
139 
     | 
    
         
             
                end
         
     | 
| 
       104 
140 
     | 
    
         | 
| 
       105 
     | 
    
         
            -
                def env_prefixes( 
     | 
| 
      
 141 
     | 
    
         
            +
                def env_prefixes(_all = true, dup = true)
         
     | 
| 
       106 
142 
     | 
    
         
             
                  # all is ignored as we are at the end of the chain
         
     | 
| 
       107 
143 
     | 
    
         
             
                  @env_prefixes ||= [:rails, :rack]
         
     | 
| 
       108 
144 
     | 
    
         
             
                  dup ? @env_prefixes.dup : @env_prefixes
         
     | 
| 
         @@ -119,6 +155,27 @@ module AppConfigFor 
     | 
|
| 
       119 
155 
     | 
    
         
             
                  end.deconstantize.safe_constantize
         
     | 
| 
       120 
156 
     | 
    
         
             
                end
         
     | 
| 
       121 
157 
     | 
    
         | 
| 
      
 158 
     | 
    
         
            +
                # Not used internally, this is a convenience method to study what progenitors are used during namespace dives
         
     | 
| 
      
 159 
     | 
    
         
            +
                def namespaces_of(object)
         
     | 
| 
      
 160 
     | 
    
         
            +
                  (object = [namespace_of(object)]).each { |x| x && object << namespace_of(x) }[0..-2]
         
     | 
| 
      
 161 
     | 
    
         
            +
                end
         
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
      
 163 
     | 
    
         
            +
                def parent_of(object)
         
     | 
| 
      
 164 
     | 
    
         
            +
                  case object
         
     | 
| 
      
 165 
     | 
    
         
            +
                  when String
         
     | 
| 
      
 166 
     | 
    
         
            +
                    object.safe_constantize
         
     | 
| 
      
 167 
     | 
    
         
            +
                  when Class
         
     | 
| 
      
 168 
     | 
    
         
            +
                    object.superclass
         
     | 
| 
      
 169 
     | 
    
         
            +
                  else
         
     | 
| 
      
 170 
     | 
    
         
            +
                    object.class
         
     | 
| 
      
 171 
     | 
    
         
            +
                  end
         
     | 
| 
      
 172 
     | 
    
         
            +
                end
         
     | 
| 
      
 173 
     | 
    
         
            +
             
     | 
| 
      
 174 
     | 
    
         
            +
                # Not used internally, this is a convenience method to study what progenitors are used during class dives
         
     | 
| 
      
 175 
     | 
    
         
            +
                def parents_of(object)
         
     | 
| 
      
 176 
     | 
    
         
            +
                  (object = [parent_of(object)]).each { |x| x && object << parent_of(x) }[0..-2]
         
     | 
| 
      
 177 
     | 
    
         
            +
                end
         
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
       122 
179 
     | 
    
         
             
                def prefix_from(object)
         
     | 
| 
       123 
180 
     | 
    
         
             
                  if object.is_a?(Symbol)
         
     | 
| 
       124 
181 
     | 
    
         
             
                    object
         
     | 
| 
         @@ -134,19 +191,41 @@ module AppConfigFor 
     | 
|
| 
       134 
191 
     | 
    
         
             
                      object.class.name
         
     | 
| 
       135 
192 
     | 
    
         
             
                    end.underscore.gsub('/','_').to_sym
         
     | 
| 
       136 
193 
     | 
    
         
             
                 end
         
     | 
| 
      
 194 
     | 
    
         
            +
                end
         
     | 
| 
       137 
195 
     | 
    
         | 
| 
      
 196 
     | 
    
         
            +
                def progenitor_of(object, style = nil)
         
     | 
| 
      
 197 
     | 
    
         
            +
                  style = verified_style!(style, object)
         
     | 
| 
      
 198 
     | 
    
         
            +
                  command = {namespace: :namespace_of, class: :parent_of}[style] # Todo, deal with the other styles by doing nothing and not crashing or something.
         
     | 
| 
      
 199 
     | 
    
         
            +
                  object && command && send(command, object).yield_self { |n| n && (n.respond_to?(:env_prefixes) ? n : progenitor_of(n)) }
         
     | 
| 
       138 
200 
     | 
    
         
             
                end
         
     | 
| 
       139 
201 
     | 
    
         | 
| 
       140 
     | 
    
         
            -
                 
     | 
| 
       141 
     | 
    
         
            -
             
     | 
| 
       142 
     | 
    
         
            -
                  (namespace_of(object) || self).yield_self do |namespace|
         
     | 
| 
       143 
     | 
    
         
            -
                    namespace.respond_to?(:env_prefixes) ? namespace : progenitor_of(namespace)
         
     | 
| 
       144 
     | 
    
         
            -
                  end
         
     | 
| 
      
 202 
     | 
    
         
            +
                def progenitor_prefixes_of(object, style = nil, all = true)
         
     | 
| 
      
 203 
     | 
    
         
            +
                  Array(progenitor_of(object, style)&.env_prefixes(all))
         
     | 
| 
       145 
204 
     | 
    
         
             
                end
         
     | 
| 
       146 
205 
     | 
    
         | 
| 
       147 
     | 
    
         
            -
                def  
     | 
| 
       148 
     | 
    
         
            -
                   
     | 
| 
       149 
     | 
    
         
            -
                   
     | 
| 
      
 206 
     | 
    
         
            +
                def progenitors_of(object, style = nil, terminate = true)
         
     | 
| 
      
 207 
     | 
    
         
            +
                  style = verified_style!(style, object)
         
     | 
| 
      
 208 
     | 
    
         
            +
                  terminate = terminate && style != :none
         
     | 
| 
      
 209 
     | 
    
         
            +
                  if object && style != :none
         
     | 
| 
      
 210 
     | 
    
         
            +
                    styles = style.to_s.split('_')
         
     | 
| 
      
 211 
     | 
    
         
            +
                    if styles.size > 1
         
     | 
| 
      
 212 
     | 
    
         
            +
                      styles.flat_map{ |style| progenitors_of(object, style, false) }
         
     | 
| 
      
 213 
     | 
    
         
            +
                    else
         
     | 
| 
      
 214 
     | 
    
         
            +
                      Array(progenitor_of(object, style)).yield_self { |x| x + progenitors_of(x.last, nil, false) }
         
     | 
| 
      
 215 
     | 
    
         
            +
                    end
         
     | 
| 
      
 216 
     | 
    
         
            +
                  else
         
     | 
| 
      
 217 
     | 
    
         
            +
                    []
         
     | 
| 
      
 218 
     | 
    
         
            +
                  end.yield_self { |result| terminate ? result.reverse.uniq.reverse + [self] : result }
         
     | 
| 
      
 219 
     | 
    
         
            +
                end
         
     | 
| 
      
 220 
     | 
    
         
            +
             
     | 
| 
      
 221 
     | 
    
         
            +
                def remove_env_prefix(prefix, all = false)
         
     | 
| 
      
 222 
     | 
    
         
            +
                  env_prefixes(all, false).delete(prefix_from(prefix))
         
     | 
| 
      
 223 
     | 
    
         
            +
                end
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
      
 225 
     | 
    
         
            +
                def verified_style!(style, object = nil)
         
     | 
| 
      
 226 
     | 
    
         
            +
                  style ||= object.respond_to?(:env_prefix_inheritance) ? object.send(:env_prefix_inheritance) : :namespace
         
     | 
| 
      
 227 
     | 
    
         
            +
                  style = style.try(:to_sym) || style.to_s.to_sym
         
     | 
| 
      
 228 
     | 
    
         
            +
                  EnvPrefixInheritanceStyles.include?(style) ? style : raise(InvalidEnvInheritanceStyle.new(style))
         
     | 
| 
       150 
229 
     | 
    
         
             
                end
         
     | 
| 
       151 
230 
     | 
    
         | 
| 
       152 
231 
     | 
    
         
             
                def yml_name_from(object)
         
     | 
| 
         @@ -166,17 +245,23 @@ module AppConfigFor 
     | 
|
| 
       166 
245 
     | 
    
         | 
| 
       167 
246 
     | 
    
         
             
                private
         
     | 
| 
       168 
247 
     | 
    
         | 
| 
      
 248 
     | 
    
         
            +
                def prep_base(base)
         
     | 
| 
      
 249 
     | 
    
         
            +
                  base.add_env_prefix
         
     | 
| 
      
 250 
     | 
    
         
            +
                  gem = Gem.loaded_specs[base.name.underscore]
         
     | 
| 
      
 251 
     | 
    
         
            +
                  base.add_config_directory(gem.gem_dir + '/config') if gem
         
     | 
| 
      
 252 
     | 
    
         
            +
                end
         
     | 
| 
      
 253 
     | 
    
         
            +
             
     | 
| 
       169 
254 
     | 
    
         
             
                def extended(base)
         
     | 
| 
       170 
255 
     | 
    
         
             
                  # Todo: Add the ability to check the default environments directly from base if the methods don't yet exist.
         
     | 
| 
       171 
256 
     | 
    
         
             
                  # ie: base.development? is the same as base.env.development?
         
     | 
| 
       172 
     | 
    
         
            -
                  base 
     | 
| 
      
 257 
     | 
    
         
            +
                  prep_base(base)
         
     | 
| 
       173 
258 
     | 
    
         
             
                end
         
     | 
| 
       174 
259 
     | 
    
         | 
| 
       175 
     | 
    
         
            -
                 
     | 
| 
       176 
     | 
    
         
            -
             
     | 
| 
       177 
     | 
    
         
            -
                 
     | 
| 
       178 
     | 
    
         
            -
                # end
         
     | 
| 
      
 260 
     | 
    
         
            +
                def included(base)
         
     | 
| 
      
 261 
     | 
    
         
            +
                  prep_base(base)
         
     | 
| 
      
 262 
     | 
    
         
            +
                end
         
     | 
| 
       179 
263 
     | 
    
         | 
| 
       180 
264 
     | 
    
         
             
              end
         
     | 
| 
       181 
265 
     | 
    
         | 
| 
       182 
266 
     | 
    
         
             
            end
         
     | 
| 
      
 267 
     | 
    
         
            +
             
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,29 +1,35 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: app_config_for
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0.1
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.4.1
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Frank Hall
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2022-04- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2022-04-15 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: activesupport
         
     | 
| 
       15 
15 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       16 
16 
     | 
    
         
             
                requirements:
         
     | 
| 
       17 
     | 
    
         
            -
                - - " 
     | 
| 
      
 17 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 18 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 19 
     | 
    
         
            +
                    version: '5.0'
         
     | 
| 
      
 20 
     | 
    
         
            +
                - - "<"
         
     | 
| 
       18 
21 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       19 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 22 
     | 
    
         
            +
                    version: '8'
         
     | 
| 
       20 
23 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       21 
24 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       22 
25 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       23 
26 
     | 
    
         
             
                requirements:
         
     | 
| 
       24 
     | 
    
         
            -
                - - " 
     | 
| 
      
 27 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 28 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 29 
     | 
    
         
            +
                    version: '5.0'
         
     | 
| 
      
 30 
     | 
    
         
            +
                - - "<"
         
     | 
| 
       25 
31 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       26 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 32 
     | 
    
         
            +
                    version: '8'
         
     | 
| 
       27 
33 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       28 
34 
     | 
    
         
             
              name: rake
         
     | 
| 
       29 
35 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -72,6 +78,8 @@ files: 
     | 
|
| 
       72 
78 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       73 
79 
     | 
    
         
             
            - lib/app_config_for.rb
         
     | 
| 
       74 
80 
     | 
    
         
             
            - lib/app_config_for/errors.rb
         
     | 
| 
      
 81 
     | 
    
         
            +
            - lib/app_config_for/gem_version.rb
         
     | 
| 
      
 82 
     | 
    
         
            +
            - lib/app_config_for/legacy_support.rb
         
     | 
| 
       75 
83 
     | 
    
         
             
            - lib/app_config_for/version.rb
         
     | 
| 
       76 
84 
     | 
    
         
             
            - sig/app_config_for.rbs
         
     | 
| 
       77 
85 
     | 
    
         
             
            homepage: https://github.com/ChapterHouse/app_config_for
         
     | 
| 
         @@ -79,8 +87,8 @@ licenses: 
     | 
|
| 
       79 
87 
     | 
    
         
             
            - MIT
         
     | 
| 
       80 
88 
     | 
    
         
             
            metadata:
         
     | 
| 
       81 
89 
     | 
    
         
             
              homepage_uri: https://github.com/ChapterHouse/app_config_for
         
     | 
| 
       82 
     | 
    
         
            -
              source_code_uri: https://github.com/ChapterHouse/app_config_for/tree/v0.0.1
         
     | 
| 
       83 
     | 
    
         
            -
              changelog_uri: https://github.com/ChapterHouse/app_config_for/blob/v0.0.1/CHANGELOG.md
         
     | 
| 
      
 90 
     | 
    
         
            +
              source_code_uri: https://github.com/ChapterHouse/app_config_for/tree/v0.0.4.1
         
     | 
| 
      
 91 
     | 
    
         
            +
              changelog_uri: https://github.com/ChapterHouse/app_config_for/blob/v0.0.4.1/CHANGELOG.md
         
     | 
| 
       84 
92 
     | 
    
         
             
            post_install_message:
         
     | 
| 
       85 
93 
     | 
    
         
             
            rdoc_options: []
         
     | 
| 
       86 
94 
     | 
    
         
             
            require_paths:
         
     | 
| 
         @@ -89,7 +97,7 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       89 
97 
     | 
    
         
             
              requirements:
         
     | 
| 
       90 
98 
     | 
    
         
             
              - - ">="
         
     | 
| 
       91 
99 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       92 
     | 
    
         
            -
                  version: 2.6 
     | 
| 
      
 100 
     | 
    
         
            +
                  version: 2.3.6
         
     | 
| 
       93 
101 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       94 
102 
     | 
    
         
             
              requirements:
         
     | 
| 
       95 
103 
     | 
    
         
             
              - - ">="
         
     |