class MultiMovingsign::PageRenderer
Renders a page definition (Hash/YAML) into something that is easily displayable by the MovingsignApi (page solution)
Constants
- DEFAULT_CHARACTER_WIDTH
Private Class Methods
calculate_width(string)
click to toggle source
# File lib/multi_movingsign/page_renderer.rb, line 55 def self.calculate_width(string) string.length * DEFAULT_CHARACTER_WIDTH end
Public Instance Methods
render(page, options = {})
click to toggle source
@param page [Hash] page definition as a Hash @param options [Hash] options for the rendering operation @option options [Integer] :count the number of signs to render to (default: 1)
@return [Hash] a page solution hash
# File lib/multi_movingsign/page_renderer.rb, line 11 def render(page, options = {}) # Vocabulary - Terms used here # # Sign # A single LED sign, stacked vertically with other LED signs...together forming a screen # Screen # N LED signs stacked vertically. Together they can display a screen of information at a time # Page Definition # A page of information to be broken up and displayed on available signs, consisting of a title and n Line Definitions. # Line Definition # A line of information from the page definition. NOTE: a single line might turn into multiple screens of information # Line Segment # A piece of a line definition, displayed on it's own sign, seprate from previous line segments of the same line. # signs_available = (options[:count] || 1) page_title = page['title'] line_definitions = page['lines'] pin_title = signs_available > 1 page_definition = PageDefinition.from_hash page page_segments = page_definition.calculate_segments(signs_available) screens = page_segments.map { |s| s.calculate_screens(signs_available, screen_width) }.flatten ## Preview Solution #screens.each do |screen| # puts "----" # (0..(signs_available-1)).each do |i| # puts screen.line(i) # end #end #puts "----" signs = (0..(signs_available-1)).map { |sign_index| {'content' => screens.map { |s| s.line(sign_index) }.join("\n")} } {'signs' => signs, 'lines' => screens.length} end
Private Instance Methods
screen_width()
click to toggle source
# File lib/multi_movingsign/page_renderer.rb, line 51 def screen_width 80 end