blacklight-spotlight 0.6.0 → 0.7.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 19ff3a47f366456895a647229c3c9fea67ec3b76
4
- data.tar.gz: 7a59c82abf7fcc1b25bebc9319867779b31082f4
3
+ metadata.gz: c321ae7af7b5264e59eff345211ac2760a96cb5b
4
+ data.tar.gz: 2048a70d4aac48da5effa59328e3e7f73e132b2b
5
5
  SHA512:
6
- metadata.gz: 059110ca3e0365f26885a4ca692b4ba405b29f0d469f1ebfc34122d45ce71aa3313860f381f963e05da98810795614a55937e0eeea64841f47392773c131ffba
7
- data.tar.gz: 4b546801b5cc566c9440a49cebd4b6b78aac9e8abcf208f24edf05b0acc83ba0edb91e3934c4b19ef7bf8d1057d82183d9cfe0cec5e0946be9aa424d5f35ce93
6
+ metadata.gz: 95dd157f70fd3b9f4d670a17c611d6e649d004a5fee7fa71d526c2b7f75fab528a21326e66ac3c45c2268152c7e7f0cb57f5a6a620ccea2ca84e912e1c2f842d
7
+ data.tar.gz: 7e43fa7eca9cacee4e224e8a5974732578bbd00df20130b7df44f464b58d66505e568aeca905440abeaff6afe87459c2059710c6db0e94f15a8f9275f975e5d9
@@ -26,7 +26,7 @@ module Spotlight
26
26
  def create
27
27
  @resource.attributes = resource_params
28
28
 
29
- if @resource.save_and_commit
29
+ if @resource.save_and_index
30
30
  flash[:notice] = t('spotlight.resources.upload.success')
31
31
  if params['add-and-continue']
32
32
  redirect_to new_exhibit_resources_upload_path(@resource.exhibit)
@@ -27,7 +27,7 @@ module Spotlight
27
27
  @resource.attributes = resource_params
28
28
  @resource = @resource.becomes_provider
29
29
 
30
- if @resource.save_and_commit
30
+ if @resource.save_and_index
31
31
  if from_popup?
32
32
  render layout: false, text: '<html><script>window.close();</script></html>'
33
33
  else
@@ -10,7 +10,7 @@ module Spotlight
10
10
  end
11
11
 
12
12
  def uploaded_resource
13
- @uploaded_resource ||= GlobalID::Locator.locate first(Spotlight::Resource.resource_global_id_field)
13
+ @uploaded_resource ||= GlobalID::Locator.locate first(Spotlight::Engine.config.resource_global_id_field)
14
14
  rescue => e
15
15
  Rails.logger.info("Unable to locate uploaded resource: #{e}")
16
16
  nil
@@ -3,138 +3,183 @@ module Spotlight
3
3
  # Exhibit resources
4
4
  class Resource < ActiveRecord::Base
5
5
  include Spotlight::SolrDocument::AtomicUpdates
6
+ include ActiveSupport::Benchmarkable
7
+
6
8
  extend ActiveModel::Callbacks
7
9
  define_model_callbacks :index
8
10
 
9
- class_attribute :providers
10
11
  class_attribute :weight
11
12
 
12
13
  belongs_to :exhibit
13
14
  serialize :data, Hash
14
-
15
- after_save :reindex
15
+ store :metadata, accessors: [
16
+ :last_indexed_estimate,
17
+ :last_indexed_count,
18
+ :last_index_elapsed_time,
19
+ :last_indexed_finished], coder: JSON
16
20
 
17
21
  around_index :reindex_with_lock
22
+ around_index :reindex_with_logging
23
+ after_index :commit
18
24
 
19
- after_index :update_index_time!
25
+ def becomes_provider
26
+ klass = Spotlight::ResourceProvider.for_resource(self)
20
27
 
21
- def self.providers
22
- Spotlight::Engine.config.resource_providers
28
+ if klass
29
+ self.becomes! klass
30
+ else
31
+ self
32
+ end
23
33
  end
24
34
 
25
- def self.class_for_resource(r)
26
- providers.select { |provider| provider.can_provide? r }.sort_by(&:weight).first
35
+ def needs_provider?
36
+ type.blank?
27
37
  end
28
38
 
29
39
  ##
30
- # @abstract
31
- # Convert this resource into zero-to-many new solr documents. The data here
32
- # should be merged into the resource-specific {#to_solr} data.
40
+ # Persist the record to the database, and trigger a reindex to solr
33
41
  #
34
- # @return [Hash] a single solr document hash
35
- # @return [Enumerator<Hash>] multiple solr document hashes. This can be a
36
- # simple array, or an lazy enumerator
37
- def to_solr
38
- (exhibit_specific_solr_data || {})
39
- .merge(spotlight_resource_metadata_for_solr || {})
40
- end
41
-
42
- def self.resource_global_id_field
43
- :"#{Spotlight::Engine.config.solr_fields.prefix}spotlight_resource_id#{Spotlight::Engine.config.solr_fields.string_suffix}"
42
+ # @param [Hash] All arguments will be passed through to ActiveRecord's #save method
43
+ def save_and_index(*args)
44
+ save(*args) && reindex_later
44
45
  end
45
46
 
46
- def reindex_with_lock
47
- with_lock do
48
- yield
47
+ ##
48
+ # Enqueue an asynchronous reindexing job for this resource
49
+ def reindex_later
50
+ Spotlight::ReindexJob.perform_later(self)
51
+ end
52
+
53
+ concerning :GeneratingSolrDocuments do
54
+ ##
55
+ # @abstract
56
+ # Convert this resource into zero-to-many new solr documents. The data here
57
+ # should be merged into the resource-specific {#to_solr} data.
58
+ #
59
+ # @return [Hash] a single solr document hash
60
+ # @return [Enumerator<Hash>] multiple solr document hashes. This can be a
61
+ # simple array, or an lazy enumerator
62
+ def to_solr
63
+ (exhibit_specific_solr_data || {}).merge(spotlight_resource_metadata_for_solr || {})
49
64
  end
50
- end
51
65
 
52
- ##
53
- # Index the result of {#to_solr} into the index in batches of {#batch_size}
54
- def reindex
55
- run_callbacks :index do
56
- data = to_solr
57
- return if data.blank?
66
+ protected
58
67
 
68
+ ##
69
+ # @return an enumerator of all the indexable documents for this resource
70
+ def documents_to_index
71
+ data = to_solr
72
+ return [] if data.blank?
59
73
  data &&= [data] if data.is_a? Hash
60
74
 
61
- data.each_slice(batch_size) do |batch|
62
- blacklight_solr.update params: { commitWithin: 500 },
63
- data: batch.reject(&:blank?).map { |doc| doc.reverse_merge(existing_solr_doc_hash(doc[unique_key]) || {}) }.to_json,
64
- headers: { 'Content-Type' => 'application/json' }
75
+ return to_enum(:documents_to_index) { data.size } unless block_given?
76
+
77
+ data.reject(&:blank?).each do |doc|
78
+ yield doc.reverse_merge(existing_solr_doc_hash(doc[unique_key]) || {})
65
79
  end
66
80
  end
67
- end
68
81
 
69
- def update_index_time!
70
- update_columns indexed_at: Time.current
71
- end
82
+ private
72
83
 
73
- def becomes_provider
74
- klass = Spotlight::Resource.class_for_resource(self)
84
+ ##
85
+ # Get any exhibit-specific metadata stored in e.g. sidecars, tags, etc
86
+ # This needs the generated solr document
87
+ def existing_solr_doc_hash(id)
88
+ document_model.new(unique_key => id).to_solr if document_model && id.present?
89
+ end
75
90
 
76
- if klass
77
- self.becomes! klass
78
- else
79
- self
91
+ def unique_key
92
+ if document_model
93
+ document_model.unique_key.to_sym
94
+ else
95
+ :id
96
+ end
80
97
  end
81
- end
82
98
 
83
- def needs_provider?
84
- type.blank?
99
+ def exhibit_specific_solr_data
100
+ exhibit.solr_data if exhibit
101
+ end
102
+
103
+ def spotlight_resource_metadata_for_solr
104
+ {
105
+ Spotlight::Engine.config.resource_global_id_field => (to_global_id.to_s if persisted?),
106
+ Spotlight::SolrDocument.resource_type_field => self.class.to_s.tableize
107
+ }
108
+ end
109
+
110
+ def document_model
111
+ exhibit.blacklight_config.document_model if exhibit
112
+ end
85
113
  end
86
114
 
87
- def save_and_commit
88
- save.tap do
89
- begin
90
- blacklight_solr.commit
91
- rescue => e
92
- Rails.logger.warn "Unable to commit to solr: #{e}"
115
+ concerning :Indexing do
116
+ ##
117
+ # Index the result of {#to_solr} into the index in batches of {#batch_size}
118
+ #
119
+ # @return [Integer] number of records indexed
120
+ def reindex
121
+ benchmark "Reindexing #{self} (batch size: #{batch_size})" do
122
+ count = 0
123
+
124
+ run_callbacks :index do
125
+ documents_to_index.each_slice(batch_size) do |batch|
126
+ write_to_index(batch)
127
+ update(last_indexed_count: (count += batch.length))
128
+ end
129
+
130
+ count
131
+ end
93
132
  end
94
133
  end
95
- end
96
134
 
97
- protected
135
+ protected
98
136
 
99
- def blacklight_solr
100
- @solr ||= RSolr.connect(connection_config)
101
- end
137
+ def reindex_with_lock
138
+ with_lock do
139
+ yield
140
+ end
141
+ end
102
142
 
103
- def connection_config
104
- Blacklight.connection_config
105
- end
143
+ def reindex_with_logging
144
+ time_start = Time.zone.now
106
145
 
107
- def document_model
108
- exhibit.blacklight_config.document_model if exhibit
109
- end
146
+ update(indexed_at: time_start,
147
+ last_indexed_estimate: documents_to_index.size,
148
+ last_indexed_finished: nil,
149
+ last_index_elapsed_time: nil)
110
150
 
111
- def batch_size
112
- Spotlight::Engine.config.solr_batch_size
113
- end
151
+ count = yield
114
152
 
115
- def exhibit_specific_solr_data
116
- exhibit.solr_data if exhibit
117
- end
153
+ time_end = Time.zone.now
154
+ update(last_indexed_count: count,
155
+ last_indexed_finished: time_end,
156
+ last_index_elapsed_time: time_end - time_start)
157
+ end
118
158
 
119
- def spotlight_resource_metadata_for_solr
120
- {
121
- Spotlight::Resource.resource_global_id_field => (to_global_id.to_s if persisted?),
122
- Spotlight::SolrDocument.resource_type_field => self.class.to_s.tableize
123
- }
124
- end
159
+ private
125
160
 
126
- ##
127
- # Get any exhibit-specific metadata stored in e.g. sidecars, tags, etc
128
- # This needs the generated solr document
129
- def existing_solr_doc_hash(id)
130
- document_model.new(unique_key => id).to_solr if document_model && id.present?
131
- end
161
+ def blacklight_solr
162
+ @solr ||= RSolr.connect(connection_config)
163
+ end
132
164
 
133
- def unique_key
134
- if document_model
135
- document_model.unique_key.to_sym
136
- else
137
- :id
165
+ def connection_config
166
+ Blacklight.connection_config
167
+ end
168
+
169
+ def batch_size
170
+ Spotlight::Engine.config.solr_batch_size
171
+ end
172
+
173
+ def write_to_index(batch)
174
+ blacklight_solr.update params: { commitWithin: 500 },
175
+ data: batch.to_json,
176
+ headers: { 'Content-Type' => 'application/json' }
177
+ end
178
+
179
+ def commit
180
+ blacklight_solr.commit
181
+ rescue => e
182
+ Rails.logger.warn "Unable to commit to solr: #{e}"
138
183
  end
139
184
  end
140
185
  end
@@ -0,0 +1,24 @@
1
+ module Spotlight
2
+ ##
3
+ # Detect which Spotlight::Resource subclasses can provide indexing routines for
4
+ # a given resource
5
+ class ResourceProvider
6
+ class <<self
7
+ ##
8
+ # @return [Class] the class that can best provide indexing for the resource
9
+ def for_resource(resource)
10
+ providers_for_resource(resource).first
11
+ end
12
+
13
+ private
14
+
15
+ def providers
16
+ Spotlight::Engine.config.resource_providers
17
+ end
18
+
19
+ def providers_for_resource(resource)
20
+ providers.select { |provider| provider.can_provide? resource }.sort_by(&:weight)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,5 @@
1
+ class AddMetadataToSpotlightResource < ActiveRecord::Migration
2
+ def up
3
+ add_column :spotlight_resources, :metadata, :blob
4
+ end
5
+ end
@@ -70,6 +70,8 @@ module Spotlight
70
70
  Spotlight::Engine.config.solr_fields.string_suffix = '_ssim'.freeze
71
71
  Spotlight::Engine.config.solr_fields.text_suffix = '_tesim'.freeze
72
72
 
73
+ Spotlight::Engine.config.resource_global_id_field = :"#{config.solr_fields.prefix}spotlight_resource_id#{config.solr_fields.string_suffix}"
74
+
73
75
  # The solr field that original (largest) images will be stored.
74
76
  Spotlight::Engine.config.full_image_field = :full_image_url_ssm
75
77
  Spotlight::Engine.config.thumbnail_field = :thumbnail_url_ssm
@@ -1,4 +1,4 @@
1
1
  #
2
2
  module Spotlight
3
- VERSION = '0.6.0'
3
+ VERSION = '0.7.0'
4
4
  end
@@ -71,12 +71,11 @@ describe Spotlight::Resources::UploadController, type: :controller do
71
71
  let(:blacklight_solr) { double }
72
72
 
73
73
  before do
74
- allow(blacklight_solr).to receive(:commit)
75
- allow_any_instance_of(Spotlight::Resource).to receive(:reindex)
74
+ allow_any_instance_of(Spotlight::Resource).to receive(:reindex).and_return(true)
76
75
  allow_any_instance_of(Spotlight::Resource).to receive(:blacklight_solr).and_return blacklight_solr
77
76
  end
78
77
  it 'create a Spotlight::Resources::Upload resource' do
79
- expect(blacklight_solr).to receive(:commit)
78
+ expect_any_instance_of(Spotlight::Resource).to receive(:reindex_later)
80
79
  post :create, exhibit_id: exhibit, resources_upload: { url: 'url-data' }
81
80
  expect(assigns[:resource]).to be_persisted
82
81
  expect(assigns[:resource]).to be_a(Spotlight::Resources::Upload)
@@ -53,8 +53,7 @@ describe Spotlight::ResourcesController, type: :controller do
53
53
  describe 'POST create' do
54
54
  let(:blacklight_solr) { double }
55
55
  it 'create a resource' do
56
- allow_any_instance_of(Spotlight::Resource).to receive(:reindex)
57
- expect(blacklight_solr).to receive(:commit)
56
+ expect_any_instance_of(Spotlight::Resource).to receive(:reindex_later)
58
57
  allow_any_instance_of(Spotlight::Resource).to receive(:blacklight_solr).and_return blacklight_solr
59
58
  post :create, exhibit_id: exhibit, resource: { url: 'info:uri' }
60
59
  expect(assigns[:resource]).to be_persisted
@@ -23,7 +23,7 @@ describe 'adding an item using the provided bookmarklet', type: :feature do
23
23
  end
24
24
 
25
25
  it 'submits the form to create a new item' do
26
- allow_any_instance_of(Spotlight::Resource).to receive(:reindex)
26
+ allow_any_instance_of(Spotlight::Resource).to receive(:reindex_later)
27
27
  visit spotlight.new_exhibit_resource_path(exhibit, popup: true, resource: { url: 'info:url' })
28
28
  expect(page).to have_content 'Add Resource'
29
29
  expect(first('#resource_url', visible: false).value).to eq 'info:url'
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spotlight::ResourceProvider do
4
+ describe '.for_resource' do
5
+ let(:thing) { double }
6
+ let(:type_a) { double('TypeA', weight: 10) }
7
+ let(:type_b) { double('TypeB', weight: 5) }
8
+ let(:providers) { [type_a, type_b] }
9
+ subject { described_class.for_resource(thing) }
10
+
11
+ before do
12
+ allow(described_class).to receive_messages(providers: providers)
13
+ end
14
+
15
+ it 'returns a class that can provide indexing for the resource' do
16
+ expect(type_a).to receive(:can_provide?).with(thing).and_return(true)
17
+ expect(type_b).to receive(:can_provide?).with(thing).and_return(false)
18
+ expect(subject).to eq type_a
19
+ end
20
+
21
+ it 'returns the lowest weighted class that can provide indexing for the resource' do
22
+ expect(type_a).to receive(:can_provide?).with(thing).and_return(true)
23
+ expect(type_b).to receive(:can_provide?).with(thing).and_return(true)
24
+ expect(subject).to eq type_b
25
+ end
26
+ end
27
+ end
@@ -6,30 +6,6 @@ describe Spotlight::Resource, type: :model do
6
6
  end
7
7
  let(:exhibit) { FactoryGirl.create(:exhibit) }
8
8
 
9
- describe '.class_for_resource' do
10
- let(:thing) { double }
11
- let(:type_a) { double('TypeA', weight: 10) }
12
- let(:type_b) { double('TypeB', weight: 5) }
13
- let(:providers) { [type_a, type_b] }
14
- subject { described_class.class_for_resource(thing) }
15
-
16
- before do
17
- allow(described_class).to receive_messages(providers: providers)
18
- end
19
-
20
- it 'returns a class that can provide indexing for the resource' do
21
- expect(type_a).to receive(:can_provide?).with(thing).and_return(true)
22
- expect(type_b).to receive(:can_provide?).with(thing).and_return(false)
23
- expect(subject).to eq type_a
24
- end
25
-
26
- it 'returns the lowest weighted class that can provide indexing for the resource' do
27
- expect(type_a).to receive(:can_provide?).with(thing).and_return(true)
28
- expect(type_b).to receive(:can_provide?).with(thing).and_return(true)
29
- expect(subject).to eq type_b
30
- end
31
- end
32
-
33
9
  describe '#to_solr' do
34
10
  before do
35
11
  allow(subject).to receive(:exhibit).and_return(exhibit)
@@ -48,20 +24,20 @@ describe Spotlight::Resource, type: :model do
48
24
  describe '#reindex' do
49
25
  context 'with a provider that generates ids' do
50
26
  subject do
51
- Class.new(described_class) do
52
- def to_solr
53
- super.merge(id: 123)
54
- end
55
- end.new(exhibit: exhibit)
27
+ Class.new(described_class).new(exhibit: exhibit)
56
28
  end
57
29
 
30
+ let(:solr_response) { { id: 123 } }
31
+
58
32
  before do
59
33
  SolrDocument.new(id: 123).sidecars.create!(exhibit: exhibit, data: { document_data: true })
60
- allow(subject).to receive_messages(to_global_id: '', update_index_time!: nil)
34
+ allow(subject).to receive_messages(to_global_id: '')
35
+
36
+ allow(subject).to receive(:to_solr).and_return(solr_response)
61
37
  end
62
38
 
63
39
  it 'includes exhibit document-specific data' do
64
- expect(subject.send(:blacklight_solr)).to receive(:update) do |options|
40
+ allow(subject.send(:blacklight_solr)).to receive(:update) do |options|
65
41
  data = JSON.parse(options[:data], symbolize_names: true)
66
42
 
67
43
  expect(data.length).to eq 1
@@ -72,22 +48,69 @@ describe Spotlight::Resource, type: :model do
72
48
 
73
49
  subject.reindex
74
50
  end
51
+
52
+ context 'with a resource that creates multiple solr documents' do
53
+ let(:solr_response) { [{ id: 1 }, { id: 2 }] }
54
+
55
+ before do
56
+ allow(subject.send(:blacklight_solr)).to receive(:update)
57
+ end
58
+
59
+ it 'returns the number of indexed objects' do
60
+ expect(subject.reindex).to eq 2
61
+ end
62
+
63
+ it 'triggers a solr commit' do
64
+ expect(subject.send(:blacklight_solr)).to receive(:commit).once
65
+
66
+ subject.reindex
67
+ end
68
+
69
+ it 'records indexing metadata as document attributes' do
70
+ subject.reindex
71
+
72
+ expect(subject.indexed_at).to be > Time.zone.now - 5.seconds
73
+ expect(subject.last_indexed_estimate).to eq 2
74
+ expect(subject.last_indexed_count).to eq 2
75
+ expect(subject.last_index_elapsed_time).to be < 1
76
+ end
77
+ end
75
78
  end
76
79
  end
77
80
 
78
81
  describe '#becomes_provider' do
79
82
  it 'converts the resource to a provider-specific resource' do
80
83
  SomeClass = Class.new(described_class)
81
- allow(described_class).to receive_messages(class_for_resource: SomeClass)
84
+ allow(Spotlight::ResourceProvider).to receive_messages(for_resource: SomeClass)
82
85
  expect(subject.becomes_provider).to be_a_kind_of(SomeClass)
83
86
  expect(subject.becomes_provider.type).to eq 'SomeClass'
84
87
  end
85
88
  end
86
89
 
87
- it 'reindexs after save' do
88
- expect(subject).to receive(:reindex)
89
- subject.data_will_change!
90
- subject.save!
90
+ describe '#save_and_index' do
91
+ before do
92
+ allow(subject.send(:blacklight_solr)).to receive(:update)
93
+ allow(subject).to receive(:reindex_later)
94
+ end
95
+
96
+ it 'saves the object' do
97
+ expect(subject).to receive(:save).and_return(true)
98
+ subject.save_and_index
99
+ end
100
+
101
+ it 'reindexes after save' do
102
+ expect(subject).to receive(:save).and_return(true)
103
+ expect(subject).to receive(:reindex_later)
104
+ subject.save_and_index
105
+ end
106
+
107
+ context 'if the save fails' do
108
+ it 'does not reindex' do
109
+ expect(subject).to receive(:save).and_return(false)
110
+ expect(subject).not_to receive(:reindex_later)
111
+ subject.save_and_index
112
+ end
113
+ end
91
114
  end
92
115
 
93
116
  it 'stores arbitrary data' do
@@ -97,19 +120,4 @@ describe Spotlight::Resource, type: :model do
97
120
  expect(subject.data[:a]).to eq 1
98
121
  expect(subject.data[:b]).to eq 2
99
122
  end
100
-
101
- describe '#update_index_time!' do
102
- it 'updates the index_time column' do
103
- expect(subject).to receive(:update_columns).with(hash_including(:indexed_at))
104
- subject.update_index_time!
105
- end
106
- end
107
-
108
- describe '#save_and_commit' do
109
- it 'saves the object and commit to solr' do
110
- expect(subject).to receive(:save)
111
- expect(subject.send(:blacklight_solr)).to receive(:commit)
112
- subject.save_and_commit
113
- end
114
- end
115
123
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blacklight-spotlight
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Beer
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2015-11-09 00:00:00.000000000 Z
14
+ date: 2015-11-11 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rails
@@ -845,6 +845,7 @@ files:
845
845
  - app/models/spotlight/masthead.rb
846
846
  - app/models/spotlight/page.rb
847
847
  - app/models/spotlight/resource.rb
848
+ - app/models/spotlight/resource_provider.rb
848
849
  - app/models/spotlight/resources/csv_upload.rb
849
850
  - app/models/spotlight/resources/upload.rb
850
851
  - app/models/spotlight/role.rb
@@ -1036,6 +1037,7 @@ files:
1036
1037
  - db/migrate/20150410180016_change_collation_for_tag_names.acts_as_taggable_on_engine.rb
1037
1038
  - db/migrate/20150713160101_change_spotlight_searches_to_published.rb
1038
1039
  - db/migrate/20151016092343_remove_searchable_from_exhibit.rb
1040
+ - db/migrate/20151110082345_add_metadata_to_spotlight_resource.rb
1039
1041
  - lib/blacklight/spotlight.rb
1040
1042
  - lib/generators/spotlight/install_generator.rb
1041
1043
  - lib/generators/spotlight/templates/catalog_controller.rb
@@ -1174,6 +1176,7 @@ files:
1174
1176
  - spec/models/spotlight/main_navigation_spec.rb
1175
1177
  - spec/models/spotlight/masthead_spec.rb
1176
1178
  - spec/models/spotlight/page_spec.rb
1179
+ - spec/models/spotlight/resource_provider_spec.rb
1177
1180
  - spec/models/spotlight/resource_spec.rb
1178
1181
  - spec/models/spotlight/resources/open_graph_spec.rb
1179
1182
  - spec/models/spotlight/resources/upload_spec.rb
@@ -1270,7 +1273,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1270
1273
  version: '0'
1271
1274
  requirements: []
1272
1275
  rubyforge_project:
1273
- rubygems_version: 2.4.6
1276
+ rubygems_version: 2.4.5.1
1274
1277
  signing_key:
1275
1278
  specification_version: 4
1276
1279
  summary: Enable librarians, curators, and others who are responsible for digital collections
@@ -1394,6 +1397,7 @@ test_files:
1394
1397
  - spec/models/spotlight/main_navigation_spec.rb
1395
1398
  - spec/models/spotlight/masthead_spec.rb
1396
1399
  - spec/models/spotlight/page_spec.rb
1400
+ - spec/models/spotlight/resource_provider_spec.rb
1397
1401
  - spec/models/spotlight/resource_spec.rb
1398
1402
  - spec/models/spotlight/resources/open_graph_spec.rb
1399
1403
  - spec/models/spotlight/resources/upload_spec.rb