Class: Rubydora::Repository
- Inherits:
-
Object
- Object
- Rubydora::Repository
- Includes:
- ResourceIndex
- Defined in:
- lib/rubydora/repository.rb
Overview
Fedora Repository object that provides API access
Instance Attribute Summary collapse
- #api ⇒ Object
-
#config ⇒ Object
readonly
repository configuration (see #initialize).
Instance Method Summary collapse
-
#create(pid, options = {}) ⇒ Object
create a new fedora object (see also DigitalObject#save)
-
#driver ⇒ Object
Eventually driver can decide between Fc3Service and Fc4Service.
-
#find(pid) ⇒ Object
Find an existing Fedora object
- #find_or_initialize(pid) ⇒ Object
-
#initialize(options = {}, api = nil) ⇒ Repository
constructor
A new instance of Repository.
-
#ping ⇒ Object
Raise an error if unable to connect to the API endpoint.
-
#profile ⇒ Hash
repository profile (from API-A-LITE data).
-
#search(query, options = {}) {|DigitalObject| ... } ⇒ Object
High-level access to the Fedora find_objects API.
-
#version ⇒ Float
Repository version.
Methods included from ResourceIndex
#find_by_sparql, #find_by_sparql_relationship, #risearch, #sparql
Constructor Details
#initialize(options = {}, api = nil) ⇒ Repository
Returns a new instance of Repository.
34 35 36 37 38 |
# File 'lib/rubydora/repository.rb', line 34 def initialize( = {}, api = nil) @config = .symbolize_keys @api = api if api check_repository_version! end |
Instance Attribute Details
#api ⇒ Object
10 11 12 |
# File 'lib/rubydora/repository.rb', line 10 def api @api ||= driver.new(config) end |
#config ⇒ Object (readonly)
repository configuration (see #initialize)
27 28 29 |
# File 'lib/rubydora/repository.rb', line 27 def config @config end |
Instance Method Details
#create(pid, options = {}) ⇒ Object
create a new fedora object (see also DigitalObject#save)
82 83 84 |
# File 'lib/rubydora/repository.rb', line 82 def create(pid, = {}) DigitalObject.create(pid, = {}, self) end |
#driver ⇒ Object
Eventually driver can decide between Fc3Service and Fc4Service
15 16 17 |
# File 'lib/rubydora/repository.rb', line 15 def driver Fc3Service end |
#find(pid) ⇒ Object
Find an existing Fedora object
41 42 43 |
# File 'lib/rubydora/repository.rb', line 41 def find(pid) DigitalObject.find(pid, self) end |
#find_or_initialize(pid) ⇒ Object
45 46 47 |
# File 'lib/rubydora/repository.rb', line 45 def find_or_initialize(pid) DigitalObject.find_or_initialize(pid, self) end |
#ping ⇒ Object
Raise an error if unable to connect to the API endpoint
98 99 100 101 |
# File 'lib/rubydora/repository.rb', line 98 def ping raise "Unable to establish connection to Fedora Repository" unless profile true end |
#profile ⇒ Hash
repository profile (from API-A-LITE data)
88 89 90 |
# File 'lib/rubydora/repository.rb', line 88 def profile @profile ||= repository_profile end |
#search(query, options = {}) {|DigitalObject| ... } ⇒ Object
High-level access to the Fedora find_objects API
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/rubydora/repository.rb', line 54 def search(query, = {}, &block) return to_enum(:search, query, ).to_a unless block_given? sessionToken = nil doc = nil begin sessionOptions = {} sessionOptions[:sessionToken] = sessionToken unless sessionToken.nil? || sessionToken.blank? response = self.find_objects(.merge(:query => query, :resultFormat => 'xml', :pid => true).merge(sessionOptions)) doc = Nokogiri::XML(response) doc.xpath('//xmlns:objectFields/xmlns:pid', doc.namespaces).each do |pid| begin obj = self.find(pid.text) rescue RestClient::Unauthorized next end block.call(obj) end sessionToken = doc.xpath('//xmlns:listSession/xmlns:token', doc.namespaces).text end until sessionToken.nil? || sessionToken.empty? || doc.xpath('//xmlns:resultList/xmlns:objectFields', doc.namespaces).empty? end |
#version ⇒ Float
Returns repository version.
93 94 95 |
# File 'lib/rubydora/repository.rb', line 93 def version @version ||= repository_profile['repositoryVersion'].to_f rescue nil end |