sycsvpro 0.1.4 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +1 -1
- data/README.md +113 -21
- data/bin/sycsvpro +98 -25
- data/lib/sycsvpro/calculator.rb +50 -10
- data/lib/sycsvpro/dsl.rb +12 -0
- data/lib/sycsvpro/header.rb +24 -8
- data/lib/sycsvpro/join.rb +159 -0
- data/lib/sycsvpro/table.rb +83 -5
- data/lib/sycsvpro/version.rb +1 -1
- data/lib/sycsvpro.rb +1 -0
- data/spec/sycsvpro/calculator_spec.rb +31 -1
- data/spec/sycsvpro/header_spec.rb +7 -1
- data/spec/sycsvpro/join_spec.rb +178 -0
- data/spec/sycsvpro/table_spec.rb +153 -2
- data/sycsvpro.rdoc +9 -4
- metadata +4 -2
data/spec/sycsvpro/table_spec.rb
CHANGED
@@ -4,8 +4,10 @@ module Sycsvpro
|
|
4
4
|
|
5
5
|
describe Table do
|
6
6
|
before do
|
7
|
-
@in_file
|
8
|
-
@
|
7
|
+
@in_file = File.join(File.dirname(__FILE__), "files/table.csv")
|
8
|
+
@in_file_revenues = File.join(File.dirname(__FILE__),
|
9
|
+
"files/table_revenues.csv")
|
10
|
+
@out_file = File.join(File.dirname(__FILE__), "files/out.csv")
|
9
11
|
end
|
10
12
|
|
11
13
|
it "should create headings from String and column values" do
|
@@ -60,6 +62,155 @@ module Sycsvpro
|
|
60
62
|
end
|
61
63
|
end
|
62
64
|
|
65
|
+
it "should add a sum row" do
|
66
|
+
Sycsvpro::Table.new(infile: @in_file,
|
67
|
+
outfile: @out_file,
|
68
|
+
header: "Year,c6,c1,c2+c3",
|
69
|
+
key: "c0=~/\\.(\\d{4})/,c6",
|
70
|
+
cols: "Value:+n1,c2+c3:+n1",
|
71
|
+
sum: "top:Value,c2+c3").execute
|
72
|
+
|
73
|
+
result = [ "Year;Country;Value;A1;B2;B4",
|
74
|
+
";;95.2;41.0;21.0;33.2",
|
75
|
+
"2013;AT;53.7;20.5;0;33.2",
|
76
|
+
"2014;DE;21.0;0;21.0;0",
|
77
|
+
"2014;AT;20.5;20.5;0;0" ]
|
78
|
+
|
79
|
+
File.open(@out_file).each_with_index do |line, index|
|
80
|
+
line.chomp.should eq result[index]
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should add a sum row after the heading" do
|
85
|
+
Sycsvpro::Table.new(infile: @in_file,
|
86
|
+
outfile: @out_file,
|
87
|
+
header: "c4,c5,c0=~/\\.(\\d{4})/",
|
88
|
+
key: "c4,c5",
|
89
|
+
cols: "c0=~/\\.(\\d{4})/:+n1",
|
90
|
+
sum: "TOP:c0=~/\\.(\\d{4})/").execute
|
91
|
+
|
92
|
+
result = [ "Customer Name;Customer-ID;2013;2014",
|
93
|
+
";;53.7;41.5",
|
94
|
+
"Hank;133;20.5;20.5",
|
95
|
+
"Hans;234;0;21.0",
|
96
|
+
"Jack;432;33.2;0" ]
|
97
|
+
|
98
|
+
rows = 0
|
99
|
+
|
100
|
+
File.open(@out_file).each_with_index do |line, index|
|
101
|
+
line.chomp.should eq result[index]
|
102
|
+
rows += 1
|
103
|
+
end
|
104
|
+
|
105
|
+
rows.should eq result.size
|
106
|
+
end
|
107
|
+
|
108
|
+
it "should add a sum row at the bottom" do
|
109
|
+
Sycsvpro::Table.new(infile: @in_file,
|
110
|
+
outfile: @out_file,
|
111
|
+
header: "c4,c5,c0=~/\\.(\\d{4})/",
|
112
|
+
key: "c4,c5",
|
113
|
+
cols: "c0=~/\\.(\\d{4})/:+n1",
|
114
|
+
sum: "EOF:c0=~/\\.(\\d{4})/").execute
|
115
|
+
|
116
|
+
result = [ "Customer Name;Customer-ID;2013;2014",
|
117
|
+
"Hank;133;20.5;20.5",
|
118
|
+
"Hans;234;0;21.0",
|
119
|
+
"Jack;432;33.2;0",
|
120
|
+
";;53.7;41.5" ]
|
121
|
+
|
122
|
+
rows = 0
|
123
|
+
|
124
|
+
File.open(@out_file).each_with_index do |line, index|
|
125
|
+
line.chomp.should eq result[index]
|
126
|
+
rows += 1
|
127
|
+
end
|
128
|
+
|
129
|
+
rows.should eq result.size
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should process cols with commas within expression" do
|
133
|
+
|
134
|
+
sp_order_type = %w{ ZE ZEI Z0 }
|
135
|
+
rp_order_type = %w{ ZRN ZRK }
|
136
|
+
|
137
|
+
Sycsvpro::Table.new(infile: @in_file_revenues,
|
138
|
+
outfile: @out_file,
|
139
|
+
header: "Year,SP,RP,Total",
|
140
|
+
key: "c0=~/\\.(\\d{4})/",
|
141
|
+
cols: "SP:+n2 if #{sp_order_type}.index(c1),"+
|
142
|
+
"RP:+n2 if #{rp_order_type}.index(c1),"+
|
143
|
+
"Total:+n2",
|
144
|
+
nf: "DE",
|
145
|
+
sum: "top:SP,RP,Total").execute
|
146
|
+
|
147
|
+
result = [ "Year;SP;RP;Total",
|
148
|
+
";345.2;3925.73;4270.93",
|
149
|
+
"2012;300.7;3580.1;3880.8",
|
150
|
+
"2013;44.5;345.63;390.13" ]
|
151
|
+
|
152
|
+
rows = 0
|
153
|
+
|
154
|
+
File.open(@out_file).each_with_index do |line, index|
|
155
|
+
line.chomp.should eq result[index]
|
156
|
+
rows += 1
|
157
|
+
end
|
158
|
+
|
159
|
+
rows.should eq result.size
|
160
|
+
end
|
161
|
+
|
162
|
+
it "should ignore commas within header expressions" do
|
163
|
+
Sycsvpro::Table.new(
|
164
|
+
infile: @in_file_revenues,
|
165
|
+
outfile: @out_file,
|
166
|
+
header: "Year,BEGINc1=~/^([A-Z]{1,2})/END,Total",
|
167
|
+
key: "c0=~/\\.(\\d{4})/",
|
168
|
+
cols: "c1=~/^([A-Z]{1,2})/:+n2,Total:+n2",
|
169
|
+
nf: "DE",
|
170
|
+
sum: "top:BEGINc1=~/^([A-Z]{1,2})/END,Total").execute
|
171
|
+
|
172
|
+
result = [ "Year;ZE;ZR;Total",
|
173
|
+
";345.2;3925.73;4270.93",
|
174
|
+
"2012;300.7;3580.1;3880.8",
|
175
|
+
"2013;44.5;345.63;390.13" ]
|
176
|
+
|
177
|
+
rows = 0
|
178
|
+
|
179
|
+
File.open(@out_file).each_with_index do |line, index|
|
180
|
+
line.chomp.should eq result[index]
|
181
|
+
rows += 1
|
182
|
+
end
|
183
|
+
|
184
|
+
rows.should eq result.size
|
185
|
+
|
186
|
+
end
|
187
|
+
|
188
|
+
it "should ignore commas within key expressions" do
|
189
|
+
Sycsvpro::Table.new(
|
190
|
+
infile: @in_file_revenues,
|
191
|
+
outfile: @out_file,
|
192
|
+
header: "Year,BEGINc1=~/^([A-Z]{1,2})/END,Total",
|
193
|
+
key: "BEGINc0=~/\\d+\\.\\d+\\.(\\d{2,3})/END",
|
194
|
+
cols: "c1=~/^([A-Z]{1,2})/:+n2,Total:+n2",
|
195
|
+
nf: "DE",
|
196
|
+
sum: "top:BEGINc1=~/^([A-Z]{1,2})/END,Total").execute
|
197
|
+
|
198
|
+
result = [ "Year;ZE;ZR;Total",
|
199
|
+
";345.2;3925.73;4270.93",
|
200
|
+
"201;345.2;3925.73;4270.93" ]
|
201
|
+
|
202
|
+
rows = 0
|
203
|
+
|
204
|
+
File.open(@out_file).each_with_index do |line, index|
|
205
|
+
line.chomp.should eq result[index]
|
206
|
+
rows += 1
|
207
|
+
end
|
208
|
+
|
209
|
+
rows.should eq result.size
|
210
|
+
|
211
|
+
end
|
212
|
+
|
213
|
+
|
63
214
|
end
|
64
215
|
|
65
216
|
end
|
data/sycsvpro.rdoc
CHANGED
@@ -7,7 +7,7 @@ SYNOPSIS
|
|
7
7
|
sycsvpro [global options] command [command options] [arguments...]
|
8
8
|
|
9
9
|
VERSION
|
10
|
-
0.1.
|
10
|
+
0.1.7
|
11
11
|
|
12
12
|
GLOBAL OPTIONS
|
13
13
|
-f, --file=FILE - CSV file to operate on (default: none)
|
@@ -20,16 +20,21 @@ COMMANDS
|
|
20
20
|
aggregate - Aggregates the occurences of row values. Optionally adds a sum row
|
21
21
|
allocate - Allocate specified columns from the file to a key value
|
22
22
|
analyze - Analyze the CSV file regarding columns, rows and content
|
23
|
-
calc - Process
|
23
|
+
calc - Process operations on columns. Optionally add a sum row for columns withnumber
|
24
|
+
values
|
24
25
|
collect - Collect values of specified rows and columns from the file and group them in
|
25
26
|
categories
|
26
27
|
count - Counts the occurences of column values. Uses column values as headings with count as
|
27
28
|
values. Columns with a condition will be added as new columns and the condition will
|
28
29
|
be set as column name. Optionally adds a sum row
|
30
|
+
edit - Creates a script/insert file or opens a script/insert file for editing if it exists
|
29
31
|
execute - Executes the code provided in a file
|
30
32
|
extract - Extract specified rows and columns from the file
|
31
33
|
help - Shows a list of commands or help for one command
|
32
34
|
insert - Inserts rows from a file to a csv-file
|
33
|
-
|
35
|
+
join - Join two files based on a joint column value
|
36
|
+
list - Lists script or insert files in the scripts directory with optionally listing
|
37
|
+
methods of script files
|
34
38
|
map - Map values in columns to new values
|
35
|
-
sort - Sort
|
39
|
+
sort - Sort rows based on column values
|
40
|
+
table - Creates a table from a source file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sycsvpro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-06-
|
12
|
+
date: 2014-06-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -142,6 +142,7 @@ files:
|
|
142
142
|
- lib/sycsvpro/filter.rb
|
143
143
|
- lib/sycsvpro/header.rb
|
144
144
|
- lib/sycsvpro/inserter.rb
|
145
|
+
- lib/sycsvpro/join.rb
|
145
146
|
- lib/sycsvpro/mapper.rb
|
146
147
|
- lib/sycsvpro/profiler.rb
|
147
148
|
- lib/sycsvpro/row_filter.rb
|
@@ -164,6 +165,7 @@ files:
|
|
164
165
|
- spec/sycsvpro/files/unsert.ins
|
165
166
|
- spec/sycsvpro/header_spec.rb
|
166
167
|
- spec/sycsvpro/inserter_spec.rb
|
168
|
+
- spec/sycsvpro/join_spec.rb
|
167
169
|
- spec/sycsvpro/mapper_spec.rb
|
168
170
|
- spec/sycsvpro/profiler_spec.rb
|
169
171
|
- spec/sycsvpro/row_filter_spec.rb
|