active-fedora 3.0.0 → 3.0.1
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/History.txt +4 -0
- data/lib/active_fedora.rb +1 -0
- data/lib/active_fedora/datastream.rb +1 -0
- data/lib/active_fedora/nokogiri_datastream.rb +18 -17
- data/lib/active_fedora/solr_service.rb +17 -6
- data/lib/active_fedora/version.rb +1 -1
- data/spec/unit/active_fedora_spec.rb +0 -1
- data/spec/unit/datastream_spec.rb +11 -0
- data/spec/unit/nokogiri_datastream_spec.rb +29 -3
- data/spec/unit/semantic_node_spec.rb +8 -4
- data/spec/unit/solr_service_spec.rb +3 -3
- metadata +4 -4
data/History.txt
CHANGED
data/lib/active_fedora.rb
CHANGED
@@ -292,6 +292,7 @@ module ActiveFedora
|
|
292
292
|
class PredicateMappingsNotFoundError < RuntimeError; end # :nodoc:
|
293
293
|
class UnknownAttributeError < NoMethodError; end; # :nodoc:
|
294
294
|
class ActiveFedoraConfigurationException < Exception; end # :nodoc:
|
295
|
+
class AssociationTypeMismatch < RuntimeError; end # :nodoc:
|
295
296
|
|
296
297
|
end
|
297
298
|
|
@@ -14,7 +14,8 @@ class ActiveFedora::NokogiriDatastream < ActiveFedora::Datastream
|
|
14
14
|
alias_method(:om_term_values, :term_values) unless method_defined?(:om_term_values)
|
15
15
|
alias_method(:om_update_values, :update_values) unless method_defined?(:om_update_values)
|
16
16
|
|
17
|
-
attr_accessor :
|
17
|
+
attr_accessor :internal_solr_doc
|
18
|
+
attr_reader :ng_xml
|
18
19
|
|
19
20
|
#constructor, calls up to ActiveFedora::Datastream's constructor
|
20
21
|
def initialize(attrs=nil)
|
@@ -43,22 +44,22 @@ class ActiveFedora::NokogiriDatastream < ActiveFedora::Datastream
|
|
43
44
|
Nokogiri::XML::Document.parse("<xml/>")
|
44
45
|
end
|
45
46
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
47
|
+
def ng_xml=(new_xml)
|
48
|
+
case new_xml
|
49
|
+
when Nokogiri::XML::Document, Nokogiri::XML::Element, Nokogiri::XML::Node
|
50
|
+
@ng_xml = new_xml
|
51
|
+
when String
|
52
|
+
@ng_xml = Nokogiri::XML::Document.parse(new_xml)
|
53
|
+
else
|
54
|
+
raise TypeError, "You passed a #{new_xml.class} into the ng_xml of the #{self.dsid} datastream. NokogiriDatastream.ng_xml= only accepts Nokogiri::XML::Document, Nokogiri::XML::Element, Nokogiri::XML::Node, or raw XML (String) as inputs."
|
55
|
+
end
|
56
|
+
self.dirty = true
|
57
|
+
end
|
58
|
+
|
59
|
+
def content=(content)
|
60
|
+
super
|
61
|
+
self.ng_xml = Nokogiri::XML::Document.parse(content)
|
62
|
+
end
|
62
63
|
|
63
64
|
|
64
65
|
def to_xml(xml = self.ng_xml)
|
@@ -32,12 +32,7 @@ module ActiveFedora
|
|
32
32
|
end
|
33
33
|
results = []
|
34
34
|
solr_result.hits.each do |hit|
|
35
|
-
|
36
|
-
if model_value.include?("::")
|
37
|
-
classname = eval(model_value)
|
38
|
-
else
|
39
|
-
classname = Kernel.const_get(model_value)
|
40
|
-
end
|
35
|
+
classname = class_from_solr_document(hit)
|
41
36
|
if opts[:load_from_solr]
|
42
37
|
results << classname.load_instance_from_solr(hit[SOLR_DOCUMENT_ID])
|
43
38
|
else
|
@@ -46,6 +41,22 @@ module ActiveFedora
|
|
46
41
|
end
|
47
42
|
return results
|
48
43
|
end
|
44
|
+
|
45
|
+
def self.class_from_solr_document(hit)
|
46
|
+
model_value = hit[solr_name("has_model", :symbol)].first
|
47
|
+
if match_data = /info:fedora\/afmodel:(.+)$/.match(model_value)
|
48
|
+
model_value = match_data[1]
|
49
|
+
model_value.gsub!('_', '::')
|
50
|
+
else
|
51
|
+
raise "has_model assertion incorrectly formatted: #{model_value}"
|
52
|
+
end
|
53
|
+
|
54
|
+
if model_value.include?("::")
|
55
|
+
eval(model_value)
|
56
|
+
else
|
57
|
+
Kernel.const_get(model_value)
|
58
|
+
end
|
59
|
+
end
|
49
60
|
|
50
61
|
# Construct a solr query for a list of pids
|
51
62
|
# This is used to get a solr response based on the list of pids in an object's RELS-EXT relationhsips
|
@@ -26,7 +26,6 @@ describe ActiveFedora do
|
|
26
26
|
it "should use config_options[:environment] if set" do
|
27
27
|
ActiveFedora.expects(:config_options).at_least_once.returns(:environment=>"ballyhoo")
|
28
28
|
ActiveFedora.environment.should eql("ballyhoo")
|
29
|
-
ENV['environment']='test'
|
30
29
|
end
|
31
30
|
|
32
31
|
it "should use Rails.env if no config_options and Rails.env is set" do
|
@@ -60,6 +60,17 @@ describe ActiveFedora::Datastream do
|
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
|
+
describe '.content=' do
|
64
|
+
it "should update the content and ng_xml, marking the datastream as dirty" do
|
65
|
+
sample_xml = "<foo><xmlelement/></foo>"
|
66
|
+
@test_datastream.should_not be_dirty
|
67
|
+
@test_datastream.blob.should_not be_equivalent_to(sample_xml)
|
68
|
+
@test_datastream.content = sample_xml
|
69
|
+
@test_datastream.should be_dirty
|
70
|
+
@test_datastream.blob.should be_equivalent_to(sample_xml)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
63
74
|
describe ".dirty?" do
|
64
75
|
it "should return the value of the @dirty attribute" do
|
65
76
|
@test_datastream.dirty.should equal(@test_datastream.dirty?)
|
@@ -10,7 +10,7 @@ describe ActiveFedora::NokogiriDatastream do
|
|
10
10
|
:empty_field => {:values => {}}
|
11
11
|
}
|
12
12
|
@sample_xml = XmlSimple.xml_in("<fields><coverage>coverage1</coverage><coverage>coverage2</coverage><creation_date>fake-date</creation_date><mydate>fake-date</mydate><publisher>publisher1</publisher></fields>")
|
13
|
-
|
13
|
+
@sample_raw_xml = "<foo><xmlelement/></foo>"
|
14
14
|
@solr_doc = {"id"=>"hydrange_article1","name_role_roleTerm_t"=>["creator","submitter","teacher"],"name_0_role_t"=>"\r\ncreator\r\nsubmitter\r\n","name_1_role_t"=>"\r\n teacher \r\n","name_0_role_0_roleTerm_t"=>"creator","name_0_role_1_roleTerm_t"=>"submitter","name_1_role_0_roleTerm_t"=>["teacher"]}
|
15
15
|
end
|
16
16
|
|
@@ -35,8 +35,8 @@ describe ActiveFedora::NokogiriDatastream do
|
|
35
35
|
test_ds1.ng_xml.to_xml.should == "<?xml version=\"1.0\"?>\n<xml>\n <foo/>\n</xml>\n"
|
36
36
|
end
|
37
37
|
it "should initialize from #xml_template if no xml is provided" do
|
38
|
-
ActiveFedora::NokogiriDatastream.expects(:xml_template).returns("fake template")
|
39
|
-
ActiveFedora::NokogiriDatastream.new.ng_xml.should
|
38
|
+
ActiveFedora::NokogiriDatastream.expects(:xml_template).returns("<fake template/>")
|
39
|
+
ActiveFedora::NokogiriDatastream.new.ng_xml.should be_equivalent_to("<fake template/>")
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
@@ -234,6 +234,32 @@ describe ActiveFedora::NokogiriDatastream do
|
|
234
234
|
end
|
235
235
|
end
|
236
236
|
|
237
|
+
describe '.content=' do
|
238
|
+
it "should update the content and ng_xml, marking the datastream as dirty" do
|
239
|
+
@test_ds.should_not be_dirty
|
240
|
+
@test_ds.blob.should_not be_equivalent_to(@sample_raw_xml)
|
241
|
+
@test_ds.ng_xml.to_xml.should_not be_equivalent_to(@sample_raw_xml)
|
242
|
+
@test_ds.content = @sample_raw_xml
|
243
|
+
@test_ds.should be_dirty
|
244
|
+
@test_ds.blob.should be_equivalent_to(@sample_raw_xml)
|
245
|
+
@test_ds.ng_xml.to_xml.should be_equivalent_to(@sample_raw_xml)
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
describe 'ng_xml=' do
|
250
|
+
it "should parse raw xml for you" do
|
251
|
+
@test_ds.ng_xml.to_xml.should_not be_equivalent_to(@sample_raw_xml)
|
252
|
+
@test_ds.ng_xml = @sample_raw_xml
|
253
|
+
@test_ds.ng_xml.class.should == Nokogiri::XML::Document
|
254
|
+
@test_ds.ng_xml.to_xml.should be_equivalent_to(@sample_raw_xml)
|
255
|
+
end
|
256
|
+
it "should mark the datastream as dirty" do
|
257
|
+
@test_ds.should_not be_dirty
|
258
|
+
@test_ds.ng_xml = @sample_raw_xml
|
259
|
+
@test_ds.should be_dirty
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
237
263
|
describe '.to_xml' do
|
238
264
|
it "should provide .to_xml" do
|
239
265
|
@test_ds.should respond_to(:to_xml)
|
@@ -25,9 +25,9 @@ describe ActiveFedora::SemanticNode do
|
|
25
25
|
before(:all) do
|
26
26
|
@pid = "test:sample_pid"
|
27
27
|
@uri = "info:fedora/#{@pid}"
|
28
|
-
@sample_solr_hits = [{"id"=>"_PID1_", "
|
29
|
-
{"id"=>"_PID2_", "
|
30
|
-
{"id"=>"_PID3_", "
|
28
|
+
@sample_solr_hits = [{"id"=>"_PID1_", "has_model_s"=>["info:fedora/afmodel:AudioRecord"]},
|
29
|
+
{"id"=>"_PID2_", "has_model_s"=>["info:fedora/afmodel:AudioRecord"]},
|
30
|
+
{"id"=>"_PID3_", "has_model_s"=>["info:fedora/afmodel:AudioRecord"]}]
|
31
31
|
end
|
32
32
|
|
33
33
|
before(:each) do
|
@@ -347,7 +347,11 @@ describe ActiveFedora::SemanticNode do
|
|
347
347
|
local_node.expects(:outbound_relationships).returns({:is_member_of => ["my:_PID1_", "my:_PID2_", "my:_PID3_"]}).times(2)
|
348
348
|
mock_repo = mock("repo")
|
349
349
|
solr_result = mock("solr result", :is_a? => true)
|
350
|
-
solr_result.expects(:hits).returns(
|
350
|
+
solr_result.expects(:hits).returns(
|
351
|
+
[{"id"=> "my:_PID1_", "has_model_s"=>["info:fedora/afmodel:SpecNode"]},
|
352
|
+
{"id"=> "my:_PID2_", "has_model_s"=>["info:fedora/afmodel:SpecNode"]},
|
353
|
+
{"id"=> "my:_PID3_", "has_model_s"=>["info:fedora/afmodel:SpecNode"]}])
|
354
|
+
|
351
355
|
ActiveFedora::SolrService.instance.conn.expects(:query).with("id:my\\:_PID1_ OR id:my\\:_PID2_ OR id:my\\:_PID3_").returns(solr_result)
|
352
356
|
mock_repo.expects(:find_model).with("my:_PID1_", SpecNode).returns("AR1")
|
353
357
|
mock_repo.expects(:find_model).with("my:_PID2_", SpecNode).returns("AR2")
|
@@ -47,9 +47,9 @@ describe ActiveFedora::SolrService do
|
|
47
47
|
|
48
48
|
describe "#reify_solr_results" do
|
49
49
|
before(:each) do
|
50
|
-
@sample_solr_hits = [{"id"=>"my:_PID1_", "
|
51
|
-
{"id"=>"my:_PID2_", "
|
52
|
-
{"id"=>"my:_PID3_", "
|
50
|
+
@sample_solr_hits = [{"id"=>"my:_PID1_", "has_model_s"=>["info:fedora/afmodel:AudioRecord"]},
|
51
|
+
{"id"=>"my:_PID2_", "has_model_s"=>["info:fedora/afmodel:AudioRecord"]},
|
52
|
+
{"id"=>"my:_PID3_", "has_model_s"=>["info:fedora/afmodel:AudioRecord"]}]
|
53
53
|
end
|
54
54
|
it "should only take Solr::Response::Standard objects as input" do
|
55
55
|
mocko = mock("input", :is_a? => false)
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active-fedora
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 5
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 3.0.
|
9
|
+
- 1
|
10
|
+
version: 3.0.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Matt Zumwalt
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-09-
|
19
|
+
date: 2011-09-08 00:00:00 -05:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|