lib/ezid/client.rb in ezid-client-0.3.0 vs lib/ezid/client.rb in ezid-client-0.4.0
- old
+ new
@@ -1,13 +1,13 @@
-require_relative "api"
+require_relative "configuration"
require_relative "request"
require_relative "response"
-require_relative "metadata"
require_relative "session"
-require_relative "configuration"
+require_relative "metadata"
+require_relative "identifier"
require_relative "error"
-require_relative "logger"
+require_relative "status"
module Ezid
#
# EZID client
#
@@ -23,37 +23,13 @@
# Yields the configuration to a block
# @yieldparam [Ezid::Configuration] the configuration
def configure
yield config
end
-
- # Creates an new identifier
- # @see #create_identifier
- def create_identifier(*args)
- Client.new.create_identifier(*args)
- end
-
- # Mints a new identifier
- # @see #mint_identifier
- def mint_identifier(*args)
- Client.new.mint_identifier(*args)
- end
-
- # Retrieve the metadata for an identifier
- # @see #get_identifier_metadata
- def get_identifier_metadata(*args)
- Client.new.get_identifier_metadata(*args)
- end
-
- # Logs into EZID
- # @see #login
- def login
- Client.new.login
- end
end
- attr_reader :session, :user, :password
+ attr_reader :session, :user, :password # , :host
def initialize(opts = {})
@session = Session.new
@user = opts[:user] || config.user
@password = opts[:password] || config.password
@@ -63,44 +39,48 @@
logout
end
end
def inspect
- out = super
- out.sub!(/@password="[^\"]+"/, "@password=\"********\"")
- out.sub!(/@session=#<[^>]+>/, logged_in? ? "LOGGED_IN" : "")
- out
+ "#<#{self.class.name} user=\"#{user}\" session=#{logged_in? ? 'OPEN' : 'CLOSED'}>"
end
# The client configuration
# @return [Ezid::Configuration] the configuration object
def config
self.class.config
end
# The client logger
- # @return [Ezid::Logger] the logger
+ # @return [Logger] the logger
def logger
- @logger ||= Ezid::Logger.new(config.logger)
+ @logger ||= config.logger
end
# Open a session
+ # @raise [Ezid::Error]
# @return [Ezid::Client] the client
def login
if logged_in?
logger.info("Already logged in, skipping login request.")
else
- do_login
+ response = Request.execute(:Get, "/login") do |request|
+ add_authentication(request)
+ end
+ handle_response(response, "LOGIN")
+ session.open(response.cookie)
end
self
end
# Close the session
# @return [Ezid::Client] the client
def logout
if logged_in?
- do_logout
+ response = Request.execute(:Get, "/logout")
+ handle_response(response, "LOGOUT")
+ session.close
else
logger.info("Not logged in, skipping logout request.")
end
self
end
@@ -110,106 +90,96 @@
session.open?
end
# @param identifier [String] the identifier string to create
# @param metadata [String, Hash, Ezid::Metadata] optional metadata to set
+ # @raise [Ezid::Error]
# @return [Ezid::Response] the response
def create_identifier(identifier, metadata=nil)
- request = Request.new(:create_identifier, identifier)
- add_authentication(request)
- add_metadata(request, metadata)
- execute(request)
+ response = Request.execute(:Put, "/id/#{identifier}") do |request|
+ add_authentication(request)
+ add_metadata(request, metadata)
+ end
+ handle_response(response, "CREATE #{identifier}")
end
# @param shoulder [String] the shoulder on which to mint a new identifier
# @param metadata [String, Hash, Ezid::Metadata] metadata to set
+ # @raise [Ezid::Error]
# @return [Ezid::Response] the response
def mint_identifier(shoulder, metadata=nil)
- request = Request.new(:mint_identifier, shoulder)
- add_authentication(request)
- add_metadata(request, metadata)
- execute(request)
+ raise Error, "Shoulder missing -- cannot mint identifier." unless shoulder
+ response = Request.execute(:Post, "/shoulder/#{shoulder}") do |request|
+ add_authentication(request)
+ add_metadata(request, metadata)
+ end
+ handle_response(response, "MINT #{shoulder}")
end
# @param identifier [String] the identifier to modify
# @param metadata [String, Hash, Ezid::Metadata] metadata to set
+ # @raise [Ezid::Error]
# @return [Ezid::Response] the response
def modify_identifier(identifier, metadata)
- request = Request.new(:modify_identifier, identifier)
- add_authentication(request)
- add_metadata(request, metadata)
- execute(request)
+ response = Request.execute(:Post, "/id/#{identifier}") do |request|
+ add_authentication(request)
+ add_metadata(request, metadata)
+ end
+ handle_response(response, "MODIFY #{identifier}")
end
# @param identifier [String] the identifier to retrieve
+ # @raise [Ezid::Error]
# @return [Ezid::Response] the response
def get_identifier_metadata(identifier)
- request = Request.new(:get_identifier_metadata, identifier)
- add_authentication(request)
- execute(request)
+ response = Request.execute(:Get, "/id/#{identifier}") do |request|
+ add_authentication(request)
+ end
+ handle_response(response, "GET #{identifier}")
end
# @param identifier [String] the identifier to delete
+ # @raise [Ezid::Error]
# @return [Ezid::Response] the response
def delete_identifier(identifier)
- request = Request.new(:delete_identifier, identifier)
- add_authentication(request)
- execute(request)
+ response = Request.execute(:Delete, "/id/#{identifier}") do |request|
+ add_authentication(request)
+ end
+ handle_response(response, "DELETE #{identifier}")
end
# @param subsystems [Array]
- # @return [Ezid::Response] the response
+ # @raise [Ezid::Error]
+ # @return [Ezid::Status] the status response
def server_status(*subsystems)
- request = Request.new(:server_status, *subsystems)
- execute(request)
+ response = Request.execute(:Get, "/status?subsystems=#{subsystems.join(',')}")
+ handle_response(Status.new(response), "STATUS")
end
private
- def build_request(*args)
- request = Request.new(*args)
- end
+ # Adds authentication data to the request
+ def add_authentication(request)
+ if session.open?
+ request["Cookie"] = session.cookie
+ else
+ request.basic_auth(user, password)
+ end
+ end
- # Executes the request
- # @param request [Ezid::Request] the request
- # @raise [Ezid::Error] if the response status indicates an error
- # @return [Ezid::Response] the response
- def execute(request)
- response = Response.new(request.execute)
- logger.request_and_response(request, response)
- raise Error, response.message if response.error?
- response
- end
-
- # Adds metadata to the request
- def add_metadata(request, metadata)
- return if metadata.nil? || metadata.empty?
- metadata = Metadata.new(metadata) # copy/coerce
- request.add_metadata(metadata)
- end
-
- # Adds authentication to the request
- def add_authentication(request)
- if session.open?
- request.add_authentication(cookie: session.cookie)
- else
- request.add_authentication(user: user, password: password)
+ # Adds EZID metadata (if any) to the request body
+ def add_metadata(request, metadata)
+ return if metadata.nil? || metadata.empty?
+ metadata = Metadata.new(metadata) unless metadata.is_a?(Metadata)
+ request.body = metadata.to_anvl(false)
end
- end
- # Does the login
- def do_login
- request = Request.new(:login)
- add_authentication(request)
- response = execute(request)
- session.open(response)
- end
-
- # Does the logoug
- def do_logout
- request = Request.new(:logout)
- execute(request)
- session.close
- end
+ def handle_response(response, request_info)
+ log_level = response.error? ? Logger::ERROR : Logger::INFO
+ message = "EZID #{request_info} -- #{response.status_line}"
+ logger.log(log_level, message)
+ raise response.exception if response.exception
+ response
+ end
end
end