From c426378bda7ec80d74b3a46c2f1e1c79e2ff42ce Mon Sep 17 00:00:00 2001 From: kojix2 <2xijok@gmail.com> Date: Sat, 15 Aug 2020 23:15:30 +0900 Subject: [PATCH] Separate the Preprocess module into new files --- lib/preprocess.rb | 65 ++++++++++++++++++++++++++++++++++++++++++++ lib/uplot.rb | 1 + lib/uplot/command.rb | 64 ------------------------------------------- 3 files changed, 66 insertions(+), 64 deletions(-) create mode 100644 lib/preprocess.rb diff --git a/lib/preprocess.rb b/lib/preprocess.rb new file mode 100644 index 0000000..048c36b --- /dev/null +++ b/lib/preprocess.rb @@ -0,0 +1,65 @@ +module Uplot + module Preprocess + module_function + + def input(input, delimiter, headers, transpose) + arr = read_csv(input, delimiter) + headers = get_headers(arr, headers, transpose) + series = get_series(arr, headers, transpose) + Data.new(headers, series) + end + + def read_csv(input, delimiter) + CSV.parse(input, col_sep: delimiter) + .delete_if do |i| + i == [] or i.all? nil + end + end + + # Transpose different sized ruby arrays + # https://stackoverflow.com/q/26016632 + def transpose2(arr) + Array.new(arr.map(&:length).max) { |i| arr.map { |e| e[i] } } + end + + def get_headers(arr, headers, transpose) + if headers + if transpose + arr.map(&:first) + else + arr[0] + end + end + end + + def get_series(arr, headers, transpose) + if transpose + if headers + arr.map { |row| row[1..-1] } + else + arr + end + else + if headers + transpose2(arr[1..-1]) + else + transpose2(arr) + end + end + end + + def count(arr) + # tally was added in Ruby 2.7 + if Enumerable.method_defined? :tally + arr.tally + else + # https://github.com/marcandre/backports + arr.each_with_object(Hash.new(0)) { |item, res| res[item] += 1 } + .tap { |h| h.default = nil } + end + .sort { |a, b| a[1] <=> b[1] } + .reverse + .transpose + end + end +end diff --git a/lib/uplot.rb b/lib/uplot.rb index 3998da4..d47fa2c 100644 --- a/lib/uplot.rb +++ b/lib/uplot.rb @@ -1,5 +1,6 @@ require 'unicode_plot' require 'uplot/version' +require 'uplot/preprocess' require 'uplot/command.rb' module Uplot diff --git a/lib/uplot/command.rb b/lib/uplot/command.rb index c07e144..b9ccba2 100644 --- a/lib/uplot/command.rb +++ b/lib/uplot/command.rb @@ -5,70 +5,6 @@ require 'unicode_plot' module Uplot Data = Struct.new(:headers, :series) - module Preprocess - module_function - - def input(input, delimiter, headers, transpose) - arr = read_csv(input, delimiter) - headers = get_headers(arr, headers, transpose) - series = get_series(arr, headers, transpose) - Data.new(headers, series) - end - - def read_csv(input, delimiter) - CSV.parse(input, col_sep: delimiter) - .delete_if do |i| - i == [] or i.all? nil - end - end - - # Transpose different sized ruby arrays - # https://stackoverflow.com/q/26016632 - def transpose2(arr) - Array.new(arr.map(&:length).max) { |i| arr.map { |e| e[i] } } - end - - def get_headers(arr, headers, transpose) - if headers - if transpose - arr.map(&:first) - else - arr[0] - end - end - end - - def get_series(arr, headers, transpose) - if transpose - if headers - arr.map { |row| row[1..-1] } - else - arr - end - else - if headers - transpose2(arr[1..-1]) - else - transpose2(arr) - end - end - end - - def count(arr) - # tally was added in Ruby 2.7 - if Enumerable.method_defined? :tally - arr.tally - else - # https://github.com/marcandre/backports - arr.each_with_object(Hash.new(0)) { |item, res| res[item] += 1 } - .tap { |h| h.default = nil } - end - .sort { |a, b| a[1] <=> b[1] } - .reverse - .transpose - end - end - class Command Params = Struct.new( # Sort me!