Sha256: 457f357866bb6b952a18ad56e03848776064a04f7228ed4c8a2a2f2323d198ce

Contents?: true

Size: 1.57 KB

Versions: 42

Compression:

Stored size: 1.57 KB

Contents

module Locomotive
  module Concerns
    module ContentEntry
      module NextPrevious

        # Return the next content entry based on the order defined in the parent content type.
        #
        # @param [ Object ] The next content entry or nil if not found
        #
        def next
          next_or_previous :gt
        end

        # Return the previous content entry based on the order defined in the parent content type.
        #
        # @param [ Object ] The previous content entry or nil if not found
        #
        def previous
          next_or_previous :lt
        end

        protected

        # Retrieve the next or the previous entry following the order
        # defined in the parent content type.
        #
        # @param [ Symbol ] :gt for the next element, :lt for the previous element
        #
        # @return [ Object ] The next or previous content entry or nil if none
        #
        def next_or_previous(matcher = :gt)
          # the matchers is supposed to be fine for the default direction, meaning 'asc'
          # if the direction is not ascending, we need to reverse the matcher
          matcher = matcher == :gt ? :lt : :gt if self.content_type.order_direction != 'asc'

          attribute = self.content_type.order_by_attribute
          direction = matcher == :gt ? 'asc' : 'desc'

          criterion = attribute.to_sym.send(matcher)
          value     = self.send(attribute.to_sym)
          order_by  = [attribute, direction]

          self.class.next_or_previous({ criterion => value }, order_by).first
        end

      end
    end
  end
end

Version data entries

42 entries across 42 versions & 1 rubygems

Version Path
locomotivecms-4.2.0.alpha2 app/models/locomotive/concerns/content_entry/next_previous.rb
locomotivecms-4.2.0.alpha1 app/models/locomotive/concerns/content_entry/next_previous.rb
locomotivecms-4.1.1 app/models/locomotive/concerns/content_entry/next_previous.rb
locomotivecms-4.1.0 app/models/locomotive/concerns/content_entry/next_previous.rb
locomotivecms-4.1.0.rc1 app/models/locomotive/concerns/content_entry/next_previous.rb
locomotivecms-4.0.3 app/models/locomotive/concerns/content_entry/next_previous.rb
locomotivecms-4.0.2 app/models/locomotive/concerns/content_entry/next_previous.rb
locomotivecms-4.0.1 app/models/locomotive/concerns/content_entry/next_previous.rb
locomotivecms-4.0.0 app/models/locomotive/concerns/content_entry/next_previous.rb
locomotivecms-4.0.0.rc0 app/models/locomotive/concerns/content_entry/next_previous.rb
locomotivecms-4.0.0.alpha3 app/models/locomotive/concerns/content_entry/next_previous.rb
locomotivecms-3.4.1 app/models/locomotive/concerns/content_entry/next_previous.rb
locomotivecms-4.0.0.alpha2 app/models/locomotive/concerns/content_entry/next_previous.rb
locomotivecms-4.0.0.alpha1 app/models/locomotive/concerns/content_entry/next_previous.rb
locomotivecms-3.4.0 app/models/locomotive/concerns/content_entry/next_previous.rb
locomotivecms-3.3.0 app/models/locomotive/concerns/content_entry/next_previous.rb
locomotivecms-3.3.0.rc3 app/models/locomotive/concerns/content_entry/next_previous.rb
locomotivecms-3.3.0.rc2 app/models/locomotive/concerns/content_entry/next_previous.rb
locomotivecms-3.1.2 app/models/locomotive/concerns/content_entry/next_previous.rb
locomotivecms-3.2.1 app/models/locomotive/concerns/content_entry/next_previous.rb