Sha256: e6979c0d1918ce196cdb542713caedd33923b2da631d74292a8ed8249e69e810
Contents?: true
Size: 1.46 KB
Versions: 2
Compression:
Stored size: 1.46 KB
Contents
# frozen_string_literal: true require "active_support/concern" module Decidim # A concern with the features needed when you want a model to have a # reference. module HasReference extend ActiveSupport::Concern included do after_commit :store_reference, on: [:create, :update] validates :reference, presence: true, on: :update def reference self[:reference] || calculate_reference end private # Public: Calculates a unique reference for the model using the function # provided by configuration. Works for both feature resources and # participatory spaces. # # Returns a String. def calculate_reference Decidim.reference_generator.call(self, respond_to?(:feature) ? feature : nil) end # Internal: Sets the unique reference to the model. Note that if the resource # implements `Decidim::Traceable` then any normal update (or `update`) # will create a new version through an ActiveRecord update callback, but here # we can't track the author of the version, so we use the `update_column` method # which does not trigger callbacks. # # Returns nothing. def store_reference self[:reference] ||= calculate_reference return unless changed? # rubocop:disable Rails/SkipsModelValidations update_column(:reference, self[:reference]) # rubocop:enable Rails/SkipsModelValidations end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
decidim-core-0.10.1 | lib/decidim/has_reference.rb |
decidim-core-0.10.0 | lib/decidim/has_reference.rb |