Class: Decidim::SettingsManifest
- Inherits:
 - 
      Object
      
        
- Object
 - Decidim::SettingsManifest
 
 
- Defined in:
 - lib/decidim/settings_manifest.rb
 
Overview
This class serves as a DSL that enables specifying an arbitrary settings to a component, so the admin panel can show a standarized UI to configure them.
Defined Under Namespace
Classes: Attribute
Instance Attribute Summary collapse
- 
  
    
      #attributes  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
Returns the value of attribute attributes.
 
Instance Method Summary collapse
- 
  
    
      #attribute(name, options = {})  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Public: Adds a new attribute field to the SettingsManifest.
 - 
  
    
      #initialize  ⇒ SettingsManifest 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
Initializes a SettingsManifest.
 - #required_attributes_for_authorization ⇒ Object
 - 
  
    
      #schema  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Public: Creates a model Class that sanitizes, coerces and filters data to the right types given a hash of serialized information.
 
Constructor Details
#initialize ⇒ SettingsManifest
Initializes a SettingsManifest.
      11 12 13  | 
    
      # File 'lib/decidim/settings_manifest.rb', line 11 def initialize @attributes = {} end  | 
  
Instance Attribute Details
#attributes ⇒ Object (readonly)
Returns the value of attribute attributes.
      8 9 10  | 
    
      # File 'lib/decidim/settings_manifest.rb', line 8 def attributes @attributes end  | 
  
Instance Method Details
#attribute(name, options = {}) ⇒ Object
Public: Adds a new attribute field to the SettingsManifest.
name - The name of the attribute to inject. options - A set of options to configure the attribute.
:type - The type of the attribute as found in Attribute::TYPES
:default - The default value of this settings field.
Returns nothing.
      23 24 25 26 27 28 29  | 
    
      # File 'lib/decidim/settings_manifest.rb', line 23 def attribute(name, = {}) attribute = Attribute.new() attribute.validate! @attributes[name.to_sym] = attribute @schema = nil end  | 
  
#required_attributes_for_authorization ⇒ Object
      80 81 82  | 
    
      # File 'lib/decidim/settings_manifest.rb', line 80 def attributes.select { |_, attribute| attribute. } end  | 
  
#schema ⇒ Object
Public: Creates a model Class that sanitizes, coerces and filters data to the right types given a hash of serialized information.
Returns a Class.
      35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78  | 
    
      # File 'lib/decidim/settings_manifest.rb', line 35 def schema return @schema if @schema manifest = self @schema = Class.new do include Decidim::AttributeObject::Model include ActiveModel::Validations include TranslatableAttributes cattr_accessor :manifest attr_reader :default_locale # Overwrites Decidim::AttributeObject::Model#initialize to allow # passing a default_locale needed to validate translatable attributes. # See TranslatablePresenceValidator#default_locale_for(record). def initialize(attributes = nil, default_locale = nil) @default_locale = default_locale super(attributes) end def self.model_name ActiveModel::Name.new(self, nil, "Settings") end def manifest self.class.manifest end manifest.attributes.each do |name, attribute| if attribute.translated? translatable_attribute name, attribute.type_class, default: attribute.default_value validates name, translatable_presence: true if attribute.required else attribute name, attribute.type_class, default: attribute.default_value validates name, presence: true if attribute.required validates name, inclusion: { in: attribute.build_choices } if attribute.type == :enum end end end @schema.manifest = self @schema end  |