active-fedora 7.0.0.pre2 → 7.0.0.pre3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +0 -7
- data/active-fedora.gemspec +2 -2
- data/lib/active_fedora/associations/builder/belongs_to.rb +1 -0
- data/lib/active_fedora/associations/has_many_association.rb +3 -2
- data/lib/active_fedora/core.rb +9 -0
- data/lib/active_fedora/datastream.rb +13 -0
- data/lib/active_fedora/datastream_attribute.rb +10 -9
- data/lib/active_fedora/datastream_hash.rb +7 -0
- data/lib/active_fedora/datastreams.rb +1 -1
- data/lib/active_fedora/indexing.rb +1 -2
- data/lib/active_fedora/om_datastream.rb +9 -1
- data/lib/active_fedora/persistence.rb +2 -5
- data/lib/active_fedora/querying.rb +5 -1
- data/lib/active_fedora/rdf/indexing.rb +18 -10
- data/lib/active_fedora/relation/finder_methods.rb +5 -5
- data/lib/active_fedora/rels_ext_datastream.rb +4 -24
- data/lib/active_fedora/semantic_node.rb +24 -9
- data/lib/active_fedora/solr_instance_loader.rb +1 -7
- data/lib/active_fedora/solr_service.rb +106 -98
- data/lib/active_fedora/version.rb +1 -1
- data/lib/generators/active_fedora/config/solr/templates/solr_conf/conf/schema.xml +5 -0
- data/lib/generators/active_fedora/config/solr/templates/solr_conf/conf/solrconfig.xml +51 -0
- data/spec/integration/has_many_associations_spec.rb +7 -0
- data/spec/integration/scoped_query_spec.rb +1 -1
- data/spec/integration/solr_service_spec.rb +6 -6
- data/spec/unit/base_extra_spec.rb +4 -4
- data/spec/unit/base_spec.rb +2 -2
- data/spec/unit/core_spec.rb +77 -0
- data/spec/unit/ntriples_datastream_spec.rb +4 -4
- data/spec/unit/om_datastream_spec.rb +40 -4
- data/spec/unit/query_spec.rb +19 -19
- data/spec/unit/rels_ext_datastream_spec.rb +3 -2
- data/spec/unit/solr_config_options_spec.rb +1 -4
- data/spec/unit/solr_service_spec.rb +7 -1
- metadata +10 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 326d249cd4fae27ff020852f7f76213ebc79f29f
|
4
|
+
data.tar.gz: 4a71080c33394383361845919afe864472eedf27
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0191dcb8e84050abc5869f1ec0d5003195774421929e1ddb8e7f31d461eca505458af240f3ca9f4eefee323c62d819bf34b8cf9a12fdbf1c118ce4ab5c9040c2
|
7
|
+
data.tar.gz: 21202208679bb2bd1982377c60a597ab07bc70923d68bedeb31e45476e1b984b530e80e6d44357a2b567ffb83badc7a04bbd3f1a90079aa3be4ea5e340ac6fdb
|
data/.travis.yml
CHANGED
@@ -4,11 +4,6 @@ rvm:
|
|
4
4
|
- 2.0.0
|
5
5
|
- 1.9.3
|
6
6
|
|
7
|
-
matrix:
|
8
|
-
allow_failures:
|
9
|
-
- rvm: 2.1.0
|
10
|
-
|
11
|
-
|
12
7
|
gemfile:
|
13
8
|
- gemfiles/rails3.gemfile
|
14
9
|
- gemfiles/rails4.gemfile
|
@@ -16,8 +11,6 @@ gemfile:
|
|
16
11
|
notifications:
|
17
12
|
irc: "irc.freenode.org#projecthydra"
|
18
13
|
|
19
|
-
before_install:
|
20
|
-
- gem install bundler
|
21
14
|
env:
|
22
15
|
global:
|
23
16
|
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true
|
data/active-fedora.gemspec
CHANGED
@@ -14,12 +14,12 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.license = "APACHE2"
|
15
15
|
s.required_ruby_version = '>= 1.9.3'
|
16
16
|
|
17
|
-
s.add_dependency('rsolr')
|
17
|
+
s.add_dependency('rsolr', "~> 1.0.10.pre1")
|
18
18
|
s.add_dependency('om', '~> 3.0.0')
|
19
19
|
s.add_dependency('nom-xml', '>=0.5.1')
|
20
20
|
s.add_dependency("activesupport", '>= 3.0.0')
|
21
21
|
s.add_dependency("mediashelf-loggable")
|
22
|
-
s.add_dependency("rubydora", '~>1.7.0
|
22
|
+
s.add_dependency("rubydora", '~>1.7.0')
|
23
23
|
s.add_dependency("rdf")
|
24
24
|
s.add_dependency("rdf-rdfxml", '~>1.1.0')
|
25
25
|
s.add_dependency("deprecation")
|
@@ -93,6 +93,7 @@ module ActiveFedora::Associations::Builder
|
|
93
93
|
writer_name = "#{name}_id"
|
94
94
|
model.find_or_create_defined_attribute(writer_name, 'RELS-EXT', {})
|
95
95
|
mixin.redefine_method("#{writer_name}=") do |id|
|
96
|
+
raise "can't modify frozen #{self.class}" if self.frozen?
|
96
97
|
association(name).id_writer(id)
|
97
98
|
end
|
98
99
|
end
|
@@ -55,7 +55,6 @@ module ActiveFedora
|
|
55
55
|
inverse = reflection.inverse_of.name
|
56
56
|
records.each do |record|
|
57
57
|
if record.persisted?
|
58
|
-
record.reload
|
59
58
|
assoc = record.association(inverse)
|
60
59
|
if assoc.reflection.collection?
|
61
60
|
# Remove from a has_and_belongs_to_many
|
@@ -64,7 +63,9 @@ module ActiveFedora
|
|
64
63
|
# Remove from a belongs_to
|
65
64
|
record.association(inverse).id_writer(nil)
|
66
65
|
end
|
67
|
-
|
66
|
+
# Check to see if the object still exists (may be already deleted).
|
67
|
+
# In Rails, they do this with an update_all to avoid callbacks and validations, we may need the same.
|
68
|
+
record.save! if record.class.exists?(record.pid)
|
68
69
|
end
|
69
70
|
end
|
70
71
|
end
|
data/lib/active_fedora/core.rb
CHANGED
@@ -2,6 +2,7 @@ module ActiveFedora
|
|
2
2
|
|
3
3
|
#This class represents a Fedora datastream
|
4
4
|
class Datastream < Rubydora::Datastream
|
5
|
+
extend Deprecation
|
5
6
|
attr_writer :digital_object
|
6
7
|
attr_accessor :last_modified
|
7
8
|
|
@@ -73,6 +74,18 @@ module ActiveFedora
|
|
73
74
|
def to_solr(solr_doc = Hash.new)
|
74
75
|
solr_doc
|
75
76
|
end
|
77
|
+
|
78
|
+
protected
|
79
|
+
# The string to prefix all solr fields with. Override this method if you want
|
80
|
+
# a prefix other than the default
|
81
|
+
def prefix
|
82
|
+
raise RuntimeError, "to_solr requires the dsid to be set" unless dsid
|
83
|
+
Deprecation.warn ActiveFedora::Datastream, "In active-fedora 8 the solr fields created by #{self.class} will be prefixed with \"#{dsid.underscore}__\". If you want to maintain the existing behavior, you must override #{self.class}.#prefix to return an empty string"
|
84
|
+
# In ActiveFedora 8 return this:
|
85
|
+
#"#{dsid.underscore}__"
|
86
|
+
""
|
87
|
+
end
|
88
|
+
|
76
89
|
end
|
77
90
|
|
78
91
|
class DatastreamConcurrencyException < Exception # :nodoc:
|
@@ -2,12 +2,12 @@ module ActiveFedora
|
|
2
2
|
# Represents the mapping between a model attribute and a field in a datastream
|
3
3
|
class DatastreamAttribute
|
4
4
|
|
5
|
-
attr_accessor :dsid, :field, :
|
5
|
+
attr_accessor :dsid, :field, :datastream_class, :at, :reader, :writer, :multiple
|
6
6
|
|
7
|
-
def initialize(field, dsid,
|
7
|
+
def initialize(field, dsid, datastream_class, args={})
|
8
8
|
self.field = field
|
9
9
|
self.dsid = dsid
|
10
|
-
self.
|
10
|
+
self.datastream_class = datastream_class
|
11
11
|
self.multiple = args[:multiple].nil? ? false : args[:multiple]
|
12
12
|
self.at = args[:at]
|
13
13
|
|
@@ -17,18 +17,19 @@ module ActiveFedora
|
|
17
17
|
|
18
18
|
# Gives the primary solr name for a column. If there is more than one indexer on the field definition, it gives the first
|
19
19
|
def primary_solr_name
|
20
|
-
|
21
|
-
|
20
|
+
@datastream ||= datastream_class.new(nil, dsid)
|
21
|
+
if @datastream.respond_to?(:primary_solr_name)
|
22
|
+
@datastream.primary_solr_name(field)
|
22
23
|
else
|
23
|
-
raise IllegalOperation, "the
|
24
|
+
raise IllegalOperation, "the datastream '#{datastream_class}' doesn't respond to 'primary_solr_name'"
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
27
28
|
def type
|
28
|
-
if
|
29
|
-
|
29
|
+
if datastream_class.respond_to?(:type)
|
30
|
+
datastream_class.type(field)
|
30
31
|
else
|
31
|
-
raise IllegalOperation, "the
|
32
|
+
raise IllegalOperation, "the datastream '#{datastream_class}' doesn't respond to 'type'"
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
@@ -175,7 +175,7 @@ module ActiveFedora
|
|
175
175
|
|
176
176
|
module ClassMethods
|
177
177
|
# @param [String] dsid the datastream id
|
178
|
-
# @
|
178
|
+
# @return [Class] the class of the datastream
|
179
179
|
def datastream_class_for_name(dsid)
|
180
180
|
ds_specs[dsid] ? ds_specs[dsid].fetch(:type, ActiveFedora::Datastream) : ActiveFedora::Datastream
|
181
181
|
end
|
@@ -17,7 +17,7 @@ module ActiveFedora
|
|
17
17
|
alias_method(:om_update_values, :update_values) unless method_defined?(:om_update_values)
|
18
18
|
|
19
19
|
attr_accessor :internal_solr_doc
|
20
|
-
|
20
|
+
|
21
21
|
def self.default_attributes
|
22
22
|
super.merge(:controlGroup => 'M', :mimeType => 'text/xml')
|
23
23
|
end
|
@@ -168,6 +168,13 @@ module ActiveFedora
|
|
168
168
|
@internal_solr_doc = solr_doc
|
169
169
|
end
|
170
170
|
|
171
|
+
# Return a hash suitable for indexing in solr. Every field name is prefixed with the
|
172
|
+
# value returned by the +prefix+ method.
|
173
|
+
def to_solr(solr_doc = {})
|
174
|
+
prefix = self.prefix
|
175
|
+
super.each_with_object({}) { |(key, value), new| new[[prefix,key].join] = value }
|
176
|
+
end
|
177
|
+
|
171
178
|
|
172
179
|
# ** Experimental **
|
173
180
|
# This method is called by +get_values+ if this datastream has been initialized by calling from_solr method via
|
@@ -394,6 +401,7 @@ module ActiveFedora
|
|
394
401
|
# ds.update_values( {[{":person"=>"0"}, "role", "text"]=>{"0"=>"role1", "1"=>"role2", "2"=>"role3"}, [{:person=>1}, :family_name]=>"Andronicus", [{"person"=>"1"},:given_name]=>["Titus"],[{:person=>1},:role,:text]=>["otherrole1","otherrole2"] } )
|
395
402
|
# => {"person_0_role_text"=>{"0"=>"role1", "1"=>"role2", "2"=>"role3"}, "person_1_role_text"=>{"0"=>"otherrole1", "1"=>"otherrole2"}}
|
396
403
|
def update_values(params={})
|
404
|
+
raise "can't modify frozen #{self.class}" if frozen?
|
397
405
|
if @internal_solr_doc
|
398
406
|
raise "No update performed, this object was initialized via Solr instead of Fedora and is therefore read-only. Please utilize ActiveFedora::Base.find to first load object via Fedora instead."
|
399
407
|
else
|
@@ -20,7 +20,7 @@ module ActiveFedora
|
|
20
20
|
|
21
21
|
## Required by associations
|
22
22
|
def new_record?
|
23
|
-
inner_object.
|
23
|
+
inner_object.new_record?
|
24
24
|
end
|
25
25
|
|
26
26
|
def persisted?
|
@@ -73,8 +73,6 @@ module ActiveFedora
|
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
76
|
-
|
77
|
-
#Fedora::Repository.instance.delete(@inner_object)
|
78
76
|
pid = self.pid ## cache so it's still available after delete
|
79
77
|
begin
|
80
78
|
@inner_object.delete
|
@@ -83,8 +81,7 @@ module ActiveFedora
|
|
83
81
|
end
|
84
82
|
if ENABLE_SOLR_UPDATES
|
85
83
|
solr = ActiveFedora::SolrService.instance.conn
|
86
|
-
solr.delete_by_id(pid)
|
87
|
-
solr.commit
|
84
|
+
solr.delete_by_id(pid, params: {'softCommit' => true})
|
88
85
|
end
|
89
86
|
@destroyed = true
|
90
87
|
freeze
|
@@ -1,5 +1,8 @@
|
|
1
1
|
module ActiveFedora
|
2
2
|
module Querying
|
3
|
+
extend Deprecation
|
4
|
+
self.deprecation_horizon = 'active-fedora version 8.0.0'
|
5
|
+
|
3
6
|
delegate :find, :first, :exists?, :where, :limit, :order, :delete_all,
|
4
7
|
:destroy_all, :count, :last, :find_with_conditions, :find_in_batches, :find_each, :to=>:all
|
5
8
|
|
@@ -13,7 +16,8 @@ module ActiveFedora
|
|
13
16
|
end
|
14
17
|
|
15
18
|
def quote_for_solr(value)
|
16
|
-
|
19
|
+
RSolr.escape(value)
|
17
20
|
end
|
21
|
+
deprecation_deprecate :quote_for_solr
|
18
22
|
end
|
19
23
|
end
|
@@ -1,10 +1,17 @@
|
|
1
1
|
module ActiveFedora
|
2
2
|
module Rdf
|
3
3
|
module Indexing
|
4
|
+
extend Deprecation
|
4
5
|
extend ActiveSupport::Concern
|
5
6
|
|
7
|
+
# In active_fedora 8, we can get the prefix part from Datastream.prefix
|
8
|
+
def apply_prefix(name)
|
9
|
+
"#{dsid.underscore}__#{name}"
|
10
|
+
end
|
11
|
+
|
6
12
|
def prefix(name)
|
7
|
-
|
13
|
+
Deprecation.warn Indexing, "prefix is deprecated. Use apply_prefix instead. In active-fedora 8, the prefix method will just return the prefix to be applied, and will not do the applying. This will enable conformity between OmDatastream and RdfDatastream"
|
14
|
+
apply_prefix(name)
|
8
15
|
end
|
9
16
|
|
10
17
|
def to_solr(solr_doc = Hash.new) # :nodoc:
|
@@ -12,26 +19,27 @@ module ActiveFedora
|
|
12
19
|
values = get_values(rdf_subject, field_key)
|
13
20
|
Array(values).each do |val|
|
14
21
|
val = val.to_s if val.kind_of? RDF::URI
|
15
|
-
Solrizer.insert_field(solr_doc,
|
22
|
+
Solrizer.insert_field(solr_doc, apply_prefix(field_key), val, *field_info[:behaviors])
|
16
23
|
end
|
17
24
|
end
|
18
25
|
solr_doc
|
19
26
|
end
|
20
27
|
|
28
|
+
# Gives the primary solr name for a column. If there is more than one indexer on the field definition, it gives the first
|
29
|
+
def primary_solr_name(field)
|
30
|
+
config = self.class.config_for_term_or_uri(field)
|
31
|
+
if behaviors = config.behaviors
|
32
|
+
ActiveFedora::SolrService.solr_name(apply_prefix(field), behaviors.first, type: config.type)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
21
36
|
|
22
37
|
module ClassMethods
|
23
38
|
def prefix(dsid, name)
|
39
|
+
Deprecation.warn Indexing, "prefix is deprecated and will be removed in active-fedora 8.0.0.", caller
|
24
40
|
"#{dsid.underscore}__#{name}".to_sym
|
25
41
|
end
|
26
42
|
|
27
|
-
# Gives the primary solr name for a column. If there is more than one indexer on the field definition, it gives the first
|
28
|
-
def primary_solr_name(dsid, field)
|
29
|
-
config = config_for_term_or_uri(field)
|
30
|
-
if behaviors = config.behaviors
|
31
|
-
ActiveFedora::SolrService.solr_name(prefix(dsid, field), behaviors.first, type: config.type)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
43
|
# Gives the datatype for a column.
|
36
44
|
def type(field)
|
37
45
|
config_for_term_or_uri(field).type
|
@@ -151,8 +151,9 @@ module ActiveFedora
|
|
151
151
|
if where_values.empty?
|
152
152
|
load_from_fedora(pid, cast)
|
153
153
|
else
|
154
|
-
query = ActiveFedora::SolrService.construct_query_for_rel(where_values)
|
155
|
-
|
154
|
+
query = [ActiveFedora::SolrService.construct_query_for_rel(where_values),
|
155
|
+
ActiveFedora::SolrService.raw_query(SOLR_DOCUMENT_ID, pid)].
|
156
|
+
join(" AND ".freeze)
|
156
157
|
to_enum(:find_each, query, {}).to_a.first
|
157
158
|
end
|
158
159
|
end
|
@@ -218,11 +219,10 @@ module ActiveFedora
|
|
218
219
|
if value.empty?
|
219
220
|
"-#{key}:['' TO *]"
|
220
221
|
elsif value.is_a? Array
|
221
|
-
value.map { |val| "#{key}:#{
|
222
|
+
value.map { |val| "#{key}:#{RSolr.escape(val)}" }
|
222
223
|
else
|
223
224
|
key = SOLR_DOCUMENT_ID if (key === :id || key === :pid)
|
224
|
-
|
225
|
-
key.to_s.eql?(SOLR_DOCUMENT_ID) ? "#{key}:#{escaped_value}" : "#{key}:#{escaped_value}"
|
225
|
+
"#{key}:#{RSolr.escape(value)}"
|
226
226
|
end
|
227
227
|
end
|
228
228
|
end
|
@@ -13,7 +13,7 @@ module ActiveFedora
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def changed?
|
16
|
-
relationships_are_dirty? or super
|
16
|
+
model.relationships_are_dirty? or super
|
17
17
|
end
|
18
18
|
|
19
19
|
def metadata?
|
@@ -21,22 +21,10 @@ module ActiveFedora
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def serialize!
|
24
|
-
self.content = to_rels_ext() if relationships_are_dirty?
|
25
|
-
model.
|
24
|
+
self.content = to_rels_ext() if model.relationships_are_dirty?
|
25
|
+
model.relationships_are_not_dirty!
|
26
26
|
end
|
27
27
|
|
28
|
-
def relationships_are_dirty?
|
29
|
-
model.relationships_are_dirty if model
|
30
|
-
end
|
31
|
-
|
32
|
-
def relationships_are_dirty!
|
33
|
-
model.relationships_are_dirty = true
|
34
|
-
end
|
35
|
-
|
36
|
-
def relationships_are_not_dirty!
|
37
|
-
model.relationships_are_dirty = false
|
38
|
-
end
|
39
|
-
|
40
28
|
# Populate a RelsExtDatastream object based on the "datastream" content
|
41
29
|
# Assumes that the datastream contains RDF XML from a Fedora RELS-EXT datastream
|
42
30
|
# @param [String] xml the "rdf" node
|
@@ -46,15 +34,7 @@ module ActiveFedora
|
|
46
34
|
### maybe put the template here?
|
47
35
|
else
|
48
36
|
ensure_predicates_exist!(xml)
|
49
|
-
|
50
|
-
reader.each_statement do |statement|
|
51
|
-
literal = statement.object.kind_of?(RDF::Literal)
|
52
|
-
object = literal ? statement.object.value : statement.object.to_str
|
53
|
-
tmpl.model.add_relationship(statement.predicate, object, literal)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
tmpl.relationships_are_not_dirty!
|
57
|
-
tmpl.changed_attributes.clear
|
37
|
+
tmpl.model.relationships = xml
|
58
38
|
tmpl
|
59
39
|
end
|
60
40
|
end
|
@@ -19,12 +19,27 @@ module ActiveFedora
|
|
19
19
|
load_relationships if !relationships_loaded
|
20
20
|
@object_relations ||= RelationshipGraph.new
|
21
21
|
end
|
22
|
-
|
23
|
-
def relationships_are_dirty
|
22
|
+
|
23
|
+
def relationships_are_dirty?
|
24
24
|
object_relations.dirty
|
25
25
|
end
|
26
|
-
|
27
|
-
|
26
|
+
alias relationships_are_dirty relationships_are_dirty?
|
27
|
+
|
28
|
+
def relationships_are_not_dirty!
|
29
|
+
object_relations.dirty = false
|
30
|
+
end
|
31
|
+
|
32
|
+
def relationships=(xml)
|
33
|
+
RDF::RDFXML::Reader.new(xml) do |reader|
|
34
|
+
reader.each_statement do |statement|
|
35
|
+
literal = statement.object.kind_of?(RDF::Literal)
|
36
|
+
object = literal ? statement.object.value : statement.object.to_str
|
37
|
+
object_relations.add(statement.predicate, object, literal)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
# Adding the relationships to the graph causes the graph to be marked as dirty,
|
41
|
+
# so now we assert that the graph is in sync
|
42
|
+
relationships_are_not_dirty!
|
28
43
|
end
|
29
44
|
|
30
45
|
# Add a relationship to the Object.
|
@@ -80,7 +95,7 @@ module ActiveFedora
|
|
80
95
|
# @param obj Either a string URI or an object that responds to .pid
|
81
96
|
def remove_relationship(predicate, obj, literal=false)
|
82
97
|
object_relations.delete(predicate, obj)
|
83
|
-
|
98
|
+
object_relations.dirty = true
|
84
99
|
rels_ext.content_will_change!
|
85
100
|
end
|
86
101
|
|
@@ -111,14 +126,14 @@ module ActiveFedora
|
|
111
126
|
end
|
112
127
|
end
|
113
128
|
|
114
|
-
# @
|
129
|
+
# @return [String] the internal fedora URI
|
115
130
|
def internal_uri
|
116
131
|
self.class.internal_uri(pid)
|
117
132
|
end
|
118
133
|
|
119
134
|
module ClassMethods
|
120
135
|
# @param [String,Array] uris a single uri (as a string) or a list of uris to convert to pids
|
121
|
-
# @
|
136
|
+
# @return [String] the pid component of the URI
|
122
137
|
def pids_from_uris(uris)
|
123
138
|
Deprecation.warn(SemanticNode, "pids_from_uris has been deprecated and will be removed in active-fedora 8.0.0", caller)
|
124
139
|
if uris.kind_of? String
|
@@ -145,13 +160,13 @@ module ActiveFedora
|
|
145
160
|
end
|
146
161
|
|
147
162
|
# @param [String] pid the fedora object identifier
|
148
|
-
# @
|
163
|
+
# @return [String] a URI represented as a string
|
149
164
|
def internal_uri(pid)
|
150
165
|
"info:fedora/#{pid}"
|
151
166
|
end
|
152
167
|
|
153
168
|
# @param [String] uri a uri (as a string)
|
154
|
-
# @
|
169
|
+
# @return [String] the pid component of the URI
|
155
170
|
def pid_from_uri(uri)
|
156
171
|
uri.gsub("info:fedora/", "")
|
157
172
|
end
|