Sha256: 6333fef5abce273536e8167a5e7678d751f03e11f678af120481f695976c4123

Contents?: true

Size: 1.88 KB

Versions: 2

Compression:

Stored size: 1.88 KB

Contents

module Rails
  module Sequel
    class Database    

      class << self
        attr_reader :configurations

        def configurations= (config)
          @configurations = config

          for key,env in @configurations do
            # some translations
            env['adapter'] = case env['adapter']
              when 'postgresql' then 'postgres'
              when 'sqlite3'    then 'sqlite'
              else env['adapter']
            end
          end
        end

        def adapter(env)
          a = configurations[env]['adapter']
          a_file = File.join(File.dirname(__FILE__), 'adapters', "#{a}.rb")

          unless File.exists?(a_file)
            raise "Adapter #{a} not supported."
          end

          load a_file
          const_get(a.camelize.to_sym).new(env)
        end

        # convenient methods

        def connect (env, options = {})
          adapter(env).connect(options)
        end

        def create_database (env, options = {})
          local_database?(env) { adapter(env).create_database(options) }
        end

        def create_all (options = {})
          for env,config in configurations do
            next unless config['database']
            create_database(env, options)
          end
        end

        def drop_database (env)
          local_database?(env) { adapter(env).drop_database }
        end

        def drop_all
          for env,config in configurations do
            next unless config['database']
            drop_database(env)
          end
        end

        private

        def local_database? (env, &block)
          config = configurations[env]

          if %w( 127.0.0.1 localhost ).include?(config['host']) || config['host'].blank?
            yield
          else
            $stderr.puts "This task only modifies local databases. #{config['database']} is on a remote host."
          end 
        end
      end

    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rails3_sequel-0.3.1 lib/rails3_sequel/database.rb
rails3_sequel-0.3.0 lib/rails3_sequel/database.rb