Class: Umlaut::SectionHighlights
- Inherits:
-
Object
- Object
- Umlaut::SectionHighlights
- Defined in:
- app/helpers/umlaut/section_highlights.rb
Overview
NOT Rails helper methods, but a helper class with logic to determine whether a given umlaut display section should be given the umlaut-section-highlighted class, used to mark recommended access methods. (For instance, fulltext if it’s available, or maybe document_delivery if it’s not, but it gets more complicated.)
Instance Attribute Summary collapse
-
#umlaut_config ⇒ Object
readonly
Returns the value of attribute umlaut_config.
-
#umlaut_request ⇒ Object
readonly
Returns the value of attribute umlaut_request.
Instance Method Summary collapse
- #apply_filters!(sections) ⇒ Object
-
#calc_highlighted_sections! ⇒ Object
Returns an array of zero or more sections to display with .umlaut-section-highlighted – usually the recommended section, fulltext if we have it, etc.
-
#highlighted_sections ⇒ Object
array of section div_id’s that should be highlighted for the current request in it’s current state.
-
#initialize(umlaut_request, umlaut_config = UmlautController.umlaut_config) ⇒ SectionHighlights
constructor
-
First arg is the umlaut Request * Second optional is an UmlautConfiguration object, used for ‘section_highlights_filter` lambda – will default to UmlautController.umlaut_config.
-
- #should_highlight_section?(section_id) ⇒ Boolean
Constructor Details
#initialize(umlaut_request, umlaut_config = UmlautController.umlaut_config) ⇒ SectionHighlights
-
First arg is the umlaut Request
-
Second optional is an UmlautConfiguration object, used for ‘section_highlights_filter` lambda – will default to UmlautController.umlaut_config
14 15 16 17 |
# File 'app/helpers/umlaut/section_highlights.rb', line 14 def initialize(umlaut_request, umlaut_config = UmlautController.umlaut_config) @umlaut_config = umlaut_config @umlaut_request = umlaut_request end |
Instance Attribute Details
#umlaut_config ⇒ Object (readonly)
Returns the value of attribute umlaut_config.
8 9 10 |
# File 'app/helpers/umlaut/section_highlights.rb', line 8 def umlaut_config @umlaut_config end |
#umlaut_request ⇒ Object (readonly)
Returns the value of attribute umlaut_request.
8 9 10 |
# File 'app/helpers/umlaut/section_highlights.rb', line 8 def umlaut_request @umlaut_request end |
Instance Method Details
#apply_filters!(sections) ⇒ Object
73 74 75 76 77 78 79 80 81 82 |
# File 'app/helpers/umlaut/section_highlights.rb', line 73 def apply_filters!(sections) sections = sections.dup (umlaut_config.section_highlights_filter || []).each do |filter| # filters are expected to mutate 'sections' if they want filter.call(umlaut_request, sections, self) end return sections end |
#calc_highlighted_sections! ⇒ Object
Returns an array of zero or more sections to display with .umlaut-section-highlighted – usually the recommended section, fulltext if we have it, etc.
A bit hard to get exactly right for both technical and contextual policy issues, this is a basic starting point.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'app/helpers/umlaut/section_highlights.rb', line 36 def calc_highlighted_sections! sections = [] if umlaut_request.get_service_type("fulltext").present? sections << "fulltext" end # Highlight holdings if it's present AND: # no fulltext is present OR it's a book (non-serial) type # We think people want print for books more often. if umlaut_request.get_service_type("holding").present? && ( umlaut_request.get_service_type("fulltext").blank? || (! MetadataHelper.title_is_serial?(umlaut_request.referent)) ) sections << "holding" end # Return document_delivery as highlighted only if # fulltext and holdings are done being fetched. AND. # If there's no fulltext or holdings, OR there's holdings, but # it's a journal type thing, where we probably don't know if the # particular volume/issue wanted is present. Ugh. if ( umlaut_request.get_service_type("document_delivery").present? && umlaut_request.get_service_type("fulltext").empty? && (! umlaut_request.service_types_in_progress?(["fulltext", "holding"])) && ( umlaut_request.get_service_type("holding").empty? || umlaut_request.referent.format == "journal" ) ) sections << "document_delivery" end sections = apply_filters!(sections) return sections end |
#highlighted_sections ⇒ Object
array of section div_id’s that should be highlighted for the current request in it’s current state. Calculated with calc_highlighted_sections!, then cached.
26 27 28 |
# File 'app/helpers/umlaut/section_highlights.rb', line 26 def highlighted_sections @highlighted_sections ||= calc_highlighted_sections! end |
#should_highlight_section?(section_id) ⇒ Boolean
19 20 21 |
# File 'app/helpers/umlaut/section_highlights.rb', line 19 def should_highlight_section?(section_id) highlighted_sections.include? section_id.to_s end |