Files
old-holivud2/app/helpers/errors_helper.rb
2020-05-31 22:38:19 +02:00

81 lines
1.8 KiB
Ruby

module ErrorsHelper
# Displays an alert containing a list of error messages for a given model attribute
def errors_for(model, attribute)
ErrorsList.new(self, model, attribute).to_html
end
# Displays an alert containing a list of all the error messages for a given model
def errors_summary_for(model)
ErrorsSummary.new(self, model).to_html
end
private
class ErrorsList
def initialize(view, model, attribute)
@view = view
@model = model
@attribute = attribute
end
def to_html
return if errors.empty?
error_list_items = errors.map { |error| content_tag(:li, error) }
content_tag(:div, class: "alert alert-danger text-left") do
concat content_tag(:p, message)
concat content_tag(:ul, safe_join(error_list_items))
end
end
private
attr_reader :view, :model, :attribute
delegate :concat, :content_tag, :safe_join, to: :view
def errors
@errors ||= errors = model.errors[attribute]
end
def message
"#{attribute.to_s.humanize} is not valid."
end
end
class ErrorsSummary
def initialize(view, model)
@view = view
@model = model
end
def to_html
return if errors.empty?
content_tag(:div, class: "alert alert-danger text-left") do
concat content_tag(:p, translate("errors_helper.failure_message", model_name: name))
concat content_tag(:ul, safe_join(error_list_items))
end
end
private
attr_reader :view, :model
delegate :concat, :content_tag, :safe_join, :translate, to: :view
def errors
@errors ||= model.errors.full_messages
end
def error_list_items
errors.map { |error| content_tag(:li, error) }
end
def name
model.model_name.human.downcase
end
end
end