Sha256: 9ff2bed8bdbb905c95783140495ca2d7e6ec5cc9ee255649f058d778a0f90970

Contents?: true

Size: 1.69 KB

Versions: 6

Compression:

Stored size: 1.69 KB

Contents

module Locomotive
  module Concerns
    module ContentType
      module GroupBy

        # List the name and _id of the groups if the entries
        # are grouped by a field. The type of this field can be either
        # a select or a belongs_to.
        # It returns nil if groupable? returns false.
        #
        # @return [ Array ] List of hashes (:name and :_id as keys).
        #
        def list_of_groups
          return nil unless self.groupable?

          field = self.group_by_field

          case field.type.to_sym
          when :boolean
            [
              { name: "#{field.label} (#{I18n.t('yes', scope: 'locomotive.shared')})", _id: true },
              { name: "#{field.label} (#{I18n.t('no', scope: 'locomotive.shared')})", _id: false }
            ]
          when :select
            self.entries_class._select_options(field.name).map(&:with_indifferent_access)
          when :belongs_to
            target  = self.class_name_to_content_type(field.class_name)
            label   = target.label_field_name.to_sym

            # FIXME: applying "only" with _id and label sounds like a good option for performance
            # but it fails because of Mongoid and its way of dealing with localized attributes.
            target.ordered_entries.map do |entry|
              { _id: entry._id, name: entry.send(label) }
            end
          end
        end

        def groupable?
          !!self.group_by_field && %w(select belongs_to boolean).include?(group_by_field.type)
        end

        def group_by_field
          self.find_entries_custom_field(self.group_by_field_id)
        end

        def group_by=(name)
          @group_by = name
        end

      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
locomotivecms-4.2.0.alpha2 app/models/locomotive/concerns/content_type/group_by.rb
locomotivecms-4.2.0.alpha1 app/models/locomotive/concerns/content_type/group_by.rb
locomotivecms-4.1.1 app/models/locomotive/concerns/content_type/group_by.rb
locomotivecms-4.1.0 app/models/locomotive/concerns/content_type/group_by.rb
locomotivecms-4.1.0.rc1 app/models/locomotive/concerns/content_type/group_by.rb
locomotivecms-4.0.3 app/models/locomotive/concerns/content_type/group_by.rb