Class: MultiMovingsign::PageSegment

Inherits:
Object
  • Object
show all
Defined in:
lib/multi_movingsign/page_renderer.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(title, line_definitions) ⇒ PageSegment

Returns a new instance of PageSegment.



168
169
170
171
# File 'lib/multi_movingsign/page_renderer.rb', line 168

def initialize(title, line_definitions)
  self.title = title
  self.line_definitions = line_definitions
end

Instance Attribute Details

#line_definitionsObject

Returns the value of attribute line_definitions.



166
167
168
# File 'lib/multi_movingsign/page_renderer.rb', line 166

def line_definitions
  @line_definitions
end

#titleObject

Returns the value of attribute title.



165
166
167
# File 'lib/multi_movingsign/page_renderer.rb', line 165

def title
  @title
end

Instance Method Details

#calculate_screens(number_of_signs, sign_width) ⇒ Object

Turns a single page segment into n rendered screens of information



182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
# 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?Boolean

Returns:

  • (Boolean)


177
178
179
# File 'lib/multi_movingsign/page_renderer.rb', line 177

def line_definitions?
  !self.line_definitions.empty?
end

#title?Boolean

Returns:

  • (Boolean)


173
174
175
# File 'lib/multi_movingsign/page_renderer.rb', line 173

def title?
  !!self.title
end