Class: ArticleJSON::Utils::AdditionalElementPlacer
- Inherits:
-
Object
- Object
- ArticleJSON::Utils::AdditionalElementPlacer
- 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
-
#initialize(article, additional_elements) ⇒ AdditionalElementPlacer
constructor
A new instance of AdditionalElementPlacer.
-
#merge_elements ⇒ Array[ArticleJSON::Elements::Base|Object]
Distribute additional elements evenly throughout the article elements.
Constructor Details
#initialize(article, additional_elements) ⇒ AdditionalElementPlacer
Returns a new instance of AdditionalElementPlacer.
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_elements ⇒ Array[ArticleJSON::Elements::Base|Object]
Distribute additional elements evenly throughout the article elements
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 |