blacklight-spotlight 0.34.1 → 1.0.0.alpha1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/app/assets/javascripts/spotlight/pages.js.erb +1 -1
- data/app/controllers/concerns/spotlight/controller.rb +0 -12
- data/app/helpers/spotlight/crop_helper.rb +1 -5
- data/app/models/concerns/spotlight/resources/open_graph.rb +1 -5
- data/app/models/concerns/spotlight/solr_document.rb +20 -23
- data/app/models/concerns/spotlight/solr_document/finder.rb +16 -0
- data/app/models/spotlight/blacklight_configuration.rb +5 -11
- data/app/models/spotlight/contact.rb +2 -2
- data/app/models/spotlight/custom_field.rb +1 -1
- data/app/models/spotlight/exhibit.rb +3 -3
- data/app/models/spotlight/feature_page.rb +2 -2
- data/app/models/spotlight/field_metadata.rb +12 -4
- data/app/models/spotlight/filter.rb +1 -8
- data/app/models/spotlight/lock.rb +1 -1
- data/app/models/spotlight/page.rb +3 -3
- data/app/models/spotlight/reindexing_log_entry.rb +1 -1
- data/app/models/spotlight/resource.rb +1 -1
- data/app/models/spotlight/resources/upload.rb +1 -1
- data/app/models/spotlight/role.rb +4 -11
- data/app/models/spotlight/search.rb +2 -2
- data/app/models/spotlight/site.rb +1 -1
- data/app/models/spotlight/solr_document_sidecar.rb +5 -1
- data/app/uploaders/spotlight/featured_image_uploader.rb +1 -1
- data/app/views/shared/_exhibit_navbar.html.erb +1 -1
- data/app/views/spotlight/catalog/_edit_default.html.erb +1 -1
- data/db/migrate/20131119213142_create_spotlight_pages.rb +1 -1
- data/db/migrate/20131120172811_create_spotlight_attachments.rb +1 -1
- data/db/migrate/20140128155151_create_exhibits.rb +1 -1
- data/db/migrate/20140128155152_create_roles.rb +1 -1
- data/db/migrate/20140130155151_create_spotlight_searches.rb +1 -1
- data/db/migrate/20140130215634_create_spotlight_blacklight_configurations.rb +1 -1
- data/db/migrate/20140206152809_acts_as_taggable_on_migration.acts_as_taggable_on_engine.rb +1 -1
- data/db/migrate/20140206152810_add_missing_unique_indices.acts_as_taggable_on_engine.rb +1 -1
- data/db/migrate/20140211203403_create_spotlight_custom_fields.rb +1 -1
- data/db/migrate/20140211212626_create_spotlight_solr_document_sidecars.rb +1 -1
- data/db/migrate/20140218155151_create_contacts.rb +1 -1
- data/db/migrate/20140225180948_create_contact_emails.rb +1 -1
- data/db/migrate/20140228131207_create_resources.rb +1 -1
- data/db/migrate/20140401232956_change_featured_image_to_featured_image_id.rb +1 -1
- data/db/migrate/20140403180324_create_spotlight_main_navigations.rb +1 -1
- data/db/migrate/20141117111311_create_locks.rb +1 -1
- data/db/migrate/20141118233735_change_contact_details.rb +1 -1
- data/db/migrate/20141126231820_add_avatar_to_contacts.rb +1 -1
- data/db/migrate/20141205005902_add_layout_options_to_exhibit.rb +1 -1
- data/db/migrate/20150116161616_add_published_to_exhibit.rb +1 -1
- data/db/migrate/20150127173245_add_featured_image_to_exhibit.rb +1 -1
- data/db/migrate/20150217111511_add_polymorphic_document_to_sidecars.rb +1 -1
- data/db/migrate/20150304071512_add_spotlight_featured_images.rb +1 -1
- data/db/migrate/20150304111111_add_featured_image_to_spotlight_classes.rb +1 -1
- data/db/migrate/20150306202300_add_display_to_spotlight_main_navigations.rb +1 -1
- data/db/migrate/20150313175432_add_field_type_to_custom_fields.rb +1 -1
- data/db/migrate/20150410180014_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb +1 -1
- data/db/migrate/20150410180015_add_missing_taggable_index.acts_as_taggable_on_engine.rb +1 -1
- data/db/migrate/20150410180016_change_collation_for_tag_names.acts_as_taggable_on_engine.rb +1 -1
- data/db/migrate/20150713160101_change_spotlight_searches_to_published.rb +1 -1
- data/db/migrate/20151016092343_remove_searchable_from_exhibit.rb +1 -1
- data/db/migrate/20151110082345_add_metadata_to_spotlight_resource.rb +1 -1
- data/db/migrate/20151117153210_change_spotlight_exhibit_published_default.rb +1 -1
- data/db/migrate/20151124101123_remove_default_from_spotlight_exhibit.rb +1 -1
- data/db/migrate/20151124105543_update_custom_field_names.rb +1 -1
- data/db/migrate/20151208085432_add_weight_to_exhibits.rb +1 -1
- data/db/migrate/20151210073829_create_spotlight_site.rb +1 -1
- data/db/migrate/20151211131415_add_site_to_spotlight_exhibits.rb +1 -1
- data/db/migrate/20151215141516_change_roles_to_support_polymorphic_associations.rb +1 -1
- data/db/migrate/20151215192845_add_index_status_to_resources.rb +1 -1
- data/db/migrate/20151217211019_create_spotlight_exhibit_filters.rb +1 -1
- data/db/migrate/20160329215014_add_readonly_to_custom_fields.rb +1 -1
- data/db/migrate/20160711121314_add_default_view_to_spotlight_searches.rb +1 -1
- data/db/migrate/20160714144125_add_iiif_urls_to_featured_image.rb +1 -1
- data/db/migrate/20160718194010_add_iiif_url_to_contact.rb +1 -1
- data/db/migrate/20160805143841_add_upload_id_to_resources.rb +1 -1
- data/db/migrate/20160815165432_add_resource_to_solr_document_sidecar.rb +1 -1
- data/db/migrate/20160816165432_add_index_status_to_solr_document_sidecar.rb +1 -1
- data/db/migrate/20160929180534_add_document_index_to_solr_document_sidecar.rb +1 -1
- data/db/migrate/20170105222939_create_spotlight_reindexing_log_entries.rb +1 -1
- data/db/migrate/20170204091234_add_theme_to_spotlight_exhibits.rb +1 -1
- data/db/migrate/20170803152134_migrate_tags_to_sidecars.rb +17 -0
- data/lib/spotlight/version.rb +1 -1
- data/spec/controllers/spotlight/appearances_controller_spec.rb +4 -11
- data/spec/controllers/spotlight/catalog_controller_spec.rb +5 -3
- data/spec/controllers/spotlight/solr_controller_spec.rb +1 -1
- data/spec/controllers/spotlight/tags_controller_spec.rb +1 -1
- data/spec/examples.txt +1133 -1135
- data/spec/features/add_custom_field_metadata_spec.rb +1 -1
- data/spec/features/add_iiif_manifest_spec.rb +1 -1
- data/spec/features/add_items_spec.rb +6 -2
- data/spec/features/autocomplete_typeahead_spec.rb +1 -0
- data/spec/features/exhibit_themes_spec.rb +1 -1
- data/spec/features/tags_admin_spec.rb +1 -1
- data/spec/jobs/spotlight/rename_sidecar_field_job_spec.rb +8 -2
- data/spec/models/solr_document_spec.rb +5 -5
- data/spec/models/spotlight/blacklight_configuration_spec.rb +3 -2
- data/spec/models/spotlight/contact_spec.rb +6 -0
- data/spec/models/spotlight/exhibit_spec.rb +0 -10
- data/spec/models/spotlight/field_metadata_spec.rb +4 -4
- data/spec/models/spotlight/reindexing_log_entry_spec.rb +1 -9
- data/spec/models/spotlight/resource_spec.rb +2 -0
- data/spec/models/spotlight/role_spec.rb +1 -1
- data/spec/serializers/spotlight/exhibit_export_serializer_spec.rb +3 -9
- data/spec/services/spotlight/solr_document_builder_spec.rb +2 -2
- data/spec/spec_helper.rb +2 -6
- data/spec/support/helpers/controller_level_helpers.rb +0 -2
- data/spec/test_app_templates/fixture.css +0 -0
- data/spec/test_app_templates/fixture.png +0 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +14 -0
- data/spec/uploaders/spotlight/featured_image_uploader_spec.rb +2 -2
- data/spec/views/spotlight/searches/edit.html.erb_spec.rb +2 -0
- data/spec/views/spotlight/tags/index.html.erb_spec.rb +2 -2
- metadata +18 -29
- data/app/models/concerns/spotlight/ar_light.rb +0 -86
- data/app/models/concerns/spotlight/solr_document/active_model_concern.rb +0 -37
- data/spec/support/backport_test_helpers.rb +0 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c850274c191873929f87b2e3bbc6459ff8508317
|
4
|
+
data.tar.gz: 871d6f41e445137655c2bb45ee01a466b5ffcb56
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3319d9fb7fe3bbbdd381c89e0144e048be7607580e777dd405f676bd16eae0e288d98cf7d67b3156ac2e6c8d1873cd01c8d37957a832ac71e4301e011009ecbf
|
7
|
+
data.tar.gz: 9b8a2f3d86c4e04ae579c3dac5324aed5eb859d0c2940b5ead8135fa6680eb3d4d28d96f2f3aa9e02b96c7760b3a4b27cff458967d1c34678216378f1d7d679e
|
data/README.md
CHANGED
@@ -10,7 +10,7 @@ Read more about what Spotlight is, our motivations for creating it, and how to i
|
|
10
10
|
## Requirements
|
11
11
|
|
12
12
|
1. Ruby (2.2.0 or greater)
|
13
|
-
2. Rails (
|
13
|
+
2. Rails (5.0 or greater)
|
14
14
|
3. Java (7 or greater) *for Solr*
|
15
15
|
4. ImageMagick (http://www.imagemagick.org/script/index.php) due to [carrierwave](https://github.com/carrierwaveuploader/carrierwave#adding-versions)
|
16
16
|
|
@@ -7,7 +7,7 @@ Spotlight.onLoad(function(){
|
|
7
7
|
uploadUrl: $('[data-attachment-endpoint]').data('attachment-endpoint'),
|
8
8
|
ajaxOptions: {
|
9
9
|
headers: {
|
10
|
-
'X-CSRF-Token': $.rails.csrfToken() || ''
|
10
|
+
'X-CSRF-Token': (Rails || $.rails).csrfToken() || ''
|
11
11
|
},
|
12
12
|
credentials: 'same-origin'
|
13
13
|
}
|
@@ -8,7 +8,6 @@ module Spotlight
|
|
8
8
|
|
9
9
|
included do
|
10
10
|
helper_method :current_site, :current_exhibit, :current_masthead, :exhibit_masthead?, :resource_masthead?
|
11
|
-
helper_method :redirect_back # helper method backported from Rails 5
|
12
11
|
end
|
13
12
|
|
14
13
|
def current_site
|
@@ -86,16 +85,5 @@ module Spotlight
|
|
86
85
|
options = Blacklight::Parameters.sanitize(params.to_unsafe_h.with_indifferent_access).merge(options).except(:exhibit_id, :only_path)
|
87
86
|
spotlight.facet_exhibit_catalog_url(current_exhibit, *args, options)
|
88
87
|
end
|
89
|
-
|
90
|
-
# Backport from Rails 5
|
91
|
-
def redirect_back(fallback_location:, **args)
|
92
|
-
if defined?(super)
|
93
|
-
super
|
94
|
-
elsif request.headers['Referer']
|
95
|
-
redirect_to request.headers['Referer'], **args
|
96
|
-
else
|
97
|
-
redirect_to fallback_location, **args
|
98
|
-
end
|
99
|
-
end
|
100
88
|
end
|
101
89
|
end
|
@@ -4,19 +4,10 @@ module Spotlight
|
|
4
4
|
module SolrDocument
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
|
-
include Spotlight::SolrDocument::ActiveModelConcern
|
8
7
|
include Spotlight::SolrDocument::Finder
|
9
8
|
include GlobalID::Identification
|
10
9
|
|
11
10
|
included do
|
12
|
-
extend ActsAsTaggableOn::Taggable
|
13
|
-
|
14
|
-
acts_as_taggable
|
15
|
-
has_many :sidecars, class_name: 'Spotlight::SolrDocumentSidecar', as: :document
|
16
|
-
|
17
|
-
before_save :save_owned_tags
|
18
|
-
after_save :reindex
|
19
|
-
|
20
11
|
use_extension(Spotlight::SolrDocument::UploadedResource, &:uploaded_resource?)
|
21
12
|
end
|
22
13
|
|
@@ -24,7 +15,7 @@ module Spotlight
|
|
24
15
|
# Class-level methods
|
25
16
|
module ClassMethods
|
26
17
|
def build_for_exhibit(id, exhibit, attributes = {})
|
27
|
-
new(unique_key => id) do |doc|
|
18
|
+
new(unique_key => id).tap do |doc|
|
28
19
|
doc.sidecar(exhibit).tap { |x| x.assign_attributes(attributes) }.save! # save is a nop if the sidecar isn't modified.
|
29
20
|
end
|
30
21
|
end
|
@@ -66,11 +57,15 @@ module Spotlight
|
|
66
57
|
sidecar(current_exhibit).update(custom_data) if custom_data
|
67
58
|
|
68
59
|
# Note: this causes a save
|
69
|
-
current_exhibit.tag(
|
60
|
+
current_exhibit.tag(sidecar(current_exhibit), with: tags, on: :tags) if tags
|
70
61
|
|
71
62
|
update_exhibit_resource(resource_attributes) if uploaded_resource?
|
72
63
|
end
|
73
64
|
|
65
|
+
def save
|
66
|
+
reindex
|
67
|
+
end
|
68
|
+
|
74
69
|
def update_exhibit_resource(resource_attributes)
|
75
70
|
return unless resource_attributes && resource_attributes['url']
|
76
71
|
uploaded_resource.upload.update image: resource_attributes['url']
|
@@ -80,8 +75,12 @@ module Spotlight
|
|
80
75
|
# no-op reindex implementation
|
81
76
|
end
|
82
77
|
|
78
|
+
def sidecars
|
79
|
+
Spotlight::SolrDocumentSidecar.where(document_id: id, document_type: self.class.to_s)
|
80
|
+
end
|
81
|
+
|
83
82
|
def sidecar(exhibit)
|
84
|
-
sidecars.find_or_initialize_by exhibit: exhibit
|
83
|
+
sidecars.find_or_initialize_by exhibit: exhibit, document_id: id, document_type: self.class.to_s
|
85
84
|
end
|
86
85
|
|
87
86
|
def to_solr
|
@@ -118,16 +117,14 @@ module Spotlight
|
|
118
117
|
def tags_to_solr
|
119
118
|
h = {}
|
120
119
|
|
121
|
-
|
122
|
-
|
123
|
-
Spotlight::Exhibit.find_each do |exhibit|
|
124
|
-
h[self.class.solr_field_for_tagger(exhibit)] = nil
|
125
|
-
end
|
120
|
+
sidecars.each do |sidecar|
|
121
|
+
h[self.class.solr_field_for_tagger(sidecar.exhibit)] = nil
|
126
122
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
123
|
+
sidecar.taggings.includes(:tag, :tagger).map do |tagging|
|
124
|
+
key = self.class.solr_field_for_tagger(tagging.tagger)
|
125
|
+
h[key] ||= []
|
126
|
+
h[key] << tagging.tag.name
|
127
|
+
end
|
131
128
|
end
|
132
129
|
h
|
133
130
|
end
|
@@ -135,7 +132,7 @@ module Spotlight
|
|
135
132
|
end
|
136
133
|
|
137
134
|
ActsAsTaggableOn::Tagging.after_destroy do |obj|
|
138
|
-
if obj.tagger.is_a? Spotlight::
|
139
|
-
obj.tagger.blacklight_config.document_model.reindex(obj.
|
135
|
+
if obj.tagger.is_a?(Spotlight::Exhibit) && obj.taggable.is_a?(Spotlight::SolrDocumentSidecar)
|
136
|
+
obj.tagger.blacklight_config.document_model.reindex(obj.taggable.document_id)
|
140
137
|
end
|
141
138
|
end
|
@@ -38,6 +38,22 @@ module Spotlight
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
+
# Returns true if +comparison_object+ is the same exact object, or +comparison_object+
|
42
|
+
# is of the same type and +self+ has an ID and it is equal to +comparison_object.id+.
|
43
|
+
#
|
44
|
+
# Note that new records are different from any other record by definition, unless the
|
45
|
+
# other record is the receiver itself. Besides, if you fetch existing records with
|
46
|
+
# +select+ and leave the ID out, you're on your own, this predicate will return false.
|
47
|
+
#
|
48
|
+
# Note also that destroying a record preserves its ID in the model instance, so deleted
|
49
|
+
# models are still comparable.
|
50
|
+
def ==(other)
|
51
|
+
super ||
|
52
|
+
(other.instance_of?(self.class) &&
|
53
|
+
id &&
|
54
|
+
other.id == id)
|
55
|
+
end
|
56
|
+
|
41
57
|
def blacklight_solr
|
42
58
|
self.class.index.connection
|
43
59
|
end
|
@@ -5,7 +5,7 @@ module Spotlight
|
|
5
5
|
# Exhibit-specific blacklight configuration model
|
6
6
|
# rubocop:disable Metrics/ClassLength
|
7
7
|
class BlacklightConfiguration < ActiveRecord::Base
|
8
|
-
belongs_to :exhibit, touch: true
|
8
|
+
belongs_to :exhibit, touch: true, optional: true
|
9
9
|
serialize :facet_fields, Hash
|
10
10
|
serialize :index_fields, Hash
|
11
11
|
serialize :search_fields, Hash
|
@@ -198,7 +198,7 @@ module Spotlight
|
|
198
198
|
# rubocop:enable Metrics/MethodLength, Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
|
199
199
|
|
200
200
|
def custom_index_fields
|
201
|
-
Hash[exhibit.custom_fields.map do |x|
|
201
|
+
Hash[exhibit.custom_fields.reject(&:new_record?).map do |x|
|
202
202
|
field = Blacklight::Configuration::IndexField.new x.configuration.merge(
|
203
203
|
key: x.field, field: x.solr_field, custom_field: true
|
204
204
|
)
|
@@ -207,12 +207,13 @@ module Spotlight
|
|
207
207
|
end
|
208
208
|
|
209
209
|
def custom_facet_fields
|
210
|
-
Hash[exhibit.custom_fields.vocab.map do |x|
|
210
|
+
Hash[exhibit.custom_fields.vocab.reject(&:new_record?).map do |x|
|
211
211
|
field = Blacklight::Configuration::FacetField.new x.configuration.merge(
|
212
212
|
key: x.field, field: x.solr_field, show: false, custom_field: true
|
213
213
|
)
|
214
214
|
field.if = :field_enabled?
|
215
215
|
field.enabled = false
|
216
|
+
field.limit = true
|
216
217
|
[x.field, field]
|
217
218
|
end]
|
218
219
|
end
|
@@ -344,14 +345,7 @@ module Spotlight
|
|
344
345
|
end
|
345
346
|
|
346
347
|
def value_to_boolean(v)
|
347
|
-
|
348
|
-
ActiveModel::Type::Boolean.new.cast v
|
349
|
-
elsif defined? ActiveRecord::Type::Boolean
|
350
|
-
# Rails 4.2+
|
351
|
-
ActiveRecord::Type::Boolean.new.type_cast_from_database v
|
352
|
-
else
|
353
|
-
ActiveRecord::ConnectionAdapters::Column.value_to_boolean v
|
354
|
-
end
|
348
|
+
ActiveModel::Type::Boolean.new.cast v
|
355
349
|
end
|
356
350
|
end
|
357
351
|
end
|
@@ -2,7 +2,7 @@ module Spotlight
|
|
2
2
|
##
|
3
3
|
# Exhibit curator contact information
|
4
4
|
class Contact < ActiveRecord::Base
|
5
|
-
belongs_to :exhibit, touch: true
|
5
|
+
belongs_to :exhibit, touch: true, optional: true
|
6
6
|
scope :published, -> { where(show_in_sidebar: true) }
|
7
7
|
default_scope { order('weight ASC') }
|
8
8
|
serialize :contact_info, Hash
|
@@ -10,7 +10,7 @@ module Spotlight
|
|
10
10
|
extend FriendlyId
|
11
11
|
friendly_id :name, use: [:slugged, :scoped, :finders], scope: :exhibit
|
12
12
|
|
13
|
-
belongs_to :avatar, class_name: 'Spotlight::ContactImage', dependent: :destroy
|
13
|
+
belongs_to :avatar, class_name: 'Spotlight::ContactImage', dependent: :destroy, optional: true
|
14
14
|
accepts_nested_attributes_for :avatar, update_only: true, reject_if: proc { |attr| attr['iiif_tilesource'].blank? }
|
15
15
|
|
16
16
|
before_save do
|
@@ -3,7 +3,7 @@ module Spotlight
|
|
3
3
|
# Exhibit custom fields
|
4
4
|
class CustomField < ActiveRecord::Base
|
5
5
|
serialize :configuration, Hash
|
6
|
-
belongs_to :exhibit
|
6
|
+
belongs_to :exhibit, optional: true
|
7
7
|
|
8
8
|
extend FriendlyId
|
9
9
|
friendly_id :slug_candidates, use: [:slugged, :scoped, :finders], scope: :exhibit
|
@@ -45,9 +45,9 @@ module Spotlight
|
|
45
45
|
has_one :blacklight_configuration, class_name: 'Spotlight::BlacklightConfiguration', dependent: :delete
|
46
46
|
has_one :home_page
|
47
47
|
|
48
|
-
belongs_to :site
|
49
|
-
belongs_to :masthead, dependent: :destroy
|
50
|
-
belongs_to :thumbnail, class_name: 'Spotlight::ExhibitThumbnail', dependent: :destroy
|
48
|
+
belongs_to :site, optional: true
|
49
|
+
belongs_to :masthead, dependent: :destroy, optional: true
|
50
|
+
belongs_to :thumbnail, class_name: 'Spotlight::ExhibitThumbnail', dependent: :destroy, optional: true
|
51
51
|
|
52
52
|
accepts_nested_attributes_for :about_pages, :attachments, :contacts, :custom_fields, :feature_pages,
|
53
53
|
:main_navigations, :owned_taggings, :resources, :searches, :solr_document_sidecars
|
@@ -6,11 +6,11 @@ module Spotlight
|
|
6
6
|
friendly_id :title, use: [:slugged, :scoped, :finders, :history], scope: :exhibit
|
7
7
|
|
8
8
|
has_many :child_pages, class_name: 'Spotlight::FeaturePage', inverse_of: :parent_page, foreign_key: 'parent_page_id'
|
9
|
-
belongs_to :parent_page, class_name: 'Spotlight::FeaturePage'
|
9
|
+
belongs_to :parent_page, class_name: 'Spotlight::FeaturePage', optional: true
|
10
10
|
|
11
11
|
accepts_nested_attributes_for :child_pages
|
12
12
|
|
13
|
-
belongs_to :thumbnail, class_name: 'Spotlight::FeaturedImage', dependent: :destroy
|
13
|
+
belongs_to :thumbnail, class_name: 'Spotlight::FeaturedImage', dependent: :destroy, optional: true
|
14
14
|
accepts_nested_attributes_for :thumbnail, update_only: true, reject_if: proc { |attr| attr['iiif_tilesource'].blank? }
|
15
15
|
|
16
16
|
before_validation unless: :top_level_page? do
|
@@ -12,11 +12,11 @@ module Spotlight
|
|
12
12
|
@blacklight_config = blacklight_config
|
13
13
|
end
|
14
14
|
|
15
|
-
def field(
|
15
|
+
def field(key)
|
16
16
|
{
|
17
|
-
document_count: document_counts.fetch(field_name, 0),
|
18
|
-
value_count: terms.fetch(field_name, []).length,
|
19
|
-
terms: terms.fetch(field_name, [])
|
17
|
+
document_count: document_counts.fetch(field_name(key), 0),
|
18
|
+
value_count: terms.fetch(field_name(key), []).length,
|
19
|
+
terms: terms.fetch(field_name(key), [])
|
20
20
|
}
|
21
21
|
end
|
22
22
|
|
@@ -26,6 +26,14 @@ module Spotlight
|
|
26
26
|
|
27
27
|
private
|
28
28
|
|
29
|
+
def field_name(key)
|
30
|
+
if blacklight_config.facet_fields[key]
|
31
|
+
blacklight_config.facet_fields[key].field
|
32
|
+
else
|
33
|
+
key
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
29
37
|
def search_builder_class
|
30
38
|
blacklight_config.search_builder_class
|
31
39
|
end
|
@@ -24,14 +24,7 @@ module Spotlight
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def value_to_boolean(v)
|
27
|
-
|
28
|
-
ActiveModel::Type::Boolean.new.cast v
|
29
|
-
elsif defined? ActiveRecord::Type::Boolean
|
30
|
-
# Rails 4.2+
|
31
|
-
ActiveRecord::Type::Boolean.new.type_cast_from_database v
|
32
|
-
else
|
33
|
-
ActiveRecord::ConnectionAdapters::Column.value_to_boolean v
|
34
|
-
end
|
27
|
+
ActiveModel::Type::Boolean.new.cast v
|
35
28
|
end
|
36
29
|
end
|
37
30
|
end
|
@@ -3,7 +3,7 @@ module Spotlight
|
|
3
3
|
# Page-level locking to discourage update conflicts
|
4
4
|
class Lock < ActiveRecord::Base
|
5
5
|
belongs_to :on, polymorphic: true
|
6
|
-
belongs_to :by, polymorphic: true
|
6
|
+
belongs_to :by, polymorphic: true, optional: true
|
7
7
|
|
8
8
|
def current_session!
|
9
9
|
@current_session = true
|
@@ -8,9 +8,9 @@ module Spotlight
|
|
8
8
|
friendly_id :title, use: [:slugged, :scoped, :finders, :history], scope: :exhibit
|
9
9
|
|
10
10
|
belongs_to :exhibit, touch: true
|
11
|
-
belongs_to :created_by, class_name: Spotlight::Engine.config.user_class
|
12
|
-
belongs_to :last_edited_by, class_name: Spotlight::Engine.config.user_class
|
13
|
-
belongs_to :thumbnail, class_name: 'Spotlight::FeaturedImage', dependent: :destroy
|
11
|
+
belongs_to :created_by, class_name: Spotlight::Engine.config.user_class, optional: true
|
12
|
+
belongs_to :last_edited_by, class_name: Spotlight::Engine.config.user_class, optional: true
|
13
|
+
belongs_to :thumbnail, class_name: 'Spotlight::FeaturedImage', dependent: :destroy, optional: true
|
14
14
|
|
15
15
|
validates :weight, inclusion: { in: proc { 0..Spotlight::Page::MAX_PAGES } }
|
16
16
|
|
@@ -5,7 +5,7 @@ module Spotlight
|
|
5
5
|
enum job_status: { unstarted: 0, in_progress: 1, succeeded: 2, failed: 3 }
|
6
6
|
|
7
7
|
belongs_to :exhibit, class_name: 'Spotlight::Exhibit'
|
8
|
-
belongs_to :user, class_name: '::User'
|
8
|
+
belongs_to :user, class_name: '::User', optional: true
|
9
9
|
|
10
10
|
# null start times sort to the top, to more easily surface pending reindexing
|
11
11
|
default_scope { order('start_time IS NOT NULL, start_time DESC') }
|
@@ -4,7 +4,7 @@ module Spotlight
|
|
4
4
|
##
|
5
5
|
# Exhibit-specific resources, created using uploaded and custom fields
|
6
6
|
class Upload < Spotlight::Resource
|
7
|
-
belongs_to :upload, class_name: 'Spotlight::FeaturedImage'
|
7
|
+
belongs_to :upload, class_name: 'Spotlight::FeaturedImage', optional: true
|
8
8
|
|
9
9
|
# we want to do this before reindexing
|
10
10
|
after_create :update_document_sidecar
|
@@ -3,11 +3,9 @@ module Spotlight
|
|
3
3
|
# Exhibit authorization roles
|
4
4
|
class Role < ActiveRecord::Base
|
5
5
|
ROLES = %w(admin curator).freeze
|
6
|
-
belongs_to :resource, polymorphic: true
|
7
|
-
belongs_to :user, class_name: Spotlight::Engine.config.user_class, autosave: true
|
6
|
+
belongs_to :resource, polymorphic: true, optional: true
|
7
|
+
belongs_to :user, class_name: Spotlight::Engine.config.user_class, autosave: true, required: true
|
8
8
|
validates :role, inclusion: { in: ROLES }
|
9
|
-
validates :user_key, presence: true
|
10
|
-
validate :user_must_exist, if: -> { user_key.present? }
|
11
9
|
validate :user_must_be_unique, if: :user
|
12
10
|
|
13
11
|
def user_key
|
@@ -22,17 +20,12 @@ module Spotlight
|
|
22
20
|
def user_key=(key)
|
23
21
|
@user_key = key
|
24
22
|
self.user ||= Spotlight::Engine.user_class.find_by_user_key(key)
|
25
|
-
user.user_key
|
23
|
+
self.user ||= Spotlight::Engine.user_class.invite!(email: user_key, skip_invitation: true)
|
24
|
+
user.user_key = key
|
26
25
|
end
|
27
26
|
|
28
27
|
protected
|
29
28
|
|
30
|
-
def user_must_exist
|
31
|
-
return if user.present?
|
32
|
-
|
33
|
-
self.user ||= Spotlight::Engine.user_class.invite!(email: user_key, skip_invitation: true)
|
34
|
-
end
|
35
|
-
|
36
29
|
# This is just like
|
37
30
|
# validates :user, uniqueness: { scope: :exhibit}
|
38
31
|
# but it puts the error message on the user_key instead of user so that the form will render correctly
|
@@ -13,8 +13,8 @@ module Spotlight
|
|
13
13
|
validates :title, presence: true
|
14
14
|
has_paper_trail
|
15
15
|
|
16
|
-
belongs_to :masthead, dependent: :destroy
|
17
|
-
belongs_to :thumbnail, class_name: 'Spotlight::FeaturedImage', dependent: :destroy
|
16
|
+
belongs_to :masthead, dependent: :destroy, optional: true
|
17
|
+
belongs_to :thumbnail, class_name: 'Spotlight::FeaturedImage', dependent: :destroy, optional: true
|
18
18
|
accepts_nested_attributes_for :thumbnail, update_only: true, reject_if: proc { |attr| attr['iiif_tilesource'].blank? }
|
19
19
|
accepts_nested_attributes_for :masthead, update_only: true, reject_if: proc { |attr| attr['iiif_tilesource'].blank? }
|
20
20
|
|