Module: Decidim::ResourceHelper

Overview

A Helper to render and link to resources.

Instance Method Summary collapse

Instance Method Details

#linked_classes_filter_values_for(klass) ⇒ Object

Uses the ‘linked_classes_for(klass)` helper method to find the linked classes, and adds a default value to it so that it can be used directly in a form.

Example:

<% if linked_classes_for(klass).any? %>
  <%= form.collection_check_boxes :related_to, linked_classes_filter_values_for(klass), :first, :last %>
<% end %>

klass - The class that will have its linked resources formatted.

Returns an Array of Arrays of Strings.



40
41
42
# File 'decidim-core/app/helpers/decidim/resource_helper.rb', line 40

def linked_classes_filter_values_for(klass)
  [["", (:span, t("all", scope: "decidim.filters.linked_classes"))]] + linked_classes_for(klass)
end

#linked_classes_for(klass) ⇒ Object

Gets the classes linked to the given class for the ‘current_component`, and formats them in a nice way so that they can be used in a form. Resulting format looks like this, considering the given class is related to `Decidim::Meetings::Meeting`:

[["decidim/meetings/meeting", "Meetings"]]

This method is intended to be used as a check to render the filter or not. Use the ‘linked_classes_filter_values_for(klass)` method to get the form filter collection values.

klass - The class that will have its linked resources formatted.

Returns an Array of Arrays of Strings. Returns an empty Array if no links are found.



20
21
22
23
24
25
26
# File 'decidim-core/app/helpers/decidim/resource_helper.rb', line 20

def linked_classes_for(klass)
  return [] unless klass.respond_to?(:linked_classes_for)

  klass.linked_classes_for(current_component).map do |k|
    [k.underscore, (:span, t(k.demodulize.underscore, scope: "decidim.filters.linked_classes"))]
  end
end

#resource_locator(resource) ⇒ Object

Returns an instance of ResourceLocatorPresenter with the given resource



45
46
47
48
49
# File 'decidim-core/app/helpers/decidim/resource_helper.rb', line 45

def resource_locator(resource)
  return resource.resource_locator if resource.respond_to?(:resource_locator)

  ::Decidim::ResourceLocatorPresenter.new(resource)
end

#resource_title(resource) ⇒ Object

Returns a descriptive title for the resource



52
53
54
55
56
# File 'decidim-core/app/helpers/decidim/resource_helper.rb', line 52

def resource_title(resource)
  title = resource.try(:title) || resource.try(:name) || resource.try(:subject) || "#{resource.model_name.human} ##{resource.id}"
  title = translated_attribute(title) if title.is_a?(Hash)
  title
end