active-fedora 9.9.1 → 9.10.0.pre1

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.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -2
  3. data/.travis.yml +2 -6
  4. data/active-fedora.gemspec +9 -6
  5. data/lib/active_fedora.rb +31 -15
  6. data/lib/active_fedora/associations.rb +1 -1
  7. data/lib/active_fedora/associations/association.rb +6 -2
  8. data/lib/active_fedora/associations/belongs_to_association.rb +0 -10
  9. data/lib/active_fedora/associations/builder/association.rb +85 -12
  10. data/lib/active_fedora/associations/builder/belongs_to.rb +3 -1
  11. data/lib/active_fedora/associations/builder/collection_association.rb +4 -3
  12. data/lib/active_fedora/associations/builder/contains.rb +7 -2
  13. data/lib/active_fedora/associations/builder/directly_contains.rb +7 -3
  14. data/lib/active_fedora/associations/builder/directly_contains_one.rb +8 -4
  15. data/lib/active_fedora/associations/builder/has_and_belongs_to_many.rb +6 -2
  16. data/lib/active_fedora/associations/builder/has_many.rb +6 -2
  17. data/lib/active_fedora/associations/builder/indirectly_contains.rb +7 -3
  18. data/lib/active_fedora/associations/builder/property.rb +7 -2
  19. data/lib/active_fedora/associations/builder/singular_association.rb +3 -1
  20. data/lib/active_fedora/associations/builder/singular_property.rb +3 -1
  21. data/lib/active_fedora/associations/collection_association.rb +9 -5
  22. data/lib/active_fedora/associations/collection_proxy.rb +1 -1
  23. data/lib/active_fedora/associations/contained_finder.rb +1 -2
  24. data/lib/active_fedora/associations/directly_contains_one_association.rb +1 -1
  25. data/lib/active_fedora/associations/has_many_association.rb +1 -5
  26. data/lib/active_fedora/associations/rdf.rb +1 -20
  27. data/lib/active_fedora/attached_files.rb +1 -1
  28. data/lib/active_fedora/attribute_methods.rb +18 -0
  29. data/lib/active_fedora/attributes.rb +1 -1
  30. data/lib/active_fedora/autosave_association.rb +8 -12
  31. data/lib/active_fedora/base.rb +0 -2
  32. data/lib/active_fedora/caching_connection.rb +1 -1
  33. data/lib/active_fedora/default_model_mapper.rb +24 -0
  34. data/lib/active_fedora/fedora.rb +1 -1
  35. data/lib/active_fedora/file/attributes.rb +4 -5
  36. data/lib/active_fedora/identifiable.rb +5 -0
  37. data/lib/active_fedora/indexing.rb +13 -7
  38. data/lib/active_fedora/indexing_service.rb +4 -4
  39. data/lib/active_fedora/ldp_resource.rb +1 -0
  40. data/lib/active_fedora/model.rb +18 -16
  41. data/lib/active_fedora/model_classifier.rb +77 -0
  42. data/lib/active_fedora/nested_attributes.rb +145 -18
  43. data/lib/active_fedora/persistence.rb +1 -1
  44. data/lib/active_fedora/predicates.rb +3 -0
  45. data/lib/active_fedora/qualified_dublin_core_datastream.rb +1 -1
  46. data/lib/active_fedora/query_result_builder.rb +12 -28
  47. data/lib/active_fedora/querying.rb +1 -1
  48. data/lib/active_fedora/rdf/datastream_indexing.rb +1 -1
  49. data/lib/active_fedora/reflection.rb +15 -7
  50. data/lib/active_fedora/relation.rb +17 -0
  51. data/lib/active_fedora/relation/calculations.rb +1 -5
  52. data/lib/active_fedora/relation/finder_methods.rb +39 -26
  53. data/lib/active_fedora/scoping.rb +5 -0
  54. data/lib/active_fedora/scoping/default.rb +113 -0
  55. data/lib/active_fedora/scoping/named.rb +11 -3
  56. data/lib/active_fedora/simple_datastream.rb +1 -1
  57. data/lib/active_fedora/solr_hit.rb +71 -0
  58. data/lib/active_fedora/solr_instance_loader.rb +12 -36
  59. data/lib/active_fedora/solr_query_builder.rb +20 -25
  60. data/lib/active_fedora/solr_service.rb +24 -13
  61. data/lib/active_fedora/type.rb +8 -0
  62. data/lib/active_fedora/type/boolean.rb +23 -0
  63. data/lib/active_fedora/type/value.rb +118 -0
  64. data/lib/active_fedora/validations.rb +14 -5
  65. data/lib/active_fedora/version.rb +1 -1
  66. data/lib/active_fedora/versionable.rb +8 -7
  67. data/spec/config_helper.rb +0 -5
  68. data/spec/integration/associations_spec.rb +5 -5
  69. data/spec/integration/base_spec.rb +4 -4
  70. data/spec/integration/bug_spec.rb +0 -1
  71. data/spec/integration/full_featured_model_spec.rb +4 -4
  72. data/spec/integration/has_and_belongs_to_many_associations_spec.rb +1 -1
  73. data/spec/integration/has_many_associations_spec.rb +30 -1
  74. data/spec/integration/indirect_container_spec.rb +1 -1
  75. data/spec/integration/nested_attribute_spec.rb +6 -0
  76. data/spec/integration/ntriples_datastream_spec.rb +4 -4
  77. data/spec/integration/om_datastream_spec.rb +1 -1
  78. data/spec/integration/relation_delegation_spec.rb +1 -1
  79. data/spec/integration/scoped_query_spec.rb +12 -12
  80. data/spec/integration/solr_hit_spec.rb +52 -0
  81. data/spec/samples/hydra-mods_article_datastream.rb +2 -2
  82. data/spec/spec_helper.rb +5 -9
  83. data/spec/unit/active_fedora_spec.rb +0 -26
  84. data/spec/unit/base_spec.rb +20 -0
  85. data/spec/unit/builder/has_and_belongs_to_many_spec.rb +2 -3
  86. data/spec/unit/callback_spec.rb +3 -8
  87. data/spec/unit/default_model_mapper_spec.rb +39 -0
  88. data/spec/unit/finder_methods_spec.rb +30 -6
  89. data/spec/unit/has_many_association_spec.rb +23 -1
  90. data/spec/unit/indexing_spec.rb +17 -3
  91. data/spec/unit/model_classifier_spec.rb +49 -0
  92. data/spec/unit/model_spec.rb +0 -9
  93. data/spec/unit/ntriples_datastream_spec.rb +16 -16
  94. data/spec/unit/om_datastream_spec.rb +7 -7
  95. data/spec/unit/qualified_dublin_core_datastream_spec.rb +1 -1
  96. data/spec/unit/query_result_builder_spec.rb +4 -10
  97. data/spec/unit/query_spec.rb +28 -28
  98. data/spec/unit/rdf/indexing_service_spec.rb +16 -16
  99. data/spec/unit/scoping_spec.rb +67 -0
  100. data/spec/unit/simple_datastream_spec.rb +2 -2
  101. data/spec/unit/solr_config_options_spec.rb +29 -32
  102. data/spec/unit/solr_hit_spec.rb +58 -0
  103. data/spec/unit/solr_query_builder_spec.rb +9 -1
  104. data/spec/unit/solr_service_spec.rb +19 -3
  105. metadata +73 -17
  106. data/spec/support/freeze_mocks.rb +0 -12
@@ -7,8 +7,8 @@ describe ActiveFedora::Base do
7
7
  end
8
8
  end
9
9
  end
10
- let(:sort_query) { ActiveFedora::SolrQueryBuilder.solr_name("system_create", :stored_sortable, type: :date) + ' asc' }
11
- let(:model_query) { "_query_:\"{!raw f=has_model_ssim}SpecModel::Basic\"" }
10
+ let(:sort_query) { ActiveFedora.index_field_mapper.solr_name("system_create", :stored_sortable, type: :date) + ' asc' }
11
+ let(:model_query) { "_query_:\"{!field f=has_model_ssim}SpecModel::Basic\"" }
12
12
 
13
13
  after(:all) do
14
14
  Object.send(:remove_const, :SpecModel)
@@ -77,9 +77,9 @@ describe ActiveFedora::Base do
77
77
  let(:relation) { ActiveFedora::Relation.new(SpecModel::Basic) }
78
78
  let(:solr) { ActiveFedora::SolrService.instance.conn }
79
79
  let(:expected_query) { "#{model_query} AND " \
80
- "_query_:\"{!raw f=foo}bar\" AND " \
81
- "_query_:\"{!raw f=baz}quix\" AND " \
82
- "_query_:\"{!raw f=baz}quack\"" }
80
+ "_query_:\"{!field f=foo}bar\" AND " \
81
+ "_query_:\"{!field f=baz}quix\" AND " \
82
+ "_query_:\"{!field f=baz}quack\"" }
83
83
  let(:expected_params) { { params: { sort: [sort_query], fl: 'id', q: expected_query, qt: 'standard' } } }
84
84
  let(:expected_sort_params) { { params: { sort: ["title_t desc"], fl: 'id', q: expected_query, qt: 'standard' } } }
85
85
  let(:mock_docs) { [{ "id" => "changeme:30" }, { "id" => "changeme:22" }] }
@@ -136,9 +136,9 @@ describe ActiveFedora::Base do
136
136
  describe "with conditions" do
137
137
  let(:solr) { ActiveFedora::SolrService.instance.conn }
138
138
  let(:expected_query) { "#{model_query} AND " \
139
- "_query_:\"{!raw f=foo}bar\" AND " \
140
- "_query_:\"{!raw f=baz}quix\" AND " \
141
- "_query_:\"{!raw f=baz}quack\"" }
139
+ "_query_:\"{!field f=foo}bar\" AND " \
140
+ "_query_:\"{!field f=baz}quix\" AND " \
141
+ "_query_:\"{!field f=baz}quack\"" }
142
142
  let(:expected_params) { { params: { sort: [sort_query], fl: 'id', q: expected_query, qt: 'standard' } } }
143
143
  let(:mock_docs) { [{ "id" => "changeme-30" }, { "id" => "changeme-22" }] }
144
144
 
@@ -153,13 +153,13 @@ describe ActiveFedora::Base do
153
153
  end
154
154
  end
155
155
 
156
- describe '#find_in_batches' do
156
+ describe '#search_in_batches' do
157
157
  describe "with conditions hash" do
158
158
  let(:solr) { ActiveFedora::SolrService.instance.conn }
159
159
  let(:expected_query) { "#{model_query} AND " \
160
- "_query_:\"{!raw f=foo}bar\" AND " \
161
- "_query_:\"{!raw f=baz}quix\" AND " \
162
- "_query_:\"{!raw f=baz}quack\"" }
160
+ "_query_:\"{!field f=foo}bar\" AND " \
161
+ "_query_:\"{!field f=baz}quix\" AND " \
162
+ "_query_:\"{!field f=baz}quack\"" }
163
163
  let(:expected_params) { { params: { sort: [sort_query], fl: 'id', q: expected_query, qt: 'standard' } } }
164
164
  let(:mock_docs) { double('docs') }
165
165
 
@@ -168,7 +168,7 @@ describe ActiveFedora::Base do
168
168
  expect(solr).to receive(:paginate).with(1, 1002, 'select', expected_params).and_return('response' => { 'docs' => mock_docs })
169
169
  yielded = double("yielded method")
170
170
  expect(yielded).to receive(:run).with(mock_docs)
171
- SpecModel::Basic.find_in_batches({ foo: 'bar', baz: ['quix', 'quack'] }, batch_size: 1002, fl: 'id') { |group| yielded.run group }
171
+ SpecModel::Basic.search_in_batches({ foo: 'bar', baz: ['quix', 'quack'] }, batch_size: 1002, fl: 'id') { |group| yielded.run group }
172
172
  end
173
173
  end
174
174
  end
@@ -177,22 +177,22 @@ describe ActiveFedora::Base do
177
177
  let(:mock_result) { { 'response' => { 'numFound' => 7 } } }
178
178
 
179
179
  it "returns a count" do
180
- expect(ActiveFedora::SolrService).to receive(:query)
181
- .with(model_query, rows: 0, raw: true)
180
+ expect(ActiveFedora::SolrService).to receive(:get)
181
+ .with(model_query, rows: 0)
182
182
  .and_return(mock_result)
183
183
  expect(SpecModel::Basic.count).to eq 7
184
184
  end
185
185
 
186
186
  it "allows conditions" do
187
- expect(ActiveFedora::SolrService).to receive(:query)
188
- .with("#{model_query} AND (foo:bar)", rows: 0, raw: true)
187
+ expect(ActiveFedora::SolrService).to receive(:get)
188
+ .with("#{model_query} AND (foo:bar)", rows: 0)
189
189
  .and_return(mock_result)
190
190
  expect(SpecModel::Basic.count(conditions: 'foo:bar')).to eq 7
191
191
  end
192
192
 
193
193
  it "counts without a class specified" do
194
- expect(ActiveFedora::SolrService).to receive(:query)
195
- .with("(foo:bar)", rows: 0, raw: true)
194
+ expect(ActiveFedora::SolrService).to receive(:get)
195
+ .with("(foo:bar)", rows: 0)
196
196
  .and_return(mock_result)
197
197
  expect(described_class.count(conditions: 'foo:bar')).to eq 7
198
198
  end
@@ -240,10 +240,10 @@ describe ActiveFedora::Base do
240
240
  end
241
241
  end
242
242
 
243
- describe '#find_with_conditions' do
243
+ describe '#search_with_conditions' do
244
244
  let(:mock_result) { double('Result') }
245
245
  let(:klass) { SpecModel::Basic }
246
- subject { klass.find_with_conditions(conditions) }
246
+ subject { klass.search_with_conditions(conditions) }
247
247
 
248
248
  before do
249
249
  expect(ActiveFedora::SolrService).to receive(:query)
@@ -252,9 +252,9 @@ describe ActiveFedora::Base do
252
252
 
253
253
  context "with a hash of conditions" do
254
254
  let(:expected_query) { "#{model_query} AND " \
255
- "_query_:\"{!raw f=foo}bar\" AND " \
256
- "_query_:\"{!raw f=baz}quix\" AND " \
257
- "_query_:\"{!raw f=baz}quack\"" }
255
+ "_query_:\"{!field f=foo}bar\" AND " \
256
+ "_query_:\"{!field f=baz}quix\" AND " \
257
+ "_query_:\"{!field f=baz}quack\"" }
258
258
  let(:conditions) { { foo: 'bar', baz: ['quix', 'quack'] } }
259
259
 
260
260
  it "makes a query to solr and returns the results" do
@@ -264,9 +264,9 @@ describe ActiveFedora::Base do
264
264
 
265
265
  context "with quotes in the params" do
266
266
  let(:expected_query) { "#{model_query} AND " \
267
- "_query_:\"{!raw f=foo}9\\\" Nails\" AND " \
268
- "_query_:\"{!raw f=baz}7\\\" version\" AND " \
269
- "_query_:\"{!raw f=baz}quack\"" }
267
+ "_query_:\"{!field f=foo}9\\\" Nails\" AND " \
268
+ "_query_:\"{!field f=baz}7\\\" version\" AND " \
269
+ "_query_:\"{!field f=baz}quack\"" }
270
270
  let(:conditions) { { foo: '9" Nails', baz: ['7" version', 'quack'] } }
271
271
 
272
272
  it "escapes quotes" do
@@ -279,7 +279,7 @@ describe ActiveFedora::Base do
279
279
 
280
280
  context "with a hash" do
281
281
  let(:conditions) { { baz: 'quack' } }
282
- let(:expected_query) { "_query_:\"{!raw f=baz}quack\"" }
282
+ let(:expected_query) { "_query_:\"{!field f=baz}quack\"" }
283
283
  it "doesn't use the class if it's called on AF:Base " do
284
284
  expect(subject).to eq mock_result
285
285
  end
@@ -47,25 +47,25 @@ describe ActiveFedora::RDF::IndexingService do
47
47
  describe "#generate_solr_document" do
48
48
  subject { indexer.generate_solr_document(lambda { |key| "solr_rdf__#{key}" }) }
49
49
  it "returns the right fields" do
50
- expect(subject.keys).to include(ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__related_url", type: :string),
51
- ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__publisher", type: :string),
52
- ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__publisher", :sortable),
53
- ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__publisher", :facetable),
54
- ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__created", :sortable, type: :date),
55
- ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__created", :displayable),
56
- ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__title", type: :string),
57
- ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__title", :sortable),
58
- ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__based_near", type: :string),
59
- ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__based_near", :facetable))
50
+ expect(subject.keys).to include(ActiveFedora.index_field_mapper.solr_name("solr_rdf__related_url", type: :string),
51
+ ActiveFedora.index_field_mapper.solr_name("solr_rdf__publisher", type: :string),
52
+ ActiveFedora.index_field_mapper.solr_name("solr_rdf__publisher", :sortable),
53
+ ActiveFedora.index_field_mapper.solr_name("solr_rdf__publisher", :facetable),
54
+ ActiveFedora.index_field_mapper.solr_name("solr_rdf__created", :sortable, type: :date),
55
+ ActiveFedora.index_field_mapper.solr_name("solr_rdf__created", :displayable),
56
+ ActiveFedora.index_field_mapper.solr_name("solr_rdf__title", type: :string),
57
+ ActiveFedora.index_field_mapper.solr_name("solr_rdf__title", :sortable),
58
+ ActiveFedora.index_field_mapper.solr_name("solr_rdf__based_near", type: :string),
59
+ ActiveFedora.index_field_mapper.solr_name("solr_rdf__based_near", :facetable))
60
60
  end
61
61
 
62
62
  it "returns the right values" do
63
- expect(subject[ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__related_url", type: :string)]).to eq ["http://example.org/blogtastic/"]
64
- expect(subject[ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__based_near", type: :string)]).to eq ["Tacoma, WA", "Renton, WA"]
65
- expect(subject[ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__based_near", :facetable)]).to eq ["Tacoma, WA", "Renton, WA"]
66
- expect(subject[ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__publisher", type: :string)]).to eq ["Bob's Blogtastic Publishing"]
67
- expect(subject[ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__publisher", :sortable)]).to eq "Bob's Blogtastic Publishing"
68
- expect(subject[ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__publisher", :facetable)]).to eq ["Bob's Blogtastic Publishing"]
63
+ expect(subject[ActiveFedora.index_field_mapper.solr_name("solr_rdf__related_url", type: :string)]).to eq ["http://example.org/blogtastic/"]
64
+ expect(subject[ActiveFedora.index_field_mapper.solr_name("solr_rdf__based_near", type: :string)]).to eq ["Tacoma, WA", "Renton, WA"]
65
+ expect(subject[ActiveFedora.index_field_mapper.solr_name("solr_rdf__based_near", :facetable)]).to eq ["Tacoma, WA", "Renton, WA"]
66
+ expect(subject[ActiveFedora.index_field_mapper.solr_name("solr_rdf__publisher", type: :string)]).to eq ["Bob's Blogtastic Publishing"]
67
+ expect(subject[ActiveFedora.index_field_mapper.solr_name("solr_rdf__publisher", :sortable)]).to eq "Bob's Blogtastic Publishing"
68
+ expect(subject[ActiveFedora.index_field_mapper.solr_name("solr_rdf__publisher", :facetable)]).to eq ["Bob's Blogtastic Publishing"]
69
69
  end
70
70
  end
71
71
 
@@ -0,0 +1,67 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveFedora::Scoping::Default do
4
+ describe "when default_scope is overridden" do
5
+ before do
6
+ class Book < ActiveFedora::Base
7
+ property :published, predicate: ::RDF::Vocab::EBUCore.pubStatus do |index|
8
+ index.as :symbol
9
+ end
10
+
11
+ def self.default_scope
12
+ where published_ssim: 'true'
13
+ end
14
+ end
15
+
16
+ Book.destroy_all
17
+ Book.create!(published: [true])
18
+ Book.create!(published: [true])
19
+ Book.create!(published: [false])
20
+ end
21
+
22
+ after do
23
+ Object.send(:remove_const, :Book)
24
+ end
25
+
26
+ it "returns only the scoped records" do
27
+ expect(Book.all.size).to eq 2
28
+ end
29
+
30
+ it "returns all the records" do
31
+ Book.unscoped do
32
+ expect(Book.all.size).to eq 3
33
+ end
34
+ end
35
+ end
36
+
37
+ describe "when default_scope is called" do
38
+ before do
39
+ class Book < ActiveFedora::Base
40
+ property :published, predicate: ::RDF::Vocab::EBUCore.pubStatus do |index|
41
+ index.as :symbol
42
+ end
43
+
44
+ default_scope -> { where published_ssim: 'true' }
45
+ end
46
+
47
+ Book.destroy_all
48
+ Book.create!(published: [true])
49
+ Book.create!(published: [true])
50
+ Book.create!(published: [false])
51
+ end
52
+
53
+ after do
54
+ Object.send(:remove_const, :Book)
55
+ end
56
+
57
+ it "returns only the scoped records" do
58
+ expect(Book.all.size).to eq 2
59
+ end
60
+
61
+ it "returns all the records" do
62
+ Book.unscoped do
63
+ expect(Book.all.size).to eq 3
64
+ end
65
+ end
66
+ end
67
+ end
@@ -54,8 +54,8 @@ describe ActiveFedora::SimpleDatastream do
54
54
  describe "#to_solr" do
55
55
  it "has title" do
56
56
  solr = @test_ds.to_solr
57
- expect(solr[ActiveFedora::SolrQueryBuilder.solr_name('publisher', type: :string)]).to eq "publisher1"
58
- expect(solr[ActiveFedora::SolrQueryBuilder.solr_name('creation_date', type: :date)]).to eq "2012-01-15"
57
+ expect(solr[ActiveFedora.index_field_mapper.solr_name('publisher', type: :string)]).to eq "publisher1"
58
+ expect(solr[ActiveFedora.index_field_mapper.solr_name('creation_date', type: :date)]).to eq "2012-01-15"
59
59
  end
60
60
  end
61
61
 
@@ -12,52 +12,49 @@ describe ActiveFedora do
12
12
  @test_object = ActiveFedora::Base.new
13
13
  end
14
14
 
15
- describe "SOLR_DOCUMENT_ID" do
16
- before(:all) do
17
- SOLR_DOCUMENT_ID = "MY_SAMPLE_ID".freeze
18
- end
19
- after(:all) do
20
- SOLR_DOCUMENT_ID = "id".freeze
15
+ describe ".id_field" do
16
+ let(:field) { "MY_SAMPLE_ID".freeze }
17
+ before do
18
+ allow(described_class).to receive(:id_field).and_return(field)
21
19
  end
20
+
22
21
  it "is used by ActiveFedora::Base.to_solr" do
23
22
  allow(@test_object).to receive(:id).and_return('changeme:123')
24
- SOLR_DOCUMENT_ID = "MY_SAMPLE_ID".freeze
25
- expect(@test_object.to_solr[SOLR_DOCUMENT_ID.to_sym]).to eq 'changeme:123'
23
+ expect(@test_object.to_solr[field.to_sym]).to eq 'changeme:123'
26
24
  expect(@test_object.to_solr[:id]).to be_nil
27
25
  end
28
26
 
29
- it "is used by ActiveFedora::Base#find_with_conditions" do
27
+ it "is used by ActiveFedora::Base#search_with_conditions" do
30
28
  mock_response = double("SolrResponse")
31
29
  expect(ActiveFedora::SolrService).to receive(:query)
32
- .with("_query_:\"{!raw f=has_model_ssim}SolrSpecModel::Basic\" AND " \
33
- "_query_:\"{!raw f=MY_SAMPLE_ID}changeme:30\"",
34
- sort: ["#{ActiveFedora::SolrQueryBuilder.solr_name('system_create', :stored_sortable, type: :date)} asc"])
30
+ .with("_query_:\"{!field f=has_model_ssim}SolrSpecModel::Basic\" AND " \
31
+ "_query_:\"{!field f=#{field}}changeme:30\"",
32
+ sort: ["#{described_class.index_field_mapper.solr_name('system_create', :stored_sortable, type: :date)} asc"])
35
33
  .and_return(mock_response)
36
34
 
37
- expect(SolrSpecModel::Basic.find_with_conditions(id: "changeme:30")).to equal(mock_response)
35
+ expect(SolrSpecModel::Basic.search_with_conditions(id: "changeme:30")).to equal(mock_response)
38
36
  end
39
37
  end
40
38
 
41
- describe "ENABLE_SOLR_UPDATES" do
42
- before(:all) do
43
- ENABLE_SOLR_UPDATES = false
44
- end
45
- after(:all) do
46
- ENABLE_SOLR_UPDATES = true
47
- end
39
+ describe ".enable_solr_updates?" do
40
+ context 'with .enable_solr_updates? disabled' do
41
+ before do
42
+ allow(described_class).to receive(:enable_solr_updates?).and_return(false)
43
+ end
48
44
 
49
- it "prevents Base.save from calling update_index if false" do
50
- dirty_ds = ActiveFedora::SimpleDatastream.new
51
- @test_object.attached_files['ds1'] = dirty_ds
52
- allow(@test_object).to receive(:datastreams).and_return(ds1: dirty_ds)
53
- expect(@test_object).to receive(:update_index).never
54
- expect(@test_object).to receive(:refresh)
55
- @test_object.save
56
- end
57
- it "prevents Base.delete from deleting the corresponding Solr document if false" do
58
- expect(ActiveFedora::SolrService.instance.conn).to receive(:delete).with(@test_object.id).never
59
- expect(@test_object).to receive(:delete)
60
- @test_object.delete
45
+ it "prevents Base.save from calling update_index if false" do
46
+ dirty_ds = ActiveFedora::SimpleDatastream.new
47
+ @test_object.attached_files['ds1'] = dirty_ds
48
+ allow(@test_object).to receive(:datastreams).and_return(ds1: dirty_ds)
49
+ expect(@test_object).to receive(:update_index).never
50
+ expect(@test_object).to receive(:refresh)
51
+ @test_object.save
52
+ end
53
+ it "prevents Base.delete from deleting the corresponding Solr document if false" do
54
+ expect(ActiveFedora::SolrService.instance.conn).to receive(:delete).with(@test_object.id).never
55
+ expect(@test_object).to receive(:delete)
56
+ @test_object.delete
57
+ end
61
58
  end
62
59
  end
63
60
  end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveFedora::SolrHit do
4
+ before(:all) do
5
+ class AudioRecord < ActiveFedora::Base
6
+ attr_accessor :id
7
+ def self.connection_for_id(_id)
8
+ end
9
+ end
10
+ end
11
+
12
+ subject { described_class.new "id" => "my:_ID1_", ActiveFedora.index_field_mapper.solr_name("has_model", :symbol) => ["AudioRecord"] }
13
+
14
+ describe "#reify" do
15
+ it "uses .find to instantiate objects" do
16
+ expect(AudioRecord).to receive(:find).with("my:_ID1_", cast: true)
17
+ subject.reify
18
+ end
19
+ end
20
+
21
+ describe "#id" do
22
+ it "extracts the id from the solr hit" do
23
+ expect(subject.id).to eq "my:_ID1_"
24
+ end
25
+ end
26
+
27
+ describe "#rdf_uri" do
28
+ it "provides an RDF URI for the solr hit" do
29
+ expect(subject.rdf_uri).to eq ::RDF::URI.new(ActiveFedora::Base.id_to_uri("my:_ID1_"))
30
+ end
31
+ end
32
+
33
+ describe "#model" do
34
+ it "selects the appropriate model for the solr result" do
35
+ expect(subject.model).to eq AudioRecord
36
+ end
37
+ end
38
+
39
+ describe "#models" do
40
+ it "provides all the relevant models for the solr result" do
41
+ expect(subject.models).to match_array [AudioRecord]
42
+ end
43
+ end
44
+
45
+ describe "#model?" do
46
+ it 'is true if the object has the given model' do
47
+ expect(subject.model?(AudioRecord)).to eq true
48
+ end
49
+
50
+ it 'is true if the object has an ancestor of the given model' do
51
+ expect(subject.model?(ActiveFedora::Base)).to eq true
52
+ end
53
+
54
+ it 'is false if the given model is not in the ancestor tree for the models' do
55
+ expect(subject.model?(String)).to eq false
56
+ end
57
+ end
58
+ end
@@ -3,7 +3,15 @@ require 'spec_helper'
3
3
  describe ActiveFedora::SolrQueryBuilder do
4
4
  describe "raw_query" do
5
5
  it "generates a raw query clause" do
6
- expect(described_class.raw_query('id', "my:_ID1_")).to eq '_query_:"{!raw f=id}my:_ID1_"'
6
+ Deprecation.silence(described_class) do
7
+ expect(described_class.raw_query('id', "my:_ID1_")).to eq '_query_:"{!raw f=id}my:_ID1_"'
8
+ end
9
+ end
10
+ end
11
+
12
+ describe "construct_query" do
13
+ it "generates a query clause" do
14
+ expect(described_class.construct_query('id' => "my:_ID1_")).to eq '_query_:"{!field f=id}my:_ID1_"'
7
15
  end
8
16
  end
9
17
 
@@ -48,13 +48,13 @@ describe ActiveFedora::SolrService do
48
48
  end
49
49
  end
50
50
 
51
- describe ".query" do
51
+ describe "#get" do
52
52
  it "calls solr" do
53
53
  mock_conn = double("Connection")
54
54
  stub_result = double("Result")
55
55
  expect(mock_conn).to receive(:get).with('select', params: { q: 'querytext', qt: 'standard' }).and_return(stub_result)
56
56
  allow(described_class).to receive(:instance).and_return(double("instance", conn: mock_conn))
57
- expect(described_class.query('querytext', raw: true)).to eq stub_result
57
+ expect(described_class.get('querytext')).to eq stub_result
58
58
  end
59
59
  it "uses select_path" do
60
60
  mock_conn = double("Connection")
@@ -62,9 +62,25 @@ describe ActiveFedora::SolrService do
62
62
  expect(mock_conn).to receive(:get).with('select_test', params: { q: 'querytext', qt: 'standard' }).and_return(stub_result)
63
63
  expect(described_class).to receive(:select_path).and_return('select_test')
64
64
  allow(described_class).to receive(:instance).and_return(double("instance", conn: mock_conn))
65
- expect(described_class.query('querytext', raw: true)).to eq stub_result
65
+ expect(described_class.get('querytext')).to eq stub_result
66
66
  end
67
67
  end
68
+
69
+ describe "#query" do
70
+ let(:doc) { { 'id' => 'x' } }
71
+ let(:docs) { [doc] }
72
+
73
+ it "wraps the solr response documents in Solr hits" do
74
+ mock_conn = double("Connection")
75
+ stub_result = { 'response' => { 'docs' => docs } }
76
+ expect(mock_conn).to receive(:get).with('select', params: { q: 'querytext', qt: 'standard' }).and_return(stub_result)
77
+ allow(described_class).to receive(:instance).and_return(double("instance", conn: mock_conn))
78
+ result = described_class.query('querytext')
79
+ expect(result.size).to eq 1
80
+ expect(result.first.id).to eq 'x'
81
+ end
82
+ end
83
+
68
84
  describe ".count" do
69
85
  it "returns a count of matching records" do
70
86
  mock_conn = double("Connection")