Sha256: 867b5ef5eecabcb4199f8a051a43e62af66453427c9385ffc09b09e6f86fcaa9

Contents?: true

Size: 1.91 KB

Versions: 3

Compression:

Stored size: 1.91 KB

Contents

# frozen_string_literal: true

require 'blueprint_config/version'
require 'blueprint_config/backend/env'
require 'blueprint_config/backend/yaml'
require 'blueprint_config/configuration'
require 'blueprint_config/backend_collection'

module BlueprintConfig
  class << self
    attr_accessor :root, :env, :before_initialize, :after_initialize
    attr_writer :shortcut_name, :env_options

    def shortcut_name
      @shortcut_name || 'AppConfig'
    end

    def env_options
      @env_options || {}
    end

    def define_shortcut
      Object.const_set shortcut_name, instance
    end

    def instance
      BlueprintConfig::Configuration.instance
    end

    def init
      before_initialize&.call
    end

    def configure_rails(config)
      config.before_configuration do |_app|
        BlueprintConfig.root ||= Rails.root
        BlueprintConfig.env ||= Rails.env
        BlueprintConfig.define_shortcut
        BlueprintConfig.before_initialize.call
      end

      config.after_initialize do |_app|
        BlueprintConfig.after_initialize.call
      end
    end
  end
end

BlueprintConfig.env_options ||= {}

BlueprintConfig.before_initialize ||= proc do
  require 'blueprint_config/backend/credentials'
  require 'blueprint_config/backend/active_record'

  BlueprintConfig.instance.init do |backends|
    backends.use :app,         BlueprintConfig::Backend::YAML.new('config/app.yml')
    backends.use :credentials, BlueprintConfig::Backend::Credentials.new
    backends.use :env,         BlueprintConfig::Backend::ENV.new(BlueprintConfig.env_options)
    backends.use :app_local,   BlueprintConfig::Backend::YAML.new('config/app.local.yml')
  end
end

BlueprintConfig.after_initialize ||= proc do
  BlueprintConfig.instance.refine do |backends|
    if backends[:env]
      backends.insert_after :env, :db, BlueprintConfig::Backend::ActiveRecord.new
    else
      backends.push :db, BlueprintConfig::Backend::ActiveRecord.new
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
blueprint_config-1.2.0 lib/blueprint_config.rb
blueprint_config-1.1.0 lib/blueprint_config.rb
blueprint_config-1.0.0 lib/blueprint_config.rb