Sha256: b0663d213149d976ea7c6aeb97fc5305748e26894bb8d7250d4bef40310fb0f4

Contents?: true

Size: 1.85 KB

Versions: 6

Compression:

Stored size: 1.85 KB

Contents

class Book < Content
  numbered :chapters
  aggregate_of :chapters

  has_many :chapters, -> { order(number: :asc) }, dependent: :delete_all
  has_many :complements, dependent: :delete_all

  has_many :exercises, through: :chapters
  has_many :discussions, through: :exercises

  delegate :first_lesson, to: :first_chapter

  def to_s
    slug
  end

  def first_chapter
    chapters.first
  end

  def next_lesson_for(user)
    user.try(:last_lesson)|| first_lesson
  end

  after_save :reindex_usages!

  def import_from_resource_h!(resource_h)
    self.assign_attributes resource_h.except(:chapters, :complements, :id, :description)
    self.description = resource_h[:description]&.squeeze(' ')

    rebuild! resource_h[:chapters].map { |it| Topic.find_by!(slug: it).as_chapter_of(self) }
    rebuild_complements! resource_h[:complements].to_a.map { |it| Guide.find_by(slug: it)&.as_complement_of(self) }.compact
  end

  def to_resource_h
    super.merge(
      chapters: chapters.map(&:slug),
      complements: complements.map(&:slug))
  end

  def rebuild_complements!(complements) #FIXME use rebuild
    transaction do
      self.complements.all_except(complements).delete_all
      self.update! :complements => complements
      complements.each &:save!
    end
    reload
  end

  def index_usage!(organization)
    [chapters, complements].flatten.each { |item| item.index_usage! organization }
  end

  def reindex_usages!
    Organization.where(book: self).each &:reindex_usages!
  end

  ## Forking

  def fork_to!(organization, syncer)
    rebased_dup(organization).tap do |dup|
      dup.chapters = chapters.map { |chapter| chapter.topic.fork_to!(organization, syncer).as_chapter_of(self) }
      dup.complements = complements.map { |complement| complement.guide.fork_to!(organization, syncer).as_complement_of(self) }
      dup.save!
      syncer.export! dup
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
mumuki-domain-6.4.1 app/models/book.rb
mumuki-domain-6.4.0 app/models/book.rb
mumuki-domain-6.2.2 app/models/book.rb
mumuki-domain-6.2.1 app/models/book.rb
mumuki-domain-6.3.0 app/models/book.rb
mumuki-domain-6.2.0 app/models/book.rb