Sha256: eee5a17d9a0c153c34581a049e32427169531b15a4b6b6b13ba8f1b1a45fa8d2

Contents?: true

Size: 1.62 KB

Versions: 7

Compression:

Stored size: 1.62 KB

Contents

module Alf
  module Sequel
    class Adapter < Alf::Adapter

      class << self

        def recognizes?(conn_spec)
          case conn_spec
          when ::Sequel::Database
            true
          when String
            require 'uri'
            uri = URI::parse(conn_spec) rescue nil
            (uri && uri.scheme) or looks_a_sqlite_file?(conn_spec)
          when Hash
            conn_spec = Tools.symbolize_keys(conn_spec)
            conn_spec[:adapter] && conn_spec[:database]
          else
            looks_a_sqlite_file?(conn_spec)
          end
        end

        # Returns true if `f` looks like a sqlite file
        def looks_a_sqlite_file?(f)
          return false unless Path.like?(f)
          path = Path(f)
          path.parent.directory? and ['db', 'sqlite', 'sqlite3'].include?(path.ext)
        end

        def sqlite_protocol
          defined?(JRUBY_VERSION) ? "jdbc:sqlite" : "sqlite"
        end

        def sequel_db(conn_spec)
          require 'sequel' unless defined?(::Sequel)
          case conn_spec
          when ::Sequel::Database
            conn_spec
          when String, Path
            conn_spec = "#{sqlite_protocol}://#{conn_spec}" if looks_a_sqlite_file?(conn_spec)
            ::Sequel.connect(conn_spec)
          else
            raise ArgumentError, "Unrecognized connection specification `#{conn_spec.inspect}`"
          end
        end

      end # class << self

      # Returns a low-level connection on this adapter
      def connection
        Connection.new(conn_spec)
      end

      ::Alf::Adapter.register(:sequel, self)
    end # class Adapter
  end # module Sequel
end # module Alf

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
alf-sequel-0.16.3 lib/alf/sequel/adapter.rb
alf-sequel-0.16.2 lib/alf/sequel/adapter.rb
alf-sequel-0.16.1 lib/alf/sequel/adapter.rb
alf-sequel-0.16.0 lib/alf/sequel/adapter.rb
alf-sequel-0.15.0 lib/alf/sequel/adapter.rb
alf-sequel-0.14.0 lib/alf/sequel/adapter.rb
alf-sequel-0.13.0 lib/alf/sequel/adapter.rb