diff --git a/app/assets/stylesheets/modules/access-panel-course-reserve.css.scss b/app/assets/stylesheets/modules/access-panel-course-reserve.css.scss new file mode 100644 index 000000000..0f27d9420 --- /dev/null +++ b/app/assets/stylesheets/modules/access-panel-course-reserve.css.scss @@ -0,0 +1,18 @@ +.panel-course-reserve { + ul.links { + padding-left: 0; + list-style-type: none; + li { + padding-right: 20px; + padding-bottom: 15px; + } + li:last-child { + padding-bottom: 0px; + } + } +} + +.course-reserve-title { + text-transform: capitalize !important; + font-size: $font-size-small; +} diff --git a/app/assets/stylesheets/searchworks.css.scss b/app/assets/stylesheets/searchworks.css.scss index eb4dc9866..e08fbf35b 100644 --- a/app/assets/stylesheets/searchworks.css.scss +++ b/app/assets/stylesheets/searchworks.css.scss @@ -2,8 +2,9 @@ @import 'base'; @import 'layout'; +@import 'modules/access-panel-course-reserve'; @import 'modules/access-panel-online'; @import 'modules/breadcrumb'; @import 'modules/record-toolbar'; @import 'modules/search-bar'; -@import 'modules/record-metadata-section'; \ No newline at end of file +@import 'modules/record-metadata-section'; diff --git a/app/controllers/catalog_controller.rb b/app/controllers/catalog_controller.rb index 72927b901..b72b96a69 100644 --- a/app/controllers/catalog_controller.rb +++ b/app/controllers/catalog_controller.rb @@ -78,8 +78,8 @@ class CatalogController < ApplicationController #config.add_facet_field "dewey_2digit_facet", :label => "Refine Call Number", :show => false #config.add_facet_field "dewey_b4cutter_facet", :label => "Refine Call Number", :show => false #config.add_facet_field "gov_doc_type_facet", :label => "Refine Call Number", :show => false - #config.add_facet_field "course", :label => "Course", :show => false - #config.add_facet_field "instructor", :label => "Instructor", :show => false + config.add_facet_field "course", :label => "Course", :show => false + config.add_facet_field "instructor", :label => "Instructor", :show => false config.add_facet_field "author_other_facet", :label => "Organization (as Author)", :limit => true config.add_facet_field "geographic_facet", :label => "Region", :limit => true config.add_facet_field "era_facet", :label => "Era", :limit => true diff --git a/app/helpers/access_panel_helper.rb b/app/helpers/access_panel_helper.rb new file mode 100644 index 000000000..42780494a --- /dev/null +++ b/app/helpers/access_panel_helper.rb @@ -0,0 +1,7 @@ +module AccessPanelHelper + + def link_to_course_reserve_course(course) + link_to("#{course.id} -- #{course.name}", catalog_index_path({f: {course: [course.id], instructor: [course.instructor]}})) + end + +end diff --git a/app/models/concerns/course_reserves.rb b/app/models/concerns/course_reserves.rb new file mode 100644 index 000000000..9492b4eed --- /dev/null +++ b/app/models/concerns/course_reserves.rb @@ -0,0 +1,40 @@ +module CourseReserves + def course_reserves + if self.respond_to?(:[]) + @course_reserves ||= CourseReserves::Processor.new(self) + end + end + + private + class Processor + def initialize(document) + @courses = document[:crez_course_info].map { |course| CourseInfo.new(course) } unless document[:crez_course_info].nil? + end + + def present? + true ? @courses : false + end + + attr_reader :courses + + end + + class CourseInfo + def initialize(course) + @course = course.split('-|-').map { |c| c.strip } + end + + def id + @course[0] + end + + def name + @course[1] + end + + def instructor + @course[2] + end + + end +end diff --git a/app/models/solr_document.rb b/app/models/solr_document.rb index efa608f2d..cd302d7f0 100644 --- a/app/models/solr_document.rb +++ b/app/models/solr_document.rb @@ -1,9 +1,11 @@ # -*- encoding : utf-8 -*- -class SolrDocument +class SolrDocument include MarcLinks + include CourseReserves include AccessPanelsConcern + include Blacklight::Solr::Document # The following shows how to setup this blacklight document to display marc documents extension_parameters[:marc_source_field] = :marcxml @@ -11,8 +13,8 @@ class SolrDocument use_extension( Blacklight::Solr::Document::Marc) do |document| document.key?( :marcxml ) end - - field_semantics.merge!( + + field_semantics.merge!( :title => "title_display", :author => "author_display", :language => "language_facet", @@ -22,10 +24,10 @@ class SolrDocument # self.unique_key = 'id' - + # Email uses the semantic field mappings below to generate the body of an email. SolrDocument.use_extension( Blacklight::Solr::Document::Email ) - + # SMS uses the semantic field mappings below to generate the body of an SMS email. SolrDocument.use_extension( Blacklight::Solr::Document::Sms ) diff --git a/app/views/catalog/access_panels/_course_reserve.html.erb b/app/views/catalog/access_panels/_course_reserve.html.erb new file mode 100644 index 000000000..0351b4230 --- /dev/null +++ b/app/views/catalog/access_panels/_course_reserve.html.erb @@ -0,0 +1,21 @@ +<% document ||= @document %> + +<% if document.access_panels.course_reserve.present? %> +
+
Course reserve
+
+ +
+
+<% end %> diff --git a/app/views/catalog/record/_record_metadata_panels.html.erb b/app/views/catalog/record/_record_metadata_panels.html.erb index 7ce8a6bd9..9bd14f1d2 100644 --- a/app/views/catalog/record/_record_metadata_panels.html.erb +++ b/app/views/catalog/record/_record_metadata_panels.html.erb @@ -1,5 +1,6 @@
<%= render "catalog/access_panels/online" %> + <%= render "catalog/access_panels/course_reserve" %> <%# dummy panels (to be replaced) --
Course reserves
@@ -10,4 +11,4 @@
%> -
\ No newline at end of file + diff --git a/config/locales/searchworks.en.yml b/config/locales/searchworks.en.yml index 44d55dbc8..e8026b395 100644 --- a/config/locales/searchworks.en.yml +++ b/config/locales/searchworks.en.yml @@ -22,3 +22,7 @@ en: back_to_search: '  Back to results' back_to_search_xs: '' + access_panels: + course_reserve: + course: 'COURSE: %{link}' + instructor: 'INSTRUCTOR(S): %{instructor}' diff --git a/lib/access_panels/course_reserve.rb b/lib/access_panels/course_reserve.rb new file mode 100644 index 000000000..9e892b01c --- /dev/null +++ b/lib/access_panels/course_reserve.rb @@ -0,0 +1,8 @@ +class CourseReserve < AccessPanel + delegate :present?, to: :courses + def courses + if @document.course_reserves.present? + @document.course_reserves.courses + end + end +end diff --git a/spec/features/access_panels/course_reserve_spec.rb b/spec/features/access_panels/course_reserve_spec.rb new file mode 100644 index 000000000..c84b296e8 --- /dev/null +++ b/spec/features/access_panels/course_reserve_spec.rb @@ -0,0 +1,31 @@ +require 'spec_helper' + +feature "Course Reserve Access Panel" do + + scenario "should have 3 course reservations" do + visit '/catalog/1' + within "div.panel-course-reserve" do + expect(page).to have_css('div.course-reserve-course', count: 3, text: "COURSE:") + expect(page).to have_css('span.course-reserve-title', text: "COURSE:") + expect(page).to have_css('a', text: "ACCT-212-01-02 -- Managerial Accounting: Base") + expect(page).to have_css('div.course-reserve-instructor', text: "INSTRUCTOR(S):") + end + end + + scenario "should have 1 course reservations" do + visit '/catalog/2' + within "div.panel-course-reserve" do + expect(page).to have_css('div.course-reserve-course', count: 1, text: "CAT-401-01-01 -- Emergency Kittenz") + expect(page).to have_css('span.course-reserve-title', text: "COURSE:") + expect(page).to have_css('a', text: "CAT-401-01-01 -- Emergency Kittenz") + expect(page).to have_css('div.course-reserve-instructor', text: "INSTRUCTOR(S): McDonald, Ronald") + end + end + + scenario "should have 0 course reservations" do + visit '/catalog/3' + expect(page.has_no_css?('div.panel-course-reserve')).to eql true + + end + +end diff --git a/spec/fixtures/solr_documents/1.yml b/spec/fixtures/solr_documents/1.yml index 991929616..69b4fe737 100644 --- a/spec/fixtures/solr_documents/1.yml +++ b/spec/fixtures/solr_documents/1.yml @@ -7,3 +7,7 @@ :pub_date: 2014 :access_facet: Online :building_facet: Green +:crez_course_info: + - "ACCT-212-01-02 -|- Managerial Accounting: Base -|- Rajan, Madhav V." + - "ACCT-212-01-02 -|- Managerial Accounting: Base -|- Reichelstein, Stefan J" + - "ACCT-215-01-02 -|- Managerial Accounting: Accelerated -|- Marinovic Vial, Ivan" diff --git a/spec/fixtures/solr_documents/2.yml b/spec/fixtures/solr_documents/2.yml index 46ce2398b..0236f43b4 100644 --- a/spec/fixtures/solr_documents/2.yml +++ b/spec/fixtures/solr_documents/2.yml @@ -7,3 +7,5 @@ :pub_date: 2013 :access_facet: Online :building_facet: SAL3 (off-campus storage) +:crez_course_info: + - "CAT-401-01-01 -|- Emergency Kittenz -|- McDonald, Ronald" diff --git a/spec/integration/external-data/access_panels_spec.rb b/spec/integration/external-data/access_panels_spec.rb index 958df12b7..0cc38c123 100644 --- a/spec/integration/external-data/access_panels_spec.rb +++ b/spec/integration/external-data/access_panels_spec.rb @@ -16,4 +16,18 @@ end end end + + describe "Course Reserve" do + it "should not be displayed for non course reserve objects" do + visit catalog_path('10473427') + expect(page).not_to have_css(".panel-course-reserve") + end + it "should be displayed for course reserve objects" do + visit catalog_path('10020587') + + within(".panel-course-reserve") do + expect(page).to have_css("li a", text: "ACCT-212-01-02 -- Managerial Accounting: Base") + end + end + end end diff --git a/spec/lib/access_panels/course_reserve_spec.rb b/spec/lib/access_panels/course_reserve_spec.rb new file mode 100644 index 000000000..00e6f70e2 --- /dev/null +++ b/spec/lib/access_panels/course_reserve_spec.rb @@ -0,0 +1,18 @@ +require 'spec_helper' +require 'course_reserve' + +describe CourseReserve do + + describe "present?" do + + it "should have a course reserve present" do + doc = SolrDocument.new(id: '123', crez_course_info: ["CAT-401-01-01 -|- Emergency Kittenz -|- McDonald, Ronald"]) + expect(CourseReserve.new(doc).present?).to eq true + end + + it "should not have a course reserve present" do + doc = SolrDocument.new(id: '123') + expect(CourseReserve.new(doc).present?).to eq false + end + end +end diff --git a/spec/models/concerns/course_reserves_spec.rb b/spec/models/concerns/course_reserves_spec.rb new file mode 100644 index 000000000..e7b7f7d0b --- /dev/null +++ b/spec/models/concerns/course_reserves_spec.rb @@ -0,0 +1,42 @@ +require 'spec_helper' + +class CourseReservesTestClass + include CourseReserves +end + +describe CourseReserves do + it "should return nil for non course reserve docs" do + expect(CourseReservesTestClass.new.course_reserves).to be_nil + end + + describe "present?" do + it "should return false" do + expect(CourseReservesTestClass.new.course_reserves.present?).to be_false + end + + it "should return true" do + doc = SolrDocument.new(id: '123', crez_course_info: ["CAT-401-01-01 -|- Emergency Kittenz -|- McDonald, Ronald"]) + expect(doc.course_reserves.present?).to be_true + end + end + + describe CourseReserves::CourseInfo do + let(:doc) {"CAT-401-01-01 -|- Emergency Kittenz -|- McDonald, Ronald"} + let(:course_info) { CourseReserves::CourseInfo.new(doc) } + it "should initialize a new reservation" do + expect(course_info).to be_an CourseReserves::CourseInfo + end + + it "should have the correct id" do + expect(course_info.id).to eq "CAT-401-01-01" + end + + it "should have the correct name" do + expect(course_info.name).to eq "Emergency Kittenz" + end + + it "should have the correct instructor" do + expect(course_info.instructor).to eq "McDonald, Ronald" + end + end +end