Skip to content

Commit 85d818d

Browse files
committed
Refactoring and commenting DSV module
1 parent b484a3a commit 85d818d

1 file changed

Lines changed: 58 additions & 48 deletions

File tree

lib/youplot/dsv.rb

Lines changed: 58 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -3,41 +3,49 @@
33
require 'csv'
44

55
module YouPlot
6-
# Read and interpret Delimiter-separated values format file or stream.
6+
# Module to handle DSV (Delimiter-separated values) format.
7+
# Extract header and series.
78
module DSV
89
module_function
910

1011
def parse(input, delimiter, headers, transpose)
11-
arr = parse_as_csv(input, delimiter)
12+
# Parse as CSV
13+
arr = CSV.parse(input, col_sep: delimiter)
14+
15+
# Remove blank lines
16+
arr.delete_if do |i|
17+
i == [] or i.all? nil
18+
end
19+
20+
# get header
1221
headers = get_headers(arr, headers, transpose)
22+
23+
# get series
1324
series = get_series(arr, headers, transpose)
14-
if headers.nil?
15-
Data.new(headers, series)
16-
else
17-
if headers.include?(nil)
18-
warn "\e[35mHeaders contains nil in it.\e[0m"
19-
elsif headers.include? ''
20-
warn "\e[35mHeaders contains \"\" in it.\e[0m"
21-
end
22-
h_size = headers.size
23-
s_size = series.size
24-
if h_size == s_size
25-
Data.new(headers, series)
26-
elsif h_size > s_size
27-
warn "\e[35mThe number of headers is greater than the number of series.\e[0m"
28-
exit 1 if YouPlot.run_as_executable?
29-
elsif h_size < s_size
30-
warn "\e[35mThe number of headers is less than the number of series.\e[0m"
31-
exit 1 if YouPlot.run_as_executable?
32-
end
25+
26+
# Return if No header
27+
return Data.new(headers, series) if headers.nil?
28+
29+
# Warn if header contains nil
30+
warn "\e[35mHeaders contains nil in it.\e[0m" if headers.include?(nil)
31+
32+
# Warn if header contains ''
33+
warn "\e[35mHeaders contains \"\" in it.\e[0m" if headers.include? ''
34+
35+
# Make sure the number of elements in the header matches the number of series.
36+
h_size = headers.size
37+
s_size = series.size
38+
39+
if h_size > s_size
40+
warn "\e[35mThe number of headers is greater than the number of series.\e[0m"
41+
exit 1 if YouPlot.run_as_executable?
42+
43+
elsif h_size < s_size
44+
warn "\e[35mThe number of headers is less than the number of series.\e[0m"
45+
exit 1 if YouPlot.run_as_executable?
3346
end
34-
end
3547

36-
def parse_as_csv(input, delimiter)
37-
CSV.parse(input, col_sep: delimiter)
38-
.delete_if do |i|
39-
i == [] or i.all? nil
40-
end
48+
Data.new(headers, series) if h_size == s_size
4149
end
4250

4351
# Transpose different sized ruby arrays
@@ -47,31 +55,33 @@ def transpose2(arr)
4755
end
4856

4957
def get_headers(arr, headers, transpose)
50-
if headers
51-
if transpose
52-
arr.map(&:first)
53-
else
54-
arr[0]
55-
end
56-
end
58+
# header(-)
59+
return nil unless headers
60+
61+
# header(+) trenspose(+)
62+
return arr.map(&:first) if transpose
63+
64+
# header(+) transpose(-)
65+
arr[0]
5766
end
5867

5968
def get_series(arr, headers, transpose)
60-
if headers
61-
if arr.size > 1
62-
if transpose
63-
arr.map { |row| row[1..-1] }
64-
else
65-
transpose2(arr[1..-1])
66-
end
67-
else
68-
Array.new(arr[0].size, [])
69-
end
70-
elsif transpose
71-
arr
72-
else
73-
transpose2(arr)
69+
# header(-)
70+
unless headers
71+
return arr if transpose
72+
73+
return transpose2(arr)
7474
end
75+
76+
# header(+) but no element in the series.
77+
# TODO: should raise error?
78+
return Array.new(arr[0].size, []) if arr.size == 1
79+
80+
# header(+) transpose(+)
81+
return arr.map { |row| row[1..-1] } if transpose
82+
83+
# header(+) transpose(-)
84+
transpose2(arr[1..-1])
7585
end
7686
end
7787
end

0 commit comments

Comments
 (0)