Module: Spotlight::SolrDocument

Extended by:
ActiveSupport::Concern
Includes:
GlobalID::Identification, Finder
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/uploaded_resource.rb

Overview

SolrDocument mixins to add ActiveModel shims and indexing methods

Defined Under Namespace

Modules: AtomicUpdates, ClassMethods, Finder, UploadedResource

Instance Method Summary collapse

Methods included from Finder

#==, #blacklight_solr

Instance Method Details

#attribute_present?(*_args) ⇒ Boolean

Returns:

  • (Boolean)


120
121
122
# File 'app/models/concerns/spotlight/solr_document.rb', line 120

def attribute_present?(*_args)
  false
end

#make_private!(exhibit) ⇒ Object



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

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

#make_public!(exhibit) ⇒ Object



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

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

#private?(exhibit) ⇒ Boolean

Returns:

  • (Boolean)


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

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

#public?(exhibit) ⇒ Boolean

Returns:

  • (Boolean)


111
112
113
# File 'app/models/concerns/spotlight/solr_document.rb', line 111

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

#reindexObject



81
82
83
# File 'app/models/concerns/spotlight/solr_document.rb', line 81

def reindex
  # no-op reindex implementation
end

#saveObject



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

def save
  reindex
end

#sidecar(exhibit) ⇒ Object



89
90
91
# File 'app/models/concerns/spotlight/solr_document.rb', line 89

def sidecar(exhibit)
  sidecars.find_or_initialize_by exhibit:, document_id: id, document_type: self.class.to_s
end

#sidecarsObject



85
86
87
# File 'app/models/concerns/spotlight/solr_document.rb', line 85

def sidecars
  Spotlight::SolrDocumentSidecar.where(document_id: id, document_type: self.class.to_s)
end

#to_solrObject



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

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

#update(current_exhibit, new_attributes) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'app/models/concerns/spotlight/solr_document.rb', line 56

def update(current_exhibit, new_attributes)
  attributes = convert_incoming_attributes(new_attributes)

  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(sidecar(current_exhibit), with: tags, on: :tags) if tags

  update_exhibit_resource(resource_attributes) if uploaded_resource?
end

#update_exhibit_resource(resource_attributes) ⇒ Object



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

def update_exhibit_resource(resource_attributes)
  return unless resource_attributes && resource_attributes['url']

  uploaded_resource.upload.update image: resource_attributes['url']
end

#uploaded_resource?Boolean

Returns:

  • (Boolean)


115
116
117
118
# File 'app/models/concerns/spotlight/solr_document.rb', line 115

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