active-fedora 1.1.13 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/README.textile +8 -1
- data/Rakefile +4 -3
- data/VERSION +1 -1
- data/active-fedora.gemspec +17 -13
- data/lib/active_fedora.rb +2 -2
- data/lib/active_fedora/base.rb +295 -10
- data/lib/active_fedora/metadata_datastream.rb +10 -3
- data/lib/active_fedora/metadata_datastream_helper.rb +23 -7
- data/lib/active_fedora/model.rb +104 -2
- data/lib/active_fedora/nokogiri_datastream.rb +23 -18
- data/lib/active_fedora/qualified_dublin_core_datastream.rb +1 -0
- data/lib/active_fedora/rels_ext_datastream.rb +22 -1
- data/lib/active_fedora/semantic_node.rb +293 -8
- data/lib/active_fedora/solr_service.rb +21 -36
- data/lib/fedora/connection.rb +7 -3
- data/lib/hydra/sample_mods_datastream.rb +57 -94
- data/spec/integration/base_find_by_fields_spec.rb +215 -0
- data/spec/integration/base_spec.rb +756 -1
- data/spec/integration/metadata_datastream_helper_spec.rb +103 -0
- data/spec/integration/model_spec.rb +10 -9
- data/spec/integration/rels_ext_datastream_spec.rb +85 -0
- data/spec/integration/semantic_node_spec.rb +1 -2
- data/spec/integration/solr_service_spec.rb +36 -0
- data/spec/unit/base_file_management_spec.rb +0 -1
- data/spec/unit/base_named_datastream_spec.rb +580 -0
- data/spec/unit/base_spec.rb +98 -7
- data/spec/unit/nokogiri_datastream_spec.rb +29 -145
- data/spec/unit/semantic_node_spec.rb +479 -2
- metadata +39 -23
- data/README.rdoc +0 -17
- data/lib/active_fedora/solr_mapper.rb +0 -21
- data/spec/unit/solr_mapper_spec.rb +0 -31
@@ -1,10 +1,9 @@
|
|
1
1
|
require 'solr'
|
2
|
-
require "
|
3
|
-
|
4
|
-
module ActiveFedora
|
5
|
-
class SolrService
|
2
|
+
require "solrizer/field_name_mapper"
|
3
|
+
|
4
|
+
module ActiveFedora
|
5
|
+
class SolrService
|
6
6
|
|
7
|
-
@@mappings = {}
|
8
7
|
attr_reader :conn
|
9
8
|
|
10
9
|
def self.register(host=nil, args={})
|
@@ -22,19 +21,23 @@ module ActiveFedora
|
|
22
21
|
Thread.current[:solr_service]
|
23
22
|
end
|
24
23
|
|
25
|
-
def self.reify_solr_results(solr_result)
|
24
|
+
def self.reify_solr_results(solr_result,opts={})
|
26
25
|
unless solr_result.is_a?(Solr::Response::Standard)
|
27
26
|
raise ArgumentError.new("Only solr responses (Solr::Response::Standard) are allowed. You provided a #{solr_result.class}")
|
28
27
|
end
|
29
28
|
results = []
|
30
29
|
solr_result.hits.each do |hit|
|
31
|
-
model_value = hit[
|
30
|
+
model_value = hit[Solrizer::FieldNameMapper.solr_name("active_fedora_model", :symbol)].first
|
32
31
|
if model_value.include?("::")
|
33
32
|
classname = eval(model_value)
|
34
33
|
else
|
35
34
|
classname = Kernel.const_get(model_value)
|
36
35
|
end
|
37
|
-
|
36
|
+
if opts[:load_from_solr]
|
37
|
+
results << classname.load_instance_from_solr(hit[SOLR_DOCUMENT_ID])
|
38
|
+
else
|
39
|
+
results << Fedora::Repository.instance.find_model(hit[SOLR_DOCUMENT_ID], classname)
|
40
|
+
end
|
38
41
|
end
|
39
42
|
return results
|
40
43
|
end
|
@@ -54,40 +57,22 @@ module ActiveFedora
|
|
54
57
|
end
|
55
58
|
|
56
59
|
def self.mappings
|
57
|
-
|
60
|
+
Solrizer::FieldNameMapper.mappings
|
58
61
|
end
|
59
62
|
def self.mappings=(mappings)
|
60
|
-
|
61
|
-
end
|
62
|
-
|
63
|
+
Solrizer::FieldNameMapper.mappings = mappings
|
64
|
+
end
|
65
|
+
|
63
66
|
def self.logger
|
64
67
|
@logger ||= defined?(RAILS_DEFAULT_LOGGER) ? RAILS_DEFAULT_LOGGER : Logger.new(STDOUT)
|
65
68
|
end
|
66
69
|
|
67
|
-
#
|
68
|
-
# @config_path This is the path to the directory where your mappings file is stored. @default "RAILS_ROOT/config/solr_mappings.yml"
|
69
|
-
# @mappings_file This is the filename for your solr mappings YAML file. @default solr_mappings.yml
|
70
|
+
# (re)load solr field name mappings
|
70
71
|
def self.load_mappings( config_path=nil )
|
71
|
-
|
72
|
-
if config_path.nil?
|
73
|
-
if defined?(RAILS_ROOT)
|
74
|
-
config_path = File.join(RAILS_ROOT, "config", "solr_mappings.yml")
|
75
|
-
end
|
76
|
-
# Default to using the config file within the gem
|
77
|
-
if !File.exist?(config_path.to_s)
|
78
|
-
config_path = File.join(File.dirname(__FILE__), "..", "..", "config", "solr_mappings.yml")
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
logger.info("FEDORA: loading SolrService mappings from #{File.expand_path(config_path)}")
|
83
|
-
|
84
|
-
@@mappings = YAML::load(File.open(config_path))
|
85
|
-
|
86
|
-
mappings["id"] = "id" unless mappings["id"]
|
72
|
+
Solrizer::FieldNameMapper.load_mappings(config_path)
|
87
73
|
end
|
88
74
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
end
|
75
|
+
|
76
|
+
end #SolrService
|
77
|
+
class SolrNotInitialized < StandardError;end
|
78
|
+
end #ActiveFedora
|
data/lib/fedora/connection.rb
CHANGED
@@ -186,9 +186,13 @@ module Fedora
|
|
186
186
|
# Creates new Net::HTTP instance for communication with
|
187
187
|
# remote service and resources.
|
188
188
|
def http
|
189
|
-
http
|
190
|
-
|
191
|
-
|
189
|
+
http = Net::HTTP.new(@site.host, @site.port)
|
190
|
+
if(@site.is_a?(URI::HTTPS) && !SSL_CLIENT_CERT_FILE.nil? && !SSL_CLIENT_KEY_FILE.nil? && !SSL_CLIENT_KEY_PASS.nil?)
|
191
|
+
http.use_ssl = true
|
192
|
+
http.cert = OpenSSL::X509::Certificate.new( File.read(SSL_CLIENT_CERT_FILE) )
|
193
|
+
http.key = OpenSSL::PKey::RSA.new( File.read(SSL_CLIENT_KEY_FILE), SSL_CLIENT_KEY_PASS )
|
194
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
195
|
+
end
|
192
196
|
http
|
193
197
|
end
|
194
198
|
|
@@ -1,100 +1,63 @@
|
|
1
1
|
require "hydra"
|
2
2
|
module Hydra
|
3
3
|
class Hydra::SampleModsDatastream < ActiveFedora::NokogiriDatastream
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
#
|
59
|
-
#
|
60
|
-
#
|
61
|
-
# ]
|
62
|
-
# accessor :abstract
|
63
|
-
# accessor :topic_tag, :relative_xpath=>'oxns:subject/oxns:topic'
|
64
|
-
# accessor :person, :relative_xpath=>'oxns:name[@type="personal"]', :children=>[
|
65
|
-
# {:last_name=>{:relative_xpath=>'oxns:namePart[@type="family"]'}},
|
66
|
-
# {:first_name=>{:relative_xpath=>'oxns:namePart[@type="given"]'}},
|
67
|
-
# {:institution=>{:relative_xpath=>'oxns:affiliation'}},
|
68
|
-
# {:role=>{:children=>[
|
69
|
-
# {:text=>{:relative_xpath=>'oxns:roleTerm[@type="text"]'}},
|
70
|
-
# {:code=>{:relative_xpath=>'oxns:roleTerm[@type="code"]'}}
|
71
|
-
# ]}}
|
72
|
-
# ]
|
73
|
-
# accessor :organization, :relative_xpath=>'oxns:name[@type="institutional"]', :children=>[
|
74
|
-
# {:role=>{:children=>[
|
75
|
-
# {:text=>{:relative_xpath=>'oxns:roleTerm[@type="text"]'}},
|
76
|
-
# {:code=>{:relative_xpath=>'oxns:roleTerm[@type="code"]'}}
|
77
|
-
# ]}}
|
78
|
-
# ]
|
79
|
-
# accessor :conference, :relative_xpath=>'oxns:name[@type="conference"]', :children=>[
|
80
|
-
# {:role=>{:children=>[
|
81
|
-
# {:text=>{:relative_xpath=>'oxns:roleTerm[@type="text"]'}},
|
82
|
-
# {:code=>{:relative_xpath=>'oxns:roleTerm[@type="code"]'}}
|
83
|
-
# ]}}
|
84
|
-
# ]
|
85
|
-
# accessor :journal, :relative_xpath=>'oxns:relatedItem[@type="host"]', :children=>[
|
86
|
-
# {:title=>{:relative_xpath=>'oxns:titleInfo/oxns:title'}},
|
87
|
-
# {:publisher=>{:relative_xpath=>'oxns:originInfo/oxns:publisher'}},
|
88
|
-
# {:issn=>{:relative_xpath=>'oxns:identifier[@type="issn"]'}},
|
89
|
-
# {:date_issued=>{:relative_xpath=>'oxns:originInfo/oxns:dateIssued'}},
|
90
|
-
# {:issue => {:relative_xpath=>"oxns:part", :children=>[
|
91
|
-
# {:volume=>{:relative_xpath=>'oxns:detail[@type="volume"]'}},
|
92
|
-
# {:level=>{:relative_xpath=>'oxns:detail[@type="level"]'}},
|
93
|
-
# {:start_page=>{:relative_xpath=>'oxns:extent[@unit="pages"]/oxns:start'}},
|
94
|
-
# {:end_page=>{:relative_xpath=>'oxns:extent[@unit="pages"]/oxns:end'}},
|
95
|
-
# {:publication_date=>{:relative_xpath=>'oxns:date'}}
|
96
|
-
# ]}}
|
97
|
-
# ]
|
4
|
+
|
5
|
+
set_terminology do |t|
|
6
|
+
t.root(:path=>"mods", :xmlns=>"http://www.loc.gov/mods/v3", :schema=>"http://www.loc.gov/standards/mods/v3/mods-3-2.xsd")
|
7
|
+
|
8
|
+
t.title_info(:path=>"titleInfo") {
|
9
|
+
t.main_title(:path=>"title", :label=>"title")
|
10
|
+
t.language(:path=>{:attribute=>"lang"})
|
11
|
+
}
|
12
|
+
t.abstract
|
13
|
+
t.topic_tag(:path=>"subject", :default_content_path=>"topic")
|
14
|
+
# This is a mods:name. The underscore is purely to avoid namespace conflicts.
|
15
|
+
t.name_ {
|
16
|
+
# this is a namepart
|
17
|
+
t.namePart(:index_as=>[:searchable, :displayable, :facetable, :sortable], :required=>:true, :type=>:string, :label=>"generic name")
|
18
|
+
# affiliations are great
|
19
|
+
t.affiliation
|
20
|
+
t.displayForm
|
21
|
+
t.role(:ref=>[:role])
|
22
|
+
t.description
|
23
|
+
t.date(:path=>"namePart", :attributes=>{:type=>"date"})
|
24
|
+
t.last_name(:path=>"namePart", :attributes=>{:type=>"family"})
|
25
|
+
t.first_name(:path=>"namePart", :attributes=>{:type=>"given"}, :label=>"first name")
|
26
|
+
t.terms_of_address(:path=>"namePart", :attributes=>{:type=>"termsOfAddress"})
|
27
|
+
}
|
28
|
+
# lookup :person, :first_name
|
29
|
+
t.person(:ref=>:name, :attributes=>{:type=>"personal"})
|
30
|
+
t.organizaton(:ref=>:name, :attributes=>{:type=>"institutional"})
|
31
|
+
t.conference(:ref=>:name, :attributes=>{:type=>"conference"})
|
32
|
+
|
33
|
+
t.role {
|
34
|
+
t.text(:path=>"roleTerm",:attributes=>{:type=>"text"})
|
35
|
+
t.code(:path=>"roleTerm",:attributes=>{:type=>"code"})
|
36
|
+
}
|
37
|
+
t.journal(:path=>'relatedItem', :attributes=>{:type=>"host"}) {
|
38
|
+
t.title_info
|
39
|
+
t.origin_info(:path=>"originInfo") {
|
40
|
+
t.publisher
|
41
|
+
t.date_issued(:path=>"dateIssued")
|
42
|
+
}
|
43
|
+
t.issn(:path=>"identifier", :attributes=>{:type=>"issn"})
|
44
|
+
t.issue(:path=>"part") {
|
45
|
+
t.volume(:path=>"detail", :attributes=>{:type=>"volume"}, :default_content_path=>"number")
|
46
|
+
t.level(:path=>"detail", :attributes=>{:type=>"number"}, :default_content_path=>"number")
|
47
|
+
t.extent
|
48
|
+
t.pages(:path=>"extent", :attributes=>{:type=>"pages"}) {
|
49
|
+
t.start
|
50
|
+
t.end
|
51
|
+
}
|
52
|
+
t.publication_date(:path=>"date")
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
# Changes from OM::Properties implementation
|
59
|
+
# renamed family_name => last_name
|
60
|
+
# start_page & end_page now accessible as [:journal, :issue, :pages, :start] (etc.)
|
98
61
|
|
99
62
|
end
|
100
63
|
end
|
@@ -0,0 +1,215 @@
|
|
1
|
+
require File.join( File.dirname(__FILE__), "..", "spec_helper" )
|
2
|
+
|
3
|
+
class MockAFBaseQuerySolr < ActiveFedora::Base
|
4
|
+
has_metadata :name => "properties", :type => ActiveFedora::MetadataDatastream do |m|
|
5
|
+
m.field "holding_id", :string
|
6
|
+
end
|
7
|
+
|
8
|
+
has_metadata :name => "descMetadata", :type => ActiveFedora::QualifiedDublinCoreDatastream do |m|
|
9
|
+
m.field "created", :date, :xml_node => "created"
|
10
|
+
m.field "language", :string, :xml_node => "language"
|
11
|
+
m.field "creator", :string, :xml_node => "creator"
|
12
|
+
# Created remaining fields
|
13
|
+
m.field "geography", :string, :xml_node => "geography"
|
14
|
+
m.field "title", :string, :xml_node => "title"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe ActiveFedora::Base do
|
19
|
+
|
20
|
+
before(:each) do
|
21
|
+
@test_object = ActiveFedora::Base.new
|
22
|
+
@test_object.new_object = true
|
23
|
+
end
|
24
|
+
|
25
|
+
after(:each) do
|
26
|
+
begin
|
27
|
+
@test_object.delete
|
28
|
+
rescue
|
29
|
+
end
|
30
|
+
begin
|
31
|
+
@test_object2.delete
|
32
|
+
rescue
|
33
|
+
end
|
34
|
+
begin
|
35
|
+
@test_object3.delete
|
36
|
+
rescue
|
37
|
+
end
|
38
|
+
begin
|
39
|
+
@test_object4.delete
|
40
|
+
rescue
|
41
|
+
end
|
42
|
+
begin
|
43
|
+
@test_object5.delete
|
44
|
+
rescue
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe '#find_by_fields_by_solr' do
|
49
|
+
it 'should return fedora objects of the model of self that match the given solr query, queries the active_fedora solr instance' do
|
50
|
+
#get objects into fedora and solr
|
51
|
+
@test_object2 = MockAFBaseQuerySolr.new
|
52
|
+
@test_object2.new_object = true
|
53
|
+
attributes = {"holding_id"=>{0=>"Holding 1"},
|
54
|
+
"language"=>{0=>"Italian"},
|
55
|
+
"creator"=>{0=>"Linguist, A."},
|
56
|
+
"geography"=>{0=>"Italy"},
|
57
|
+
"title"=>{0=>"Italian and Spanish: A Comparison of Common Phrases"}}
|
58
|
+
@test_object2.update_indexed_attributes(attributes)
|
59
|
+
@test_object2.save
|
60
|
+
|
61
|
+
@test_object3 = MockAFBaseQuerySolr.new
|
62
|
+
@test_object3.new_object = true
|
63
|
+
attributes = {"holding_id"=>{0=>"Holding 2"},
|
64
|
+
"language"=>{0=>"Spanish;Latin"},
|
65
|
+
"creator"=>{0=>"Linguist, A."},
|
66
|
+
"geography"=>{0=>"Spain"},
|
67
|
+
"title"=>{0=>"A study of the evolution of Spanish from Latin"}}
|
68
|
+
@test_object3.update_indexed_attributes(attributes)
|
69
|
+
@test_object3.save
|
70
|
+
|
71
|
+
@test_object4 = MockAFBaseQuerySolr.new
|
72
|
+
@test_object4.new_object = true
|
73
|
+
attributes = {"holding_id"=>{0=>"Holding 3"},
|
74
|
+
"language"=>{0=>"Spanish;Latin"},
|
75
|
+
"creator"=>{0=>"Linguist, A."},
|
76
|
+
"geography"=>{0=>"Spain"},
|
77
|
+
"title"=>{0=>"An obscure look into early nomadic tribes of Spain"}}
|
78
|
+
@test_object4.update_indexed_attributes(attributes)
|
79
|
+
@test_object4.save
|
80
|
+
|
81
|
+
#query based on just model
|
82
|
+
results = MockAFBaseQuerySolr.find_by_fields_by_solr({})
|
83
|
+
found_pids = []
|
84
|
+
results.hits.each do |hit|
|
85
|
+
found_pids.push(hit[SOLR_DOCUMENT_ID])
|
86
|
+
end
|
87
|
+
|
88
|
+
found_pids.should == [@test_object2.pid,@test_object3.pid,@test_object4.pid]
|
89
|
+
|
90
|
+
#query on certain fields
|
91
|
+
results = MockAFBaseQuerySolr.find_by_fields_by_solr({"language"=>"Latin"})
|
92
|
+
found_pids = []
|
93
|
+
results.hits.each do |hit|
|
94
|
+
found_pids.push(hit[SOLR_DOCUMENT_ID])
|
95
|
+
end
|
96
|
+
|
97
|
+
found_pids.should == [@test_object3.pid,@test_object4.pid]
|
98
|
+
|
99
|
+
results = MockAFBaseQuerySolr.find_by_fields_by_solr({"language"=>"Italian"})
|
100
|
+
found_pids = []
|
101
|
+
results.hits.each do |hit|
|
102
|
+
found_pids.push(hit[SOLR_DOCUMENT_ID])
|
103
|
+
end
|
104
|
+
|
105
|
+
found_pids.should== [@test_object2.pid]
|
106
|
+
|
107
|
+
results = MockAFBaseQuerySolr.find_by_fields_by_solr({"language"=>"Spanish"})
|
108
|
+
found_pids = []
|
109
|
+
results.hits.each do |hit|
|
110
|
+
found_pids.push(hit[SOLR_DOCUMENT_ID])
|
111
|
+
end
|
112
|
+
|
113
|
+
found_pids.should == [@test_object3.pid,@test_object4.pid]
|
114
|
+
|
115
|
+
#assume spaces removed at index time so query by 'Linguist,A.' instead of 'Linguist, A.'
|
116
|
+
results = MockAFBaseQuerySolr.find_by_fields_by_solr({"creator"=>"Linguist,A."})
|
117
|
+
found_pids = []
|
118
|
+
results.hits.each do |hit|
|
119
|
+
found_pids.push(hit[SOLR_DOCUMENT_ID])
|
120
|
+
end
|
121
|
+
|
122
|
+
found_pids.should == [@test_object2.pid,@test_object3.pid,@test_object4.pid]
|
123
|
+
|
124
|
+
results = MockAFBaseQuerySolr.find_by_fields_by_solr({"geography"=>"Italy"})
|
125
|
+
found_pids = []
|
126
|
+
results.hits.each do |hit|
|
127
|
+
found_pids.push(hit[SOLR_DOCUMENT_ID])
|
128
|
+
end
|
129
|
+
|
130
|
+
found_pids.should == [@test_object2.pid]
|
131
|
+
|
132
|
+
results = MockAFBaseQuerySolr.find_by_fields_by_solr({"creator"=>"Linguist,A.","title"=>"latin"})
|
133
|
+
found_pids = []
|
134
|
+
results.hits.each do |hit|
|
135
|
+
found_pids.push(hit[SOLR_DOCUMENT_ID])
|
136
|
+
end
|
137
|
+
|
138
|
+
found_pids.should == [@test_object3.pid]
|
139
|
+
|
140
|
+
#query with value with embedded ':' (pid)
|
141
|
+
results = MockAFBaseQuerySolr.find_by_fields_by_solr({"id"=>@test_object3.pid})
|
142
|
+
found_pids = []
|
143
|
+
results.hits.each do |hit|
|
144
|
+
found_pids.push(hit[SOLR_DOCUMENT_ID])
|
145
|
+
end
|
146
|
+
|
147
|
+
found_pids.should == [@test_object3.pid]
|
148
|
+
|
149
|
+
#query with different options
|
150
|
+
#sort defaults to system_create_date
|
151
|
+
results = MockAFBaseQuerySolr.find_by_fields_by_solr({"creator"=>"Linguist,A.","language"=>"Spanish"})
|
152
|
+
found_pids = []
|
153
|
+
results.hits.each do |hit|
|
154
|
+
found_pids.push(hit[SOLR_DOCUMENT_ID])
|
155
|
+
end
|
156
|
+
|
157
|
+
found_pids.should == [@test_object3.pid,@test_object4.pid]
|
158
|
+
|
159
|
+
#change sort direction
|
160
|
+
results = MockAFBaseQuerySolr.find_by_fields_by_solr({"creator"=>"Linguist,A."},{:sort=>[{"system_create"=>"desc"}]})
|
161
|
+
found_pids = []
|
162
|
+
results.hits.each do |hit|
|
163
|
+
found_pids.push(hit[SOLR_DOCUMENT_ID])
|
164
|
+
end
|
165
|
+
|
166
|
+
found_pids.should == [@test_object4.pid,@test_object3.pid,@test_object2.pid]
|
167
|
+
|
168
|
+
#pass in sort without direction defined and make ascending by default
|
169
|
+
results = MockAFBaseQuerySolr.find_by_fields_by_solr({"creator"=>"Linguist,A."},{:sort=>["system_create"]})
|
170
|
+
found_pids = []
|
171
|
+
results.hits.each do |hit|
|
172
|
+
found_pids.push(hit[SOLR_DOCUMENT_ID])
|
173
|
+
end
|
174
|
+
|
175
|
+
found_pids.should == [@test_object2.pid,@test_object3.pid,@test_object4.pid]
|
176
|
+
|
177
|
+
#sort on multiple fields
|
178
|
+
results = MockAFBaseQuerySolr.find_by_fields_by_solr({"creator"=>"Linguist,A."},{:sort=>["geography",{"system_create"=>"desc"}]})
|
179
|
+
found_pids = []
|
180
|
+
results.hits.each do |hit|
|
181
|
+
found_pids.push(hit[SOLR_DOCUMENT_ID])
|
182
|
+
end
|
183
|
+
|
184
|
+
found_pids.should == [@test_object2.pid,@test_object4.pid,@test_object3.pid]
|
185
|
+
|
186
|
+
#check appropriate logic for system_modified_date field name transformation
|
187
|
+
results = MockAFBaseQuerySolr.find_by_fields_by_solr({"creator"=>"Linguist,A."},{:sort=>["geography",{"system_mod"=>"desc"}]})
|
188
|
+
found_pids = []
|
189
|
+
results.hits.each do |hit|
|
190
|
+
found_pids.push(hit[SOLR_DOCUMENT_ID])
|
191
|
+
end
|
192
|
+
|
193
|
+
found_pids.should == [@test_object2.pid,@test_object4.pid,@test_object3.pid]
|
194
|
+
|
195
|
+
#check pass in rows values
|
196
|
+
results = MockAFBaseQuerySolr.find_by_fields_by_solr({"creator"=>"Linguist,A."},{:rows=>2})
|
197
|
+
found_pids = []
|
198
|
+
results.hits.each do |hit|
|
199
|
+
found_pids.push(hit[SOLR_DOCUMENT_ID])
|
200
|
+
end
|
201
|
+
|
202
|
+
found_pids.should == [@test_object2.pid,@test_object3.pid]
|
203
|
+
|
204
|
+
#check query with field mapping to solr field and with solr field that is not a field in object
|
205
|
+
#should be able to query by either active fedora model field name or solr key name
|
206
|
+
results = MockAFBaseQuerySolr.find_by_fields_by_solr({"geography_t"=>"Italy"})
|
207
|
+
found_pids = []
|
208
|
+
results.hits.each do |hit|
|
209
|
+
found_pids.push(hit[SOLR_DOCUMENT_ID])
|
210
|
+
end
|
211
|
+
|
212
|
+
found_pids.should == [@test_object2.pid]
|
213
|
+
end
|
214
|
+
end
|
215
|
+
end
|