From 70c36496a84b71f309e8e702871a8470d8eb5385 Mon Sep 17 00:00:00 2001 From: Justin Coyne Date: Thu, 18 Aug 2016 16:22:39 -0500 Subject: [PATCH] Assign a work to an admin set. Fixes #2502 --- app/forms/sufia/forms/work_form.rb | 4 ++-- app/indexers/sufia/work_indexer.rb | 4 ++++ .../concerns/sufia/solr_document_behavior.rb | 4 ++++ app/presenters/sufia/work_show_presenter.rb | 2 +- .../base/_attribute_rows.html.erb | 17 +++++++++-------- .../records/edit_fields/_admin_set_id.html.erb | 4 ++++ spec/factories/admin_sets.rb | 5 +++++ .../curation_concerns/generic_work_form_spec.rb | 2 +- .../forms/sufia/forms/batch_upload_form_spec.rb | 5 +++-- spec/indexers/sufia/work_indexer_spec.rb | 14 ++++++++++++++ spec/test_app_templates/Gemfile.extra | 1 + 11 files changed, 48 insertions(+), 14 deletions(-) create mode 100644 app/views/records/edit_fields/_admin_set_id.html.erb create mode 100644 spec/factories/admin_sets.rb create mode 100644 spec/indexers/sufia/work_indexer_spec.rb diff --git a/app/forms/sufia/forms/work_form.rb b/app/forms/sufia/forms/work_form.rb index b66620faca..b06d9df6e9 100644 --- a/app/forms/sufia/forms/work_form.rb +++ b/app/forms/sufia/forms/work_form.rb @@ -9,7 +9,7 @@ class WorkForm < CurationConcerns::Forms::WorkForm attr_reader :agreement_accepted - self.terms += [:collection_ids] + self.terms += [:collection_ids, :admin_set_id] self.required_fields = [:title, :creator, :keyword, :rights] def initialize(model, current_ability) @@ -24,7 +24,7 @@ def [](key) # Fields that are automatically drawn on the page above the fold def primary_terms - required_fields + required_fields + [:admin_set_id] end # Fields that are automatically drawn on the page below the fold diff --git a/app/indexers/sufia/work_indexer.rb b/app/indexers/sufia/work_indexer.rb index 9fac8596f6..d4a70bad7f 100644 --- a/app/indexers/sufia/work_indexer.rb +++ b/app/indexers/sufia/work_indexer.rb @@ -8,6 +8,10 @@ def generate_solr_document # when a work in the collection matches the query. solr_doc[Solrizer.solr_name('file_set_ids', :symbol)] = solr_doc[Solrizer.solr_name('member_ids', :symbol)] solr_doc[Solrizer.solr_name('resource_type', :facetable)] = object.resource_type + + admin_set_label = object.admin_set.to_s + solr_doc[Solrizer.solr_name('admin_set', :facetable)] = admin_set_label + solr_doc[Solrizer.solr_name('admin_set', :stored_searchable)] = admin_set_label end end end diff --git a/app/models/concerns/sufia/solr_document_behavior.rb b/app/models/concerns/sufia/solr_document_behavior.rb index 0f1f3b8008..fa7bcbf18e 100644 --- a/app/models/concerns/sufia/solr_document_behavior.rb +++ b/app/models/concerns/sufia/solr_document_behavior.rb @@ -57,6 +57,10 @@ def collection_ids Array.wrap(self['collection_ids_tesim']) end + def admin_set + fetch(Solrizer.solr_name('admin_set'), []) + end + # Find the solr documents for the collections this object belongs to def collections return @collections if @collections diff --git a/app/presenters/sufia/work_show_presenter.rb b/app/presenters/sufia/work_show_presenter.rb index e28adad0fc..3e8868cb37 100644 --- a/app/presenters/sufia/work_show_presenter.rb +++ b/app/presenters/sufia/work_show_presenter.rb @@ -2,7 +2,7 @@ module Sufia class WorkShowPresenter < ::CurationConcerns::WorkShowPresenter # delegate fields from Sufia::Works::Metadata to solr_document delegate :based_near, :related_url, :depositor, :identifier, :resource_type, - :keyword, :itemtype, to: :solr_document + :keyword, :itemtype, :admin_set, to: :solr_document def editor? current_ability.can?(:edit, solr_document) diff --git a/app/views/curation_concerns/base/_attribute_rows.html.erb b/app/views/curation_concerns/base/_attribute_rows.html.erb index 5818a4918d..3bb17c6eef 100644 --- a/app/views/curation_concerns/base/_attribute_rows.html.erb +++ b/app/views/curation_concerns/base/_attribute_rows.html.erb @@ -1,11 +1,12 @@ -<%= presenter.attribute_to_html(:creator, render_as: :faceted ) %> +<%= presenter.attribute_to_html(:creator, render_as: :faceted) %> <%= presenter.attribute_to_html(:contributor, label: 'Contributors', render_as: :faceted) %> -<%= presenter.attribute_to_html(:subject, render_as: :faceted ) %> -<%= presenter.attribute_to_html(:publisher, render_as: :faceted ) %> -<%= presenter.attribute_to_html(:language, render_as: :faceted ) %> +<%= presenter.attribute_to_html(:admin_set, render_as: :faceted) %> +<%= presenter.attribute_to_html(:subject, render_as: :faceted) %> +<%= presenter.attribute_to_html(:publisher, render_as: :faceted) %> +<%= presenter.attribute_to_html(:language, render_as: :faceted) %> <%= presenter.attribute_to_html(:identifier, render_as: :linked, search_field: 'identifier_tesim') %> -<%= presenter.attribute_to_html(:keyword, render_as: :faceted ) %> -<%= presenter.attribute_to_html(:date_created, render_as: :linked, search_field: 'date_created_tesim' ) %> -<%= presenter.attribute_to_html(:based_near, render_as: :faceted ) %> +<%= presenter.attribute_to_html(:keyword, render_as: :faceted) %> +<%= presenter.attribute_to_html(:date_created, render_as: :linked, search_field: 'date_created_tesim') %> +<%= presenter.attribute_to_html(:based_near, render_as: :faceted) %> <%= presenter.attribute_to_html(:related_url) %> -<%= presenter.attribute_to_html(:resource_type, render_as: :faceted ) %> +<%= presenter.attribute_to_html(:resource_type, render_as: :faceted) %> diff --git a/app/views/records/edit_fields/_admin_set_id.html.erb b/app/views/records/edit_fields/_admin_set_id.html.erb new file mode 100644 index 0000000000..3d4cf11d51 --- /dev/null +++ b/app/views/records/edit_fields/_admin_set_id.html.erb @@ -0,0 +1,4 @@ +<%= f.input :admin_set_id, as: :select, + collection: CurationConcerns::AdminSetService.new(controller).select_options, + include_blank: true, + input_html: { class: 'form-control' } %> diff --git a/spec/factories/admin_sets.rb b/spec/factories/admin_sets.rb new file mode 100644 index 0000000000..438bb7795f --- /dev/null +++ b/spec/factories/admin_sets.rb @@ -0,0 +1,5 @@ +FactoryGirl.define do + factory :admin_set do + sequence(:title) { |n| ["Title #{n}"] } + end +end diff --git a/spec/forms/curation_concerns/generic_work_form_spec.rb b/spec/forms/curation_concerns/generic_work_form_spec.rb index 9f994ef2dd..a1cbbf702f 100644 --- a/spec/forms/curation_concerns/generic_work_form_spec.rb +++ b/spec/forms/curation_concerns/generic_work_form_spec.rb @@ -9,7 +9,7 @@ describe "#primary_terms" do subject { form.primary_terms } - it { is_expected.to eq [:title, :creator, :keyword, :rights] } + it { is_expected.to eq [:title, :creator, :keyword, :rights, :admin_set_id] } end describe "#secondary_terms" do diff --git a/spec/forms/sufia/forms/batch_upload_form_spec.rb b/spec/forms/sufia/forms/batch_upload_form_spec.rb index 599046bedc..a5851cad9e 100644 --- a/spec/forms/sufia/forms/batch_upload_form_spec.rb +++ b/spec/forms/sufia/forms/batch_upload_form_spec.rb @@ -6,7 +6,7 @@ describe "#primary_terms" do subject { form.primary_terms } - it { is_expected.to eq [:creator, :keyword, :rights] } + it { is_expected.to eq [:creator, :keyword, :rights, :admin_set_id] } it { is_expected.not_to include(:title) } end @@ -59,6 +59,7 @@ :ordered_member_ids, :source, :in_works_ids, - :collection_ids] } + :collection_ids, + :admin_set_id] } end end diff --git a/spec/indexers/sufia/work_indexer_spec.rb b/spec/indexers/sufia/work_indexer_spec.rb new file mode 100644 index 0000000000..7b994ab5b9 --- /dev/null +++ b/spec/indexers/sufia/work_indexer_spec.rb @@ -0,0 +1,14 @@ +require 'spec_helper' + +RSpec.describe Sufia::WorkIndexer do + let(:indexer) { described_class.new(work) } + describe "#generate_solr_document" do + let(:work) { create(:generic_work, admin_set: create(:admin_set)) } + subject(:document) { indexer.generate_solr_document } + + it "indexes the correct fields" do + expect(document.fetch('admin_set_sim')).to eq ["Title 1"] + expect(document.fetch('admin_set_tesim')).to eq ["Title 1"] + end + end +end diff --git a/spec/test_app_templates/Gemfile.extra b/spec/test_app_templates/Gemfile.extra index 118192bfe1..d6eeb77d9b 100644 --- a/spec/test_app_templates/Gemfile.extra +++ b/spec/test_app_templates/Gemfile.extra @@ -1,6 +1,7 @@ # Use this file to reference specific commits of gems. gem 'breadcrumbs_on_rails', git: 'https://github.com/weppos/breadcrumbs_on_rails.git' gem 'blacklight', git: 'https://github.com/projectblacklight/blacklight' +gem 'curation_concerns', git: 'https://github.com/projecthydra/curation_concerns.git', branch: 'admin-set-context' gem 'acts_as_follower', git: 'https://github.com/awjecc/acts_as_follower.git', branch: 'rails5-fix-parent_class_name' group :development do