Skip to content

Commit

Permalink
Extract flash warnings to presenter
Browse files Browse the repository at this point in the history
  • Loading branch information
jaysonvirissimo committed Sep 27, 2018
1 parent 7e43bce commit 74aa3a6
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 11 deletions.
7 changes: 5 additions & 2 deletions app/controllers/application_controller.rb
Expand Up @@ -8,6 +8,10 @@ def deny_user_access
redirect_to new_session_path
end

def flash_presenter
@flash_presenter ||= FlashPresenter.new(flash)
end

def nav_presenter
@nav_presenter ||= NavPresenter.new(viewing_user: viewing_user)
end
Expand All @@ -16,6 +20,5 @@ def viewing_user
current_user || NullUser.new
end

helper_method :nav_presenter
helper_method :viewing_user
helper_method :flash_presenter, :nav_presenter, :viewing_user
end
41 changes: 41 additions & 0 deletions app/presenters/flash_presenter.rb
@@ -0,0 +1,41 @@
# frozen_string_literal: true

class FlashPresenter
include ActionView::Helpers

def initialize(flash)
@flash = flash
end

def html
content_tag(:article, inner_html, class: 'message is-warning').html_safe
end

private

attr_reader :flash

def body
content_tag(:div, flash.alert, class: 'message-body')
end

def delete_button
content_tag(:button, '', class: 'delete', 'aria-label': 'delete')
end

def header
content_tag(:div, header_interior, class: 'message-header')
end

def header_interior
[warning, delete_button].join.html_safe
end

def inner_html
[header, body].join.html_safe
end

def warning
content_tag(:p, 'Warning')
end
end
11 changes: 2 additions & 9 deletions app/views/layouts/application.html.erb
Expand Up @@ -23,16 +23,9 @@
<%= nav_presenter.html %>
<div class='container'>
<% if flash.alert.present? %>
<article class="message is-warning">
<div class="message-header">
<p>Warning</p>
<button class="delete" aria-label="delete"></button>
</div>
<div class="message-body">
<%= flash.alert %>
</div>
</article>
<%= flash_presenter.html %>
<% end %>
<%= yield %>
</div>
<footer class="footer">
Expand Down
21 changes: 21 additions & 0 deletions spec/presenters/flash_presenter_spec.rb
@@ -0,0 +1,21 @@
# frozen_string_literal: true

require 'rails_helper'

describe FlashPresenter do
describe '#html' do
let(:html) { described_class.new(flash).html }
let(:flash) { double(alert: 'Danger Will Robinson') }

it 'displays the correct HTML' do
expect(html).to include('<article class="message is-warning">')
expect(html).to include('<div class="message-header">')
expect(html).to include('<p>Warning</p>')
expect(html).to include('<button class="delete" aria-label="delete"></button>')
expect(html).to include('<div class="message-body">')
expect(html).to include('Danger Will Robinson')
expect(html).to include('</div>')
expect(html).to include('</article>')
end
end
end

0 comments on commit 74aa3a6

Please sign in to comment.