app/presenters/blacklight/document_presenter.rb in blacklight-7.5.1 vs app/presenters/blacklight/document_presenter.rb in blacklight-7.6.0

- old
+ new

@@ -17,92 +17,83 @@ @configuration = configuration end # @return [Hash<String,Configuration::Field>] all the fields for this index view that should be rendered def fields_to_render - fields.select do |_name, field_config| - # rubocop:disable Style/PreferredHashMethods - render_field?(field_config) && has_value?(field_config) - # rubocop:enable Style/PreferredHashMethods + return to_enum(:fields_to_render) unless block_given? + + fields.each do |name, field_config| + field_presenter = field_presenter(field_config) + + next unless field_presenter.render_field? && field_presenter.any? + + yield name, field_config, field_presenter end end ## # Get the value of the document's "title" field, or a placeholder # value (if empty) # # @return [String] def heading - return field_values(view_config.title_field) if view_config.title_field.is_a? Blacklight::Configuration::Field + return field_value(view_config.title_field) if view_config.title_field.is_a? Blacklight::Configuration::Field fields = Array.wrap(view_config.title_field) + [configuration.document_model.unique_key] - f = fields.lazy.map { |field| field_config(field) }.detect { |field_config| retrieve_values(field_config).any? } - field_values(f, except_operations: [Rendering::HelperMethod]) + f = fields.lazy.map { |field| field_config(field) }.detect { |field_config| field_presenter(field_config).any? } + field_value(f, except_operations: [Rendering::HelperMethod]) end def display_type(base_name = nil, default: nil) fields = [] fields += Array.wrap(view_config[:"#{base_name}_display_type_field"]) if base_name && view_config.key?(:"#{base_name}_display_type_field") fields += Array.wrap(view_config.display_type_field) - display_type = fields.lazy.map { |field| retrieve_values(field_config(field)) }.detect(&:any?) + display_type = fields.lazy.map { |field| field_presenter(field_config(field)) }.detect(&:any?)&.values display_type ||= Array(default) if default display_type || [] end ## # Render the field label for a document # # Allow an extention point where information in the document # may drive the value of the field - # @param [Configuration::Field] field + # @param [Configuration::Field] field_config # @param [Hash] options # @option options [String] :value - def field_value field, options = {} - field_values(field, options) + def field_value field_config, options = {} + field_presenter(field_config, options).render end def thumbnail @thumbnail ||= thumbnail_presenter.new(document, view_context, view_config) end private - ## - # Check to see if the given field should be rendered in this context - # @param [Blacklight::Configuration::Field] field_config - # @return [Boolean] def render_field?(field_config) - view_context.should_render_field?(field_config, document) + field_presenter(field_config).render_field? end + deprecation_deprecate render_field?: 'Use FieldPresenter#render_field?' - ## - # Check if a document has (or, might have, in the case of accessor methods) a value for - # the given solr field - # @param [Blacklight::Configuration::Field] field_config - # @return [Boolean] def has_value?(field_config) - retrieve_values(field_config).present? + field_presenter(field_config).any? end + deprecation_deprecate has_value?: 'Use FieldPresenter#any?' - ## - # Get the value for a document's field, and prepare to render it. - # - highlight_field - # - accessor - # - solr field - # - # Rendering: - # - helper_method - # - link_to_facet - # @param [Blacklight::Configuration::Field] field_config solr field configuration - # @param [Hash] options additional options to pass to the rendering helpers def field_values(field_config, options = {}) - options[:values] ||= retrieve_values(field_config) unless options.key? :value - FieldPresenter.new(view_context, document, field_config, options).render + field_value(field_config, options) end + deprecation_deprecate field_values: 'Use #field_value' def retrieve_values(field_config) - FieldRetriever.new(document, field_config).fetch + field_presenter(field_config).values + end + deprecation_deprecate retrieve_values: 'Use FieldPresenter#values' + + def field_presenter(field_config, options = {}) + FieldPresenter.new(view_context, document, field_config, options) end end end