active-fedora 3.1.0.pre3 → 3.1.0.pre4
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.rb +1 -1
- data/lib/active_fedora/content_model.rb +1 -1
- data/lib/active_fedora/rels_ext_datastream.rb +8 -1
- data/lib/active_fedora/semantic_node.rb +24 -24
- data/lib/active_fedora/version.rb +1 -1
- data/lib/tasks/active_fedora_dev.rake +6 -6
- data/spec/unit/content_model_spec.rb +6 -6
- data/spec/unit/semantic_node_spec.rb +1 -1
- metadata +3 -3
data/lib/active_fedora.rb
CHANGED
@@ -227,7 +227,7 @@ module ActiveFedora #:nodoc:
|
|
227
227
|
|
228
228
|
# Last choice, check for the default config file
|
229
229
|
config_path = File.expand_path(File.join(File.dirname(__FILE__), "..", "config", "#{config_type}.yml"))
|
230
|
-
logger.warn "Using the default #{config_type}.yml that comes with active-fedora. If you want to override this, pass the path to #{config_type}.yml to ActiveFedora - ie. ActiveFedora.init(:#{config_type} => '/path/to/#{config_type}.yml) - or set Rails.root and put #{config_type}.yml into \#{Rails.root}/config."
|
230
|
+
logger.warn "Using the default #{config_type}.yml that comes with active-fedora. If you want to override this, pass the path to #{config_type}.yml to ActiveFedora - ie. ActiveFedora.init(:#{config_type}_config_path => '/path/to/#{config_type}.yml) - or set Rails.root and put #{config_type}.yml into \#{Rails.root}/config."
|
231
231
|
return config_path if File.file? config_path
|
232
232
|
raise ActiveFedoraConfigurationException "Couldn't load #{config_type} config file!"
|
233
233
|
end
|
@@ -62,7 +62,14 @@ module ActiveFedora
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def self.short_predicate(predicate)
|
65
|
-
|
65
|
+
if match = /^([^#]+#)(.+)$/.match(predicate.to_str)
|
66
|
+
namespace = match[1]
|
67
|
+
predicate = match[2]
|
68
|
+
pred = ActiveFedora::Base.predicate_mappings[namespace].invert[predicate]
|
69
|
+
pred
|
70
|
+
else
|
71
|
+
raise "Unable to parse predicate: #{predicate}"
|
72
|
+
end
|
66
73
|
end
|
67
74
|
|
68
75
|
# Serialize the datastream's RDF relationships to solr
|
@@ -195,6 +195,27 @@ module ActiveFedora
|
|
195
195
|
id_array
|
196
196
|
end
|
197
197
|
|
198
|
+
def load_bidirectional(name, inbound_method_name, outbound_method_name, opts)
|
199
|
+
opts = {:rows=>25}.merge(opts)
|
200
|
+
if opts[:response_format] == :solr || opts[:response_format] == :load_from_solr
|
201
|
+
predicate = outbound_relationship_predicates["#{name}_outbound"]
|
202
|
+
outbound_id_array = ids_for_outbound(predicate)
|
203
|
+
query = self.class.bidirectional_relationship_query(self.pid,"#{name}",outbound_id_array)
|
204
|
+
solr_result = SolrService.instance.conn.query(query, :rows=>opts[:rows])
|
205
|
+
|
206
|
+
if opts[:response_format] == :solr
|
207
|
+
return solr_result
|
208
|
+
elsif opts[:response_format] == :load_from_solr || self.load_from_solr
|
209
|
+
return ActiveFedora::SolrService.reify_solr_results(solr_result,{:load_from_solr=>true})
|
210
|
+
else
|
211
|
+
return ActiveFedora::SolrService.reify_solr_results(solr_result)
|
212
|
+
end
|
213
|
+
else
|
214
|
+
ary = send(inbound_method_name,opts) + send(outbound_method_name, opts)
|
215
|
+
return ary.uniq
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
198
219
|
def load_outbound_relationship(name, predicate, opts={})
|
199
220
|
id_array = ids_for_outbound(predicate)
|
200
221
|
if opts[:response_format] == :id_array && !self.class.relationship_has_solr_filter_query?(:self,"#{name}")
|
@@ -418,6 +439,8 @@ module ActiveFedora
|
|
418
439
|
END
|
419
440
|
end
|
420
441
|
|
442
|
+
|
443
|
+
|
421
444
|
# Generates relationship finders for predicates that point in both directions
|
422
445
|
# and registers predicate relationships for each direction.
|
423
446
|
#
|
@@ -436,30 +459,7 @@ module ActiveFedora
|
|
436
459
|
|
437
460
|
class_eval <<-END
|
438
461
|
def #{name}(opts={})
|
439
|
-
|
440
|
-
if opts[:response_format] == :solr || opts[:response_format] == :load_from_solr
|
441
|
-
outbound_id_array = []
|
442
|
-
predicate = outbound_relationship_predicates["#{name}_outbound"]
|
443
|
-
if !outbound_relationships[predicate].nil?
|
444
|
-
outbound_relationships[predicate].each do |rel|
|
445
|
-
outbound_id_array << rel.gsub("info:fedora/", "")
|
446
|
-
end
|
447
|
-
end
|
448
|
-
#outbound_id_array = #{outbound_method_name}(:response_format=>:id_array)
|
449
|
-
query = self.class.bidirectional_relationship_query(self.pid,"#{name}",outbound_id_array)
|
450
|
-
solr_result = SolrService.instance.conn.query(query, :rows=>opts[:rows])
|
451
|
-
|
452
|
-
if opts[:response_format] == :solr
|
453
|
-
return solr_result
|
454
|
-
elsif opts[:response_format] == :load_from_solr || self.load_from_solr
|
455
|
-
return ActiveFedora::SolrService.reify_solr_results(solr_result,{:load_from_solr=>true})
|
456
|
-
else
|
457
|
-
return ActiveFedora::SolrService.reify_solr_results(solr_result)
|
458
|
-
end
|
459
|
-
else
|
460
|
-
ary = #{inbound_method_name}(opts) + #{outbound_method_name}(opts)
|
461
|
-
return ary.uniq
|
462
|
-
end
|
462
|
+
load_bidirectional("#{name}", :#{inbound_method_name}, :#{outbound_method_name}, opts)
|
463
463
|
end
|
464
464
|
def #{name}_ids
|
465
465
|
#{name}(:response_format => :id_array)
|
@@ -82,12 +82,12 @@ namespace :active_fedora do
|
|
82
82
|
end
|
83
83
|
|
84
84
|
task :load_fixtures => :environment do
|
85
|
-
require 'solrizer'
|
86
|
-
require 'solrizer-fedora'
|
87
|
-
require 'spec/samples/models/hydrangea_article'
|
88
|
-
ENV["FEDORA_HOME"] ||= File.expand_path(File.join(File.dirname(__FILE__),'..','..','jetty','fedora','default'))
|
89
|
-
retval = `$FEDORA_HOME/client/bin/fedora-ingest-demos.sh localhost 8983 fedoraAdmin fedoraAdmin http`
|
90
|
-
puts "loaded demo objects #{retval}"
|
85
|
+
# require 'solrizer'
|
86
|
+
# require 'solrizer-fedora'
|
87
|
+
# require 'spec/samples/models/hydrangea_article'
|
88
|
+
# ENV["FEDORA_HOME"] ||= File.expand_path(File.join(File.dirname(__FILE__),'..','..','jetty','fedora','default'))
|
89
|
+
# retval = `$FEDORA_HOME/client/bin/fedora-ingest-demos.sh localhost 8983 fedoraAdmin fedoraAdmin http`
|
90
|
+
# puts "loaded demo objects #{retval}"
|
91
91
|
ActiveFedora.init unless Thread.current[:repo]
|
92
92
|
|
93
93
|
ENV["pid"] = "hydrangea:fixture_mods_article1"
|
@@ -71,12 +71,12 @@ describe ActiveFedora::ContentModel do
|
|
71
71
|
describe "models_asserted_by" do
|
72
72
|
it "should return an array of all of the content models asserted by the given object" do
|
73
73
|
mock_object = mock("ActiveFedora Object")
|
74
|
-
mock_object.expects(:
|
74
|
+
mock_object.expects(:ids_for_outbound).with(:has_model).returns(["info:fedora/fedora-system:ServiceDefinition-3.0", "info:fedora/afmodel:SampleModel", "info:fedora/afmodel:NonDefinedModel"])
|
75
75
|
ActiveFedora::ContentModel.models_asserted_by(mock_object).should == ["info:fedora/fedora-system:ServiceDefinition-3.0", "info:fedora/afmodel:SampleModel", "info:fedora/afmodel:NonDefinedModel"]
|
76
76
|
end
|
77
77
|
it "should return an empty array if the object doesn't have a RELS-EXT datastream" do
|
78
78
|
mock_object = mock("ActiveFedora Object")
|
79
|
-
mock_object.expects(:
|
79
|
+
mock_object.expects(:ids_for_outbound).with(:has_model).returns([])
|
80
80
|
ActiveFedora::ContentModel.models_asserted_by(mock_object).should == []
|
81
81
|
end
|
82
82
|
end
|
@@ -84,23 +84,23 @@ describe ActiveFedora::ContentModel do
|
|
84
84
|
describe "known_models_asserted_by" do
|
85
85
|
it "should figure out the applicable models to load" do
|
86
86
|
mock_object = mock("ActiveFedora Object")
|
87
|
-
mock_object.expects(:
|
87
|
+
mock_object.expects(:ids_for_outbound).with(:has_model).returns(["info:fedora/fedora-system:ServiceDefinition-3.0", "info:fedora/afmodel:SampleModel", "info:fedora/afmodel:NonDefinedModel"])
|
88
88
|
ActiveFedora::ContentModel.known_models_for(mock_object).should == [SampleModel]
|
89
89
|
end
|
90
90
|
it "should support namespaced models" do
|
91
91
|
pending "This is harder than it looks."
|
92
92
|
mock_object = mock("ActiveFedora Object")
|
93
|
-
mock_object.expects(:
|
93
|
+
mock_object.expects(:ids_for_outbound).with(:has_model).returns(["info:fedora/afmodel:Sample_NamespacedModel"])
|
94
94
|
ActiveFedora::ContentModel.known_models_for(mock_object).should == [Sample::NamespacedModel]
|
95
95
|
end
|
96
96
|
it "should default to using ActiveFedora::Base as the model" do
|
97
97
|
mock_object = mock("ActiveFedora Object")
|
98
|
-
mock_object.expects(:
|
98
|
+
mock_object.expects(:ids_for_outbound).with(:has_model).returns(["info:fedora/afmodel:NonDefinedModel"])
|
99
99
|
ActiveFedora::ContentModel.known_models_for(mock_object).should == [ActiveFedora::Base]
|
100
100
|
end
|
101
101
|
it "should still work even if the object doesn't have a RELS-EXT datastream" do
|
102
102
|
mock_object = mock("ActiveFedora Object")
|
103
|
-
mock_object.expects(:
|
103
|
+
mock_object.expects(:ids_for_outbound).with(:has_model).returns([])
|
104
104
|
ActiveFedora::ContentModel.known_models_for(mock_object).should == [ActiveFedora::Base]
|
105
105
|
end
|
106
106
|
end
|
@@ -430,7 +430,7 @@ describe ActiveFedora::SemanticNode do
|
|
430
430
|
end
|
431
431
|
it "(:response_format => :solr) should construct a solr query that combines inbound and outbound searches" do
|
432
432
|
# get the id array for outbound relationships then construct solr query by combining id array with inbound relationship search
|
433
|
-
@local_node.expects(:
|
433
|
+
@local_node.expects(:ids_for_outbound).with(:has_part).returns(["mypid:1"])
|
434
434
|
id_array_query = ActiveFedora::SolrService.construct_query_for_pids(["mypid:1"])
|
435
435
|
solr_result = mock("solr result")
|
436
436
|
ActiveFedora::SolrService.instance.conn.expects(:query).with("#{id_array_query} OR (is_part_of_s:info\\:fedora/test\\:sample_pid)", :rows=>25).returns(solr_result)
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active-fedora
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 1923832017
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 1
|
9
9
|
- 0
|
10
10
|
- pre
|
11
|
-
-
|
12
|
-
version: 3.1.0.
|
11
|
+
- 4
|
12
|
+
version: 3.1.0.pre4
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Matt Zumwalt
|