Module: Rubydora::RestApiClient

Included in:
Repository
Defined in:
lib/rubydora/rest_api_client.rb,
lib/rubydora/rest_api_client/v33.rb

Overview

Provide low-level access to the Fedora Commons REST API

Defined Under Namespace

Modules: V33

Constant Summary collapse

API_DOCUMENTATION =

Fedora API documentation available at https://wiki.duraspace.org/display/FCR30/REST+API

'https://wiki.duraspace.org/display/FCR30/REST+API'

Instance Method Summary collapse

Instance Method Details

#add_datastream(options = {}) ⇒ String

Fedora API documentation available at https://wiki.duraspace.org/display/FCR30/REST+API

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :pid (String)
  • :dsid (String)

Returns:

  • (String)


151
152
153
154
155
156
157
# File 'lib/rubydora/rest_api_client.rb', line 151

def add_datastream options = {}
  pid = options.delete(:pid)
  dsid = options.delete(:dsid)
  file = options.delete(:content)
  content_type = options.delete(:content_type) || options[:mimeType] || (MIME::Types.type_for(file.path).first if file.respond_to? :path) || 'text/plain'
  client[datastream_url(pid, dsid, options)].post file, :content_type => content_type.to_s, :multipart => true
end

#add_relationship(options = {}) ⇒ String

Fedora API documentation available at https://wiki.duraspace.org/display/FCR30/REST+API

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :pid (String)

Returns:

  • (String)


198
199
200
201
# File 'lib/rubydora/rest_api_client.rb', line 198

def add_relationship options = {}
  pid = options.delete(:pid) || options[:subject]
  client[url_for(object_url(pid) + "/relationships/new", options)].post nil
end

#client(config = {}) ⇒ RestClient::Resource

Create an authorized HTTP client for the Fedora REST API

Parameters:

  • config (Hash) (defaults to: {})

Options Hash (config):

  • :url (String)
  • :user (String)
  • :password (String)

Returns:

  • (RestClient::Resource)


13
14
15
16
# File 'lib/rubydora/rest_api_client.rb', line 13

def client config = {}
  config = self.config.merge(config)
  @client ||= RestClient::Resource.new(config[:url], :user => config[:user], :password => config[:password], :timeout => config[:timeout], :open_timeout => config[:timeout])
end

#datastream(options = {}) ⇒ String Also known as: datastreams

Fedora API documentation available at https://wiki.duraspace.org/display/FCR30/REST+API

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :pid (String)
  • :dsid (String)

Returns:

  • (String)


101
102
103
104
105
106
# File 'lib/rubydora/rest_api_client.rb', line 101

def datastream options = {}
  pid = options.delete(:pid)
  dsid = options.delete(:dsid)
  options[:format] ||= 'xml'
  client[datastream_url(pid, dsid, options)].get
end

#datastream_dissemination(options = {}) ⇒ String

Fedora API documentation available at https://wiki.duraspace.org/display/FCR30/REST+API

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :pid (String)
  • :dsid (String)

Returns:

  • (String)


139
140
141
142
143
144
# File 'lib/rubydora/rest_api_client.rb', line 139

def datastream_dissemination options = {}
  pid = options.delete(:pid)
  dsid = options.delete(:dsid)
  raise "" unless dsid
  client[url_for(datastream_url(pid, dsid) + "/content", options)].get
end

#datastream_url(pid, dsid = nil, options = nil) ⇒ String

Generate a base datastream REST API endpoint URI

Parameters:

  • pid (String)
  • dsid (String) (defaults to: nil)
  • options (Hash) (defaults to: nil)

    to convert to URL parameters

Returns:

  • (String)

    URI



259
260
261
262
# File 'lib/rubydora/rest_api_client.rb', line 259

def datastream_url pid, dsid = nil, options = nil
  raise "" unless pid
  url_for(object_url(pid) + "/datastreams" + (("/#{CGI::escape(dsid)}" if dsid) || ''), options)
end

#datastream_versions(options = {}) ⇒ String

Fedora API documentation available at https://wiki.duraspace.org/display/FCR30/REST+API

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :pid (String)
  • :dsid (String)

Returns:

  • (String)

Raises:

  • (ArgumentError)


126
127
128
129
130
131
132
# File 'lib/rubydora/rest_api_client.rb', line 126

def datastream_versions options = {}
  pid = options.delete(:pid)
  dsid = options.delete(:dsid)
  raise ArgumentError, "Must supply dsid" unless dsid
  options[:format] ||= 'xml'
  client[url_for(datastream_url(pid, dsid) + "/versions", options)].get
end

#dissemination(options = {}) ⇒ String

Fedora API documentation available at https://wiki.duraspace.org/display/FCR30/REST+API

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :pid (String)
  • :sdef (String)
  • :method (String)

Returns:

  • (String)


218
219
220
221
222
223
224
# File 'lib/rubydora/rest_api_client.rb', line 218

def dissemination options = {}
  pid = options.delete(:pid)
  sdef = options.delete(:sdef)
  method = options.delete(:method)
  options[:format] ||= 'xml' unless pid and sdef and method
  client[dissemination_url(pid,sdef,method,options)].get
end

#dissemination_url(pid, sdef = nil, method = nil, options = nil) ⇒ String

Generate a base object dissemination REST API endpoint URI

Parameters:

  • pid (String)
  • sdef (String) (defaults to: nil)
  • method (String) (defaults to: nil)
  • options (Hash) (defaults to: nil)

    to convert to URL parameters

Returns:

  • (String)

    URI



249
250
251
252
# File 'lib/rubydora/rest_api_client.rb', line 249

def dissemination_url pid, sdef = nil, method = nil, options = nil
  raise "" unless pid
  url_for(object_url(pid) + "/methods" +  (("/#{CGI::escape(sdef)}" if sdef) || '') +  (("/#{CGI::escape(method)}" if method) || ''), options)
end

#find_objects(options = {}) ⇒ String

Fedora API documentation available at https://wiki.duraspace.org/display/FCR30/REST+API

Parameters:

  • options (Hash) (defaults to: {})

Returns:

  • (String)


29
30
31
32
33
34
# File 'lib/rubydora/rest_api_client.rb', line 29

def find_objects options = {}
  raise "" if options[:terms] and options[:query]
  options[:resultFormat] ||= 'xml'

  client[object_url(nil, options)].get
end

#ingest(options = {}) ⇒ String

Fedora API documentation available at https://wiki.duraspace.org/display/FCR30/REST+API

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :pid (String)

Returns:

  • (String)


50
51
52
53
54
# File 'lib/rubydora/rest_api_client.rb', line 50

def ingest options = {}
  pid = options.delete(:pid) || 'new'
  file = options.delete(:file)
  client[object_url(pid, options)].post file, :content_type => 'text/xml'
end

#modify_datastream(options = {}) ⇒ String

Fedora API documentation available at https://wiki.duraspace.org/display/FCR30/REST+API

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :pid (String)
  • :dsid (String)

Returns:

  • (String)


164
165
166
167
168
169
170
# File 'lib/rubydora/rest_api_client.rb', line 164

def modify_datastream options = {}
  pid = options.delete(:pid)
  dsid = options.delete(:dsid)
  file = options.delete(:content)
  content_type = options.delete(:content_type) || options[:mimeType] || (MIME::Types.type_for(file.path).first if file.respond_to? :path) || 'text/plain'
  client[datastream_url(pid, dsid, options)].put file, :content_type => content_type.to_s, :multipart => true
end

#modify_object(options = {}) ⇒ String

Fedora API documentation available at https://wiki.duraspace.org/display/FCR30/REST+API

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :pid (String)

Returns:

  • (String)


60
61
62
63
# File 'lib/rubydora/rest_api_client.rb', line 60

def modify_object options = {}
  pid = options.delete(:pid)
  client[object_url(pid, options)].put nil
end

#next_pid(options = {}) ⇒ String

Fedora API documentation available at https://wiki.duraspace.org/display/FCR30/REST+API

Parameters:

  • options (Hash) (defaults to: {})

Returns:

  • (String)


21
22
23
24
# File 'lib/rubydora/rest_api_client.rb', line 21

def next_pid options = {}
  options[:format] ||= 'xml'
  client[url_for(object_url() + "/nextPID", options)].post nil
end

#object(options = {}) ⇒ String

Fedora API documentation available at https://wiki.duraspace.org/display/FCR30/REST+API

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :pid (String)

Returns:

  • (String)


40
41
42
43
44
# File 'lib/rubydora/rest_api_client.rb', line 40

def object options = {}
  pid = options.delete(:pid)
  options[:format] ||= 'xml'
  client[object_url(pid, options)].get
end

#object_url(pid = nil, options = nil) ⇒ String

Generate a base object REST API endpoint URI

Parameters:

  • pid (String) (defaults to: nil)
  • options (Hash) (defaults to: nil)

    to convert to URL parameters

Returns:

  • (String)

    URI



239
240
241
# File 'lib/rubydora/rest_api_client.rb', line 239

def object_url pid = nil, options = nil
  url_for("objects" + (("/#{CGI::escape(pid.to_s.gsub('info:fedora/', ''))}" if pid) || ''), options)
end

#object_versions(options = {}) ⇒ String

Fedora API documentation available at https://wiki.duraspace.org/display/FCR30/REST+API

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :pid (String)

Returns:

  • (String)


78
79
80
81
82
83
# File 'lib/rubydora/rest_api_client.rb', line 78

def object_versions options = {}
  pid = options.delete(:pid)
  options[:format] ||= 'xml'
  raise "" unless pid
  client[url_for(object_url(pid) + "/versions", options)].get
end

#object_xml(options = {}) ⇒ String

Fedora API documentation available at https://wiki.duraspace.org/display/FCR30/REST+API

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :pid (String)

Returns:

  • (String)


89
90
91
92
93
94
# File 'lib/rubydora/rest_api_client.rb', line 89

def object_xml options = {}
  pid = options.delete(:pid)
  raise "" unless pid
  options[:format] ||= 'xml'
  client[url_for(object_url(pid) + "/objectXML", options)].get
end

#purge_datastream(options = {}) ⇒ String

Fedora API documentation available at https://wiki.duraspace.org/display/FCR30/REST+API

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :pid (String)
  • :dsid (String)

Returns:

  • (String)


177
178
179
180
181
# File 'lib/rubydora/rest_api_client.rb', line 177

def purge_datastream options = {}
  pid = options.delete(:pid)
  dsid = options.delete(:dsid)
  client[datastream_url(pid, dsid, options)].delete
end

#purge_object(options = {}) ⇒ String

Fedora API documentation available at https://wiki.duraspace.org/display/FCR30/REST+API

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :pid (String)

Returns:

  • (String)


69
70
71
72
# File 'lib/rubydora/rest_api_client.rb', line 69

def purge_object options = {}
  pid = options.delete(:pid)
  client[object_url(pid, options)].delete
end

#purge_relationship(options = {}) ⇒ String

Fedora API documentation available at https://wiki.duraspace.org/display/FCR30/REST+API

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :pid (String)

Returns:

  • (String)


207
208
209
210
# File 'lib/rubydora/rest_api_client.rb', line 207

def purge_relationship options = {}
  pid = options.delete(:pid) || options[:subject]
  client[url_for(object_url(pid) + "/relationships", options)].delete
end

#relationships(options = {}) ⇒ String

Fedora API documentation available at https://wiki.duraspace.org/display/FCR30/REST+API

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :pid (String)

Returns:

  • (String)


187
188
189
190
191
192
# File 'lib/rubydora/rest_api_client.rb', line 187

def relationships options = {}
  pid = options.delete(:pid) || options[:subject]
  raise "" unless pid
  options[:format] ||= 'xml'
  client[url_for(object_url(pid) + "/relationships", options)].get
end

#set_datastream_options(options = {}) ⇒ String

Fedora API documentation available at https://wiki.duraspace.org/display/FCR30/REST+API

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :pid (String)
  • :dsid (String)

Returns:

  • (String)


115
116
117
118
119
# File 'lib/rubydora/rest_api_client.rb', line 115

def set_datastream_options options = {}
  pid = options.delete(:pid)
  dsid = options.delete(:dsid)
  client[datastream_url(pid, dsid, options)].put nil
end

#url_for(base, options = nil) ⇒ String

Generate a REST API compatible URI

Parameters:

  • base (String)

    base URI

  • options (Hash) (defaults to: nil)

    to convert to URL parameters

Returns:

  • (String)

    URI



230
231
232
233
# File 'lib/rubydora/rest_api_client.rb', line 230

def url_for base, options = nil
  return base unless options.is_a? Hash
  "#{base}" + (("?#{options.map { |key, value|  "#{CGI::escape(key.to_s)}=#{CGI::escape(value.to_s)}"}.join("&")  }" if options and not options.empty?) || '')
end