Sha256: 2bd9c60e459c127774e9f4ec6811b5d4735910849005dc348062d5803025411f

Contents?: true

Size: 1.66 KB

Versions: 2

Compression:

Stored size: 1.66 KB

Contents

module MultiConfig
  module ORMs
    module ActiveRecord
      def self.included(mod)
        mod.extend ClassMethods
        mod.send(:class_variable_set, :'@@db_configs', Hash.new { |h, k| h[k] = [] })
      end

      module ClassMethods
        def config_file=(file_name)
          file_name += '.yml' unless File.extname(file_name).eql? '.yml'
          unless file_name == 'database.yml'
            namespace = File.basename(file_name, '.yml')
            add_db_config(file_name, namespace)
            raise "Configuration for #{::Rails.env} environment not defined in #{Config.path file_name}" unless configurations.include? "#{namespace}_#{::Rails.env}"
            establish_connection "#{namespace}_#{::Rails.env}"
          end
        end

        private
        def add_db_config(file_name, namespace)
          db_configs = class_variable_get(:'@@db_configs')
          unless db_configs.include?(namespace)
            configurations.merge!(Config.load(file_name, namespace))
            db_configs[namespace] << name
          end
        end
      end

      module Config
        def self.path(file_name)
          File.join(Rails.root, 'config', file_name)
        end

        def self.load(file_name, namespace)
          begin
            require 'erb'
            YAML.load(ERB.new(IO.read(path(file_name))).result).inject({}) do |hash, (k, v)|
              hash["#{namespace}_#{k}"]=v
              hash
            end
          rescue Exception => exc
            raise "File #{path file_name} does not exist in config" unless File.exists?(path(file_name))
            raise "Invalid config file #{path file_name}"
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
multi_config-0.1.1 lib/multi_config/orms/active_record.rb
multi_config-0.1.0 lib/multi_config/orms/active_record.rb