Class: ArticleJSON::Utils::AdditionalElementPlacer

Inherits:
Object
  • Object
show all
Defined in:
lib/article_json/utils/additional_element_placer.rb

Overview

This class allows the user to place additional elements within an article. It distributes elements over the whole article and ensures that an additional element is only ever placed between two paragraph elements. If there are not enough spaces, the remaining additional elements will be appended to the existing article elements.

Instance Method Summary collapse

Constructor Details

#initialize(article, additional_elements) ⇒ AdditionalElementPlacer

Returns a new instance of AdditionalElementPlacer.

Parameters:



11
12
13
14
# File 'lib/article_json/utils/additional_element_placer.rb', line 11

def initialize(article, additional_elements)
  @elements = article.elements.dup
  @additional_elements = additional_elements
end

Instance Method Details

#merge_elementsArray[ArticleJSON::Elements::Base|Object]

Distribute additional elements evenly throughout the article elements

Returns:



18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/article_json/utils/additional_element_placer.rb', line 18

def merge_elements
  indexes = indexes_for_additional_elements

  if indexes.count < @additional_elements.count
    @elements.push(*@additional_elements[indexes.count..-1])
  end

  indexes
    .reverse
    .zip(@additional_elements[0...indexes.count].reverse)
    .each { |index, element| @elements.insert(index, element) }

  @elements
end