Sha256: 5277995972b578359fc2342e7b52dc07eca91ac21b9db213d8f075fa0c3df86c

Contents?: true

Size: 1.39 KB

Versions: 1

Compression:

Stored size: 1.39 KB

Contents

# frozen_string_literal: true

require "active_support/concern"

module Decidim
  module Lausanne
    module Budgets
      # Common logic to sorting resources
      module Orderable
        extend ActiveSupport::Concern

        included do
          include Decidim::Orderable

          private

            # Available orders based on enabled settings
            def available_orders
              @available_orders ||= begin
                available_orders = []
                available_orders << "asc" 
                available_orders << "most_voted" if votes_are_visible?
                available_orders += %w(highest_cost lowest_cost)
                available_orders
              end
            end

            def default_order
              available_orders.first
            end

            def votes_are_visible?
              current_settings.show_votes?
            end

            def reorder(projects)
              case order
              when "highest_cost"
                projects.order(budget_amount: :desc)
              when "lowest_cost"
                projects.order(budget_amount: :asc)
              when "asc"
                projects.order(Arel.sql("title->>'#{I18n.locale}' ASC"))
              when "random"
                projects.order_randomly(random_seed)
              else
                projects
              end
            end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
decidim-lausanne-budgets-0.1.0 app/controllers/concerns/decidim/lausanne/budgets/orderable.rb