forked from samvera/hyrax
-
Notifications
You must be signed in to change notification settings - Fork 0
/
featured_work_list.rb
49 lines (41 loc) · 1.4 KB
/
featured_work_list.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# frozen_string_literal: true
class FeaturedWorkList
include ActiveModel::Model
# @param [ActionController::Parameters] a collection of nested perameters
def featured_works_attributes=(attributes_collection)
attributes_collection = attributes_collection.to_h if attributes_collection.respond_to?(:permitted?)
attributes_collection = attributes_collection.sort_by { |i, _| i.to_i }.map { |_, attributes| attributes } if attributes_collection.is_a? Hash
attributes_collection.each do |attributes|
raise "Missing id" if attributes['id'].blank?
existing_record = FeaturedWork.find(attributes['id'])
existing_record.update(attributes.except('id'))
end
end
def featured_works
return @works if @works
@works = FeaturedWork.all
add_solr_document_to_works
@works = @works.reject do |work|
work.presenter.blank?
end
end
delegate :empty?, to: :featured_works
private
def add_solr_document_to_works
work_presenters.each do |presenter|
work_with_id(presenter.id).presenter = presenter
end
end
def ids
@works.pluck(:work_id)
end
def work_presenters
ability = nil
Hyrax::PresenterFactory.build_for(ids: ids,
presenter_class: Hyrax::WorkShowPresenter,
presenter_args: ability)
end
def work_with_id(id)
@works.find { |w| w.work_id == id }
end
end