class Centra::OrderCLI

Public Class Methods

parse!(name:, argv: ARGV) click to toggle source
# File lib/centra/order_cli.rb, line 7
def self.parse!(name:, argv: ARGV)
  options = {
    centra_export_file: nil,
    order_freq_output: nil,
    anonymized_output: nil,
    anonymize: true
  }

  OptionParser.new do |parser|
    parser.banner = "Usage: #{name} [options]"
    parser.default_argv = argv

    parser.on("--centra-export=centra_orders.csv", String, "Path to Centra order export file (in CSV format).") do |value|
      options[:centra_export_file] = value.strip
    end

    parser.on("--order-frequency-output=unique_emails.csv", String, "Path to output file.") do |value|
      options[:order_freq_output] = value.strip
      # Ensure file ending
      options[:order_freq_output] = "#{order_freq_output}.csv" unless value.end_with?(".csv")
    end

    parser.on("--anonymized-output=anonymized_orders.csv", String, "Path to output file.") do |value|
      options[:anonymized_output] = value.strip
      # Ensure file ending
      options[:anonymized_output] = "#{anonymized_output}.csv" unless value.end_with?(".csv")
    end

    parser.on("--[no-]anonymize", "Anonymize/scrub personal details.") do |value|
      options[:anonymize] = value
    end

    CLIUtils.parse_order_filter_args!(parser,  options)

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

    parser.on_tail('--version', 'Show version') do
      puts "Centra version #{Centra::VERSION}"
      exit
    end

    # No argument, shows at tail. This will print an options summary.
    parser.on_tail("-h", "--help", "Show this message") do
      puts parser
      exit
    end
  end.parse!

  centra_export_file = options[:centra_export_file]
  if !centra_export_file || centra_export_file.empty?
    puts "You must provide a Centra export file path."
    puts "USAGE:"
    puts "    $ ruby #{name} --help"
    exit 1
  end

  options
end