class Ezid::ApiSession
Constants
- APIVERSION
- PRIVATE
- PUBLIC
- SCHEMES
- SECURESERVER
- TESTMETADATA
- TESTPASSWORD
- TESTSHOULDER
- TESTUSERNAME
- UNAVAIL
- VERSION
Attributes
naa[RW]
password[RW]
scheme[R]
username[RW]
Public Class Methods
new(username = TESTUSERNAME, password = TESTPASSWORD, scheme = :ark, naa = '')
click to toggle source
# File lib/ezid/apisession.rb, line 29 def initialize(username = TESTUSERNAME, password = TESTPASSWORD, scheme = :ark, naa = '') if username == TESTUSERNAME password = TESTPASSWORD @test = true else @test = false end @user = username @pass = password @scheme = SCHEMES[scheme] @naa = naa @naa = TESTSHOULDER[@scheme] if @test == true self end
Public Instance Methods
build_identifier(identifier)
click to toggle source
# File lib/ezid/apisession.rb, line 68 def build_identifier(identifier) unless identifier.start_with?(ApiSession::SCHEMES[:ark]) || identifier.start_with?(ApiSession::SCHEMES[:doi]) identifier = @scheme + @naa + identifier end identifier end
create(identifier, metadata = {})
click to toggle source
# File lib/ezid/apisession.rb, line 56 def create(identifier, metadata = {}) metadata = transform_metadata(metadata) request_uri = '/id/' + build_identifier(identifier) request = call_api(request_uri, :put, metadata) request.errored? ? request : get(request) end
delete(identifier)
click to toggle source
# File lib/ezid/apisession.rb, line 85 def delete(identifier) request_uri = '/id/' + identifier call_api(request_uri, :delete) end
get(identifier)
click to toggle source
# File lib/ezid/apisession.rb, line 76 def get(identifier) identifier = identifier.to_str identifier = identifier.split(' | ')[0] if identifier.include?('| ark:/') request_uri = '/id/' + identifier request = call_api(request_uri, :get) return request if request.errored? Ezid::Record.new(self, request.response['identifier'], request.response['metadata'], true) end
mint(metadata = {})
click to toggle source
# File lib/ezid/apisession.rb, line 46 def mint(metadata = {}) shoulder = @scheme + @naa metadata['_status'] = PRIVATE request_uri = "/shoulder/#{shoulder}" request = call_api(request_uri, :post, metadata) return request if request.errored? get(request) end
record_modify(identifier, metadata, clear = false)
click to toggle source
public utility methods
# File lib/ezid/apisession.rb, line 92 def record_modify(identifier, metadata, clear = false) if clear # TODO: clear old metadata end metadata.each do |name, value| modify(identifier, name, value) end get(identifier) end
scheme=(scheme)
click to toggle source
# File lib/ezid/apisession.rb, line 102 def scheme=(scheme) @scheme = SCHEMES[scheme] @naa = TESTSHOULDER[@scheme] if @test == true @scheme end
transform_metadata(metadata)
click to toggle source
# File lib/ezid/apisession.rb, line 63 def transform_metadata(metadata) metadata['_status'] = PRIVATE unless metadata['_status'] metadata end
Private Instance Methods
call_api(request_uri, request_method, request_data = nil)
click to toggle source
# File lib/ezid/apisession.rb, line 110 def call_api(request_uri, request_method, request_data = nil) uri = URI(SECURESERVER + request_uri) # which HTTP method to use? if request_method == :get request = Net::HTTP::Get.new uri.request_uri elsif request_method == :put request = Net::HTTP::Put.new uri.request_uri request.body = make_anvl(request_data) elsif request_method == :post request = Net::HTTP::Post.new uri.request_uri request.body = make_anvl(request_data) elsif request_method == :delete request = Net::HTTP::Delete.new uri.request_uri end request.basic_auth @user, @pass request.add_field('Content-Type', 'text/plain; charset=UTF-8') # Make the call result = Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http| parse_record http.request(request).body end Ezid::ServerResponse.new(result) end
escape(s)
click to toggle source
# File lib/ezid/apisession.rb, line 153 def escape(s) URI.escape(s, /[%:\n\r]/) end
make_anvl(metadata)
click to toggle source
# File lib/ezid/apisession.rb, line 152 def make_anvl(metadata) def escape(s) URI.escape(s, /[%:\n\r]/) end anvl = '' metadata.each do |n, v| anvl += escape(n.to_s) + ': ' + escape(v.to_s) + "\n" end # remove last newline. there is probably a really good way to # avoid adding it in the first place. if you know it, please fix. anvl.strip.encode!('UTF-8') end
parse_record(ezid_response)
click to toggle source
# File lib/ezid/apisession.rb, line 136 def parse_record(ezid_response) parts = ezid_response.split("\n") identifier = parts[0].split(': ')[1] metadata = {} if parts.length > 1 parts[1..-1].each do |p| pair = p.split(': ') metadata[pair[0]] = pair[1] end record = { 'identifier' => identifier, 'metadata' => metadata } else record = identifier end record end