module Decidim::HasSettings

Public Instance Methods

build_settings(manifest, settings_name, data, organization) click to toggle source

Returns a Class with the attributes sanitized, coerced and filtered to the right type. See Decidim::SettingsManifest#schema.

# File lib/decidim/has_settings.rb, line 16
def build_settings(manifest, settings_name, data, organization)
  manifest.settings(settings_name).schema.new(data, organization.default_locale)
end
current_settings() click to toggle source
# File lib/decidim/has_settings.rb, line 29
def current_settings
  if participatory_space.allows_steps?
    active_step_settings
  else
    default_step_settings
  end
end
default_step_settings() click to toggle source
# File lib/decidim/has_settings.rb, line 37
def default_step_settings
  new_settings_schema(:step, self[:settings]["default_step"])
end
default_step_settings=(data) click to toggle source
# File lib/decidim/has_settings.rb, line 41
def default_step_settings=(data)
  self[:settings]["default_step"] = new_settings_schema(:step, data)
end
settings() click to toggle source
# File lib/decidim/has_settings.rb, line 21
def settings
  new_settings_schema(:global, self[:settings]["global"])
end
settings=(data) click to toggle source
# File lib/decidim/has_settings.rb, line 25
def settings=(data)
  self[:settings]["global"] = new_settings_schema(:global, data)
end
step_settings() click to toggle source
# File lib/decidim/has_settings.rb, line 45
def step_settings
  return {} unless participatory_space.allows_steps?

  participatory_space.steps.each_with_object({}) do |step, result|
    result[step.id.to_s] = new_settings_schema(:step, self[:settings].dig("steps", step.id.to_s))
  end
end
step_settings=(data) click to toggle source
# File lib/decidim/has_settings.rb, line 53
def step_settings=(data)
  self[:settings]["steps"] = data.each_with_object({}) do |(key, value), result|
    result[key.to_s] = new_settings_schema(:step, value)
  end
end

Private Instance Methods

active_step_settings() click to toggle source
# File lib/decidim/has_settings.rb, line 61
def active_step_settings
  return unless participatory_space.allows_steps?

  active_step = participatory_space.active_step
  return default_step_settings unless active_step

  step_settings.fetch(active_step.id.to_s)
end
default_values() click to toggle source
# File lib/decidim/has_settings.rb, line 76
def default_values
  self[:settings] ||= {}
end
new_settings_schema(settings_name, data) click to toggle source
# File lib/decidim/has_settings.rb, line 70
def new_settings_schema(settings_name, data)
  return {} unless manifest && participatory_space

  self.class.build_settings(manifest, settings_name, data, participatory_space.organization)
end