module Dieses::Application::CLI::Single
Public Class Methods
call(*argv, **options)
click to toggle source
# File lib/dieses/application/cli/single.rb, line 7 def self.call(*argv, **options) options = OpenStruct.new(options) args options(argv, options), argv sheet = argv.first return puts(out = Application.produce(sheet, **options.to_h)) unless options[:output] File.write(options[:output], out) rescue OptionParser::InvalidOption, Dieses::Error => e abort(e.message) end
Private Class Methods
args(parser, argv)
click to toggle source
codebeat:enable rubocop:enable Metrics/MethodLength,Metrics/AbcSize
# File lib/dieses/application/cli/single.rb, line 77 def args(parser, argv) if argv.empty? warn parser.help warn '' abort "Error: Guidesheet type required. Type #{parser.program_name} -l to list all available guidesheets." end return if argv.size <= 1 warn parser.help warn '' abort 'Error: Too many arguments.' end
list()
click to toggle source
# File lib/dieses/application/cli/single.rb, line 91 def list warn 'Sheets:' warn '' warn Sheets.dump(prefix: "\t") end
options(argv, options)
click to toggle source
rubocop:disable Metrics/MethodLength,Metrics/AbcSize codebeat:disable
# File lib/dieses/application/cli/single.rb, line 25 def options(argv, options) Signal.trap('INT') { Kernel.abort '' } OptionParser.new do |option| # rubocop:disable Metrics/BlockLength program_name = option.program_name option.banner = <<~BANNER Usage: #{program_name} [options...] <SHEET> See #{program_name}(1) manual page for detailed help. Options: BANNER option.on('--paper PAPER', 'Paper size [default: a4]', String) do |opt| options.paper = opt end option.on('--variant VARIANT', 'Sheet variant', String) do |opt| options.variant = opt end option.on('--landscape', 'Use landscape orientation') do options.orientation = :landscape end option.on('-o', '--output FILE', 'Output file', String) do |opt| options.output = opt end option.on('--pdf', 'Generate PDF') do |_opt| raise NotImplementedError end option.on('-l', '--list', 'List guidesheets') do list exit end option.on_tail('-h', '--help', 'Show this message') do abort option.help end option.on_tail('-v', '--version', 'Show version') do warn VERSION exit end end.tap { |parser| parser.parse!(argv) } # rubocop:disable Style/MultilineBlockChain end