Sha256: 3f3305f5cc68d9abd9c012139fc9d898095dba85a538c3490a7e3049509d92eb

Contents?: true

Size: 1.41 KB

Versions: 12

Compression:

Stored size: 1.41 KB

Contents

# frozen_string_literal: true

# rubocop:disable Style/ClassAndModuleChildren
module Maglev::SectionsConcern
  def prepare_sections
    # NOTE: pages defined in the theme definition
    # don't include the ids for sections/blocks
    self.sections ||= [] # NOTE: the self is mandatory here
    sections.each do |section|
      prepare_section(section)
    end
  end

  private

  def prepare_section(section)
    section['id'] ||= SecureRandom.urlsafe_base64(8)
    section['settings'] = prepare_settings(section['settings'])
    section['blocks'] = (section['blocks'] || []).map do |block|
      prepare_block(block)
    end.flatten
    section
  end

  def prepare_block(block)
    block['id'] ||= SecureRandom.urlsafe_base64(8)
    block['settings'] = prepare_settings(block['settings'])

    # the children key is accepted when the sections come from a theme preset
    children = (block.delete('children') || []).map do |nested_block|
      nested_block['parent_id'] = block['id']
      prepare_block(nested_block)
    end
    [block, children].flatten
  end

  def prepare_settings(settings)
    # NOTE: in the theme definition file, we allow developers to declare
    # default content like this: { <setting_id_1>: <setting_value_1>, ..., <setting_id_n>: <setting_value_n> }
    return settings if settings.is_a?(Array)

    settings.map { |key, value| { id: key, value: value } }
  end
end
# rubocop:enable Style/ClassAndModuleChildren

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
maglevcms-1.1.7 app/models/concerns/maglev/sections_concern.rb
maglevcms-1.1.6 app/models/concerns/maglev/sections_concern.rb
maglevcms-1.1.5 app/models/concerns/maglev/sections_concern.rb
maglevcms-1.1.4 app/models/concerns/maglev/sections_concern.rb
maglevcms-1.1.3 app/models/concerns/maglev/sections_concern.rb
maglevcms-1.1.2 app/models/concerns/maglev/sections_concern.rb
maglevcms-1.1.1 app/models/concerns/maglev/sections_concern.rb
maglevcms-1.1.0 app/models/concerns/maglev/sections_concern.rb
maglevcms-1.0.0 app/models/concerns/maglev/sections_concern.rb
maglevcms-1.0.0.rc3 app/models/concerns/maglev/sections_concern.rb
maglevcms-1.0.0.rc2 app/models/concerns/maglev/sections_concern.rb
maglevcms-1.0.0.rc1 app/models/concerns/maglev/sections_concern.rb