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
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ActiveFedora::Base do
|
4
|
+
before do
|
5
|
+
class MyDatastream < ActiveFedora::NtriplesRDFDatastream
|
6
|
+
map_predicates do |map|
|
7
|
+
map.publisher(:in => RDF::DC)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
class Library < ActiveFedora::Base
|
11
|
+
end
|
12
|
+
class Book < ActiveFedora::Base
|
13
|
+
belongs_to :library, property: :has_constituent
|
14
|
+
has_metadata "foo", type: ActiveFedora::SimpleDatastream do |m|
|
15
|
+
m.field "title", :string
|
16
|
+
end
|
17
|
+
has_metadata "bar", type: MyDatastream
|
18
|
+
has_attributes :title, datastream: 'foo' # Om backed property
|
19
|
+
has_attributes :publisher, datastream: 'bar' # RDF backed property
|
20
|
+
end
|
21
|
+
subject.library = library
|
22
|
+
end
|
23
|
+
let (:library) { Library.create }
|
24
|
+
subject {Book.new(library: library, title: "War and Peace", publisher: "Random House")}
|
25
|
+
after do
|
26
|
+
Object.send(:remove_const, :Book)
|
27
|
+
Object.send(:remove_const, :Library)
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#freeze" do
|
31
|
+
before { subject.freeze }
|
32
|
+
|
33
|
+
it "should be frozen" do
|
34
|
+
expect(subject).to be_frozen
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should make the associations immutable" do
|
38
|
+
expect {
|
39
|
+
subject.library_id = Library.create!.pid
|
40
|
+
}.to raise_error RuntimeError, "can't modify frozen Book"
|
41
|
+
expect(subject.library_id).to eq library.pid
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "when the association is set via an id" do
|
45
|
+
subject {Book.new(library_id: library.id)}
|
46
|
+
it "should be able to load the association" do
|
47
|
+
expect(subject.library).to eq library
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should make the om properties immutable" do
|
52
|
+
expect {
|
53
|
+
subject.title = "HEY"
|
54
|
+
}.to raise_error RuntimeError, "can't modify frozen ActiveFedora::SimpleDatastream"
|
55
|
+
expect(subject.title).to eq "War and Peace"
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should make the RDF properties immutable" do
|
59
|
+
expect {
|
60
|
+
subject.publisher = "HEY"
|
61
|
+
}.to raise_error RuntimeError, "can't modify frozen MyDatastream"
|
62
|
+
expect(subject.publisher).to eq "Random House"
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "an object that hasn't loaded the associations" do
|
68
|
+
before {subject.save! }
|
69
|
+
|
70
|
+
it "should access associations" do
|
71
|
+
f = Book.find(subject.id)
|
72
|
+
f.freeze
|
73
|
+
f.library_id.should_not be_nil
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -82,8 +82,8 @@ describe ActiveFedora::NtriplesRDFDatastream do
|
|
82
82
|
@two = ActiveFedora::RDFDatastream.new('fakepid', 'myQuix')
|
83
83
|
end
|
84
84
|
it "should generate predictable prexies" do
|
85
|
-
@one
|
86
|
-
@two.
|
85
|
+
@one.apply_prefix("baz").should == 'my_foobar__baz'
|
86
|
+
@two.apply_prefix("baz").should == 'my_quix__baz'
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
@@ -180,8 +180,8 @@ describe ActiveFedora::NtriplesRDFDatastream do
|
|
180
180
|
end
|
181
181
|
|
182
182
|
it "should have a solr_name method" do
|
183
|
-
expect(MyDatastream.
|
184
|
-
expect(MyDatastream.
|
183
|
+
expect(MyDatastream.new(nil, 'descMetadata').primary_solr_name(:based_near)).to eq 'desc_metadata__based_near_sim'
|
184
|
+
expect(MyDatastream.new(nil, 'props').primary_solr_name(:title)).to eq 'props__title_tesim'
|
185
185
|
end
|
186
186
|
|
187
187
|
it "should optionally allow you to provide the Solr::Document to add fields to and return that document when done" do
|
@@ -55,6 +55,13 @@ describe ActiveFedora::OmDatastream do
|
|
55
55
|
n.ng_xml.should be_equivalent_to("<fake template/>")
|
56
56
|
end
|
57
57
|
end
|
58
|
+
|
59
|
+
describe "#prefix" do
|
60
|
+
subject { ActiveFedora::OmDatastream.new(nil, 'descMetadata') }
|
61
|
+
it "should be an empty string (until active-fedora 8. Then it should be \"\#{dsid.underscore}__\"" do
|
62
|
+
subject.send(:prefix).should == ""
|
63
|
+
end
|
64
|
+
end
|
58
65
|
|
59
66
|
describe '#xml_template' do
|
60
67
|
it "should return an empty xml document" do
|
@@ -62,10 +69,39 @@ describe ActiveFedora::OmDatastream do
|
|
62
69
|
end
|
63
70
|
end
|
64
71
|
|
65
|
-
describe "
|
66
|
-
|
67
|
-
|
68
|
-
|
72
|
+
describe "to_solr" do
|
73
|
+
describe "with a dsid" do
|
74
|
+
subject { ActiveFedora::OmDatastream.new(@mock_inner, "descMetadata") }
|
75
|
+
its(:to_solr) {should == { }}
|
76
|
+
end
|
77
|
+
describe "without a dsid" do
|
78
|
+
subject { ActiveFedora::OmDatastream.new }
|
79
|
+
it "should raise an error" do
|
80
|
+
expect{subject.to_solr}.to raise_error RuntimeError, "to_solr requires the dsid to be set"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe "when prefix is set" do
|
85
|
+
before do
|
86
|
+
class MyDatastream < ActiveFedora::OmDatastream
|
87
|
+
set_terminology do |t|
|
88
|
+
t.root(:path=>"mods")
|
89
|
+
t.title(:index_as=>[:stored_searchable])
|
90
|
+
end
|
91
|
+
def prefix
|
92
|
+
"foo__"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
after do
|
97
|
+
Object.send(:remove_const, :MyDatastream)
|
98
|
+
end
|
99
|
+
subject { MyDatastream.new }
|
100
|
+
it "should use the prefix" do
|
101
|
+
subject.title = 'Science'
|
102
|
+
expect(subject.to_solr).to have_key('foo__title_tesim')
|
103
|
+
end
|
104
|
+
end
|
69
105
|
end
|
70
106
|
|
71
107
|
describe ".update_indexed_attributes" do
|
data/spec/unit/query_spec.rb
CHANGED
@@ -84,9 +84,9 @@ describe ActiveFedora::Base do
|
|
84
84
|
hash[:params][:sort] == [@sort_query] &&
|
85
85
|
hash[:params][:fl] == 'id' &&
|
86
86
|
hash[:params][:q].split(" AND ").include?(@model_query) &&
|
87
|
-
hash[:params][:q].split(" AND ").include?("foo
|
88
|
-
hash[:params][:q].split(" AND ").include?("baz
|
89
|
-
hash[:params][:q].split(" AND ").include?("baz
|
87
|
+
hash[:params][:q].split(" AND ").include?("foo:bar") &&
|
88
|
+
hash[:params][:q].split(" AND ").include?("baz:quix") &&
|
89
|
+
hash[:params][:q].split(" AND ").include?("baz:quack")
|
90
90
|
}.and_return('response'=>{'docs'=>mock_docs})
|
91
91
|
SpecModel::Basic.find({:foo=>'bar', :baz=>['quix','quack']}).should == ["Fake Object1", "Fake Object2"]
|
92
92
|
end
|
@@ -113,9 +113,9 @@ describe ActiveFedora::Base do
|
|
113
113
|
hash[:params][:fl] == 'id' &&
|
114
114
|
hash[:params][:sort] == [@sort_query] &&
|
115
115
|
hash[:params][:q].split(" AND ").include?(@model_query) &&
|
116
|
-
hash[:params][:q].split(" AND ").include?("foo
|
117
|
-
hash[:params][:q].split(" AND ").include?("baz
|
118
|
-
hash[:params][:q].split(" AND ").include?("baz
|
116
|
+
hash[:params][:q].split(" AND ").include?("foo:bar") &&
|
117
|
+
hash[:params][:q].split(" AND ").include?("baz:quix") &&
|
118
|
+
hash[:params][:q].split(" AND ").include?("baz:quack")
|
119
119
|
}.and_return('response'=>{'docs'=>mock_docs})
|
120
120
|
SpecModel::Basic.find({:foo=>'bar', :baz=>['quix','quack']}, :sort=>'title_t desc').should == ["Fake Object1", "Fake Object2"]
|
121
121
|
end
|
@@ -153,9 +153,9 @@ describe ActiveFedora::Base do
|
|
153
153
|
hash[:params][:sort] == [@sort_query] &&
|
154
154
|
hash[:params][:fl] == 'id' &&
|
155
155
|
hash[:params][:q].split(" AND ").include?(@model_query) &&
|
156
|
-
hash[:params][:q].split(" AND ").include?("foo
|
157
|
-
hash[:params][:q].split(" AND ").include?("baz
|
158
|
-
hash[:params][:q].split(" AND ").include?("baz
|
156
|
+
hash[:params][:q].split(" AND ").include?("foo:bar") &&
|
157
|
+
hash[:params][:q].split(" AND ").include?("baz:quix") &&
|
158
|
+
hash[:params][:q].split(" AND ").include?("baz:quack")
|
159
159
|
}.and_return('response'=>{'docs'=>mock_docs})
|
160
160
|
yielded = double("yielded method")
|
161
161
|
yielded.should_receive(:run).with { |obj| obj.class == SpecModel::Basic}.twice
|
@@ -177,9 +177,9 @@ describe ActiveFedora::Base do
|
|
177
177
|
hash[:params][:sort] == [@sort_query] &&
|
178
178
|
hash[:params][:fl] == 'id' &&
|
179
179
|
hash[:params][:q].split(" AND ").include?(@model_query) &&
|
180
|
-
hash[:params][:q].split(" AND ").include?("foo
|
181
|
-
hash[:params][:q].split(" AND ").include?("baz
|
182
|
-
hash[:params][:q].split(" AND ").include?("baz
|
180
|
+
hash[:params][:q].split(" AND ").include?("foo:bar") &&
|
181
|
+
hash[:params][:q].split(" AND ").include?("baz:quix") &&
|
182
|
+
hash[:params][:q].split(" AND ").include?("baz:quack")
|
183
183
|
}.and_return('response'=>{'docs'=>mock_docs})
|
184
184
|
yielded = double("yielded method")
|
185
185
|
yielded.should_receive(:run).with(mock_docs)
|
@@ -257,9 +257,9 @@ describe ActiveFedora::Base do
|
|
257
257
|
q = args.first if args.is_a? Array
|
258
258
|
q ||= args
|
259
259
|
q.split(" AND ").include?(@model_query) &&
|
260
|
-
q.split(" AND ").include?("foo
|
261
|
-
q.split(" AND ").include?("baz
|
262
|
-
q.split(" AND ").include?("baz
|
260
|
+
q.split(" AND ").include?("foo:bar") &&
|
261
|
+
q.split(" AND ").include?("baz:quix") &&
|
262
|
+
q.split(" AND ").include?("baz:quack")
|
263
263
|
}.and_return(mock_result)
|
264
264
|
SpecModel::Basic.find_with_conditions(:foo=>'bar', :baz=>['quix','quack']).should == mock_result
|
265
265
|
end
|
@@ -271,16 +271,16 @@ describe ActiveFedora::Base do
|
|
271
271
|
q ||= args
|
272
272
|
q.split(" AND ").include?(@model_query) &&
|
273
273
|
q.split(" AND ").include?(@model_query) &&
|
274
|
-
q.split(" AND ").include?('foo:
|
275
|
-
q.split(" AND ").include?('baz:
|
276
|
-
q.split(" AND ").include?('baz:
|
274
|
+
q.split(" AND ").include?('foo:9\\"\\ Nails') &&
|
275
|
+
q.split(" AND ").include?('baz:7\\"\\ version') &&
|
276
|
+
q.split(" AND ").include?('baz:quack')
|
277
277
|
}.and_return(mock_result)
|
278
278
|
SpecModel::Basic.find_with_conditions(:foo=>'9" Nails', :baz=>['7" version','quack']).should == mock_result
|
279
279
|
end
|
280
280
|
|
281
281
|
it "shouldn't use the class if it's called on AF:Base " do
|
282
282
|
mock_result = double('Result')
|
283
|
-
ActiveFedora::SolrService.should_receive(:query).with('baz:
|
283
|
+
ActiveFedora::SolrService.should_receive(:query).with('baz:quack', {:sort => [@sort_query]}).and_return(mock_result)
|
284
284
|
ActiveFedora::Base.find_with_conditions(:baz=>'quack').should == mock_result
|
285
285
|
end
|
286
286
|
it "should use the query string if it's provided" do
|
@@ -28,10 +28,11 @@ describe ActiveFedora::RelsExtDatastream do
|
|
28
28
|
|
29
29
|
describe "#changed?" do
|
30
30
|
it "should be false when no changes have been made" do
|
31
|
+
subject.model = double(:relationships_are_dirty? => false)
|
31
32
|
subject.changed?.should == false
|
32
33
|
end
|
33
34
|
it "should be true when the model has changes" do
|
34
|
-
subject.model = double(:relationships_are_dirty=>true)
|
35
|
+
subject.model = double(:relationships_are_dirty? => true)
|
35
36
|
subject.changed?.should == true
|
36
37
|
end
|
37
38
|
end
|
@@ -44,7 +45,7 @@ describe ActiveFedora::RelsExtDatastream do
|
|
44
45
|
subject = RDF::URI.new "info:fedora/test:sample_pid"
|
45
46
|
graph.insert RDF::Statement.new(subject, ActiveFedora::Predicates.find_graph_predicate(:is_member_of), RDF::URI.new('demo:10'))
|
46
47
|
|
47
|
-
@test_ds.stub(:new? => true, :
|
48
|
+
@test_ds.stub(:new? => true, :relationships => graph, :model => double(:relationships_are_dirty? =>true, :relationships_are_not_dirty! => true))
|
48
49
|
@test_ds.serialize!
|
49
50
|
EquivalentXml.equivalent?(@test_ds.content, "<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>\n <rdf:Description rdf:about='info:fedora/test:sample_pid'>\n <isMemberOf rdf:resource='demo:10' xmlns='info:fedora/fedora-system:def/relations-external#'/></rdf:Description>\n </rdf:RDF>").should be_true
|
50
51
|
end
|
@@ -1,8 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
|
-
#include ActiveFedora
|
5
|
-
|
6
3
|
describe ActiveFedora do
|
7
4
|
|
8
5
|
before(:all) do
|
@@ -35,7 +32,7 @@ describe ActiveFedora do
|
|
35
32
|
|
36
33
|
it "should be used by ActiveFedora::Base#find_with_conditions" do
|
37
34
|
mock_response = double("SolrResponse")
|
38
|
-
ActiveFedora::SolrService.should_receive(:query).with("_query_:\"{!raw f=#{ActiveFedora::SolrService.solr_name("has_model", :symbol)}}info:fedora/afmodel:SolrSpecModel_Basic\" AND " + SOLR_DOCUMENT_ID + ':
|
35
|
+
ActiveFedora::SolrService.should_receive(:query).with("_query_:\"{!raw f=#{ActiveFedora::SolrService.solr_name("has_model", :symbol)}}info:fedora/afmodel:SolrSpecModel_Basic\" AND " + SOLR_DOCUMENT_ID + ':changeme\\:30', {:sort => ["#{ActiveFedora::SolrService.solr_name("system_create", :stored_sortable, type: :date)} asc"]}).and_return(mock_response)
|
39
36
|
|
40
37
|
SolrSpecModel::Basic.find_with_conditions(:id=>"changeme:30").should equal(mock_response)
|
41
38
|
end
|
@@ -91,6 +91,12 @@ describe ActiveFedora::SolrService do
|
|
91
91
|
end
|
92
92
|
end
|
93
93
|
end
|
94
|
+
|
95
|
+
describe "raw_query" do
|
96
|
+
it "should generate a raw query clause" do
|
97
|
+
expect(ActiveFedora::SolrService.raw_query('id', "my:_PID1_")).to eq '_query_:"{!raw f=id}my:_PID1_"'
|
98
|
+
end
|
99
|
+
end
|
94
100
|
|
95
101
|
describe '#construct_query_for_pids' do
|
96
102
|
it "should generate a useable solr query from an array of Fedora pids" do
|
@@ -138,7 +144,7 @@ describe ActiveFedora::SolrService do
|
|
138
144
|
it "should call solr" do
|
139
145
|
mock_conn = double("Connection")
|
140
146
|
doc = {'id' => '1234'}
|
141
|
-
mock_conn.should_receive(:add).with(doc)
|
147
|
+
mock_conn.should_receive(:add).with(doc, {:params=>{}})
|
142
148
|
ActiveFedora::SolrService.stub(:instance =>double("instance", :conn=>mock_conn))
|
143
149
|
ActiveFedora::SolrService.add(doc)
|
144
150
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active-fedora
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.0.0.
|
4
|
+
version: 7.0.0.pre3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Zumwalt
|
@@ -10,22 +10,22 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-01-
|
13
|
+
date: 2014-01-17 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rsolr
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 1.0.10.pre1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
|
-
- -
|
26
|
+
- - ~>
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version:
|
28
|
+
version: 1.0.10.pre1
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: om
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
@@ -88,14 +88,14 @@ dependencies:
|
|
88
88
|
requirements:
|
89
89
|
- - ~>
|
90
90
|
- !ruby/object:Gem::Version
|
91
|
-
version: 1.7.0
|
91
|
+
version: 1.7.0
|
92
92
|
type: :runtime
|
93
93
|
prerelease: false
|
94
94
|
version_requirements: !ruby/object:Gem::Requirement
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
97
97
|
- !ruby/object:Gem::Version
|
98
|
-
version: 1.7.0
|
98
|
+
version: 1.7.0
|
99
99
|
- !ruby/object:Gem::Dependency
|
100
100
|
name: rdf
|
101
101
|
requirement: !ruby/object:Gem::Requirement
|
@@ -478,6 +478,7 @@ files:
|
|
478
478
|
- spec/unit/code_configurator_spec.rb
|
479
479
|
- spec/unit/config_spec.rb
|
480
480
|
- spec/unit/content_model_spec.rb
|
481
|
+
- spec/unit/core_spec.rb
|
481
482
|
- spec/unit/datastream_collections_spec.rb
|
482
483
|
- spec/unit/datastream_spec.rb
|
483
484
|
- spec/unit/datastreams_spec.rb
|
@@ -621,6 +622,7 @@ test_files:
|
|
621
622
|
- spec/unit/code_configurator_spec.rb
|
622
623
|
- spec/unit/config_spec.rb
|
623
624
|
- spec/unit/content_model_spec.rb
|
625
|
+
- spec/unit/core_spec.rb
|
624
626
|
- spec/unit/datastream_collections_spec.rb
|
625
627
|
- spec/unit/datastream_spec.rb
|
626
628
|
- spec/unit/datastreams_spec.rb
|