module Maglev::GetPageSections::TransformSectionConcern
def find_section_setting(section, setting_id)
def find_section_setting(section, setting_id) # NOTE: works for both sections and blocks section['settings'].find { |setting| setting['id'] == setting_id } end
def raise_unknown_section_error(type)
def raise_unknown_section_error(type) raise ::Maglev::Errors::UnknownSection, "Unknown Maglev section type (#{type})" unless Rails.env.production? Rails.logger.warn "[#{theme.id}] unknown Maglev section type (#{type})" end
def remove_unused_settings(section, definition)
def remove_unused_settings(section, definition) section['settings'].select! do |setting| definition.settings.any? do |definition_setting| definition_setting.id == setting['id'] end end end
def transform_content_setting(content, setting)
def transform_content_setting(content, setting) case setting.type when 'link' transform_link_content_setting(content, setting) when 'text' transform_text_content_setting(content, setting) when 'collection_item' transform_collection_item_content_setting(content, setting) end end
def transform_if_site_scoped(section, definition)
def transform_if_site_scoped(section, definition) return unless definition.site_scoped? site_section = find_site_section(section['type']) return unless site_section # keep the same section id all over the pages section.merge!( 'id' => site_section['id'], 'settings' => site_section['settings'], 'blocks' => site_section['blocks'], 'lock_version' => site_section['lock_version'] ) end
def transform_section(section)
def transform_section(section) definition = theme.sections.find(section['type']) raise_unknown_section_error(section['type']) unless definition transform_if_site_scoped(section, definition) transform_section_blocks(section['blocks'], definition) transform_section_settings(section, definition) section end
def transform_section_blocks(blocks, definition)
def transform_section_blocks(blocks, definition) blocks.each do |block| block_definition = definition.blocks.find(block['type']) next unless block_definition transform_section_settings(block, block_definition) end end
def transform_section_settings(section, definition)
def transform_section_settings(section, definition) remove_unused_settings(section, definition) definition.settings.each do |setting| section_setting = find_section_setting(section, setting.id) next unless section_setting transform_content_setting(section_setting, setting) end end