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
112 113 114 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 112 def date_modified solr_document.date_modified.try(:to_formatted_s, :standard) end |
#date_uploaded ⇒ Object
116 117 118 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 116 def date_uploaded solr_document.date_uploaded.try(:to_formatted_s, :standard) end |
#display_feature_link? ⇒ Boolean
167 168 169 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 167 def display_feature_link? work_featurable? && FeaturedWork.can_create_another? && !featured? end |
#display_unfeature_link? ⇒ Boolean
171 172 173 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 171 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.
141 142 143 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 141 def editor? current_ability.can?(:edit, self) end |
#export_as_jsonld ⇒ Object
128 129 130 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 128 def export_as_jsonld graph.dump(:jsonld, standard_prefixes: true) end |
#export_as_nt ⇒ Object
124 125 126 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 124 def export_as_nt graph.dump(:ntriples) end |
#export_as_ttl ⇒ Object
132 133 134 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 132 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.
154 155 156 157 158 159 160 161 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 154 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
120 121 122 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 120 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.
186 187 188 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 186 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
223 224 225 226 227 228 229 230 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 223 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
205 206 207 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 205 def manifest_url manifest_helper.polymorphic_url([:manifest, self]) end |
#member_count ⇒ Integer
234 235 236 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 234 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.
106 107 108 109 110 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 106 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).
195 196 197 198 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 195 def member_presenters_for(an_array_of_ids) Deprecation.warn("Use `#member_presenters` instead.") member_presenters(an_array_of_ids) end |
#model ⇒ Object
179 180 181 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 179 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
149 150 151 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 149 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 |
# 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 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)
213 214 215 216 217 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 213 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.
251 252 253 254 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 251 def show_deposit_for?(collections:) collections.present? || current_ability.can?(:create_any, Hyrax.config.collection_class) end |
#stats_path ⇒ Object
175 176 177 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 175 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.
201 202 203 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 201 def total_pages (total_items.to_f / rows_from_params.to_f).ceil end |
#tweeter ⇒ Object
145 146 147 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 145 def tweeter TwitterPresenter.twitter_handle_for(user_key: depositor) end |
#valid_child_concerns ⇒ Array<Class>
258 259 260 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 258 def valid_child_concerns Hyrax::ChildTypes.for(parent: solr_document.hydra_model).to_a end |
#work_featurable? ⇒ Boolean
163 164 165 |
# File 'app/presenters/hyrax/work_show_presenter.rb', line 163 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 |