Class: GovukSeedCrawler::CLIParser

Inherits:
Object
  • Object
show all
Defined in:
lib/govuk_seed_crawler/cli_parser.rb

Constant Summary collapse

DEFAULTS =
{
  exchange: "govuk_crawler_exchange",
  host: "localhost",
  password: "guest",
  port: "5672",
  quiet: false,
  topic: "#",
  username: "guest",
  verbose: false,
  vhost: "/",
}.freeze
ENV_AMQP_PASS_KEY =
"GOVUK_CRAWLER_AMQP_PASS".freeze

Instance Method Summary collapse

Constructor Details

#initialize(argv_array) ⇒ CLIParser

Returns a new instance of CLIParser.



28
29
30
# File 'lib/govuk_seed_crawler/cli_parser.rb', line 28

def initialize(argv_array)
  @argv_array = argv_array
end

Instance Method Details

#optionsObject



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/govuk_seed_crawler/cli_parser.rb', line 32

def options
  opts = Slop::Options.new
  opts.banner = <<~HELP
    Usage: #{$PROGRAM_NAME} site_root [options]

    Seeds an AMQP topic exchange with messages, each containing a URL, for the GOV.UK Crawler Worker
    to consume:

    https://github.com/alphagov/govuk_crawler_worker

    The AMQP password can also be set as an environment variable and will be read from
    `#{ENV_AMQP_PASS_KEY}`. If both the environment variable and command-line option for password
    are set, the environment variable will take higher precedent.
  HELP
  opts.string "--host", "AMQP host to publish to", default: DEFAULTS[:host]
  opts.string "--port", "AMQP port", default: DEFAULTS[:port]
  opts.string "--username", "AMQP username", default: DEFAULTS[:username]
  opts.string "--password", "AMQP password", default: DEFAULTS[:password]
  opts.string "--exchange", "AMQP exchange", default: DEFAULTS[:exchange]
  opts.string "--topic", "AMQP topic", default: DEFAULTS[:topic]
  opts.string "--vhost", "AMQP vhost", default: DEFAULTS[:vhost]
  opts.bool "-q", "--quiet", "Quiet output", default: DEFAULTS[:quiet]
  opts.bool "-v", "--verbose", "Verbose output", default: DEFAULTS[:verbose]
  opts.on "--version", "Display version and exit" do
    puts "Version: #{GovukSeedCrawler::VERSION}"
    exit 0
  end
  opts.on "-h", "--help" do
    puts opts
    exit
  end
  parser = Slop::Parser.new(opts)
  parser.parse(@argv_array)
end

#parseObject

Raises:



67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/govuk_seed_crawler/cli_parser.rb', line 67

def parse
  opts = options

  # opts.arguments shows all arguments NOT processed by the parser,
  # which should just be the first arg (site root).
  # See https://github.com/leejarvis/slop#arguments
  raise CLIException.new("too many arguments provided", opts.to_s) if opts.arguments.count > 1
  raise CLIException.new("site_root must be provided", opts.to_s) if opts.arguments.count.zero?

  options_hash = opts.to_hash
  options_hash[:password] = ENV[ENV_AMQP_PASS_KEY] unless ENV[ENV_AMQP_PASS_KEY].nil?

  [options_hash, @argv_array.first]
end