diff --git a/exe/uplot b/exe/uplot index b91ba9c..abd6401 100755 --- a/exe/uplot +++ b/exe/uplot @@ -1,33 +1,5 @@ #!/usr/bin/env ruby require 'uplot' -require 'unicode_plot' -require 'optparse' -parser = OptionParser.new - -subparsers = Hash.new do |_h, k| - warn "no such subcommand: #{k}" - exit 1 -end - -params = {} - -subparsers['hist'] = OptionParser.new.tap do |opt| - opt.on('--nbins VAL') { |v| params[:nbins] = v.to_i } - opt.on('-p') { |v| params[:p] = v } -end - -parser.order!(ARGV) -params[:type] = ARGV.shift -subparsers[params[:type]].parse!(ARGV) unless ARGV.empty? - -input_lines = readlines.map(&:chomp) - -case params[:type] -when 'hist', 'histogram' - series = input_lines.map(&:to_f) - UnicodePlot.histogram(series, nbins: params[:nbins]).render -end - -puts input_lines if params[:p] +Uplot::Command.new(ARGV).run diff --git a/lib/uplot.rb b/lib/uplot.rb index 9436810..59137a5 100644 --- a/lib/uplot.rb +++ b/lib/uplot.rb @@ -1 +1,46 @@ require 'uplot/version' +require 'unicode_plot' +require 'optparse' + +module Uplot + class Command + def initialize(argv) + @params = {} + @ptype = nil + parse_options(argv) + end + + def parse_options(argv) + parser = OptionParser.new + parser.order!(argv) + @ptype = argv.shift + + subparsers = Hash.new do |_h, k| + warn "no such subcommand: #{k}" + exit 1 + end + + subparsers['hist'] = OptionParser.new.tap do |sub| + sub.on('--nbins VAL') { |v| @params[:nbins] = v.to_i } + sub.on('-p') { |v| @params[:p] = v } + end + + subparsers[@ptype].parse!(argv) unless argv.empty? + end + + def run + input_lines = readlines.map(&:chomp) + case @ptype + when 'hist', 'histogram' + histogram(input_lines).render + end + + puts input_lines if @params[:p] + end + + def histogram(input_lines) + series = input_lines.map(&:to_f) + UnicodePlot.histogram(series, nbins: @params[:nbins]) + end + end +end