Sha256: afe2ed602dd914a4e789ddb22fa7d540b6919d507d16bd8120ecc8da317b79a1

Contents?: true

Size: 2 KB

Versions: 1

Compression:

Stored size: 2 KB

Contents

#!/usr/bin/env ruby
# frozen_string_literal: true

require 'optparse'

# for dev purposes
require 'bundler/setup' if ENV['SITE_HEALTH_GEM_DEV']
require 'site_health'

def site_report(url, fields, progress)
  puts 'severity,title,url' if progress
  nurse = SiteHealth.check(url) do |n|
    n.clerk do |clerk|
      clerk.every_issue do |issue|
        puts [issue.severity, issue.title, issue.url].join(',') if progress
      end
    end
  end
  SiteHealth::IssuesReport.new(nurse.issues) do |r|
    r.fields = fields if fields
  end
end

options = {}
OptionParser.new do |parser|
  parser.banner = 'Usage: site_health --help'
  parser.default_argv = ARGV

  parser.on('--url=val0', String, '') do |url|
    options[:url] = url
  end

  parser.on('--fields=priority,title,url', Array, 'Issue fields to include - by default all fields are included') do |fields| # rubocop:disable Metrics/LineLength
    options[:fields] = fields
  end

  parser.on('--output=result.csv', String, 'Output format, .csv or .json') do |output|
    options[:output] = output
  end

  parser.on('--[no-]progress', '') do |progress|
    options[:progress] = progress
  end

  parser.on('-h', '--help', 'How to use') do
    puts parser
    exit
  end
end.parse!

def die(error_klass, message)
  fail(error_klass, "#{message} - run `site_health --help`")
end

def perform(output, url, fields, progress, format_method)
  File.write(
    output,
    site_report(url, fields, progress).public_send(format_method)
  )
end

url = options.fetch(:url) { die(ArgumentError, '--url is required') }
output = options.fetch(:output) { die(ArgumentError, '--output is required') }
progress = options.fetch(:progress, true)
fields = options.fetch(:fields, nil)

extension = File.extname(output)
case extension
when '.csv' then perform(output, url, fields, progress, :to_csv)
when '.json' then perform(output, url, fields, progress, :to_json)
when ''
  die(ArgumentError, "missing file extension from '#{output}'")
else
  die(ArgumentError, "unknown file extension '#{extension}'")
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
site_health-0.2.0 exe/site_health