class Maglev::Section::Setting

rubocop:disable Style/ClassAndModuleChildren

def self.build(hash)

# class methods ##
def self.build(hash)
  attributes = hash.slice('id', 'label', 'type', 'default')
  options = hash.except('id', 'label', 'type', 'default')
  new(attributes.merge(options: options))
end

def self.build_many(list)

def self.build_many(list)
  list.map { |hash| build(hash) }
end

def self.registered_types

def self.registered_types
  @registered_types ||= REGISTERED_TYPES.index_with do |type|
    "Maglev::SettingTypes::#{type.camelize}".constantize.new
  end
end

def advanced?

def advanced?
  !!options[:advanced]
end

def build_default_content(custom_default = nil)

NOTE: any modification to that method must be reflected in the JS editor
def build_default_content(custom_default = nil)
  default = custom_default.nil? ? self.default : custom_default
  # special case: text type
  default ||= label if text_type?
  cast_value(default)
end

def cast_value(value)

def cast_value(value)
  self.class.registered_types[type.to_s].cast_value(value)
end

def content_image(value)

def content_image(value)
  self.class.registered_types[type.to_s].content_image(value)
end

def content_label(value)

def content_label(value)
  self.class.registered_types[type.to_s].content_label(value)
end