Sha256: 897d7a7b31acb471dba5c55751dcc0851fcd40dcf63e73141a6d7e46f937f8b9

Contents?: true

Size: 1.5 KB

Versions: 7

Compression:

Stored size: 1.5 KB

Contents

# frozen_string_literal: true

module Decidim
  module Proposals
    class ProposalState < Proposals::ApplicationRecord
      include Decidim::HasComponent
      include Decidim::Traceable
      include Decidim::Loggable

      include Decidim::TranslatableResource
      include Decidim::TranslatableAttributes

      before_validation :generate_token, on: :create

      translatable_fields :title

      validates :token, presence: true, uniqueness: { scope: :component }

      has_many :proposals,
               class_name: "Decidim::Proposals::Proposal",
               foreign_key: "decidim_proposals_proposal_state_id",
               inverse_of: :proposal_state,
               dependent: :restrict_with_error,
               counter_cache: :proposals_count

      def self.log_presenter_class_for(_log)
        Decidim::Proposals::AdminLog::ProposalStatePresenter
      end

      def css_style
        "background-color: #{bg_color}; color: #{text_color}; border-color: #{text_color};"
      end

      def self.colors
        Decidim::Proposals.proposal_states_colors
      end

      protected

      def generate_token
        self.token = ensure_unique_token(translated_attribute(title).parameterize(separator: "_"))
      end

      def ensure_unique_token(token)
        step = 0
        code = token
        loop do
          break if Decidim::Proposals::ProposalState.where(component:, token: code).empty?

          code = "#{token}_#{step}"
          step += 1
        end

        code
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
decidim-proposals-0.29.2 app/models/decidim/proposals/proposal_state.rb
decidim-proposals-0.29.1 app/models/decidim/proposals/proposal_state.rb
decidim-proposals-0.29.0 app/models/decidim/proposals/proposal_state.rb
decidim-proposals-0.29.0.rc4 app/models/decidim/proposals/proposal_state.rb
decidim-proposals-0.29.0.rc3 app/models/decidim/proposals/proposal_state.rb
decidim-proposals-0.29.0.rc2 app/models/decidim/proposals/proposal_state.rb
decidim-proposals-0.29.0.rc1 app/models/decidim/proposals/proposal_state.rb