Sha256: 6fd4d24df500608af98cec35742f4d361aa8166e979ee430033a4e94d84da52f

Contents?: true

Size: 1.58 KB

Versions: 1

Compression:

Stored size: 1.58 KB

Contents

#!/usr/bin/env ruby

require "hilight"
require 'term/ansicolor'
require 'open3'

include Hilight #rubocop:disable all

Filter = Struct.new(:cmd, :patterns)

filters = [
  Filter["rspec", Patterns[[
    Pattern[/(?<green>\d+) examples, (?<red>\d+) failures, (?<yellow>\d+) pending/, '\k<green> examples, \k<red> failures, \k<yellow> pending'],
    Pattern[/(?<blue>\d+\.\d+)/, '\k<blue>'],
    Pattern[/\"(?<green>.*?)\"|\'(?<green>.*?)\'/, '\k<green>'],
    Pattern[/# (?<red>.*):(?<yellow>\d+)/, '\k<red>:\k<yellow>']
  ]]],
  Filter[/-h|--help|help/, Patterns[[
    Pattern[/(?<green>\[.*?\])|(?<magenta>(?:--(?:\[no-\]|)(?:\w|-)+)|-[A-Za-z])/, '\k<green>\k<magenta>']
  ]]],
  Filter["git",   Patterns[[Pattern[/(?<green>'.*')|(?<blue>".*")/, '\k<green>\k<blue>']]]],
  Filter["ruby",  Patterns[[
    Pattern[/(.*from |)(?<red>.*):(?<blue>\d+)(?::in )(?<yellow>`.*')/, '\k<red>\k<blue>\k<yellow>']
  ]]],
  Filter["default", Patterns[[
    Pattern[/(?<green>'.*')|(?<blue>".*")/, '\k<green>\k<blue>']
  ]]]
]

Filter.define_method(:match?) do |string|
  case cmd
  when (String || Symbol) then (cmd.to_s == string.to_s)
  when Regexp then (cmd.match? string.to_s)
  else false
  end
end

filters.define_singleton_method(:find) do |string|
  each { |f| return f if f.match? string }
  filters.find "default"
end

filters.define_singleton_method(:run) do
  arg_string = ARGV.join(' ')

  f = filters.find arg_string

  output, process = Open3.capture2e(arg_string)

  abort process.exitstatus if process.exitstatus.positive?

  puts f.patterns.output(output)
end

abort 'hilight <cmd>' unless ARGV.any?
filters.run

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
hilight-0.1.0 exe/hilight