Module: Spotlight::SolrDocument

Extended by:
ActiveSupport::Concern
Includes:
GlobalID::Identification, ActiveModelConcern, Finder, SpotlightImages
Defined in:
app/models/concerns/spotlight/solr_document.rb,
app/models/concerns/spotlight/solr_document/finder.rb,
app/models/concerns/spotlight/solr_document/atomic_updates.rb,
app/models/concerns/spotlight/solr_document/spotlight_images.rb,
app/models/concerns/spotlight/solr_document/uploaded_resource.rb,
app/models/concerns/spotlight/solr_document/active_model_concern.rb

Overview

SolrDocument mixins to add ActiveModel shims and indexing methods

Defined Under Namespace

Modules: ActiveModelConcern, AtomicUpdates, ClassMethods, Finder, SpotlightImages, UploadedResource

Class Method Summary collapse

Instance Method Summary collapse

Methods included from SpotlightImages

#spotlight_image_versions

Methods included from Finder

#blacklight_solr

Methods included from ActiveModelConcern

#destroyed?, #new_record?, #persisted?, #save, #to_key

Class Method Details

.resource_type_fieldObject



79
80
81
# File 'app/models/concerns/spotlight/solr_document.rb', line 79

def self.resource_type_field
  :"#{Spotlight::Engine.config.solr_fields.prefix}spotlight_resource_type#{Spotlight::Engine.config.solr_fields.string_suffix}"
end

.solr_field_for_tagger(tagger) ⇒ Object



71
72
73
# File 'app/models/concerns/spotlight/solr_document.rb', line 71

def self.solr_field_for_tagger(tagger)
  :"#{solr_field_prefix(tagger)}tags#{Spotlight::Engine.config.solr_fields.string_suffix}"
end

.solr_field_prefix(exhibit) ⇒ Object



83
84
85
# File 'app/models/concerns/spotlight/solr_document.rb', line 83

def self.solr_field_prefix(exhibit)
  "#{Spotlight::Engine.config.solr_fields.prefix}#{exhibit.class.model_name.param_key}_#{exhibit.to_param}_"
end

.visibility_field(exhibit) ⇒ Object



75
76
77
# File 'app/models/concerns/spotlight/solr_document.rb', line 75

def self.visibility_field(exhibit)
  :"#{solr_field_prefix(exhibit)}public#{Spotlight::Engine.config.solr_fields.boolean_suffix}"
end

Instance Method Details

#attribute_present?(*_args) ⇒ Boolean

Returns:

  • (Boolean)


108
109
110
# File 'app/models/concerns/spotlight/solr_document.rb', line 108

def attribute_present?(*_args)
  false
end

#make_private!(exhibit) ⇒ Object



91
92
93
# File 'app/models/concerns/spotlight/solr_document.rb', line 91

def make_private!(exhibit)
  sidecar(exhibit).private!
end

#make_public!(exhibit) ⇒ Object



87
88
89
# File 'app/models/concerns/spotlight/solr_document.rb', line 87

def make_public!(exhibit)
  sidecar(exhibit).public!
end

#private?(exhibit) ⇒ Boolean

Returns:

  • (Boolean)


95
96
97
# File 'app/models/concerns/spotlight/solr_document.rb', line 95

def private?(exhibit)
  !(public?(exhibit))
end

#public?(exhibit) ⇒ Boolean

Returns:

  • (Boolean)


99
100
101
# File 'app/models/concerns/spotlight/solr_document.rb', line 99

def public?(exhibit)
  sidecar(exhibit).public?
end

#reindexObject



59
60
61
# File 'app/models/concerns/spotlight/solr_document.rb', line 59

def reindex
  # no-op reindex implementation
end

#sidecar(exhibit) ⇒ Object



63
64
65
# File 'app/models/concerns/spotlight/solr_document.rb', line 63

def sidecar(exhibit)
  sidecars.find_or_initialize_by exhibit: exhibit
end

#to_solrObject



67
68
69
# File 'app/models/concerns/spotlight/solr_document.rb', line 67

def to_solr
  { self.class.unique_key.to_sym => id }.reverse_merge(sidecars.inject({}) { |a, e| a.merge(e.to_solr) }).merge(tags_to_solr)
end

#update(current_exhibit, new_attributes) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'app/models/concerns/spotlight/solr_document.rb', line 39

def update(current_exhibit, new_attributes)
  attributes = new_attributes.stringify_keys

  custom_data = attributes.delete('sidecar')
  tags = attributes.delete('exhibit_tag_list')
  resource_attributes = attributes.delete('uploaded_resource')

  sidecar(current_exhibit).update(custom_data) if custom_data

  # Note: this causes a save
  current_exhibit.tag(self, with: tags, on: :tags) if tags

  update_exhibit_resource(resource_attributes) if uploaded_resource?
end

#update_exhibit_resource(resource_attributes) ⇒ Object



54
55
56
57
# File 'app/models/concerns/spotlight/solr_document.rb', line 54

def update_exhibit_resource(resource_attributes)
  return unless resource_attributes && resource_attributes['url']
  uploaded_resource.update url: resource_attributes['url']
end

#uploaded_resource?Boolean

Returns:

  • (Boolean)


103
104
105
106
# File 'app/models/concerns/spotlight/solr_document.rb', line 103

def uploaded_resource?
  self[Spotlight::SolrDocument.resource_type_field].present? &&
    self[Spotlight::SolrDocument.resource_type_field].include?('spotlight/resources/uploads')
end