class Integral::ListRenderer
Handles safely rendering lists
Attributes
list[RW]
opts[RW]
Public Class Methods
new(list, opts = {})
click to toggle source
@param list [List] object to render @param opts [Hash] options hash
# File lib/integral/list_renderer.rb, line 21 def initialize(list, opts = {}) @opts = opts.reverse_merge( item_renderer: ListItemRenderer, item_renderer_opts: {}, wrapper_element: 'ul' ) @list = list end
render(list, opts = {})
click to toggle source
Renders the provided list with options given
@return [String] the rendered list
# File lib/integral/list_renderer.rb, line 14 def self.render(list, opts = {}) renderer = new(list, opts) renderer.render_safely.html_safe end
Public Instance Methods
render()
click to toggle source
Renders the provided list
@return [String] the rendered list item
# File lib/integral/list_renderer.rb, line 42 def render rendered_items = '' list.list_items.each do |list_item| rendered_items += render_item(list_item) end if opts[:wrapper_element] content_tag opts[:wrapper_element], rendered_items, html_options, false else rendered_items end end
render_safely()
click to toggle source
Performs checks before rendering to see if provided list exists and contains list items
# File lib/integral/list_renderer.rb, line 32 def render_safely return render_no_list_warning if list.nil? return render_no_items_warning if list.list_items.empty? render end
Private Instance Methods
html_classes()
click to toggle source
# File lib/integral/list_renderer.rb, line 90 def html_classes return list.html_classes unless opts[:html_classes].present? "#{list.html_classes} #{opts[:html_classes]}" end
html_id()
click to toggle source
# File lib/integral/list_renderer.rb, line 83 def html_id return list.html_id if list.html_id.present? return opts[:html_id] if opts[:html_id].present? '' end
html_options()
click to toggle source
# File lib/integral/list_renderer.rb, line 70 def html_options opts = {} opts[:id] = html_id if html_id.present? opts[:class] = html_classes if html_classes.present? opts[:data] = self.opts[:data_attributes] opts end
render_item(item)
click to toggle source
# File lib/integral/list_renderer.rb, line 79 def render_item(item) opts[:item_renderer].render(item, opts[:item_renderer_opts]) end
render_no_items_warning()
click to toggle source
@return [String] HTML comment informing list contains 0 items
# File lib/integral/list_renderer.rb, line 65 def render_no_items_warning Rails.logger.debug('IntegralMessage: Tried to render a list with no items.') '<!-- Warning: Tried to render a list with no items. -->' end
render_no_list_warning()
click to toggle source
@return [String] HTML comment informing nil argument was provided as the list
# File lib/integral/list_renderer.rb, line 59 def render_no_list_warning Rails.logger.debug('IntegralMessage: Tried to render a list with a nil argument.') '<!-- Warning: Tried to render a list with a nil argument. -->' end