class Calendario::Renderers::IntervalRenderer
Renders a time interval, line by line, in a table
Constants
- EMPTY_DAY_SPACES
The space of an empty day @return [String]
Attributes
month_renderer[RW]
A service to render a month line by line
@api private @return [Calendario::Renderers::MonthRenderer]
Public Class Methods
new(month_renderer = MonthRenderer.new)
click to toggle source
Initializes a interval renderer
@api private @param [MonthRenderer] month_renderer
A service to render a month line by line
# File lib/calendario/renderers/interval_renderer.rb, line 18 def initialize(month_renderer = MonthRenderer.new) @month_renderer = month_renderer end
Public Instance Methods
render(interval, columns:, &block)
click to toggle source
Formats a time interval, line by line, in a table
@api private @param [Interval] interval The time interval to be rendered. @return [RenderedInterval]
# File lib/calendario/renderers/interval_renderer.rb, line 28 def render(interval, columns:, &block) month_renderer.filter = block if block_given? lines = [] rendered_months = render_months(interval.months) rendered_months.each_slice(columns) do |months| 0.upto(7) { |month_line| lines << take_row(month_line, months) } lines.push('') # Separate rows of months end RenderedInterval.new(lines) end
Private Instance Methods
render_months(months)
click to toggle source
Renders a list of months
@api private @param [Array<Month>] months The list of months to be rendered @return [Array<RenderedMonth>]
# File lib/calendario/renderers/interval_renderer.rb, line 66 def render_months(months) months.map { |month| month_renderer.render(month) } end
take_row(month_line, months)
click to toggle source
Extracts a row from a group of months
@api private @return [Array<String>]
# File lib/calendario/renderers/interval_renderer.rb, line 56 def take_row(month_line, months) months.map { |month| month[month_line] }.join(EMPTY_DAY_SPACES) end