class MultiMovingsign::PageSegment

Attributes

line_definitions[RW]
title[RW]

Public Class Methods

new(title, line_definitions) click to toggle source
# File lib/multi_movingsign/page_renderer.rb, line 168
def initialize(title, line_definitions)
  self.title = title
  self.line_definitions = line_definitions
end

Public Instance Methods

calculate_screens(number_of_signs, sign_width) click to toggle source

Turns a single page segment into n rendered screens of information

# File lib/multi_movingsign/page_renderer.rb, line 182
def calculate_screens(number_of_signs, sign_width)
  raise "Title too long!" if title? && PageRenderer.calculate_width(title) >  sign_width

  if title? && !line_definitions?
    return Screen.new [title]
  end

  screens = []

  #puts line_definitions.map { |d| d.line_segments.map { |s| s.split_if_necessary(sign_width).map { |s| s.to_s} } }.inspect

  num_of_line_segments = line_definitions.map { |d| d.line_segments.length }.max
  (0..(num_of_line_segments - 1)).each do |segment_index|
    subsegments = line_definitions.map { |d| (s = d.line_segments[segment_index]) ? s.split_if_necessary(sign_width) : [] }
    num_of_subsegments = subsegments.map { |s| s.length }.max

    (0..(num_of_subsegments-1)).each do |subsegment_index|
      lines = []

      lines << title if title?
      lines.concat subsegments.map { |s| s[subsegment_index % s.length] || "" }

      screens << Screen.new(lines)
    end
  end

  screens
end
line_definitions?() click to toggle source
# File lib/multi_movingsign/page_renderer.rb, line 177
def line_definitions?
  !self.line_definitions.empty?
end
title?() click to toggle source
# File lib/multi_movingsign/page_renderer.rb, line 173
def title?
  !!self.title
end