# module GxG::Database

### Public Class Methods

connect(the_url, options={}) click to toggle source

    # File lib/gxg/gxg_database.rb, line 10
    def self.connect(the_url, options={})
      # TODO: require :credential (access privs)
      result = nil
      begin
        # check for URI ipv6 [format] compatibility
        db_url = ::URI::parse(the_url.to_s)
        the_path = db_url.path.to_s
        if the_path == ""
          the_path = db_url.hostname.to_s
        end
        if ::RUBY_ENGINE == "jruby"
          case db_url.scheme.to_sym
          when :sqlite, :sqlite3
            if ["/memory", "memory"].include?(the_path)
              result = Sequel.connect("jdbc:sqlite::memory:")
            else
              result = Sequel.connect("jdbc:sqlite:" + the_path)
            end
          else
            result = Sequel.connect({:adapter => ("jdbc:" + db_url.scheme.to_s), :host => (db_url.hostname.to_s), :database => (db_url.path.to_s.split("/").last), :user => (db_url.user.to_s), :password => (db_url.password.to_s)})
          end
          #
        else
          case db_url.scheme.to_sym
          when :sqlite, :sqlite3
            if ["/memory", "memory"].include?(the_path)
              result = Sequel.connect("sqlite::memory:")
            else
              result = Sequel.connect("sqlite://" + the_path)
            end
          else
            # auto-forward to mysql2 gem if mysql:// scheme
            if db_url.scheme.to_s == "mysql"
              #
              result = Sequel.connect({:adapter => "mysql2", :host => (db_url.hostname.to_s), :database => (db_url.path.to_s.split("/").last), :user => (db_url.user.to_s), :password => (db_url.password.to_s)})
              #
            else
              #
              result = Sequel.connect({:adapter => (db_url.scheme.to_s), :host => (db_url.hostname.to_s), :database => (db_url.path.to_s.split("/").last), :user => (db_url.user.to_s), :password => (db_url.password.to_s)})
              #
            end
          end
        end
        result = ::GxG::Database::Database.new(result, options.merge({:url => (db_url)}))
      rescue => the_error
        log_error({:error => the_error, :parameters => {:url => (the_url), :options => (options)}})
      end
      result
    end