lib/coverband/reporters/web.rb in coverband-4.2.7 vs lib/coverband/reporters/web.rb in coverband-5.0.0.rc.3

- old
+ new

@@ -1,40 +1,44 @@ # frozen_string_literal: true begin - require 'rack' + require "rack" rescue LoadError - puts 'error loading Coverband web reporter as Rack is not available' + puts "error loading Coverband web reporter as Rack is not available" end module Coverband module Reporters class Web attr_reader :request def initialize - full_path = Gem::Specification.find_by_name('coverband').full_gem_path + init_web + end + + def init_web + full_path = Gem::Specification.find_by_name("coverband").full_gem_path @static = Rack::Static.new(self, - root: File.expand_path('public', full_path), - urls: [/.*\.css/, /.*\.js/, /.*\.gif/, /.*\.png/]) + root: File.expand_path("public", full_path), + urls: [/.*\.css/, /.*\.js/, /.*\.gif/, /.*\.png/]) end def check_auth return true unless Coverband.configuration.password - auth_header = request.get_header('HTTP_AUTHORIZATION') + auth_header = request.get_header("HTTP_AUTHORIZATION") return unless auth_header - Coverband.configuration.password == Base64.decode64(auth_header.split[1]).split(':')[1] + Coverband.configuration.password == Base64.decode64(auth_header.split[1]).split(":")[1] end def call(env) @request = Rack::Request.new(env) - return [401, { 'www-authenticate' => 'Basic realm=""' }, ['']] unless check_auth + return [401, {"www-authenticate" => 'Basic realm=""'}, [""]] unless check_auth - request_path_info = (request.path_info == '') ? '/' : request.path_info + request_path_info = request.path_info == "" ? "/" : request.path_info if request.post? case request_path_info when %r{\/clear_view_tracking_file} clear_view_tracking_file when %r{\/clear_view_tracking} @@ -42,56 +46,56 @@ when %r{\/clear_file} clear_file when %r{\/clear} clear else - [404, { 'Content-Type' => 'text/html' }, ['404 error!']] + [404, {"Content-Type" => "text/html"}, ["404 error!"]] end else case request_path_info when /.*\.(css|js|gif|png)/ @static.call(env) when %r{\/settings} - [200, { 'Content-Type' => 'text/html' }, [settings]] + [200, {"Content-Type" => "text/html"}, [settings]] when %r{\/view_tracker_data} - [200, { 'Content-Type' => 'text/json' }, [view_tracker_data]] + [200, {"Content-Type" => "text/json"}, [view_tracker_data]] when %r{\/view_tracker} - [200, { 'Content-Type' => 'text/html' }, [view_tracker]] + [200, {"Content-Type" => "text/html"}, [view_tracker]] when %r{\/enriched_debug_data} - [200, { 'Content-Type' => 'text/json' }, [enriched_debug_data]] + [200, {"Content-Type" => "text/json"}, [enriched_debug_data]] when %r{\/debug_data} - [200, { 'Content-Type' => 'text/json' }, [debug_data]] + [200, {"Content-Type" => "text/json"}, [debug_data]] when %r{\/load_file_details} - [200, { 'Content-Type' => 'text/json' }, [load_file_details]] + [200, {"Content-Type" => "text/json"}, [load_file_details]] when %r{\/$} - [200, { 'Content-Type' => 'text/html' }, [index]] + [200, {"Content-Type" => "text/html"}, [index]] else - [404, { 'Content-Type' => 'text/html' }, ['404 error!']] + [404, {"Content-Type" => "text/html"}, ["404 error!"]] end end end def index - notice = "<strong>Notice:</strong> #{Rack::Utils.escape_html(request.params['notice'])}<br/>" - notice = request.params['notice'] ? notice : '' + notice = "<strong>Notice:</strong> #{Rack::Utils.escape_html(request.params["notice"])}<br/>" + notice = request.params["notice"] ? notice : "" Coverband::Reporters::HTMLReport.new(Coverband.configuration.store, - static: false, - base_path: base_path, - notice: notice, - open_report: false).report + static: false, + base_path: base_path, + notice: notice, + open_report: false).report end def settings Coverband::Utils::HTMLFormatter.new(nil, base_path: base_path).format_settings! end def view_tracker - notice = "<strong>Notice:</strong> #{Rack::Utils.escape_html(request.params['notice'])}<br/>" - notice = request.params['notice'] ? notice : '' + notice = "<strong>Notice:</strong> #{Rack::Utils.escape_html(request.params["notice"])}<br/>" + notice = request.params["notice"] ? notice : "" Coverband::Utils::HTMLFormatter.new(nil, - notice: notice, - base_path: base_path).format_view_tracker! + notice: notice, + base_path: base_path).format_view_tracker! end def view_tracker_data Coverband::Collectors::ViewTracker.new(store: Coverband.configuration.store).as_json end @@ -100,76 +104,79 @@ Coverband.configuration.store.get_coverage_report.to_json end def enriched_debug_data Coverband::Reporters::HTMLReport.new(Coverband.configuration.store, - static: false, - base_path: base_path, - notice: '', - open_report: false).report_data + static: false, + base_path: base_path, + notice: "", + open_report: false).report_data end def load_file_details - filename = request.params['filename'] + filename = request.params["filename"] Coverband::Reporters::HTMLReport.new(Coverband.configuration.store, - filename: filename, - base_path: base_path, - open_report: false).file_details + filename: filename, + base_path: base_path, + open_report: false).file_details end def clear if Coverband.configuration.web_enable_clear Coverband.configuration.store.clear! - notice = 'coverband coverage cleared' + notice = "coverband coverage cleared" else - notice = 'web_enable_clear isnt enabled in your configuration' + notice = "web_enable_clear isnt enabled in your configuration" end - [301, { 'Location' => "#{base_path}?notice=#{notice}" }, []] + [301, {"Location" => "#{base_path}?notice=#{notice}"}, []] end def clear_file if Coverband.configuration.web_enable_clear - filename = request.params['filename'] + filename = request.params["filename"] Coverband.configuration.store.clear_file!(filename) notice = "coverage for file #{filename} cleared" else - notice = 'web_enable_clear isnt enabled in your configuration' + notice = "web_enable_clear isnt enabled in your configuration" end - [301, { 'Location' => "#{base_path}?notice=#{notice}" }, []] + [301, {"Location" => "#{base_path}?notice=#{notice}"}, []] end def clear_view_tracking if Coverband.configuration.web_enable_clear tracker = Coverband::Collectors::ViewTracker.new(store: Coverband.configuration.store) tracker.reset_recordings - notice = 'view tracking reset' + notice = "view tracking reset" else - notice = 'web_enable_clear isnt enabled in your configuration' + notice = "web_enable_clear isnt enabled in your configuration" end - [301, { 'Location' => "#{base_path}/view_tracker?notice=#{notice}" }, []] + [301, {"Location" => "#{base_path}/view_tracker?notice=#{notice}"}, []] end def clear_view_tracking_file if Coverband.configuration.web_enable_clear tracker = Coverband::Collectors::ViewTracker.new(store: Coverband.configuration.store) - filename = request.params['filename'] + filename = request.params["filename"] tracker.clear_file!(filename) notice = "coverage for file #{filename} cleared" else - notice = 'web_enable_clear isnt enabled in your configuration' + notice = "web_enable_clear isnt enabled in your configuration" end - [301, { 'Location' => "#{base_path}/view_tracker?notice=#{notice}" }, []] + [301, {"Location" => "#{base_path}/view_tracker?notice=#{notice}"}, []] end private # This method should get the root mounted endpoint # for example if the app is mounted like so: # mount Coverband::Web, at: '/coverage' # "/coverage/collect_coverage?" become: # /coverage/ + # NOTE: DO NOT let standardrb `autofix` this to regex match + # %r{\/.*\/}.match?(request.path) ? request.path.match("\/.*\/")[0] : "/" + # ^^ the above is NOT valid Ruby 2.3/2.4 even though rubocop / standard think it is def base_path - request.path =~ %r{\/.*\/} ? request.path.match("\/.*\/")[0] : '/' + request.path =~ %r{\/.*\/} ? request.path.match("\/.*\/")[0] : "/" end end end end