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.
-
#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
- #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_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>
Presenters for the array of ids (not filtered by class).
- #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
determine if the user can add this work to a collection.
- #stats_path ⇒ Object
-
#total_pages ⇒ Integer
Total number of pages of viewable items.
- #tweeter ⇒ Object
- #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
#persisted?, #to_model, #to_partial_path
Constructor Details
#initialize(solr_document, current_ability, request = nil) ⇒ WorkShowPresenter
Returns a new instance of WorkShowPresenter.
24 25 26 27 28 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 24 def initialize(solr_document, current_ability, request = nil) @solr_document = solr_document @current_ability = current_ability @request = request end |
Instance Attribute Details
#current_ability ⇒ Object
Returns the value of attribute current_ability.
6 7 8 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 6 def current_ability @current_ability end |
#request ⇒ Object
Returns the value of attribute request.
6 7 8 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 6 def request @request end |
#solr_document ⇒ Object
Returns the value of attribute solr_document.
6 7 8 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 6 def solr_document @solr_document end |
Instance Method Details
#date_modified ⇒ Object
110 111 112 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 110 def date_modified solr_document.date_modified.try(:to_formatted_s, :standard) end |
#date_uploaded ⇒ Object
114 115 116 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 114 def date_uploaded solr_document.date_uploaded.try(:to_formatted_s, :standard) end |
#display_feature_link? ⇒ Boolean
160 161 162 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 160 def display_feature_link? work_featurable? && FeaturedWork.can_create_another? && !featured? end |
#display_unfeature_link? ⇒ Boolean
164 165 166 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 164 def display_unfeature_link? work_featurable? && featured? end |
#download_url ⇒ String
Returns a download URL, if work has representative media, or a blank string.
53 54 55 56 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 53 def download_url return '' if representative_presenter.nil? Hyrax::Engine.routes.url_helpers.download_url(representative_presenter, host: request.host) end |
#editor? ⇒ Boolean
134 135 136 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 134 def editor? current_ability.can?(:edit, solr_document) end |
#export_as_jsonld ⇒ Object
126 127 128 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 126 def export_as_jsonld graph.dump(:jsonld, standard_prefixes: true) end |
#export_as_nt ⇒ Object
122 123 124 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 122 def export_as_nt graph.dump(:ntriples) end |
#export_as_ttl ⇒ Object
130 131 132 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 130 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.
147 148 149 150 151 152 153 154 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 147 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 { |key| key.to_s.underscore } grouped.select! { |obj| obj.downcase == filtered_by } unless filtered_by.nil? grouped.except!(*except) unless except.nil? grouped end |
#iiif_viewer ⇒ Symbol
Returns the name of the IIIF viewer partial to render.
83 84 85 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 83 def iiif_viewer :universal_viewer end |
#iiif_viewer? ⇒ Boolean Also known as: universal_viewer?
Returns render a IIIF viewer.
59 60 61 62 63 64 65 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 59 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
48 49 50 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 48 def inspect_work @inspect_workflow ||= InspectWorkPresenter.new(solr_document, current_ability) end |
#link_name ⇒ Object
118 119 120 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 118 def link_name current_ability.can?(:read, id) ? to_s : 'File' end |
#list_of_item_ids_to_display ⇒ Array
Returns list to display with Kaminari pagination.
179 180 181 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 179 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
216 217 218 219 220 221 222 223 224 225 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 216 def = [] Hyrax.config..each do |field| << { 'label' => I18n.t("simple_form.labels.defaults.#{field}"), 'value' => Array.wrap(send(field)) } end end |
#manifest_url ⇒ Object
194 195 196 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 194 def manifest_url manifest_helper.polymorphic_url([:manifest, self]) end |
#member_of_collection_presenters ⇒ Array<CollectionPresenter>
Get presenters for the collections this work is a member of via the member_of_collections association.
104 105 106 107 108 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 104 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>
Returns presenters for the array of ids (not filtered by class).
185 186 187 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 185 def member_presenters_for(an_array_of_ids) member_presenters(an_array_of_ids) end |
#model ⇒ Object
172 173 174 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 172 def model solr_document.to_model end |
#page_title ⇒ Object
30 31 32 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 30 def page_title "#{human_readable_type} | #{title.first} | ID: #{id} | #{I18n.t('hyrax.product_name')}" end |
#presenter_types ⇒ Object
142 143 144 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 142 def presenter_types Hyrax.config.registered_curation_concern_types.map(&:underscore) + ["collection"] end |
#representative_presenter ⇒ Object
Returns FileSetPresenter presenter for the representative FileSets.
88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 88 def representative_presenter return nil if representative_id.blank? @representative_presenter ||= begin result = member_presenters_for([representative_id]).first return nil if result.try(:id) == id if result.respond_to?(:representative_presenter) result.representative_presenter else result end 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)
202 203 204 205 206 207 208 209 210 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 202 def sequence_rendering renderings = [] if solr_document.rendering_ids.present? solr_document.rendering_ids.each do |file_set_id| renderings << manifest_helper.build_rendering(file_set_id) end end renderings.flatten end |
#show_deposit_for?(collections:) ⇒ Boolean
determine if the user can add this work to a collection
230 231 232 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 230 def show_deposit_for?(collections:) collections.present? || current_ability.can?(:create_any, Collection) end |
#stats_path ⇒ Object
168 169 170 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 168 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.
190 191 192 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 190 def total_pages (total_items.to_f / rows_from_params.to_f).ceil end |
#tweeter ⇒ Object
138 139 140 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 138 def tweeter TwitterPresenter.twitter_handle_for(user_key: depositor) end |
#work_featurable? ⇒ Boolean
156 157 158 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 156 def work_featurable? user_can_feature_works? && solr_document.public? end |
#workflow ⇒ Object
44 45 46 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 44 def workflow @workflow ||= WorkflowPresenter.new(solr_document, current_ability) end |