Sha256: 8c14d26a800932f2d1bbb4561d635276dbc9903fb1a7fce10fe7da510bc34468

Contents?: true

Size: 1.88 KB

Versions: 19

Compression:

Stored size: 1.88 KB

Contents

require "edition"
require_dependency 'simple_smart_answer_edition/node'
require_dependency 'simple_smart_answer_edition/node/option'

class SimpleSmartAnswerEdition < Edition
  include Mongoid::Document

  field :body,              type: String
  field :start_button_text, type: String, default: "Start now"

  validates_presence_of :start_button_text

  embeds_many :nodes, :class_name => "SimpleSmartAnswerEdition::Node"

  accepts_nested_attributes_for :nodes, allow_destroy: true

  GOVSPEAK_FIELDS = [:body]

  def whole_body
    parts = [body]
    unless nodes.nil?
      parts += nodes.map { |node| "#{node.kind}: #{node.title} \n\n #{node.body}" }
    end
    parts.join("\n\n\n")
  end

  def build_clone(target_class=nil)
    new_edition = super(target_class)

    if new_edition.is_a?(SimpleSmartAnswerEdition)
      self.nodes.each {|n| new_edition.nodes << n.clone }
    end

    new_edition
  end


  # Workaround mongoid conflicting mods error
  # See https://jira.mongodb.org/browse/MONGOID-1220
  # Override update_attributes so that nested nodes are updated individually.
  # This get around the problem of mongoid issuing a query with conflicting modifications
  # to the same document.
  alias_method :original_update_attributes, :update_attributes

  def update_attributes(attributes)
    if nodes_attrs = attributes.delete(:nodes_attributes)
      nodes_attrs.each do |index, node_attrs|
        if node_id = node_attrs['id']
          node = nodes.find(node_id)
          if destroy_in_attrs?(node_attrs)
            node.destroy
          else
            node.update_attributes(node_attrs)
          end
        else
          nodes << Node.new(node_attrs) unless destroy_in_attrs?(node_attrs)
        end
      end
    end

    original_update_attributes(attributes)
  end

  def initial_node
    self.nodes.first
  end

  def destroy_in_attrs?(attrs)
    attrs.delete('_destroy') == '1'
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
govuk_content_models-47.0.0 app/models/simple_smart_answer_edition.rb
govuk_content_models-46.0.1 app/models/simple_smart_answer_edition.rb
govuk_content_models-46.0.0 app/models/simple_smart_answer_edition.rb
govuk_content_models-45.0.0 app/models/simple_smart_answer_edition.rb
govuk_content_models-44.4.0 app/models/simple_smart_answer_edition.rb
govuk_content_models-44.3.0 app/models/simple_smart_answer_edition.rb
govuk_content_models-44.2.1 app/models/simple_smart_answer_edition.rb
govuk_content_models-44.2.0 app/models/simple_smart_answer_edition.rb
govuk_content_models-44.1.0 app/models/simple_smart_answer_edition.rb
govuk_content_models-44.0.1 app/models/simple_smart_answer_edition.rb
govuk_content_models-44.0.0 app/models/simple_smart_answer_edition.rb
govuk_content_models-43.2.0 app/models/simple_smart_answer_edition.rb
govuk_content_models-43.1.0 app/models/simple_smart_answer_edition.rb
govuk_content_models-43.0.1 app/models/simple_smart_answer_edition.rb
govuk_content_models-43.0.0 app/models/simple_smart_answer_edition.rb
govuk_content_models-42.1.0 app/models/simple_smart_answer_edition.rb
govuk_content_models-42.0.1 app/models/simple_smart_answer_edition.rb
govuk_content_models-42.0.0 app/models/simple_smart_answer_edition.rb
govuk_content_models-41.1.1 app/models/simple_smart_answer_edition.rb