active-fedora 7.0.1 → 7.0.2
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.
- data/lib/active_fedora/associations/belongs_to_association.rb +1 -1
- data/lib/active_fedora/associations/collection_proxy.rb +5 -0
- data/lib/active_fedora/associations/has_many_association.rb +1 -1
- data/lib/active_fedora/datastream_collections.rb +5 -2
- data/lib/active_fedora/rdf/identifiable.rb +5 -1
- data/lib/active_fedora/rdf/list.rb +1 -0
- data/lib/active_fedora/rdf/node_config.rb +15 -0
- data/lib/active_fedora/rdf/properties.rb +6 -20
- data/lib/active_fedora/rdf/rdf_datastream.rb +8 -4
- data/lib/active_fedora/rdf/resource.rb +7 -3
- data/lib/active_fedora/solr_service.rb +12 -1
- data/lib/active_fedora/version.rb +2 -2
- data/spec/integration/associations_spec.rb +2 -2
- data/spec/integration/belongs_to_association_spec.rb +23 -11
- data/spec/integration/has_many_associations_spec.rb +18 -2
- data/spec/integration/rdf_nested_attributes_spec.rb +33 -18
- data/spec/unit/datastream_collections_spec.rb +3 -2
- data/spec/unit/rdf_datastream_spec.rb +22 -0
- data/spec/unit/rdf_properties_spec.rb +11 -0
- data/spec/unit/rdf_resource_datastream_spec.rb +11 -0
- data/spec/unit/rdf_resource_spec.rb +4 -0
- metadata +85 -47
- checksums.yaml +0 -7
@@ -19,7 +19,7 @@ module ActiveFedora
|
|
19
19
|
# belongs_to :publisher, :property=>:has_member
|
20
20
|
results = SolrService.query(ActiveFedora::SolrService.construct_query_for_pids(ids))
|
21
21
|
results.each do |result|
|
22
|
-
return result['id'] if SolrService.
|
22
|
+
return result['id'] if SolrService.classes_from_solr_document(result).include? klass
|
23
23
|
end
|
24
24
|
return nil
|
25
25
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
module ActiveFedora
|
2
3
|
module Associations
|
3
4
|
# Association proxies in Active Fedora are middlemen between the object that
|
@@ -49,6 +50,10 @@ module ActiveFedora
|
|
49
50
|
@association.load_target
|
50
51
|
end
|
51
52
|
|
53
|
+
def load_from_solr(opts = Hash.new)
|
54
|
+
@association.load_from_solr(opts)
|
55
|
+
end
|
56
|
+
|
52
57
|
def loaded?
|
53
58
|
@association.loaded?
|
54
59
|
end
|
@@ -23,7 +23,7 @@ module ActiveFedora
|
|
23
23
|
# If there's nothing in the database and @target has no new records
|
24
24
|
# we are certain the current target is an empty array. This is a
|
25
25
|
# documented side-effect of the method that may avoid an extra SELECT.
|
26
|
-
@target ||= [] and loaded if count == 0
|
26
|
+
@target ||= [] and loaded! if count == 0
|
27
27
|
|
28
28
|
return count
|
29
29
|
end
|
@@ -56,9 +56,12 @@ module ActiveFedora
|
|
56
56
|
|
57
57
|
args.merge!({:mimeType=>args[:mime_type]}) if args.has_key?(:mime_type)
|
58
58
|
|
59
|
-
unless
|
59
|
+
unless args.has_key?(:type)
|
60
60
|
#default to type ActiveFedora::Datastream
|
61
|
-
args
|
61
|
+
args[:type] = "ActiveFedora::Datastream"
|
62
|
+
else
|
63
|
+
# stringify class/model names
|
64
|
+
args[:type] = args[:type].name if args[:type].is_a? Class
|
62
65
|
end
|
63
66
|
class_named_datastreams_desc[args[:name]]= args
|
64
67
|
create_named_datastream_finders(args[:name],args[:prefix])
|
@@ -44,7 +44,11 @@ module ActiveFedora::Rdf::Identifiable
|
|
44
44
|
# @see ActiveFedora::Rdf::Resource.from_uri
|
45
45
|
# @param [RDF::URI] uri URI that is being looked up.
|
46
46
|
def from_uri(uri,_)
|
47
|
-
|
47
|
+
begin
|
48
|
+
self.find(pid_from_subject(uri))
|
49
|
+
rescue ActiveFedora::ObjectNotFoundError
|
50
|
+
self.ds_specs[resource_datastream.to_s][:type].resource_class.new(uri)
|
51
|
+
end
|
48
52
|
end
|
49
53
|
|
50
54
|
##
|
@@ -103,6 +103,7 @@ module ActiveFedora::Rdf
|
|
103
103
|
klass = properties[key[0..-12]]['class_name']
|
104
104
|
klass = ActiveFedora.class_from_string(klass, final_parent.class) if klass.is_a? String
|
105
105
|
value.is_a?(Hash) ? attributes_hash_to_list(values[key], klass) : attributes_to_list(value, klass)
|
106
|
+
values.delete key
|
106
107
|
end
|
107
108
|
end
|
108
109
|
persist!
|
@@ -11,6 +11,21 @@ module ActiveFedora
|
|
11
11
|
raise ArgumentError, "Invalid arguments for Rdf Node configuration: #{args} on #{predicate}" unless args.empty?
|
12
12
|
end
|
13
13
|
|
14
|
+
def [](value)
|
15
|
+
value = value.to_sym
|
16
|
+
self.respond_to?(value) ? self.send(value) : nil
|
17
|
+
end
|
18
|
+
|
19
|
+
def class_name
|
20
|
+
if @class_name.kind_of?(String)
|
21
|
+
begin
|
22
|
+
new_class = @class_name.constantize
|
23
|
+
@class_name = new_class
|
24
|
+
rescue NameError
|
25
|
+
end
|
26
|
+
end
|
27
|
+
@class_name
|
28
|
+
end
|
14
29
|
|
15
30
|
def with_index (&block)
|
16
31
|
# needed for solrizer integration
|
@@ -17,7 +17,7 @@ module ActiveFedora::Rdf
|
|
17
17
|
# You can pass a block to either to set index behavior.
|
18
18
|
module Properties
|
19
19
|
extend Deprecation
|
20
|
-
attr_accessor :
|
20
|
+
attr_accessor :config
|
21
21
|
|
22
22
|
##
|
23
23
|
# Registers properties for Resource-like classes
|
@@ -25,38 +25,24 @@ module ActiveFedora::Rdf
|
|
25
25
|
# @param [Hash] opts for this property, must include a :predicate
|
26
26
|
# @yield [index] index sets solr behaviors for the property
|
27
27
|
def property(name, opts={}, &block)
|
28
|
-
config[name] = ActiveFedora::Rdf::NodeConfig.new(name, opts[:predicate], opts.except(:predicate)).tap do |config|
|
28
|
+
self.config[name] = ActiveFedora::Rdf::NodeConfig.new(name, opts[:predicate], opts.except(:predicate)).tap do |config|
|
29
29
|
config.with_index(&block) if block_given?
|
30
30
|
end
|
31
31
|
behaviors = config[name].behaviors.flatten if config[name].behaviors and not config[name].behaviors.empty?
|
32
|
-
|
33
|
-
self.properties[name] = {
|
34
|
-
behaviors: behaviors,
|
35
|
-
type: config[name].type,
|
36
|
-
class_name: config[name].class_name,
|
37
|
-
predicate: config[name].predicate,
|
38
|
-
term: config[name].term,
|
39
|
-
multivalue: config[name].multivalue
|
40
|
-
}
|
41
32
|
register_property(name)
|
42
33
|
end
|
43
34
|
|
44
|
-
def properties
|
45
|
-
@properties ||= if superclass.respond_to? :properties
|
46
|
-
superclass.properties.dup
|
47
|
-
else
|
48
|
-
{}.with_indifferent_access
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
35
|
def config
|
53
36
|
@config ||= if superclass.respond_to? :config
|
54
|
-
superclass.
|
37
|
+
superclass.config.dup
|
55
38
|
else
|
56
39
|
{}.with_indifferent_access
|
57
40
|
end
|
58
41
|
end
|
59
42
|
|
43
|
+
alias_method :properties, :config
|
44
|
+
alias_method :properties=, :config=
|
45
|
+
|
60
46
|
def config_for_term_or_uri(term)
|
61
47
|
return config[term.to_sym] unless term.kind_of? RDF::Resource
|
62
48
|
config.each { |k, v| return v if v.predicate == term.to_uri }
|
@@ -33,14 +33,14 @@ module ActiveFedora
|
|
33
33
|
def metadata?
|
34
34
|
true
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
def content
|
38
38
|
serialize
|
39
39
|
end
|
40
40
|
|
41
41
|
def content=(content)
|
42
42
|
resource.clear!
|
43
|
-
resource <<
|
43
|
+
resource << deserialize(content)
|
44
44
|
content
|
45
45
|
end
|
46
46
|
|
@@ -62,14 +62,14 @@ module ActiveFedora
|
|
62
62
|
# set_value, get_value, and property accessors are delegated to this object.
|
63
63
|
def resource
|
64
64
|
@resource ||= begin
|
65
|
-
r = self.
|
65
|
+
r = self.singleton_class.resource_class.new(digital_object ? self.class.rdf_subject.call(self) : nil)
|
66
66
|
r.singleton_class.properties = self.class.properties
|
67
67
|
r.singleton_class.properties.keys.each do |property|
|
68
68
|
r.singleton_class.send(:register_property, property)
|
69
69
|
end
|
70
70
|
r.datastream = self
|
71
71
|
r.singleton_class.accepts_nested_attributes_for(*nested_attributes_options.keys) unless nested_attributes_options.blank?
|
72
|
-
r <<
|
72
|
+
r << deserialize
|
73
73
|
r
|
74
74
|
end
|
75
75
|
end
|
@@ -101,6 +101,10 @@ module ActiveFedora
|
|
101
101
|
def deserialize(data=nil)
|
102
102
|
return RDF::Graph.new if new? && data.nil?
|
103
103
|
data ||= datastream_content
|
104
|
+
|
105
|
+
# Because datastream_content can return nil, we should check that here.
|
106
|
+
return repository if data.nil?
|
107
|
+
|
104
108
|
data.force_encoding('utf-8')
|
105
109
|
RDF::Graph.new << RDF::Reader.for(serialization_format).new(data)
|
106
110
|
end
|
@@ -77,11 +77,15 @@ module ActiveFedora::Rdf
|
|
77
77
|
|
78
78
|
def attributes=(values)
|
79
79
|
raise ArgumentError, "values must be a Hash, you provided #{values.class}" unless values.kind_of? Hash
|
80
|
-
values.with_indifferent_access
|
81
|
-
|
80
|
+
values = values.with_indifferent_access
|
81
|
+
set_subject!(values.delete(:id)) if values.has_key?(:id) and node?
|
82
|
+
values.each do |key, value|
|
83
|
+
if properties.keys.include?(key)
|
82
84
|
set_value(rdf_subject, key, value)
|
83
85
|
elsif self.singleton_class.nested_attributes_options.keys.map{ |k| "#{k}_attributes"}.include?(key)
|
84
86
|
send("#{key}=".to_sym, value)
|
87
|
+
else
|
88
|
+
raise ArgumentError, "No association found for name `#{key}'. Has it been defined yet?"
|
85
89
|
end
|
86
90
|
end
|
87
91
|
end
|
@@ -318,7 +322,7 @@ module ActiveFedora::Rdf
|
|
318
322
|
return RDF::Node(uri_or_str[2..-1]) if uri_or_str.start_with? '_:'
|
319
323
|
return RDF::URI(uri_or_str) if RDF::URI(uri_or_str).valid? and (URI.scheme_list.include?(RDF::URI.new(uri_or_str).scheme.upcase) or RDF::URI.new(uri_or_str).scheme == 'info')
|
320
324
|
return RDF::URI(self.base_uri.to_s + (self.base_uri.to_s[-1,1] =~ /(\/|#)/ ? '' : '/') + uri_or_str) if base_uri && !uri_or_str.start_with?(base_uri.to_s)
|
321
|
-
raise RuntimeError "could not make a valid RDF::URI from #{uri_or_str}"
|
325
|
+
raise RuntimeError, "could not make a valid RDF::URI from #{uri_or_str}"
|
322
326
|
end
|
323
327
|
end
|
324
328
|
end
|
@@ -55,7 +55,18 @@ module ActiveFedora
|
|
55
55
|
klass.find(hit[SOLR_DOCUMENT_ID], cast: true)
|
56
56
|
end
|
57
57
|
end
|
58
|
-
|
58
|
+
|
59
|
+
#Returns all possible classes for the solr object
|
60
|
+
def classes_from_solr_document(hit, opts = {})
|
61
|
+
#Add ActiveFedora::Base as never stored in Solr explicitely.
|
62
|
+
classes = [ActiveFedora::Base]
|
63
|
+
|
64
|
+
hit[HAS_MODEL_SOLR_FIELD].each { |value| classes << Model.from_class_uri(value) }
|
65
|
+
|
66
|
+
classes
|
67
|
+
end
|
68
|
+
|
69
|
+
#Returns the best singular class for the solr object
|
59
70
|
def class_from_solr_document(hit, opts = {})
|
60
71
|
#Set the default starting point to the class specified, if available.
|
61
72
|
best_model_match = Model.from_class_uri(opts[:class]) unless opts[:class].nil?
|
@@ -1,3 +1,3 @@
|
|
1
1
|
module ActiveFedora
|
2
|
-
VERSION = "7.0.
|
3
|
-
end
|
2
|
+
VERSION = "7.0.2"
|
3
|
+
end
|
@@ -105,9 +105,9 @@ describe ActiveFedora::Base do
|
|
105
105
|
|
106
106
|
it "should let you shift onto the association" do
|
107
107
|
@library.new_record?.should be_true
|
108
|
-
@library.books.size == 0
|
108
|
+
@library.books.size.should == 0
|
109
109
|
@library.books.should == []
|
110
|
-
@library.book_ids.should ==[]
|
110
|
+
@library.book_ids.should == []
|
111
111
|
@library.books << @book
|
112
112
|
@library.books.should == [@book]
|
113
113
|
@library.book_ids.should ==[@book.pid]
|
@@ -76,7 +76,7 @@ describe ActiveFedora::Base do
|
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
79
|
-
describe "casting inheritance
|
79
|
+
describe "casting inheritance detailed test cases" do
|
80
80
|
before :all do
|
81
81
|
class SimpleObject < ActiveFedora::Base
|
82
82
|
belongs_to :simple_collection, property: :is_part_of, class_name: 'SimpleCollection'
|
@@ -109,15 +109,18 @@ describe ActiveFedora::Base do
|
|
109
109
|
|
110
110
|
@simple_object = SimpleObject.create
|
111
111
|
@simple_object_second = SimpleObject.create
|
112
|
+
@simple_object_third = SimpleObject.create
|
112
113
|
@complex_object = ComplexObject.create
|
114
|
+
@complex_object_second = ComplexObject.create
|
113
115
|
|
114
116
|
#Need to add the simpler cmodel here as currently inheritance support is read-only.
|
115
117
|
#See ActiveFedora pull request 207 on how to do this programmatically.
|
116
118
|
@complex_object.add_relationship(:has_model, @complex_object.class.superclass.to_class_uri)
|
119
|
+
@complex_collection.add_relationship(:has_model, @complex_collection.class.superclass.to_class_uri)
|
117
120
|
|
118
121
|
@simple_collection.objects = [@simple_object, @simple_object_second, @complex_object]
|
119
122
|
@simple_collection.save!
|
120
|
-
@complex_collection.objects = [@
|
123
|
+
@complex_collection.objects = [@simple_object_third, @complex_object_second]
|
121
124
|
@complex_collection.save!
|
122
125
|
@complex_object.save!
|
123
126
|
@simple_object.save!
|
@@ -126,32 +129,41 @@ describe ActiveFedora::Base do
|
|
126
129
|
|
127
130
|
|
128
131
|
it "casted association methods should work and return the most complex class" do
|
132
|
+
|
129
133
|
@complex_object.simple_collection.should be_instance_of SimpleCollection
|
130
|
-
@complex_object.complex_collection.should
|
134
|
+
@complex_object.complex_collection.should be_nil
|
135
|
+
|
136
|
+
@complex_object_second.simple_collection.should be_instance_of ComplexCollection
|
137
|
+
@complex_object_second.complex_collection.should be_instance_of ComplexCollection
|
131
138
|
|
132
139
|
@simple_object.simple_collection.should be_instance_of SimpleCollection
|
133
|
-
@simple_object.complex_collection.should
|
140
|
+
@simple_object.complex_collection.should be_nil
|
141
|
+
|
134
142
|
@simple_object_second.simple_collection.should be_instance_of SimpleCollection
|
135
143
|
@simple_object_second.complex_collection.should be_nil
|
136
144
|
|
137
|
-
@
|
138
|
-
@complex_collection.
|
145
|
+
@simple_object_third.simple_collection.should be_instance_of ComplexCollection
|
146
|
+
@simple_object_third.complex_collection.should be_instance_of ComplexCollection
|
139
147
|
|
148
|
+
@simple_collection.objects.size.should == 3
|
140
149
|
@simple_collection.objects[0].should be_instance_of SimpleObject
|
141
150
|
@simple_collection.objects[1].should be_instance_of SimpleObject
|
142
151
|
@simple_collection.objects[2].should be_instance_of ComplexObject
|
143
152
|
|
153
|
+
@complex_collection.objects.size.should == 2
|
154
|
+
@complex_collection.objects[0].should be_instance_of SimpleObject
|
155
|
+
@complex_collection.objects[1].should be_instance_of ComplexObject
|
156
|
+
|
144
157
|
end
|
145
158
|
|
146
159
|
it "specified ending relationships should ignore classes not specified" do
|
147
|
-
@
|
148
|
-
@complex_collection.complex_objects[0].should be_instance_of ComplexObject
|
149
|
-
@complex_collection.complex_objects[1].should be_nil
|
150
|
-
|
151
|
-
@simple_collection.complex_objects.count.should == 1
|
160
|
+
@simple_collection.complex_objects.size.should == 1
|
152
161
|
@simple_collection.complex_objects[0].should be_instance_of ComplexObject
|
153
162
|
@simple_collection.complex_objects[1].should be_nil
|
154
163
|
|
164
|
+
@complex_collection.complex_objects.size.should == 1
|
165
|
+
@complex_collection.complex_objects[0].should be_instance_of ComplexObject
|
166
|
+
@complex_collection.complex_objects[1].should be_nil
|
155
167
|
end
|
156
168
|
|
157
169
|
after do
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe "
|
3
|
+
describe "Collection members" do
|
4
4
|
before :all do
|
5
5
|
class Library < ActiveFedora::Base
|
6
6
|
has_many :books
|
@@ -14,7 +14,17 @@ describe "Looking up collection members" do
|
|
14
14
|
Object.send(:remove_const, :Book)
|
15
15
|
Object.send(:remove_const, :Library)
|
16
16
|
end
|
17
|
-
describe "of has_many" do
|
17
|
+
describe "size of has_many" do
|
18
|
+
let(:library) { Library.create }
|
19
|
+
context "when no members" do
|
20
|
+
it "should cache the count" do
|
21
|
+
expect(library.books).not_to be_loaded
|
22
|
+
expect(library.books.size).to eq(0)
|
23
|
+
expect(library.books).to be_loaded
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
describe "looking up has_many" do
|
18
28
|
let(:book) { Book.create }
|
19
29
|
let(:library) { Library.create() }
|
20
30
|
before do
|
@@ -34,6 +44,12 @@ describe "Looking up collection members" do
|
|
34
44
|
expect(library.books).to eq [book]
|
35
45
|
expect(library.books.loaded?).to be_true
|
36
46
|
end
|
47
|
+
it "should load from solr" do
|
48
|
+
expect(library.books.load_from_solr.map {|r| r["id"]}).to eq([book.pid])
|
49
|
+
end
|
50
|
+
it "should load from solr with options" do
|
51
|
+
expect(library.books.load_from_solr(rows: 0).size).to eq(0)
|
52
|
+
end
|
37
53
|
end
|
38
54
|
end
|
39
55
|
|
@@ -69,7 +69,10 @@ describe "Nesting attribute behavior of RDFDatastream" do
|
|
69
69
|
'0' =>
|
70
70
|
{
|
71
71
|
elementList_attributes: [{
|
72
|
-
topicElement_attributes: [{
|
72
|
+
topicElement_attributes: [{
|
73
|
+
id: 'http://library.ucsd.edu/ark:/20775/bb3333333x',
|
74
|
+
elementValue:"Cosmology"
|
75
|
+
}]
|
73
76
|
}]
|
74
77
|
},
|
75
78
|
'1' =>
|
@@ -81,7 +84,8 @@ describe "Nesting attribute behavior of RDFDatastream" do
|
|
81
84
|
},
|
82
85
|
personalName_attributes: [
|
83
86
|
{
|
84
|
-
|
87
|
+
id: 'http://library.ucsd.edu/ark:20775/jefferson',
|
88
|
+
elementList_attributes: [{
|
85
89
|
fullNameElement: "Jefferson, Thomas",
|
86
90
|
dateNameElement: "1743-1826"
|
87
91
|
}]
|
@@ -107,22 +111,33 @@ describe "Nesting attribute behavior of RDFDatastream" do
|
|
107
111
|
end
|
108
112
|
end
|
109
113
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
114
|
+
context "from nested objects" do
|
115
|
+
before do
|
116
|
+
# Replace the graph's contents with the Hash
|
117
|
+
subject.attributes = params[:myResource]
|
118
|
+
end
|
119
|
+
|
120
|
+
it 'should have attributes' do
|
121
|
+
subject.topic[0].elementList.first[0].elementValue.should == ["Cosmology"]
|
122
|
+
subject.topic[1].elementList.first[0].elementValue.should == ["Quantum Behavior"]
|
123
|
+
subject.personalName.first.elementList.first.fullNameElement.should == ["Jefferson, Thomas"]
|
124
|
+
subject.personalName.first.elementList.first.dateNameElement.should == ["1743-1826"]
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'should build nodes with ids' do
|
128
|
+
expect(subject.topic[0].elementList.first[0].rdf_subject).to eq 'http://library.ucsd.edu/ark:/20775/bb3333333x'
|
129
|
+
expect(subject.personalName.first.rdf_subject).to eq 'http://library.ucsd.edu/ark:20775/jefferson'
|
130
|
+
end
|
131
|
+
|
132
|
+
it 'should fail when writing to a non-predicate' do
|
133
|
+
attributes = { topic_attributes: { '0' => { elementList_attributes: [{ topicElement_attributes: [{ fake_predicate:"Cosmology" }] }]}}}
|
134
|
+
expect{ subject.attributes = attributes }.to raise_error ArgumentError
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'should fail when writing to a non-predicate with a setter method' do
|
138
|
+
attributes = { topic_attributes: { '0' => { elementList_attributes: [{ topicElement_attributes: [{ name:"Cosmology" }] }]}}}
|
139
|
+
expect{ subject.attributes = attributes }.to raise_error ArgumentError
|
140
|
+
end
|
126
141
|
end
|
127
142
|
end
|
128
143
|
|
@@ -149,9 +149,10 @@ describe ActiveFedora::DatastreamCollections do
|
|
149
149
|
|
150
150
|
describe '#add_named_file_datastream' do
|
151
151
|
before do
|
152
|
+
class MockDS < ActiveFedora::Datastream; end
|
152
153
|
class MockAddNamedFileDatastream < ActiveFedora::Base
|
153
154
|
include ActiveFedora::DatastreamCollections
|
154
|
-
has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>
|
155
|
+
has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>MockDS, :mimeType=>"image/jpeg", :controlGroup=>'M'
|
155
156
|
has_datastream :name=>"high", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
|
156
157
|
has_datastream :name=>"anymime", :type=>ActiveFedora::Datastream, :controlGroup=>'M'
|
157
158
|
end
|
@@ -165,7 +166,7 @@ describe ActiveFedora::DatastreamCollections do
|
|
165
166
|
f.stub(:content_type).and_return("image/jpeg")
|
166
167
|
@test_object2.add_named_file_datastream("thumbnail",f)
|
167
168
|
thumb = @test_object2.thumbnail.first
|
168
|
-
thumb.class.should ==
|
169
|
+
thumb.class.should == MockDS
|
169
170
|
thumb.mimeType.should == "image/jpeg"
|
170
171
|
thumb.dsid.should == "THUMB1"
|
171
172
|
thumb.controlGroup.should == "M"
|
@@ -63,4 +63,26 @@ describe ActiveFedora::RDFDatastream do
|
|
63
63
|
result.dump(:ntriples).should == "<info:fedora/scholarsphere:qv33rx50r> <http://purl.org/dc/terms/description> \"\\n’ \" .\n"
|
64
64
|
end
|
65
65
|
end
|
66
|
+
|
67
|
+
describe 'content=' do
|
68
|
+
let(:ds) {ActiveFedora::NtriplesRDFDatastream.new}
|
69
|
+
it "should be able to handle non-utf-8 characters" do
|
70
|
+
data = "<info:fedora/scholarsphere:qv33rx50r> <http://purl.org/dc/terms/description> \"\\n\xE2\x80\x99 \" .\n".force_encoding('ASCII-8BIT')
|
71
|
+
ds.content = data
|
72
|
+
expect(ds.resource.dump(:ntriples)).to eq "<info:fedora/scholarsphere:qv33rx50r> <http://purl.org/dc/terms/description> \"\\n’ \" .\n"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe 'legacy non-utf-8 characters' do
|
77
|
+
let(:ds) do
|
78
|
+
datastream = ActiveFedora::NtriplesRDFDatastream.new
|
79
|
+
datastream.stub(:new?).and_return(false)
|
80
|
+
datastream.stub(:datastream_content).and_return("<info:fedora/scholarsphere:qv33rx50r> <http://purl.org/dc/terms/description> \"\\n\xE2\x80\x99 \" .\n".force_encoding('ASCII-8BIT'))
|
81
|
+
datastream
|
82
|
+
end
|
83
|
+
it "should not error on access" do
|
84
|
+
expect(ds.resource.dump(:ntriples)).to eq "<info:fedora/scholarsphere:qv33rx50r> <http://purl.org/dc/terms/description> \"\\n’ \" .\n"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
66
88
|
end
|
@@ -49,6 +49,17 @@ describe ActiveFedora::Rdf::Properties do
|
|
49
49
|
DummyProperties.property :title, :predicate => RDF::DC.title, :class_name => RDF::Literal
|
50
50
|
expect(DummyProperties.properties[:title][:class_name]).to eq RDF::Literal
|
51
51
|
end
|
52
|
+
|
53
|
+
it "should constantize string class names" do
|
54
|
+
DummyProperties.property :title, :predicate => RDF::DC.title, :class_name => "RDF::Literal"
|
55
|
+
expect(DummyProperties.properties[:title][:class_name]).to eq RDF::Literal
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should keep strings which it can't constantize as strings" do
|
59
|
+
DummyProperties.property :title, :predicate => RDF::DC.title, :class_name => "FakeClassName"
|
60
|
+
expect(DummyProperties.properties[:title][:class_name]).to eq "FakeClassName"
|
61
|
+
end
|
62
|
+
|
52
63
|
end
|
53
64
|
|
54
65
|
context "when using a subclass" do
|
@@ -211,6 +211,17 @@ describe ActiveFedora::RDFDatastream do
|
|
211
211
|
subject.reload
|
212
212
|
expect(subject.descMetadata.creator.first).to be_kind_of(ActiveFedora::Base)
|
213
213
|
end
|
214
|
+
context "when the AF:Base object is deleted" do
|
215
|
+
before do
|
216
|
+
subject.save
|
217
|
+
@new_object.destroy
|
218
|
+
end
|
219
|
+
it "should give back an AF::Rdf::Resource" do
|
220
|
+
subject.reload
|
221
|
+
expect(subject.descMetadata.creator.first).to be_kind_of(ActiveFedora::Rdf::Resource)
|
222
|
+
expect(subject.descMetadata.creator.first.rdf_subject).to eq @new_object.resource.rdf_subject
|
223
|
+
end
|
224
|
+
end
|
214
225
|
|
215
226
|
it "should allow for deep attributes to be set directly" do
|
216
227
|
subject.descMetadata.creator.first.title = "Bla"
|
@@ -29,6 +29,10 @@ describe ActiveFedora::Rdf::Resource do
|
|
29
29
|
expect(subject.rdf_subject).to eq RDF::URI('http://example.org/moomin')
|
30
30
|
end
|
31
31
|
|
32
|
+
it "should raise an error when setting to an invalid uri" do
|
33
|
+
expect{ subject.set_subject!('not_a_uri') }.to raise_error "could not make a valid RDF::URI from not_a_uri"
|
34
|
+
end
|
35
|
+
|
32
36
|
describe 'when changing subject' do
|
33
37
|
before do
|
34
38
|
subject << RDF::Statement.new(subject.rdf_subject, RDF::DC.title, RDF::Literal('Comet in Moominland'))
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active-fedora
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.0.
|
4
|
+
version: 7.0.2
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Matt Zumwalt
|
@@ -10,258 +11,294 @@ authors:
|
|
10
11
|
autorequire:
|
11
12
|
bindir: bin
|
12
13
|
cert_chain: []
|
13
|
-
date: 2014-04-
|
14
|
+
date: 2014-04-17 00:00:00.000000000 Z
|
14
15
|
dependencies:
|
15
16
|
- !ruby/object:Gem::Dependency
|
16
17
|
name: rsolr
|
17
18
|
requirement: !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
18
20
|
requirements:
|
19
|
-
- -
|
21
|
+
- - ~>
|
20
22
|
- !ruby/object:Gem::Version
|
21
23
|
version: 1.0.10.pre1
|
22
24
|
type: :runtime
|
23
25
|
prerelease: false
|
24
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
none: false
|
25
28
|
requirements:
|
26
|
-
- -
|
29
|
+
- - ~>
|
27
30
|
- !ruby/object:Gem::Version
|
28
31
|
version: 1.0.10.pre1
|
29
32
|
- !ruby/object:Gem::Dependency
|
30
33
|
name: om
|
31
34
|
requirement: !ruby/object:Gem::Requirement
|
35
|
+
none: false
|
32
36
|
requirements:
|
33
|
-
- -
|
37
|
+
- - ~>
|
34
38
|
- !ruby/object:Gem::Version
|
35
39
|
version: 3.0.0
|
36
40
|
type: :runtime
|
37
41
|
prerelease: false
|
38
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
39
44
|
requirements:
|
40
|
-
- -
|
45
|
+
- - ~>
|
41
46
|
- !ruby/object:Gem::Version
|
42
47
|
version: 3.0.0
|
43
48
|
- !ruby/object:Gem::Dependency
|
44
49
|
name: nom-xml
|
45
50
|
requirement: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
46
52
|
requirements:
|
47
|
-
- -
|
53
|
+
- - ! '>='
|
48
54
|
- !ruby/object:Gem::Version
|
49
55
|
version: 0.5.1
|
50
56
|
type: :runtime
|
51
57
|
prerelease: false
|
52
58
|
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
53
60
|
requirements:
|
54
|
-
- -
|
61
|
+
- - ! '>='
|
55
62
|
- !ruby/object:Gem::Version
|
56
63
|
version: 0.5.1
|
57
64
|
- !ruby/object:Gem::Dependency
|
58
65
|
name: activesupport
|
59
66
|
requirement: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
60
68
|
requirements:
|
61
|
-
- -
|
69
|
+
- - ! '>='
|
62
70
|
- !ruby/object:Gem::Version
|
63
71
|
version: 3.0.0
|
64
72
|
type: :runtime
|
65
73
|
prerelease: false
|
66
74
|
version_requirements: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
67
76
|
requirements:
|
68
|
-
- -
|
77
|
+
- - ! '>='
|
69
78
|
- !ruby/object:Gem::Version
|
70
79
|
version: 3.0.0
|
71
80
|
- !ruby/object:Gem::Dependency
|
72
81
|
name: mediashelf-loggable
|
73
82
|
requirement: !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
74
84
|
requirements:
|
75
|
-
- -
|
85
|
+
- - ! '>='
|
76
86
|
- !ruby/object:Gem::Version
|
77
87
|
version: '0'
|
78
88
|
type: :runtime
|
79
89
|
prerelease: false
|
80
90
|
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
81
92
|
requirements:
|
82
|
-
- -
|
93
|
+
- - ! '>='
|
83
94
|
- !ruby/object:Gem::Version
|
84
95
|
version: '0'
|
85
96
|
- !ruby/object:Gem::Dependency
|
86
97
|
name: rubydora
|
87
98
|
requirement: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
88
100
|
requirements:
|
89
|
-
- -
|
101
|
+
- - ~>
|
90
102
|
- !ruby/object:Gem::Version
|
91
103
|
version: 1.7.4
|
92
104
|
type: :runtime
|
93
105
|
prerelease: false
|
94
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
95
108
|
requirements:
|
96
|
-
- -
|
109
|
+
- - ~>
|
97
110
|
- !ruby/object:Gem::Version
|
98
111
|
version: 1.7.4
|
99
112
|
- !ruby/object:Gem::Dependency
|
100
113
|
name: linkeddata
|
101
114
|
requirement: !ruby/object:Gem::Requirement
|
115
|
+
none: false
|
102
116
|
requirements:
|
103
|
-
- -
|
117
|
+
- - ! '>='
|
104
118
|
- !ruby/object:Gem::Version
|
105
119
|
version: '0'
|
106
120
|
type: :runtime
|
107
121
|
prerelease: false
|
108
122
|
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
none: false
|
109
124
|
requirements:
|
110
|
-
- -
|
125
|
+
- - ! '>='
|
111
126
|
- !ruby/object:Gem::Version
|
112
127
|
version: '0'
|
113
128
|
- !ruby/object:Gem::Dependency
|
114
129
|
name: rdf-rdfxml
|
115
130
|
requirement: !ruby/object:Gem::Requirement
|
131
|
+
none: false
|
116
132
|
requirements:
|
117
|
-
- -
|
133
|
+
- - ~>
|
118
134
|
- !ruby/object:Gem::Version
|
119
135
|
version: 1.1.0
|
120
136
|
type: :runtime
|
121
137
|
prerelease: false
|
122
138
|
version_requirements: !ruby/object:Gem::Requirement
|
139
|
+
none: false
|
123
140
|
requirements:
|
124
|
-
- -
|
141
|
+
- - ~>
|
125
142
|
- !ruby/object:Gem::Version
|
126
143
|
version: 1.1.0
|
127
144
|
- !ruby/object:Gem::Dependency
|
128
145
|
name: deprecation
|
129
146
|
requirement: !ruby/object:Gem::Requirement
|
147
|
+
none: false
|
130
148
|
requirements:
|
131
|
-
- -
|
149
|
+
- - ! '>='
|
132
150
|
- !ruby/object:Gem::Version
|
133
151
|
version: '0'
|
134
152
|
type: :runtime
|
135
153
|
prerelease: false
|
136
154
|
version_requirements: !ruby/object:Gem::Requirement
|
155
|
+
none: false
|
137
156
|
requirements:
|
138
|
-
- -
|
157
|
+
- - ! '>='
|
139
158
|
- !ruby/object:Gem::Version
|
140
159
|
version: '0'
|
141
160
|
- !ruby/object:Gem::Dependency
|
142
161
|
name: rdoc
|
143
162
|
requirement: !ruby/object:Gem::Requirement
|
163
|
+
none: false
|
144
164
|
requirements:
|
145
|
-
- -
|
165
|
+
- - ! '>='
|
146
166
|
- !ruby/object:Gem::Version
|
147
167
|
version: '0'
|
148
168
|
type: :development
|
149
169
|
prerelease: false
|
150
170
|
version_requirements: !ruby/object:Gem::Requirement
|
171
|
+
none: false
|
151
172
|
requirements:
|
152
|
-
- -
|
173
|
+
- - ! '>='
|
153
174
|
- !ruby/object:Gem::Version
|
154
175
|
version: '0'
|
155
176
|
- !ruby/object:Gem::Dependency
|
156
177
|
name: yard
|
157
178
|
requirement: !ruby/object:Gem::Requirement
|
179
|
+
none: false
|
158
180
|
requirements:
|
159
|
-
- -
|
181
|
+
- - ! '>='
|
160
182
|
- !ruby/object:Gem::Version
|
161
183
|
version: '0'
|
162
184
|
type: :development
|
163
185
|
prerelease: false
|
164
186
|
version_requirements: !ruby/object:Gem::Requirement
|
187
|
+
none: false
|
165
188
|
requirements:
|
166
|
-
- -
|
189
|
+
- - ! '>='
|
167
190
|
- !ruby/object:Gem::Version
|
168
191
|
version: '0'
|
169
192
|
- !ruby/object:Gem::Dependency
|
170
193
|
name: rake
|
171
194
|
requirement: !ruby/object:Gem::Requirement
|
195
|
+
none: false
|
172
196
|
requirements:
|
173
|
-
- -
|
197
|
+
- - ! '>='
|
174
198
|
- !ruby/object:Gem::Version
|
175
199
|
version: '0'
|
176
200
|
type: :development
|
177
201
|
prerelease: false
|
178
202
|
version_requirements: !ruby/object:Gem::Requirement
|
203
|
+
none: false
|
179
204
|
requirements:
|
180
|
-
- -
|
205
|
+
- - ! '>='
|
181
206
|
- !ruby/object:Gem::Version
|
182
207
|
version: '0'
|
183
208
|
- !ruby/object:Gem::Dependency
|
184
209
|
name: jettywrapper
|
185
210
|
requirement: !ruby/object:Gem::Requirement
|
211
|
+
none: false
|
186
212
|
requirements:
|
187
|
-
- -
|
213
|
+
- - ! '>='
|
188
214
|
- !ruby/object:Gem::Version
|
189
215
|
version: 1.4.0
|
190
216
|
type: :development
|
191
217
|
prerelease: false
|
192
218
|
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
none: false
|
193
220
|
requirements:
|
194
|
-
- -
|
221
|
+
- - ! '>='
|
195
222
|
- !ruby/object:Gem::Version
|
196
223
|
version: 1.4.0
|
197
224
|
- !ruby/object:Gem::Dependency
|
198
225
|
name: rspec
|
199
226
|
requirement: !ruby/object:Gem::Requirement
|
227
|
+
none: false
|
200
228
|
requirements:
|
201
|
-
- -
|
229
|
+
- - ! '>='
|
202
230
|
- !ruby/object:Gem::Version
|
203
231
|
version: 2.9.0
|
204
232
|
type: :development
|
205
233
|
prerelease: false
|
206
234
|
version_requirements: !ruby/object:Gem::Requirement
|
235
|
+
none: false
|
207
236
|
requirements:
|
208
|
-
- -
|
237
|
+
- - ! '>='
|
209
238
|
- !ruby/object:Gem::Version
|
210
239
|
version: 2.9.0
|
211
240
|
- !ruby/object:Gem::Dependency
|
212
241
|
name: equivalent-xml
|
213
242
|
requirement: !ruby/object:Gem::Requirement
|
243
|
+
none: false
|
214
244
|
requirements:
|
215
|
-
- -
|
245
|
+
- - ! '>='
|
216
246
|
- !ruby/object:Gem::Version
|
217
247
|
version: '0'
|
218
248
|
type: :development
|
219
249
|
prerelease: false
|
220
250
|
version_requirements: !ruby/object:Gem::Requirement
|
251
|
+
none: false
|
221
252
|
requirements:
|
222
|
-
- -
|
253
|
+
- - ! '>='
|
223
254
|
- !ruby/object:Gem::Version
|
224
255
|
version: '0'
|
225
256
|
- !ruby/object:Gem::Dependency
|
226
257
|
name: rest-client
|
227
258
|
requirement: !ruby/object:Gem::Requirement
|
259
|
+
none: false
|
228
260
|
requirements:
|
229
|
-
- -
|
261
|
+
- - ! '>='
|
230
262
|
- !ruby/object:Gem::Version
|
231
263
|
version: '0'
|
232
264
|
type: :development
|
233
265
|
prerelease: false
|
234
266
|
version_requirements: !ruby/object:Gem::Requirement
|
267
|
+
none: false
|
235
268
|
requirements:
|
236
|
-
- -
|
269
|
+
- - ! '>='
|
237
270
|
- !ruby/object:Gem::Version
|
238
271
|
version: '0'
|
239
272
|
- !ruby/object:Gem::Dependency
|
240
273
|
name: webmock
|
241
274
|
requirement: !ruby/object:Gem::Requirement
|
275
|
+
none: false
|
242
276
|
requirements:
|
243
|
-
- -
|
277
|
+
- - ! '>='
|
244
278
|
- !ruby/object:Gem::Version
|
245
279
|
version: '0'
|
246
280
|
type: :development
|
247
281
|
prerelease: false
|
248
282
|
version_requirements: !ruby/object:Gem::Requirement
|
283
|
+
none: false
|
249
284
|
requirements:
|
250
|
-
- -
|
285
|
+
- - ! '>='
|
251
286
|
- !ruby/object:Gem::Version
|
252
287
|
version: '0'
|
253
288
|
- !ruby/object:Gem::Dependency
|
254
289
|
name: simplecov
|
255
290
|
requirement: !ruby/object:Gem::Requirement
|
291
|
+
none: false
|
256
292
|
requirements:
|
257
|
-
- -
|
293
|
+
- - ~>
|
258
294
|
- !ruby/object:Gem::Version
|
259
295
|
version: 0.7.1
|
260
296
|
type: :development
|
261
297
|
prerelease: false
|
262
298
|
version_requirements: !ruby/object:Gem::Requirement
|
299
|
+
none: false
|
263
300
|
requirements:
|
264
|
-
- -
|
301
|
+
- - ~>
|
265
302
|
- !ruby/object:Gem::Version
|
266
303
|
version: 0.7.1
|
267
304
|
description: ActiveFedora provides for creating and managing objects in the Fedora
|
@@ -274,10 +311,10 @@ extra_rdoc_files:
|
|
274
311
|
- LICENSE
|
275
312
|
- README.md
|
276
313
|
files:
|
277
|
-
-
|
278
|
-
-
|
279
|
-
-
|
280
|
-
-
|
314
|
+
- .gitignore
|
315
|
+
- .gitmodules
|
316
|
+
- .mailmap
|
317
|
+
- .travis.yml
|
281
318
|
- CONTRIBUTING.md
|
282
319
|
- CONTRIBUTORS.md
|
283
320
|
- Gemfile
|
@@ -545,26 +582,27 @@ files:
|
|
545
582
|
homepage: https://github.com/projecthydra/active_fedora
|
546
583
|
licenses:
|
547
584
|
- APACHE2
|
548
|
-
metadata: {}
|
549
585
|
post_install_message:
|
550
586
|
rdoc_options: []
|
551
587
|
require_paths:
|
552
588
|
- lib
|
553
589
|
required_ruby_version: !ruby/object:Gem::Requirement
|
590
|
+
none: false
|
554
591
|
requirements:
|
555
|
-
- -
|
592
|
+
- - ! '>='
|
556
593
|
- !ruby/object:Gem::Version
|
557
594
|
version: 1.9.3
|
558
595
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
596
|
+
none: false
|
559
597
|
requirements:
|
560
|
-
- -
|
598
|
+
- - ! '>='
|
561
599
|
- !ruby/object:Gem::Version
|
562
600
|
version: '0'
|
563
601
|
requirements: []
|
564
602
|
rubyforge_project:
|
565
|
-
rubygems_version:
|
603
|
+
rubygems_version: 1.8.24
|
566
604
|
signing_key:
|
567
|
-
specification_version:
|
605
|
+
specification_version: 3
|
568
606
|
summary: A convenience libary for manipulating documents in the Fedora Repository.
|
569
607
|
test_files:
|
570
608
|
- spec/config_helper.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 3c10a4702718ed6d75d2ae3a50d68f2f7df312ed
|
4
|
-
data.tar.gz: 1f789a3692431f14efbda9e097f0e2edfdb87881
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 2a00cdb7d97f144159944cee46347cd092fc8251b54317c23aea390ba35861906077fac78890f28e7976c53f5ddcfae1320998c8532a4ecbcf752360035c97ce
|
7
|
-
data.tar.gz: 8e73ac6816f0ca3bd51a3724c6654bdb1031d75ae938d6464b1e88423a590e5a5e725c0b986548dcbfb8c4ea85851fcf00365bf4ecc5d6ebb16dc63a109a771e
|