Class: Hyrax::WorkShowPresenter
- Inherits:
-
Object
- Object
- Hyrax::WorkShowPresenter
- Includes:
- ModelProxy, PresentsAttributes
- Defined in:
- app/presenters/hyrax/work_show_presenter.rb
Instance Attribute Summary collapse
-
#current_ability ⇒ Object
Returns the value of attribute current_ability.
-
#member_presenter_factory ⇒ Object
writeonly
Sets the attribute member_presenter_factory.
-
#request ⇒ Object
Returns the value of attribute request.
-
#solr_document ⇒ Object
Returns the value of attribute solr_document.
Instance Method Summary collapse
- #date_modified ⇒ Object
- #date_uploaded ⇒ Object
- #display_feature_link? ⇒ Boolean
- #display_unfeature_link? ⇒ Boolean
-
#download_url ⇒ String
A download URL, if work has representative media, or a blank string.
-
#editor? ⇒ Boolean
deprecated
Deprecated.
use ‘::Ability.can?(:edit, presenter)`. Hyrax views calling presenter #editor methods will continue to call them until Hyrax 4.0.0. The deprecation time horizon for the presenter methods themselves is 5.0.0.
- #export_as_jsonld ⇒ Object
- #export_as_nt ⇒ Object
- #export_as_ttl ⇒ Object
-
#grouped_presenters(filtered_by: nil, except: nil) ⇒ Array
Presenters grouped by model name, used to show the parents of this object.
-
#iiif_viewer ⇒ Symbol
The name of the IIIF viewer partial to render.
-
#iiif_viewer? ⇒ Boolean
(also: #universal_viewer?)
Render a IIIF viewer.
-
#initialize(solr_document, current_ability, request = nil) ⇒ WorkShowPresenter
constructor
A new instance of WorkShowPresenter.
- #inspect_work ⇒ Object
- #link_name ⇒ Object
-
#list_of_item_ids_to_display ⇒ Array
List to display with Kaminari pagination.
-
#manifest_metadata ⇒ Array
IIIF metadata for inclusion in the manifest Called by the ‘iiif_manifest` gem to add metadata.
- #manifest_url ⇒ Object
- #member_count ⇒ Integer
-
#member_of_collection_presenters ⇒ Array<CollectionPresenter>
Get presenters for the collections this work is a member of via the member_of_collections association.
-
#member_presenters_for(an_array_of_ids) ⇒ Array<presenter_class>
deprecated
Deprecated.
use ‘#member_presenters(ids)` instead
- #model ⇒ Object
- #page_title ⇒ Object
- #presenter_types ⇒ Object
-
#representative_presenter ⇒ Object
FileSetPresenter presenter for the representative FileSets.
-
#sequence_rendering ⇒ Array
IIIF rendering linking property for inclusion in the manifest Called by the ‘iiif_manifest` gem to add a ’rendering’ (eg. a link a download for the resource).
-
#show_deposit_for?(collections:) ⇒ Boolean
Given a set of collections, which the caller asserts the current ability can deposit to, decide whether to display actions to add this work to a collection.
- #stats_path ⇒ Object
-
#total_pages ⇒ Integer
Total number of pages of viewable items.
- #tweeter ⇒ Object
- #valid_child_concerns ⇒ Array<Class>
- #work_featurable? ⇒ Boolean
- #workflow ⇒ Object
Methods included from PresentsAttributes
#attribute_to_html, #display_microdata?, #microdata_type_to_html, #permission_badge, #permission_badge_class
Methods included from ModelProxy
Constructor Details
#initialize(solr_document, current_ability, request = nil) ⇒ WorkShowPresenter
Returns a new instance of WorkShowPresenter.
30 31 32 33 34 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 30 def initialize(solr_document, current_ability, request = nil) @solr_document = Hyrax::SolrDocument::OrderedMembers.decorate(solr_document) @current_ability = current_ability @request = request end |
Instance Attribute Details
#current_ability ⇒ Object
Returns the value of attribute current_ability.
11 12 13 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 11 def current_ability @current_ability end |
#member_presenter_factory=(value) ⇒ Object
Sets the attribute member_presenter_factory
10 11 12 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 10 def member_presenter_factory=(value) @member_presenter_factory = value end |
#request ⇒ Object
Returns the value of attribute request.
11 12 13 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 11 def request @request end |
#solr_document ⇒ Object
Returns the value of attribute solr_document.
11 12 13 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 11 def solr_document @solr_document end |
Instance Method Details
#date_modified ⇒ Object
115 116 117 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 115 def date_modified solr_document.date_modified.try(:to_formatted_s, :standard) end |
#date_uploaded ⇒ Object
119 120 121 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 119 def date_uploaded solr_document.date_uploaded.try(:to_formatted_s, :standard) end |
#display_feature_link? ⇒ Boolean
170 171 172 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 170 def display_feature_link? work_featurable? && FeaturedWork.can_create_another? && !featured? end |
#display_unfeature_link? ⇒ Boolean
174 175 176 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 174 def display_unfeature_link? work_featurable? && featured? end |
#download_url ⇒ String
Returns a download URL, if work has representative media, or a blank string.
59 60 61 62 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 59 def download_url return '' if representative_presenter.nil? Hyrax::Engine.routes.url_helpers.download_url(representative_presenter, host: request.host) end |
#editor? ⇒ Boolean
use ‘::Ability.can?(:edit, presenter)`. Hyrax views calling presenter #editor methods will continue to call them until Hyrax 4.0.0. The deprecation time horizon for the presenter methods themselves is 5.0.0.
144 145 146 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 144 def editor? current_ability.can?(:edit, self) end |
#export_as_jsonld ⇒ Object
131 132 133 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 131 def export_as_jsonld graph.dump(:jsonld, standard_prefixes: true) end |
#export_as_nt ⇒ Object
127 128 129 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 127 def export_as_nt graph.dump(:ntriples) end |
#export_as_ttl ⇒ Object
135 136 137 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 135 def export_as_ttl graph.dump(:ttl) end |
#grouped_presenters(filtered_by: nil, except: nil) ⇒ Array
Returns presenters grouped by model name, used to show the parents of this object.
157 158 159 160 161 162 163 164 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 157 def grouped_presenters(filtered_by: nil, except: nil) # TODO: we probably need to retain collection_presenters (as parent_presenters) # and join this with member_of_collection_presenters grouped = member_of_collection_presenters.group_by(&:model_name).transform_keys(&:human) grouped.select! { |obj| obj.casecmp(filtered_by).zero? } unless filtered_by.nil? grouped.reject! { |obj| except.map(&:downcase).include? obj.downcase } unless except.nil? grouped end |
#iiif_viewer ⇒ Symbol
Returns the name of the IIIF viewer partial to render.
89 90 91 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 89 def iiif_viewer :universal_viewer end |
#iiif_viewer? ⇒ Boolean Also known as: universal_viewer?
Returns render a IIIF viewer.
65 66 67 68 69 70 71 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 65 def iiif_viewer? representative_id.present? && representative_presenter.present? && representative_presenter.image? && Hyrax.config.iiif_image_server? && members_include_viewable_image? end |
#inspect_work ⇒ Object
54 55 56 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 54 def inspect_work @inspect_workflow ||= InspectWorkPresenter.new(solr_document, current_ability) end |
#link_name ⇒ Object
123 124 125 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 123 def link_name current_ability.can?(:read, id) ? to_s : 'Private' end |
#list_of_item_ids_to_display ⇒ Array
Returns list to display with Kaminari pagination.
189 190 191 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 189 def list_of_item_ids_to_display paginated_item_list(page_array: ) end |
#manifest_metadata ⇒ Array
IIIF metadata for inclusion in the manifest
Called by the `iiif_manifest` gem to add metadata
226 227 228 229 230 231 232 233 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 226 def Hyrax.config..each_with_object([]) do |field, | << { 'label' => I18n.t("simple_form.labels.defaults.#{field}"), 'value' => Array.wrap(send(field).map { |f| Loofah.fragment(f.to_s).scrub!(:whitewash).to_s }) } end end |
#manifest_url ⇒ Object
208 209 210 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 208 def manifest_url manifest_helper.polymorphic_url([:manifest, self]) end |
#member_count ⇒ Integer
237 238 239 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 237 def member_count @member_count ||= member_presenters.count end |
#member_of_collection_presenters ⇒ Array<CollectionPresenter>
Get presenters for the collections this work is a member of via the member_of_collections association.
109 110 111 112 113 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 109 def member_of_collection_presenters PresenterFactory.build_for(ids: , presenter_class: collection_presenter_class, presenter_args: presenter_factory_arguments) end |
#member_presenters_for(an_array_of_ids) ⇒ Array<presenter_class>
use ‘#member_presenters(ids)` instead
Returns presenters for the array of ids (not filtered by class).
198 199 200 201 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 198 def member_presenters_for(an_array_of_ids) Deprecation.warn("Use `#member_presenters` instead.") member_presenters(an_array_of_ids) end |
#model ⇒ Object
182 183 184 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 182 def model solr_document.to_model end |
#page_title ⇒ Object
36 37 38 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 36 def page_title "#{human_readable_type} | #{title.first} | ID: #{id} | #{I18n.t('hyrax.product_name')}" end |
#presenter_types ⇒ Object
152 153 154 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 152 def presenter_types Hyrax.config.registered_curation_concern_types.map(&:underscore) + ["collection"] end |
#representative_presenter ⇒ Object
Returns FileSetPresenter presenter for the representative FileSets.
94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 94 def representative_presenter return nil if representative_id.blank? @representative_presenter ||= begin result = member_presenters([representative_id]).first return nil if result.try(:id) == id result.try(:representative_presenter) || result rescue Hyrax::ObjectNotFoundError Hyrax.logger.warn "Unable to find representative_id #{representative_id} for work #{id}" return nil end end |
#sequence_rendering ⇒ Array
IIIF rendering linking property for inclusion in the manifest
Called by the `iiif_manifest` gem to add a 'rendering' (eg. a link a download for the resource)
216 217 218 219 220 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 216 def sequence_rendering solr_document.rendering_ids.each_with_object([]) do |file_set_id, renderings| renderings << manifest_helper.build_rendering(file_set_id) end.flatten end |
#show_deposit_for?(collections:) ⇒ Boolean
Given a set of collections, which the caller asserts the current ability can deposit to, decide whether to display actions to add this work to a collection.
By default, this returns ‘true` if any collections are passed in OR the current ability can create a collection.
254 255 256 257 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 254 def show_deposit_for?(collections:) collections.present? || current_ability.can?(:create_any, Hyrax.config.collection_class) end |
#stats_path ⇒ Object
178 179 180 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 178 def stats_path Hyrax::Engine.routes.url_helpers.stats_work_path(self, locale: I18n.locale) end |
#total_pages ⇒ Integer
Returns total number of pages of viewable items.
204 205 206 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 204 def total_pages (total_items.to_f / rows_from_params.to_f).ceil end |
#tweeter ⇒ Object
148 149 150 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 148 def tweeter TwitterPresenter.twitter_handle_for(user_key: depositor) end |
#valid_child_concerns ⇒ Array<Class>
261 262 263 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 261 def valid_child_concerns Hyrax::ChildTypes.for(parent: solr_document.hydra_model).to_a end |
#work_featurable? ⇒ Boolean
166 167 168 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 166 def work_featurable? user_can_feature_works? && solr_document.public? end |
#workflow ⇒ Object
50 51 52 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 50 def workflow @workflow ||= WorkflowPresenter.new(solr_document, current_ability) end |