diff --git a/lib/reactionview/template/handlers/herb.rb b/lib/reactionview/template/handlers/herb.rb index 5488a89..3262609 100644 --- a/lib/reactionview/template/handlers/herb.rb +++ b/lib/reactionview/template/handlers/herb.rb @@ -76,29 +76,27 @@ def dev_server_port_meta_tag end def reactionview_dev_tools_markup(template) + return nil unless ::ReActionView.config.debug_mode_enabled? return nil unless layout_template?(template) return nil unless local_template?(template) - markup = +"" + <<~HTML + + + #{dev_server_port_meta_tag} + #{editor_meta_tag} - if ::ReActionView.config.debug_mode_enabled? - markup << <<~HTML - - - #{dev_server_port_meta_tag} - #{editor_meta_tag} - - #{ActionController::Base.new.view_context.javascript_include_tag "reactionview-dev-tools.umd.js", defer: true} - HTML - end + #{ActionController::Base.new.view_context.javascript_include_tag "reactionview-dev-tools.umd.js", defer: true} + #{dismiss_hint_template} + HTML + end - if ::ReActionView.config.validation_mode == :overlay - markup << <<~HTML - - HTML - end + def dismiss_hint_template + return unless ::ReActionView.config.validation_mode == :overlay - markup.presence + <<~HTML.chomp + + HTML end end end diff --git a/test/template/handlers/dev_tools_markup_test.rb b/test/template/handlers/dev_tools_markup_test.rb new file mode 100644 index 0000000..ab4b5c8 --- /dev/null +++ b/test/template/handlers/dev_tools_markup_test.rb @@ -0,0 +1,95 @@ +# frozen_string_literal: true + +require_relative "../../test_helper" + +require "action_controller" + +class ReActionView::DevToolsMarkupTest < Minitest::Spec + RAILS_ROOT = "/app" + LAYOUT = "/app/app/views/layouts/application.html.erb" + MAILER_LAYOUT = "/app/app/views/layouts/mailer.html.erb" + VIEW = "/app/app/views/users/show.html.erb" + + SOURCE = %() + + DISMISS_HINT = "data-herb-dismiss-hint" + + before do + @previous_debug_mode = ReActionView.config.debug_mode + end + + after do + ReActionView.config.debug_mode = @previous_debug_mode + ReActionView.config.validation_mode = nil + end + + def compile(identifier: LAYOUT, virtual_path: "layouts/application") + template = ActionView::Template.new( + SOURCE, + identifier, + ReActionView::Template::Handlers::Herb, + virtual_path: virtual_path, + format: :html, + locals: [] + ) + + Rails.stub(:root, Pathname.new(RAILS_ROOT)) do + ReActionView::Template::Handlers::Herb.call(template, SOURCE) + end + end + + test "does not emit the dismiss hint when debug mode is off" do + ReActionView.config.debug_mode = false + ReActionView.config.validation_mode = :overlay + + refute_includes compile, DISMISS_HINT + end + + test "does not emit the dismiss hint in mailer layouts when debug mode is off" do + ReActionView.config.debug_mode = false + ReActionView.config.validation_mode = :overlay + + refute_includes compile(identifier: MAILER_LAYOUT, virtual_path: "layouts/mailer"), DISMISS_HINT + end + + test "emits nothing at all into the head when debug mode is off" do + ReActionView.config.debug_mode = false + ReActionView.config.validation_mode = :overlay + + compiled = compile + + refute_includes compiled, "herb-debug-mode" + refute_includes compiled, "reactionview-dev-tools" + refute_includes compiled, DISMISS_HINT + end + + test "emits the dismiss hint when debug mode is on and validation mode is :overlay" do + ReActionView.config.debug_mode = true + ReActionView.config.validation_mode = :overlay + + compiled = compile + + assert_includes compiled, DISMISS_HINT + assert_includes compiled, "herb-debug-mode" + end + + test "does not emit the dismiss hint when validation mode is not :overlay" do + ReActionView.config.debug_mode = true + ReActionView.config.validation_mode = :none + + compiled = compile + + refute_includes compiled, DISMISS_HINT + assert_includes compiled, "herb-debug-mode" + end + + test "emits nothing for templates that are not layouts" do + ReActionView.config.debug_mode = true + ReActionView.config.validation_mode = :overlay + + compiled = compile(identifier: VIEW, virtual_path: "users/show") + + refute_includes compiled, DISMISS_HINT + refute_includes compiled, "herb-debug-mode" + end +end