Sha256: 7c4af71c77f92f41ec81726035aa7b6ed7824129eabd670c792d556f15da1fbe

Contents?: true

Size: 1.55 KB

Versions: 1

Compression:

Stored size: 1.55 KB

Contents

module SequelRails
  module Storage
    class Jdbc < Abstract

      def _is_mysql?
        config['adapter'].match(/^jdbc:mysql/)
      end

      def _is_postgres?
        config['adapter'].match(/^jdbc:postgresql/)
      end

      def _is_sqlite?
        config['adapter'].match(/^jdbc:sqlite/)
      end

      def _root_url
        config['url'].scan(/^jdbc:mysql:\/\/\w*:?\d*/).first
      end

      def db_name
        config['database']
      end

      def _params
        config['url'].scan(/\?.*$/).first
      end

      def _create
        if _is_sqlite?
          return if in_memory?
          ::Sequel.connect config['url']
        elsif _is_mysql?
          ::Sequel.connect("#{_root_url}#{_params}") do |db|
            db.execute("CREATE DATABASE IF NOT EXISTS `#{db_name}` DEFAULT CHARACTER SET #{charset} DEFAULT COLLATE #{collation}")
          end
        elsif _is_postgres?
          system("createdb #{db_name}")
        end
      end

      def _drop
        if _is_sqlite?
          return if in_memory?
          FileUtils.rm db_name if File.exists? db_name
        elsif _is_mysql?
          ::Sequel.connect("#{_root_url}#{_params}") do |db|
            db.execute("DROP DATABASE IF EXISTS `#{db_name}`")
          end
        elsif _is_postgres?
          system("dropdb #{db_name}")
        end
      end

      private

      def collation
        @collation ||= config['collation'] || ENV['COLLATION'] || 'utf8_unicode_ci'
      end

      def in_memory?
        return false unless _is_sqlite?
        database == ":memory:"
      end

    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sequel-rails-0.5.1 lib/sequel_rails/storage/jdbc.rb