Sha256: c12d7820edce0964c77297a68ea672f1b7d13a722647704b99bd487e45193836

Contents?: true

Size: 1.56 KB

Versions: 5

Compression:

Stored size: 1.56 KB

Contents

# frozen_string_literal: true

require "active_support/concern"

module Decidim
  module HasSettings
    extend ActiveSupport::Concern

    included do
      after_initialize :default_values
    end

    def settings
      settings_schema(:global).new(self[:settings]["global"])
    end

    def settings=(data)
      self[:settings]["global"] = serialize_settings(settings_schema(:global), data)
    end

    def default_step_settings
      settings_schema(:step).new(self[:settings]["default_step"])
    end

    def default_step_settings=(data)
      self[:settings]["default_step"] = serialize_settings(settings_schema(:step), data)
    end

    def step_settings
      participatory_process.steps.each_with_object({}) do |step, result|
        result[step.id.to_s] = settings_schema(:step).new(self[:settings].dig("steps", step.id.to_s))
      end
    end

    def step_settings=(data)
      self[:settings]["steps"] = data.each_with_object({}) do |(key, value), result|
        result[key.to_s] = serialize_settings(settings_schema(:step), value)
      end
    end

    def active_step_settings
      active_step = participatory_process.active_step
      return default_step_settings unless active_step

      step_settings.fetch(active_step.id.to_s)
    end

    private

    def serialize_settings(schema, value)
      if value.respond_to?(:attributes)
        value.attributes
      else
        schema.new(value)
      end
    end

    def settings_schema(name)
      manifest.settings(name.to_sym).schema
    end

    def default_values
      self[:settings] ||= {}
    end
  end
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
decidim-core-0.5.1 lib/decidim/has_settings.rb
decidim-0.5.1 decidim-core/lib/decidim/has_settings.rb
decidim-core-0.5.0 lib/decidim/has_settings.rb
decidim-0.5.0 decidim-core/lib/decidim/has_settings.rb
decidim-core-0.4.4 lib/decidim/has_settings.rb