module ShowMessage::ViewHelpers

Public Instance Methods

show_message(options_or_ids = nil, options = nil) click to toggle source

render the applicable messages

@param options_or_ids options or the ids to target @param options options for the view

# File lib/show_message/view_helpers.rb, line 8
def show_message(options_or_ids = nil, options = nil)
  if options_or_ids.is_a?(Hash)
    display_ids = []
    options = options_or_ids
  else
    display_ids = options_or_ids
    options ||= {}
  end

  display_ids = display_ids.is_a?(Array) ? display_ids : [display_ids]
  display_ids = display_ids.compact.map(&:to_s)
  # target all messages if no target is specified
  display_ids.push('all') if display_ids.empty?

  data = []
  message_keys = %w(success error warning info notice alert)

  flash.to_h.slice(*message_keys).each do |key, message_hash|
    # support basic usage of flash[:success] or flash[:error] which
    # would normally just return a string
    if message_hash.is_a?(Hash)
      message_hash.each do |id, messages|
        next unless display_ids.include?('all') || display_ids.include?(id)

        build_data(data, messages, key)
      end
    else
      next unless display_ids.include?('all')

      build_data(data, message_hash, key)
    end

    flash.discard(key)
  end

  render partial: 'show_message/show_message', locals: {
    data: data, options: options
  }
end

Private Instance Methods

build_data(data, messages, key) click to toggle source

support for messages to be an array. this will add multiple items to the data array to be rendered.

# File lib/show_message/view_helpers.rb, line 52
def build_data(data, messages, key)
  messages = messages.is_a?(Array) ? messages : [messages]
  messages.each do |message|
    data.push(message: message, class: key)
  end
end