Sha256: 76102b19e92fb8a4b7573d2150c35c24de70b0cfcc4e94493ae9b47c06e14bb8

Contents?: true

Size: 1.32 KB

Versions: 11

Compression:

Stored size: 1.32 KB

Contents

module Cms

  # Handles the conversion from Mercury editor (i.e. the JSON hash it submits) to a Cms Page and blocks
  class PageComponent
    extend ::ActiveModel::Naming

    attr_accessor :page_id, :page_title, :blocks

    def initialize(page_id, params)
      params = HashWithIndifferentAccess.new(params)
      self.page_title = params[:page_title]
      self.blocks = params[:blocks] ? params[:blocks] : []
      self.page_id = page_id
    end


    # Save the change to the underlying page (and its content)
    def save
      @page = Page.find(@page_id)
      @page.title = page_title[:value]
      blocks.each do |block_type|
        content_block_class = block_type[0]
        content_ids = block_type[1].keys

        content_ids.each do |block_id|
          block = content_block_class.constantize.find(block_id)
          assignment_hash = convert_mercury_params_to_assignment_hash(block_id, block_type)
          block.update_attributes(assignment_hash)
        end
      end
      @page.save
    end

    def convert_mercury_params_to_assignment_hash(block_id, block_type)
      block_attribute_names = block_type[1][block_id].keys
      assignment_hash = {}
      block_attribute_names.each do |attr_name|
        assignment_hash[attr_name] = block_type[1][block_id][attr_name][:value]
      end
      assignment_hash
    end
  end
end

Version data entries

11 entries across 11 versions & 2 rubygems

Version Path
browsercms-artirix-4.0.4 app/models/cms/page_component.rb
browsercms-artirix-4.0.3.3 app/models/cms/page_component.rb
browsercms-artirix-4.0.3.2 app/models/cms/page_component.rb
browsercms-artirix-4.0.3.1 app/models/cms/page_component.rb
browsercms-artirix-4.0.3 app/models/cms/page_component.rb
browsercms-artirix-4.0.2 app/models/cms/page_component.rb
browsercms-artirix-4.0.1.1 app/models/cms/page_component.rb
browsercms-artirix-4.0.0.rc1.art4 app/models/cms/page_component.rb
browsercms-4.0.0.rc1 app/models/cms/page_component.rb
browsercms-4.0.0.beta app/models/cms/page_component.rb
browsercms-4.0.0.alpha app/models/cms/page_component.rb