Sha256: c4e64802454a488d2cfe2851136e992ac1e62d621005c131b953bf514779b4d4

Contents?: true

Size: 1.23 KB

Versions: 19

Compression:

Stored size: 1.23 KB

Contents

require_dependency "part"

module Parted
  def self.included(klass)
    klass.embeds_many :parts
    klass.accepts_nested_attributes_for :parts, allow_destroy: true,
      reject_if: proc { |attrs| attrs["title"].blank? and attrs["body"].blank? }
    klass.after_validation :merge_embedded_parts_errors
  end

  def build_clone(target_class=nil)
    new_edition = super

    # If the new edition is of the same type or another type that has parts,
    # copy over the parts from this edition
    if target_class.nil? or target_class.include? Parted
      new_edition.parts = self.parts.map {|p| p.dup }
    end

    new_edition
  end

  def order_parts
    ordered_parts = parts.sort_by { |p| p.order ? p.order : 99999 }
    ordered_parts.each_with_index do |obj, i|
      obj.order = i + 1
    end
  end

  def whole_body
    self.parts.in_order.map { |i| %(\# #{i.title}\n\n#{i.body}) }.join("\n\n")
  end

  private

  def merge_embedded_parts_errors
    return if parts.empty?

    if errors.delete(:parts) == ["is invalid"]
      parts_errors = parts.inject({}) do |result, part|
        result["#{part._id}:#{part.order}"] = part.errors.messages if part.errors.present?
        result
      end
      errors.add(:parts, parts_errors)
    end
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

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