Forms and Presenters and Indexers! Oh my!

Indexing (The old way)

class Image < ActiveFedora::Base
  def to_solr(solr_doc=Hash.new)
    super.tap do |solr_doc|
      solr_doc['field1_ssi'] = some_value if some_condition?
    end
  end
end
      

Indexer (Model)


class Image < ActiveFedora::Base
  def self.indexer
    ImageIndexer
  end
end
      

Indexer (Indexer)


class ImageIndexer < ActiveFedora::IndexingService
  def generate_solr_document
    super do |solr_doc|
      solr_doc['field1_ssi'] = some_value if some_condition?
      solr_doc['field2_ssi'] = other_value if other_condition?
    end
  end
end
        

Presenter

Presenter

class ArticlePresenter
  include Hydra::Presenter

  delegate :title, to: :model

  def byline
    "#{model.created_at.strftime('%m/%d/%Y')} - by #{author_name}"
  end

  def author_name
    "#{model.author.first_name} #{model.author.last_name}"
  end
end
      
      
# app/controllers/article_controller.rb
article = Article.find(params[:id])
@presenter = ArticlePresenter.new(article)


<% # app/views/articles/show.html.erb %>
<%= link_to @presenter.title, @presenter %>
<%= @presenter.byline %>

      
      
# app/controllers/article_controller.rb
 _, document_list = search_results(params,
                      CatalogController.search_params_logic)
@presenter = ArticlePresenter.new(document_list.first)


<% # app/views/articles/show.html.erb %>
<%= link_to @presenter.title, @presenter %>
<%= @presenter.byline %>

      
      

Indexer + Presenter = BFF

https://flic.kr/p/9YW6go - https://creativecommons.org/licenses/by-nc-nd/2.0/

class AudioForm
  include HydraEditor::Form
  self.model_class = Audio
  self.terms = [:title, :creator, :description, :subject, :isPartOf]
  self.required_fields = [:title, :creator]
end

audio = Audio.find(param[:id])
@form = AudioForm.new(audio)
       

As an update helper


AudioForm.model_attributes(params[:audio])
# => { title: 'My new image' }
       

Why?

Fin.

/