lib/ezid/response.rb in ezid-client-0.3.0 vs lib/ezid/response.rb in ezid-client-0.4.0

- old
+ new

@@ -2,75 +2,89 @@ module Ezid # # A response from the EZID service. # - # @note A Response should only be created by an Ezid::Client instance. # @api private class Response < SimpleDelegator # Success response status SUCCESS = "success" # Error response status ERROR = "error" + IDENTIFIER_RE = /^(doi|ark|urn):[^\s]+/ + SHADOW_ARK_RE = /\| (ark:[^\s]+)/ + + def id + @id ||= IDENTIFIER_RE.match(message)[0] + end + + def shadow_ark + @shadow_ark ||= SHADOW_ARK_RE.match(message)[1] + end + + def metadata + content[1] + end + # The response status -- "success" or "error" # @return [String] the status def status @status ||= status_line.split(/: /) end # The status line of the response # @return [String] the status line def status_line - content.first + content[0] end # The body of the response split into: status line and rest of body # @return [Array] status line, rest of body def content @content ||= body.split(/\r?\n/, 2) end - # Metadata (if any) parsed out of the response - # @return [Ezid::Metadata] the metadata - def metadata - return @metadata if @metadata - if success? && identifier_uri? - @metadata = Metadata.new(content.last) - end - @metadata - end - - # The identifier string parsed out of the response - # @return [String] the identifier - def identifier - message.split(/\s/).first if success? && identifier_uri? - end - - def identifier_uri? - ( uri.path =~ /^\/(id|shoulder)\// ) && true - end - + # The outcome of the request - "success" or "error" + # @return [String] the outcome def outcome status.first end + # The EZID status message + # @return [String] the message def message status.last end - def cookie - self["Set-Cookie"].split(";").first rescue nil - end - + # Whether the outcome was an error + # @return [Boolean] def error? outcome == ERROR end + # Whether the outcome was a success + # @return [Boolean] def success? outcome == SUCCESS + end + + # Returns an exception instance if there was an error + # @return [Ezid::Error] the exception + def exception + @exception ||= (error? && Error.new(message)) + end + + # The URI path of the request + # @return [String] the path + def uri_path + __getobj__.uri.path + end + + def cookie + self["Set-Cookie"].split(";").first rescue nil end end end