Sha256: dfe857dc62ce5f8b2ec797b8cd9439f08aca73918b81d30278557a4ed8a33ad5

Contents?: true

Size: 1.34 KB

Versions: 5

Compression:

Stored size: 1.34 KB

Contents

require 'singleton'
require 'rubydora'

module ActiveFedora
  class RubydoraConnection
    include Singleton
    
    attr_accessor :options

    def self.connect(params={})
      params = params.dup
      if params.kind_of? String
        u = URI.parse params
        params = {}
        params[:user] = u.user
        params[:password] = u.password
        params[:url] = "#{u.scheme}://#{u.host}:#{u.port}#{u.path}"
      end
      instance = self.instance
      force = params.delete(:force)
      instance.options = params
      instance.connect force
      instance
    end

    def connection
      return @connection if @connection
      ActiveFedora.load_configs
      ActiveFedora::RubydoraConnection.connect(ActiveFedora.fedora_config[:url])
      @connection
    end
    

    def connect(force=false)
      return unless @connection.nil? or force
      allowable_options = [:url, :user, :password, :timeout, :open_timeout, :ssl_client_cert, :ssl_client_key]
      client_options = options.reject { |k,v| not allowable_options.include?(k) }
      @connection = Rubydora.connect client_options
    end

    def nextid(attrs={})
      d = REXML::Document.new(connection.next_pid(:namespace=>attrs[:namespace]))
      d.elements['//pid'].text
    end

    def find_model(pid, klass)
      klass.allocate.init_with(DigitalObject.find(klass, pid))
    end

  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
active-fedora-3.2.0 lib/active_fedora/rubydora_connection.rb
active-fedora-3.2.0.pre7 lib/active_fedora/rubydora_connection.rb
active-fedora-3.2.0.pre6 lib/active_fedora/rubydora_connection.rb
active-fedora-3.2.0.pre5 lib/active_fedora/rubydora_connection.rb
active-fedora-3.2.0.pre4 lib/active_fedora/rubydora_connection.rb