Sha256: e2e494a8ef70cf08b08a8c621b7a662832ff29e75311d3115bdf79a6e2cd2a76

Contents?: true

Size: 1.4 KB

Versions: 1

Compression:

Stored size: 1.4 KB

Contents

module RemoteDb
  module Concerns
    module Configurable
      extend ActiveSupport::Concern

      module ClassMethods
        def configure(config_hash = nil)
          if config_hash
            config_hash.each do |k,v|
              setter = "#{k}="
              if configuration.respond_to?(setter )
                configuration.send(setter , v)
              end
            end
          end

          yield(configuration) if block_given?
        end

        def configuration
          @configuration ||= RemoteDb::Configuration.new
        end

        def load_models!
          define_base_record
          send(:require_models) if respond_to?(:require_models)
        end

        private

        def define_base_record
          connection_spec = configuration.connection_spec
          module_name = self.name
          klass = Class.new(ActiveRecord::Base) do
            self.abstract_class = true

            # AR 4 requires AR models to be named.
            def self.name
              "#{module_name}::BaseRecord"
            end

            # Connect via custom db settings
            establish_connection(connection_spec)

            # Force model to be ready-only
            include Concerns::ReadOnlyModel

            # Scope which columns are exposed
            include Concerns::RestrictedColumns
          end
          self.const_set 'BaseRecord', klass
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
remote_db-0.0.2 lib/remote_db/concerns/configurable.rb