irobayna/stupidedi

View on GitHub
.simplecov

Summary

Maintainability
Test Coverage
require "base64"
require "simplecov-inline-html"
require "term/ansicolor"

SimpleCov.start do
  coverage_dir "build/generated/coverage"

  add_filter %r{/spec}
  add_filter %r{/segment_defs}
  add_filter %r{/element_defs}
  add_filter %r{/transaction_sets/[0-9]+/[A-Z0-9-]+\.rb}
  add_filter %r{/stupidedi/editor}

  add_group "Refinements",      "lib/ruby"
  add_group "Config",           "lib/stupidedi/config"
  add_group "Editor",           "lib/stupidedi/editor"
  add_group "Exceptions",       "lib/stupidedi/exceptions"
  add_group "Interchanges",     "lib/stupidedi/interchanges"
  add_group "Parser",           "lib/stupidedi/parser"
  add_group "Reader",           "lib/stupidedi/reader"
  add_group "Schema",           "lib/stupidedi/schema"
  add_group "TransactionSets",  "lib/stupidedi/transaction_sets"
  add_group "Values",           "lib/stupidedi/values"
  add_group "Versions",         "lib/stupidedi/versions"
  add_group "Writer",           "lib/stupidedi/writer"
  add_group "Zipper",           "lib/stupidedi/zipper"
end

# Based on https://github.com/inossidabile/simplecov-summary/edit/master/lib/simplecov-summary.rb
class SimpleCov::Formatter::SummaryFormatter
  def format(result)
    puts "SimpleCov summary:"
    name_width  = (result.groups.keys + ["SUMMARY"]).map(&:length).max
    count_width = result.groups.values.map(&:missed_lines).max.to_i.to_s.length

    result.groups.sort.each do |name, files|
      print_group(name, files, name_width, count_width)
    end

    print_group("SUMMARY", result.files, name_width, count_width)
  end

  def print_group(name, files, name_width, count_width)
    pct = files.covered_percent
    clr = case pct
          when 90..100 then :green
          when 80..90  then :yellow
          else              :red
          end
    puts Term::ANSIColor.send(clr,
      ("  % #{name_width}s: % 5s%%      " +
       "% #{count_width}s missed lines, " +
       "% #{count_width + 2}s lines total") %
       [name, pct.round(1), files.missed_lines.to_i, files.lines_of_code.to_i])
  end
end

class SimpleCov::Formatter::CustomHtmlFormatter < SimpleCov::Formatter::InlineHTMLFormatter
  def output_message(result)
  end

  # This image is missing from simplecov-inline-html
  BORDER = <<-EOF.gsub(/\s/, '')
    iVBORw0KGgoAAAANSUhEUgAAAAEAAABLCAIAAAA+tHrUAAAAUklEQVR4AcXH
    sQ3AIAwFUfuDYADSMQkrMiVdqKGzLDnCRTaIUjzpjnvvodaKtRbM7KWqTkT4
    PBF9Yu+NMQauUvx/Eu45Q0oJOWd3OsbomBmttQc0NiOlCz/4pgAAAABJRU5E
    rkJggg==
  EOF

  # This image is missing from simplecov-inline-html
  CONTROLS = <<-EOF.gsub(/\s/, '')
    iVBORw0KGgoAAAANSUhEUgAAAOEAAABLCAMAAACx6hDAAAABj1BMVEVPT0/e
    3t7b29vS0tK7urq5uLjq6uqZmZmSkpJaWlrU1NTj4+PFxcWvr6+goKBbW1u3
    t7c9PT27u7vCwsKsrKxiYWGqqqq5ublbWlpeXV2Xl5fExMSbmpq6ubmNjY18
    fHzy8vIrKystLS0sLCxNTU0uLi4wMDDNzc05OTns6+vl5eUvLy/q6ekqKipM
    TExDQ0M4ODgyMjI2NjbZ2dk6OjrY2NjMzMxLS0vAwMBCQkLo5+dHR0cxMTFK
    SkpBQUHv7u43NzdISEhFRUVRUVHx8fE7Ozs8PDwzMzNJSUnp6elGRkZQUFDr
    6upeXl7t7e1gYGCoqKjv7+81NTWKiorn5uZERESCgoJdXV3p6OhOTk51dXVA
    QEA+Pj6np6fu7e2+vr5cXFxSUlKJiYnOzs7s7OxTU1P29vbw8PB2dnZfX1/m
    5eV4eHifn59qamqmpqbQ0NCOjo7Kysqzs7P4+PiDg4Otra3z8/M/Pz80NDSr
    q6u/v7/Pz890dHRpaWmBgYH5+fn08/NoaGjPzs7///+ioqIRuwm9AAAGF0lE
    QVR4AcTWd1PDNhQAcH8UDcszdvaOs0lCSNiQsCmjhe7d654fvE+y8QjGXAq+
    vj+iu+enO/0iPdnSwdrx18f/YxzsfDDYkqrNtvp3Ynw1LrWbVWlrcCMdfLaz
    XkSFh/rms1Vs6nFry+jBnEy0/DAWs414dPzxvwphynoRES6HBlpdWQOVh42Y
    9RpetjEsou3QfwQPlnH/yO9XPD78wxs77yMcxMdLQh19vo9Wl7dE+zWUWQUa
    UqECRA6sFE5DRCj/Gs2eC/XvMaUUX33jjejNQi7Zeilc56rwEh1bVozQsr7k
    hCgQ4y4QObCLLSCGy39DlzFCSgihIBTjm4VcJyWFYEaEjT1jQSmOEWJMfzX2
    Qt01AyClRFOHmaGqEZj1C8qEyxfGXuOZkDDGCAjF+Eah8J3Iss2jGg1bhCwD
    EoiBENaaI4zQGCGF/KAS6i69XMCQZCUVqSUGk3ChPIuU9yvDzVSF3Gc7k14z
    Pnq9iWPLnOgL79AuYaZpMiRi2zu2IgjP5y5QcHvC0aRQrYx2Rgo8o3Bggz9E
    lNMLdJeekANtpzc9ytbbsVHPHk17VSD6wo7xAEBFUcz7+XxxfWpkxGH883ox
    n9+LPCPHQXdB9+WIqbR4KCbJQUcGQq/8AXVWhaYnNN9BKDvN75Jm/Fjvu0QQ
    igt/wIHugvmp+0nni6pZVKRFnpFQdwFRM1t5CJighYAgfCofGB810hGKLez9
    kzzl03Z/YnvCJarxQ6fwFbtEXHOFWKS9vDiMhz5R3Wjlx+NxvrWhAjAs9Mtr
    8CAQMk/I3kMoO9MvkqfcnmebjuwK9aKFCQMgrDcfFRIX7uYJtoJezKBHT/gJ
    3KNhYai8rKckhC3M/pw8RS2d9R1Z8vcQKCCJ38M8j5g9VMQDZXUPRdbfw3RO
    6Um1Wb99RZg7P5rYILx56kO/33gf1qJ9KODRPlRL/k2jqdE+9MoHxdT6UDqp
    TtuvCCuFUZY3ohCKuxSIobt0FrlLW/CAfBu5SzWgu2EyLXqXivIU71J+0Tj9
    s9eE+6N6z+ZTEt6HHSRC5LXdyPswRxikNx7hBzY9F34finKym9770BX+sKaQ
    f9NoLOGbRg19pOjFLiYQmopUjUDgbnHlm+bf9u33tWkgjAP4VvUak251/v79
    RCashUBhTGQV1zBtVLoX3dy0s0OmDETfGmhfCv3HzZPlSp7suKPFcL153zfZ
    2BH2IT/unnAPDi9ZuKEQjrtcqF6XrgvXpevJlQuSq4mlwhc/yA8Xr0sTOQrx
    qEU4W23Ry9cWzwq1xSd1baFHSOtDWcGH5VM4rQ/DeepDDULMh7lq/Bfz1vga
    hPq/05Qr1BArtML/UGjfNIO3TDBbeMLZgk1nC4/OFkw8W0yWMZM/2bGjacav
    xYIZP964OOMzJ65kM34l7iNRMhzTnABm+Xd21LRqWwEQCAFuIIECAZCYAgGQ
    mBu+4n9dRGF7n1UBxEJYZWTljcCUGKRAJAb54VW23144If9fxUJwKvnqycOh
    SPQr2U/eHhn+EYeXLHzkS3OrIDzza5BG8EX43FDLV8AcVoWMmquAIU3NPytZ
    ePuKNHepsMP6cB6nmqTPgvRmXMVfHMCQp6vNiVNguyiEvt8pV3j1lzTXckJ8
    4TtA4qZfolwgwaeLEimQCsHxfrQXRDjw3RgUQk45pEQKpEKIXf4H3cKmB6AQ
    8uS/COMzSN+jRIjxmpf+Gh5e7ueQ6X0OFe/SPfPfpf9oPozp7UvnQ73C2dc0
    g9nXNFqF5q9L1UJ9tYUGoaI+dP1Af304u1B/ja9DqOs7TflCDTFCaIVWaIVW
    aIVWaIVWaIVWaIVDlfAgMlTI95eqhPc2oxYKvxkp7OEO2pvyUz8JcY+wsULc
    5+3IT/20MeL7vE0ULj1/vzt8LDvzwzDaxr36xgqTreytk607Pz+f1u9fL6Re
    P31wEkZD7LcwVJjepq9ftUZRY3P87mLGB2EjGh4ll9Bg4RISj3ZGa93uVjHd
    brQ22uFAI4WK1i7s69rFxq7j3htzhfL2vKQ37yU25+ElNFJIWiwxgv7KY95g
    aaaQG3vyHlkEmitEI0bV52yikOe7KnygYcK/0sK5wtrjpuMAAAAASUVORK5C
    YII=
  EOF

  def file(path)
    if path.end_with?("application.css")
      css = super(path)
      css.gsub!("url(colorbox/border.png)", "url(data:image/png;base64,#{BORDER})")
      css.gsub!("url(colorbox/controls.png)", "url(data:image/png;base64,#{CONTROLS})")

      # Fit more stuff without scroll bars, don't linewrap filenames
      css << <<-EOF
        body       { padding:0 !important; }
        .src_link  { white-space:nowrap; }
        .file_list { font-size: .8rem; }
        .ui-icon   { width:0px !important; height:0px !important; }
        th         { font-size:.7rem; overflow:hidden; white-space:normal !important; }
      EOF
      css
    else
      super(path)
    end
  end
end

SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
  SimpleCov::Formatter::SummaryFormatter,
  SimpleCov::Formatter::CustomHtmlFormatter
])