sycsvpro 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +38 -20
- data/README.rdoc +1 -0
- data/bin/sycsvpro +71 -11
- data/html/README_rdoc.html +8 -2
- data/html/Sycsvpro/ColumnTypeFilter.html +187 -0
- data/html/Sycsvpro/Filter.html +21 -5
- data/html/Sycsvpro/Inserter.html +275 -0
- data/html/Sycsvpro/ScriptCreator.html +16 -2
- data/html/Sycsvpro/ScriptList.html +7 -3
- data/html/Sycsvpro/Sorter.html +323 -0
- data/html/Sycsvpro.html +6 -0
- data/html/created.rid +12 -9
- data/html/index.html +14 -2
- data/html/js/search_index.js +1 -1
- data/html/table_of_contents.html +66 -32
- data/lib/sycsvpro/column_type_filter.rb +38 -0
- data/lib/sycsvpro/filter.rb +19 -0
- data/lib/sycsvpro/inserter.rb +40 -0
- data/lib/sycsvpro/script_creator.rb +10 -5
- data/lib/sycsvpro/script_list.rb +6 -2
- data/lib/sycsvpro/sorter.rb +62 -0
- data/lib/sycsvpro/version.rb +1 -1
- data/lib/sycsvpro.rb +2 -0
- data/spec/sycsvpro/allocator_spec.rb +2 -2
- data/spec/sycsvpro/files/insert.ins +1 -0
- data/spec/sycsvpro/files/unsert.ins +2 -0
- data/spec/sycsvpro/inserter_spec.rb +56 -0
- data/spec/sycsvpro/script_list_spec.rb +27 -0
- data/spec/sycsvpro/sorter_spec.rb +184 -0
- data/sycsvpro.rdoc +3 -1
- metadata +12 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 39f66722b9a55455e899ca7a011b6d562f77854a
|
4
|
+
data.tar.gz: 49ad0894d735625b689e904bedc50d551271ad7c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b9761749882a98ab040eaba00e2e80c856341ead1b19cf2b897eb4a5a851af90740cd79bd2804f0c461ed87526a313a555b3877f11cf1a2902f1b1fcd1f8aaee
|
7
|
+
data.tar.gz: 61654ae343a83fdfb87f531aa0c62c36eec85fd9aa0257863d99bfdbfeaff311e645d808782d48779c61b26a5acf015692aa71d2cf1c32b745b4065925c5962a
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -3,15 +3,17 @@ syc-svpro
|
|
3
3
|
|
4
4
|
Processing of csv files. *sycsvpro* offers following functions
|
5
5
|
|
6
|
-
* analyze csv file
|
6
|
+
* analyze a csv file
|
7
7
|
* extract rows and columns from a file
|
8
8
|
* collect values of rows and assign them to categories
|
9
9
|
* map column values to new values
|
10
10
|
* allocate column values to a key column (since version 0.0.4)
|
11
11
|
* count values in columns and use the value as column name
|
12
12
|
* arithmetic operations on values of columns
|
13
|
+
* sort rows base on columns
|
14
|
+
* insert rows to a csv-file (since version 0.0.8)
|
13
15
|
* create or edit a Ruby script
|
14
|
-
* list scripts available optionally with methods
|
16
|
+
* list scripts available optionally with methods (since version 0.0.7)
|
15
17
|
* execute a Ruby script file that operates a csv file
|
16
18
|
|
17
19
|
To get help type
|
@@ -22,16 +24,15 @@ In the following examples we assume the following file
|
|
22
24
|
|
23
25
|
```
|
24
26
|
customer;machine;control;drive;motor;date;contract
|
25
|
-
hello;h1;con123;dri120;mot100;1.
|
26
|
-
hello;h2;con123;dri130;mot110;1.
|
27
|
-
indix;i1;con456;dri130;mot090;
|
28
|
-
chiro;c1;con333;dri110;mot100;1.
|
29
|
-
chiro;c2;con331;dri100;mot130;
|
27
|
+
hello;h1;con123;dri120;mot100;1.01.3013;1
|
28
|
+
hello;h2;con123;dri130;mot110;1.02.3012;1
|
29
|
+
indix;i1;con456;dri130;mot090;5.11.3013;1
|
30
|
+
chiro;c1;con333;dri110;mot100;1.10.3011;1
|
31
|
+
chiro;c2;con331;dri100;mot130;3.05.3010;1
|
30
32
|
```
|
31
33
|
|
32
34
|
Analyze
|
33
35
|
-------
|
34
|
-
|
35
36
|
Analyze the content of the provided file *in.csv*
|
36
37
|
|
37
38
|
$ sycsvpro -f in.csv analyze
|
@@ -50,14 +51,12 @@ Analyze the content of the provided file *in.csv*
|
|
50
51
|
|
51
52
|
Extract
|
52
53
|
-------
|
53
|
-
|
54
54
|
Extract row 1,2 and 10-20 as well as columns 4 and 6-7
|
55
55
|
|
56
56
|
$ sycsvpro -f in.csv -o out.csv extract -r 1,2,10-20 -c 4,6-7
|
57
57
|
|
58
58
|
Collect
|
59
59
|
-------
|
60
|
-
|
61
60
|
Collect all product rows (2, 3 and 4) to the category product
|
62
61
|
|
63
62
|
$ sycsvpro -f in.csv -o out.csv collect -r 2-20 -c products:2-4
|
@@ -78,7 +77,6 @@ Collect all product rows (2, 3 and 4) to the category product
|
|
78
77
|
|
79
78
|
Map
|
80
79
|
---
|
81
|
-
|
82
80
|
Map the product names to new names
|
83
81
|
|
84
82
|
The mapping file (mapping) uses the result from the collect command above
|
@@ -110,7 +108,6 @@ Allocate all the machine types to the customer
|
|
110
108
|
|
111
109
|
Count
|
112
110
|
-----
|
113
|
-
|
114
111
|
Count all customers (key column) in rows 2 to 20 that have machines that start with *h* and have a contract valid beginning after 1.1.2000. Add a sum row with title Total at column 1
|
115
112
|
|
116
113
|
$ sycsvpro -f in.csv -o out.csv count -r 2-20 -k 0 -c 1:/^h/,5:">1.1.2000" --df "%d.%m.%Y" -s "Total:1"
|
@@ -126,18 +123,35 @@ The result in file out.csv is
|
|
126
123
|
|
127
124
|
Calc
|
128
125
|
----
|
129
|
-
|
130
126
|
Process arithmetic operations on the contract count and create a target column
|
131
127
|
|
132
128
|
$ sycsvpro -f in.csv -o out.csv calc -r 2-20 -h *,target -c 6:*2,7:target=c6*10
|
133
129
|
|
134
130
|
$ cat out.csv
|
135
131
|
customer;machine;control;drive;motor;date;contract;target
|
136
|
-
hello;h1;con123;dri120;mot100;1.
|
137
|
-
hello;h2;con123;dri130;mot110;1.
|
138
|
-
indix;i1;con456;dri130;mot090;
|
139
|
-
chiro;c1;con333;dri110;mot100;1.
|
140
|
-
chiro;c2;con331;dri100;mot130;
|
132
|
+
hello;h1;con123;dri120;mot100;1.01.3013;1
|
133
|
+
hello;h2;con123;dri130;mot110;1.02.3012;1
|
134
|
+
indix;i1;con456;dri130;mot090;5.11.3013;1
|
135
|
+
chiro;c1;con333;dri110;mot100;1.10.3011;1
|
136
|
+
chiro;c2;con331;dri100;mot130;3.05.3010;1
|
137
|
+
|
138
|
+
Sort
|
139
|
+
----
|
140
|
+
Sort rows on specified columns as an example sort rows based on customer (string s) and contract date (date d)
|
141
|
+
|
142
|
+
$ sycsvpro -f in.csv -o out.csv sort -r 2-20 -c s:0,d:5
|
143
|
+
|
144
|
+
hello;h2;con123;dri130;mot110;1.02.3012;1
|
145
|
+
hello;h1;con123;dri120;mot100;1.01.3013;1
|
146
|
+
indix;i1;con456;dri130;mot090;5.11.3013;1
|
147
|
+
chiro;c2;con331;dri100;mot130;3.05.3010;1
|
148
|
+
chiro;c1;con333;dri110;mot100;1.10.3011;1
|
149
|
+
|
150
|
+
Insert
|
151
|
+
------
|
152
|
+
Add rows at the bottom or on top of a file. The command below adds the content of the file file-with-rows-to-insert.text on top of the file in.csv and saves it to out.csv
|
153
|
+
|
154
|
+
$ sycsvpro -f in.csv -o out.csv insert file-with-rows-to-insert.txt -p top
|
141
155
|
|
142
156
|
Edit
|
143
157
|
----
|
@@ -147,7 +161,7 @@ Creates or if it exists opens a file for editing. The file is created in the dir
|
|
147
161
|
|
148
162
|
List
|
149
163
|
----
|
150
|
-
List the scripts available in the scripts directory
|
164
|
+
List the scripts or insert-file available in the scripts directory
|
151
165
|
|
152
166
|
$ sycsvpro list -m
|
153
167
|
script.rb
|
@@ -155,7 +169,6 @@ List the scripts available in the scripts directory
|
|
155
169
|
|
156
170
|
Execute
|
157
171
|
-------
|
158
|
-
|
159
172
|
Execute takes a Ruby script file as an argument and processes the script. The following command executes the script *script.rb* and invokes the method *calc*
|
160
173
|
|
161
174
|
$ sycsvpro execute ./script.rb calc
|
@@ -212,5 +225,10 @@ A work flow could be as follows
|
|
212
225
|
* Extract rows and columns of interest `extract`
|
213
226
|
* Count values `count`
|
214
227
|
* Do arithmetic operations on the values `calc`
|
228
|
+
* Sort the rows based on column values
|
215
229
|
|
216
230
|
When I have analyzed the data I use _Microsoft Excel_ or _LibreOffice Calc_ to create nice graphs. To create more sophisiticated analysis *R* is the right tool to use.
|
231
|
+
|
232
|
+
Installation
|
233
|
+
============
|
234
|
+
[![Gem Version](https://badge.fury.io/rb/sycsvpro.png)](http://badge.fury.io/rb/sycsvpro)
|
data/README.rdoc
CHANGED
@@ -6,6 +6,7 @@ License:: Distributed uder the MIT license, see LICENSE in the source distro
|
|
6
6
|
|
7
7
|
The application provides an interface for analyzing, cleaning and operating on csv files
|
8
8
|
|
9
|
+
{<img src="https://badge.fury.io/rb/sycsvpro.png" alt="Gem Version" />}[http://badge.fury.io/rb/sycsvpro]
|
9
10
|
|
10
11
|
== Install
|
11
12
|
|
data/bin/sycsvpro
CHANGED
@@ -114,14 +114,13 @@ command :allocate do |c|
|
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
117
|
-
desc 'Creates a script file or opens a script file for editing if it exists'
|
117
|
+
desc 'Creates a script/insert file or opens a script/insert file for editing if it exists'
|
118
118
|
command :edit do |c|
|
119
|
-
c.desc 'Name of the script file'
|
120
|
-
c.
|
121
|
-
c.
|
122
|
-
c.flag [:s, :script], :must_match => /^\w+\.rb/
|
119
|
+
c.desc 'Name of the script/insert file'
|
120
|
+
c.arg_name 'SCRIPT_NAME.rb|INSERT_NAME.ins'
|
121
|
+
c.flag [:s, :script], :must_match => /^\w+\.rb|^\w+\.ins/
|
123
122
|
|
124
|
-
c.desc 'Method to create'
|
123
|
+
c.desc 'Method to create in combination with a script file'
|
125
124
|
c.arg_name 'METHOD_NAME'
|
126
125
|
c.flag [:m, :method], :must_match => /^\w+/
|
127
126
|
|
@@ -132,17 +131,22 @@ command :edit do |c|
|
|
132
131
|
end
|
133
132
|
end
|
134
133
|
|
135
|
-
desc 'Lists
|
134
|
+
desc 'Lists script or insert files in the scripts directory with optionally listing methods of script files'
|
136
135
|
command :list do |c|
|
136
|
+
c.desc 'Type of script (Ruby or insert file)'
|
137
|
+
c.default_value 'script'
|
138
|
+
c.arg_name 'SCRIPT|INSERT'
|
139
|
+
c.flag [:t, :type], :must_match => /script|insert/i
|
140
|
+
|
137
141
|
c.desc 'Name of the script file'
|
138
|
-
c.arg_name 'SCRIPT_NAME.rb'
|
139
|
-
c.flag [:s, :script], :must_match => /^\w+\.rb/
|
142
|
+
c.arg_name 'SCRIPT_NAME.rb|INSERT_NAME.ins'
|
143
|
+
c.flag [:s, :script], :must_match => /^\w+\.rb|^\w+\.ins/
|
140
144
|
|
141
145
|
c.desc 'Show methods'
|
142
146
|
c.switch [:m, :method]
|
143
147
|
|
144
148
|
c.action do |global_options,options,args|
|
145
|
-
script_list = Sycsvpro::ScriptList.new(dir: script_directory,
|
149
|
+
script_list = Sycsvpro::ScriptList.new(dir: script_directory, type: options[:t],
|
146
150
|
script: options[:s], show_methods: options[:m])
|
147
151
|
|
148
152
|
scripts = script_list.execute
|
@@ -213,6 +217,59 @@ command :count do |c|
|
|
213
217
|
counter.execute
|
214
218
|
puts "done"
|
215
219
|
end
|
220
|
+
|
221
|
+
end
|
222
|
+
|
223
|
+
desc 'Sort rows based on column values'
|
224
|
+
command :sort do |c|
|
225
|
+
c.desc 'Rows to consider'
|
226
|
+
c.arg_name '1,2,10-30|REGEXP'
|
227
|
+
c.flag [:r, :row], :must_match => /\d+(?:,\d+|-\d+|,\/.*\/)*|\/.*\/(?:,\/.*\/|\d+)*/
|
228
|
+
|
229
|
+
c.desc 'Columns to sort based on a type (n = number, s = string, d = date) and its value'
|
230
|
+
c.arg_name 'n:1,s:2-5,d:7'
|
231
|
+
c.flag [:c, :col], :must_match => /[d|n|s]:\d+(?:-\d+|,[d|n|s]:\d+)*/
|
232
|
+
|
233
|
+
c.desc 'Format of date values'
|
234
|
+
c.arg_name '%d.%m.%Y|%m/%d/%Y|...'
|
235
|
+
c.default_value '%Y-%m-%d'
|
236
|
+
c.flag [:df]
|
237
|
+
|
238
|
+
c.desc 'Sort order descending - default ascending'
|
239
|
+
c.switch [:d, :desc]
|
240
|
+
|
241
|
+
c.action do |global_options,options,args|
|
242
|
+
sorter = Sycsvpro::Sorter.new(infile: global_options[:f], outfile: global_options[:o],
|
243
|
+
rows: options[:r], cols: options[:c], df: options[:df],
|
244
|
+
desc: options[:d])
|
245
|
+
print 'Sorting...'
|
246
|
+
sorter.execute
|
247
|
+
print 'done'
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
desc 'Inserts rows from a file to a csv-file'
|
252
|
+
arg_name 'INSERT_FILE'
|
253
|
+
command :insert do |c|
|
254
|
+
|
255
|
+
c.desc 'Position TOP or BOTTOM where to insert the rows'
|
256
|
+
c.default_value 'top'
|
257
|
+
c.arg_name 'top|bottom'
|
258
|
+
c.flag [:p, :position], :must_match => /^top|^bottom/i
|
259
|
+
|
260
|
+
c.action do |global_options,options,args|
|
261
|
+
help_now! "You need to provide an insert file" if args.size == 0
|
262
|
+
|
263
|
+
insert_file = File.expand_path(args[0])
|
264
|
+
insert_file = File.join(script_directory, args[0]) unless File.exists? insert_file
|
265
|
+
help_now! "Insert file #{insert_file} doesn't exist!" unless File.exists? insert_file
|
266
|
+
|
267
|
+
print "Inserting..."
|
268
|
+
inserter = Sycsvpro::Inserter.new(infile: global_options[:f], outfile: global_options[:o],
|
269
|
+
insert: insert_file, position: options[:p])
|
270
|
+
inserter.execute
|
271
|
+
puts "done"
|
272
|
+
end
|
216
273
|
end
|
217
274
|
|
218
275
|
desc 'Map values in columns to new values'
|
@@ -275,7 +332,7 @@ pre do |global,command,options,args|
|
|
275
332
|
case command.name
|
276
333
|
when :analyze
|
277
334
|
help_now! "You need to provide an input file '-f FILE'" if global[:f].nil?
|
278
|
-
when :allocate, :calc, :collect, :count, :extract, :map
|
335
|
+
when :allocate, :calc, :collect, :count, :extract, :map, :sort
|
279
336
|
help_now! "You need to provide an input file '-f FILE'" if global[:f].nil?
|
280
337
|
help_now! "You need to provide a result file '-o OUT_FILE'" if global[:o].nil?
|
281
338
|
end
|
@@ -290,10 +347,12 @@ pre do |global,command,options,args|
|
|
290
347
|
|
291
348
|
# Creates statistics on the command operation
|
292
349
|
Stats = Struct.new(:command, :start, :end, :count) do
|
350
|
+
# Calcualates the total duration
|
293
351
|
def duration
|
294
352
|
self.end - self.start
|
295
353
|
end
|
296
354
|
|
355
|
+
# Calculates the average time per row processing
|
297
356
|
def average
|
298
357
|
if count > 0
|
299
358
|
(self.end - self.start) * 1000 / self.count
|
@@ -302,6 +361,7 @@ pre do |global,command,options,args|
|
|
302
361
|
end
|
303
362
|
end
|
304
363
|
|
364
|
+
# Prints the statistics
|
305
365
|
def to_s
|
306
366
|
if count > 0
|
307
367
|
sprintf("%s %.5f %s %d %s %.5f %s", "'#{self.command}' has run",
|
data/html/README_rdoc.html
CHANGED
@@ -99,6 +99,9 @@ href="mailto:pierre@sugaryourcoffee.de">pierre@sugaryourcoffee.de</a>)</p>
|
|
99
99
|
<p>The application provides an interface for analyzing, cleaning and operating
|
100
100
|
on csv files</p>
|
101
101
|
|
102
|
+
<p><a href="http://badge.fury.io/rb/sycsvpro"><img
|
103
|
+
src="https://badge.fury.io/rb/sycsvpro.png" alt="Gem Version" /></a></p>
|
104
|
+
|
102
105
|
<h2 id="label-Install">Install<span><a href="#label-Install">¶</a> <a href="#documentation">↑</a></span></h2>
|
103
106
|
|
104
107
|
<p>Install:</p>
|
@@ -144,7 +147,7 @@ bin</pre>
|
|
144
147
|
|
145
148
|
<p>VERSION</p>
|
146
149
|
|
147
|
-
<pre>0.0.
|
150
|
+
<pre>0.0.8</pre>
|
148
151
|
|
149
152
|
<p>GLOBAL OPTIONS</p>
|
150
153
|
|
@@ -166,7 +169,10 @@ count - Counts the occurences of column values. Uses column values as heading
|
|
166
169
|
execute - Executes the code provided in a file
|
167
170
|
extract - Extract specified rows and columns from the file
|
168
171
|
help - Shows a list of commands or help for one command
|
169
|
-
|
172
|
+
insert - Inserts rows from a file to a csv-file
|
173
|
+
list - List scripts in the scripts directory with optionally listing methods
|
174
|
+
map - Map values in columns to new values
|
175
|
+
sort - Sort columns based on column values</pre>
|
170
176
|
</main>
|
171
177
|
|
172
178
|
|
@@ -0,0 +1,187 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
|
3
|
+
<html>
|
4
|
+
<head>
|
5
|
+
<meta charset="UTF-8">
|
6
|
+
|
7
|
+
<title>class Sycsvpro::ColumnTypeFilter - Your application title</title>
|
8
|
+
|
9
|
+
<link href="../fonts.css" rel="stylesheet">
|
10
|
+
<link href="../rdoc.css" rel="stylesheet">
|
11
|
+
|
12
|
+
<script type="text/javascript">
|
13
|
+
var rdoc_rel_prefix = "../";
|
14
|
+
</script>
|
15
|
+
|
16
|
+
<script src="../js/jquery.js"></script>
|
17
|
+
<script src="../js/navigation.js"></script>
|
18
|
+
<script src="../js/search_index.js"></script>
|
19
|
+
<script src="../js/search.js"></script>
|
20
|
+
<script src="../js/searcher.js"></script>
|
21
|
+
<script src="../js/darkfish.js"></script>
|
22
|
+
|
23
|
+
|
24
|
+
<body id="top" role="document" class="class">
|
25
|
+
<nav role="navigation">
|
26
|
+
<div id="project-navigation">
|
27
|
+
<div id="home-section" role="region" title="Quick navigation" class="nav-section">
|
28
|
+
<h2>
|
29
|
+
<a href="../index.html" rel="home">Home</a>
|
30
|
+
</h2>
|
31
|
+
|
32
|
+
<div id="table-of-contents-navigation">
|
33
|
+
<a href="../table_of_contents.html#pages">Pages</a>
|
34
|
+
<a href="../table_of_contents.html#classes">Classes</a>
|
35
|
+
<a href="../table_of_contents.html#methods">Methods</a>
|
36
|
+
</div>
|
37
|
+
</div>
|
38
|
+
|
39
|
+
<div id="search-section" role="search" class="project-section initially-hidden">
|
40
|
+
<form action="#" method="get" accept-charset="utf-8">
|
41
|
+
<div id="search-field-wrapper">
|
42
|
+
<input id="search-field" role="combobox" aria-label="Search"
|
43
|
+
aria-autocomplete="list" aria-controls="search-results"
|
44
|
+
type="text" name="search" placeholder="Search" spellcheck="false"
|
45
|
+
title="Type to search, Up and Down to navigate, Enter to load">
|
46
|
+
</div>
|
47
|
+
|
48
|
+
<ul id="search-results" aria-label="Search Results"
|
49
|
+
aria-busy="false" aria-expanded="false"
|
50
|
+
aria-atomic="false" class="initially-hidden"></ul>
|
51
|
+
</form>
|
52
|
+
</div>
|
53
|
+
|
54
|
+
</div>
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
<div id="class-metadata">
|
59
|
+
|
60
|
+
<div id="parent-class-section" class="nav-section">
|
61
|
+
<h3>Parent</h3>
|
62
|
+
|
63
|
+
|
64
|
+
<p class="link"><a href="ColumnFilter.html">Sycsvpro::ColumnFilter</a>
|
65
|
+
|
66
|
+
</div>
|
67
|
+
|
68
|
+
|
69
|
+
|
70
|
+
<!-- Method Quickref -->
|
71
|
+
<div id="method-list-section" class="nav-section">
|
72
|
+
<h3>Methods</h3>
|
73
|
+
|
74
|
+
<ul class="link-list" role="directory">
|
75
|
+
|
76
|
+
<li class="calls-super" ><a href="#method-i-process">#process</a>
|
77
|
+
|
78
|
+
</ul>
|
79
|
+
</div>
|
80
|
+
|
81
|
+
</div>
|
82
|
+
</nav>
|
83
|
+
|
84
|
+
<main role="main" aria-labelledby="class-Sycsvpro::ColumnTypeFilter">
|
85
|
+
<h1 id="class-Sycsvpro::ColumnTypeFilter" class="class">
|
86
|
+
class Sycsvpro::ColumnTypeFilter
|
87
|
+
</h1>
|
88
|
+
|
89
|
+
<section class="description">
|
90
|
+
|
91
|
+
<p>Create a filter based on a colum and its type</p>
|
92
|
+
|
93
|
+
</section>
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
<section id="5Buntitled-5D" class="documentation-section">
|
99
|
+
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
|
108
|
+
<section id="public-instance-5Buntitled-5D-method-details" class="method-section">
|
109
|
+
<header>
|
110
|
+
<h3>Public Instance Methods</h3>
|
111
|
+
</header>
|
112
|
+
|
113
|
+
|
114
|
+
<div id="method-i-process" class="method-detail ">
|
115
|
+
|
116
|
+
<div class="method-heading">
|
117
|
+
<span class="method-name">process</span><span
|
118
|
+
class="method-args">(object, options={})</span>
|
119
|
+
|
120
|
+
<span class="method-click-advice">click to toggle source</span>
|
121
|
+
|
122
|
+
</div>
|
123
|
+
|
124
|
+
|
125
|
+
<div class="method-description">
|
126
|
+
|
127
|
+
<p>Processes the filter and returns the filtered columns</p>
|
128
|
+
|
129
|
+
|
130
|
+
<div class="method-calls-super">
|
131
|
+
Calls superclass method
|
132
|
+
<a href="ColumnFilter.html#method-i-process">Sycsvpro::ColumnFilter#process</a>
|
133
|
+
</div>
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
<div class="method-source-code" id="process-source">
|
138
|
+
<pre><span class="ruby-comment"># File lib/sycsvpro/column_type_filter.rb, line 8</span>
|
139
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">process</span>(<span class="ruby-identifier">object</span>, <span class="ruby-identifier">options</span>={})
|
140
|
+
<span class="ruby-identifier">filtered</span> = <span class="ruby-keyword">super</span>(<span class="ruby-identifier">object</span>, <span class="ruby-identifier">options</span>)
|
141
|
+
|
142
|
+
<span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">filtered</span>.<span class="ruby-identifier">nil?</span>
|
143
|
+
|
144
|
+
<span class="ruby-identifier">values</span> = <span class="ruby-identifier">filtered</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">';'</span>)
|
145
|
+
|
146
|
+
<span class="ruby-identifier">values</span>.<span class="ruby-identifier">each_with_index</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">value</span>, <span class="ruby-identifier">index</span><span class="ruby-operator">|</span>
|
147
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">types</span>[<span class="ruby-identifier">index</span>] <span class="ruby-operator">==</span> <span class="ruby-string">'n'</span>
|
148
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">value</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/\./</span>
|
149
|
+
<span class="ruby-identifier">number_value</span> = <span class="ruby-identifier">value</span>.<span class="ruby-identifier">to_f</span>
|
150
|
+
<span class="ruby-keyword">else</span>
|
151
|
+
<span class="ruby-identifier">number_value</span> = <span class="ruby-identifier">value</span>.<span class="ruby-identifier">to_i</span>
|
152
|
+
<span class="ruby-keyword">end</span>
|
153
|
+
<span class="ruby-identifier">values</span>[<span class="ruby-identifier">index</span>] = <span class="ruby-identifier">number_value</span>
|
154
|
+
<span class="ruby-keyword">elsif</span> <span class="ruby-identifier">types</span>[<span class="ruby-identifier">index</span>] <span class="ruby-operator">==</span> <span class="ruby-string">'d'</span>
|
155
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">value</span>.<span class="ruby-identifier">empty?</span>
|
156
|
+
<span class="ruby-identifier">date</span> = <span class="ruby-constant">Date</span>.<span class="ruby-identifier">strptime</span>(<span class="ruby-string">'9999-9-9'</span>, <span class="ruby-string">'%Y-%m-%d'</span>)
|
157
|
+
<span class="ruby-keyword">else</span>
|
158
|
+
<span class="ruby-identifier">date</span> = <span class="ruby-constant">Date</span>.<span class="ruby-identifier">strptime</span>(<span class="ruby-identifier">value</span>, <span class="ruby-identifier">date_format</span>)
|
159
|
+
<span class="ruby-keyword">end</span>
|
160
|
+
<span class="ruby-identifier">values</span>[<span class="ruby-identifier">index</span>] = <span class="ruby-identifier">date</span>
|
161
|
+
<span class="ruby-keyword">end</span>
|
162
|
+
<span class="ruby-keyword">end</span>
|
163
|
+
|
164
|
+
<span class="ruby-identifier">values</span>
|
165
|
+
<span class="ruby-keyword">end</span></pre>
|
166
|
+
</div>
|
167
|
+
|
168
|
+
</div>
|
169
|
+
|
170
|
+
|
171
|
+
|
172
|
+
|
173
|
+
</div>
|
174
|
+
|
175
|
+
|
176
|
+
</section>
|
177
|
+
|
178
|
+
</section>
|
179
|
+
</main>
|
180
|
+
|
181
|
+
|
182
|
+
<footer id="validator-badges" role="contentinfo">
|
183
|
+
<p><a href="http://validator.w3.org/check/referer">Validate</a>
|
184
|
+
<p>Generated by <a href="http://rdoc.rubyforge.org">RDoc</a> 4.1.1.
|
185
|
+
<p>Based on <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
|
186
|
+
</footer>
|
187
|
+
|
data/html/Sycsvpro/Filter.html
CHANGED
@@ -170,6 +170,19 @@ to override the process method</p>
|
|
170
170
|
</div>
|
171
171
|
</div>
|
172
172
|
|
173
|
+
<div id="attribute-i-types" class="method-detail">
|
174
|
+
<div class="method-heading attribute-method-heading">
|
175
|
+
<span class="method-name">types</span><span
|
176
|
+
class="attribute-access-type">[R]</span>
|
177
|
+
</div>
|
178
|
+
|
179
|
+
<div class="method-description">
|
180
|
+
|
181
|
+
<p>Type of column (n = number, s = string)</p>
|
182
|
+
|
183
|
+
</div>
|
184
|
+
</div>
|
185
|
+
|
173
186
|
</section>
|
174
187
|
|
175
188
|
|
@@ -199,10 +212,11 @@ to override the process method</p>
|
|
199
212
|
|
200
213
|
|
201
214
|
<div class="method-source-code" id="new-source">
|
202
|
-
<pre><span class="ruby-comment"># File lib/sycsvpro/filter.rb, line
|
215
|
+
<pre><span class="ruby-comment"># File lib/sycsvpro/filter.rb, line 22</span>
|
203
216
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">values</span>, <span class="ruby-identifier">options</span>={})
|
204
217
|
<span class="ruby-ivar">@date_format</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:df</span>] <span class="ruby-operator">||</span> <span class="ruby-string">"%Y-%m-%d"</span>
|
205
218
|
<span class="ruby-ivar">@filter</span> = []
|
219
|
+
<span class="ruby-ivar">@types</span> = []
|
206
220
|
<span class="ruby-ivar">@pattern</span> = []
|
207
221
|
<span class="ruby-ivar">@pivot</span> = {}
|
208
222
|
<span class="ruby-identifier">create_filter</span>(<span class="ruby-identifier">values</span>)
|
@@ -245,7 +259,7 @@ otherwise false</p>
|
|
245
259
|
|
246
260
|
|
247
261
|
<div class="method-source-code" id="has_filter-3F-source">
|
248
|
-
<pre><span class="ruby-comment"># File lib/sycsvpro/filter.rb, line
|
262
|
+
<pre><span class="ruby-comment"># File lib/sycsvpro/filter.rb, line 64</span>
|
249
263
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">has_filter?</span>
|
250
264
|
<span class="ruby-keyword">return</span> <span class="ruby-operator">!</span>(<span class="ruby-identifier">filter</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">pattern</span>.<span class="ruby-identifier">empty?</span>)
|
251
265
|
<span class="ruby-keyword">end</span></pre>
|
@@ -283,10 +297,12 @@ otherwise false</p>
|
|
283
297
|
|
284
298
|
|
285
299
|
<div class="method-source-code" id="method_missing-source">
|
286
|
-
<pre><span class="ruby-comment"># File lib/sycsvpro/filter.rb, line
|
300
|
+
<pre><span class="ruby-comment"># File lib/sycsvpro/filter.rb, line 32</span>
|
287
301
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">method_missing</span>(<span class="ruby-identifier">id</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
|
288
302
|
<span class="ruby-keyword">return</span> <span class="ruby-identifier">equal</span>(<span class="ruby-node">$1</span>, <span class="ruby-identifier">args</span>, <span class="ruby-identifier">block</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">id</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^(\d+)$/</span>
|
303
|
+
<span class="ruby-keyword">return</span> <span class="ruby-identifier">equal_type</span>(<span class="ruby-node">$1</span>, <span class="ruby-node">$2</span>, <span class="ruby-identifier">args</span>, <span class="ruby-identifier">block</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">id</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^(s|n|d):(\d+)$/</span>
|
289
304
|
<span class="ruby-keyword">return</span> <span class="ruby-identifier">range</span>(<span class="ruby-node">$1</span>, <span class="ruby-node">$2</span>, <span class="ruby-identifier">args</span>, <span class="ruby-identifier">block</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">id</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^(\d+)-(\d+)$/</span>
|
305
|
+
<span class="ruby-keyword">return</span> <span class="ruby-identifier">range_type</span>(<span class="ruby-node">$1</span>, <span class="ruby-node">$2</span>, <span class="ruby-node">$3</span>, <span class="ruby-identifier">args</span>, <span class="ruby-identifier">block</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">id</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^(s|n|d):(\d+)-(\d+)$/</span>
|
290
306
|
<span class="ruby-keyword">return</span> <span class="ruby-identifier">regex</span>(<span class="ruby-node">$1</span>, <span class="ruby-identifier">args</span>, <span class="ruby-identifier">block</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">id</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^\/(.*)\/$/</span>
|
291
307
|
<span class="ruby-keyword">return</span> <span class="ruby-identifier">col_regex</span>(<span class="ruby-node">$1</span>, <span class="ruby-node">$2</span>, <span class="ruby-identifier">args</span>, <span class="ruby-identifier">block</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">id</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^(\d+):\/(.*)\/$/</span>
|
292
308
|
<span class="ruby-keyword">return</span> <span class="ruby-identifier">date</span>(<span class="ruby-node">$1</span>, <span class="ruby-node">$2</span>, <span class="ruby-node">$3</span>, <span class="ruby-identifier">args</span>, <span class="ruby-identifier">block</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">id</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^(\d+):(<|=|>)(\d+.\d+.\d+)/</span>
|
@@ -322,7 +338,7 @@ otherwise false</p>
|
|
322
338
|
|
323
339
|
|
324
340
|
<div class="method-source-code" id="pivot_each_column-source">
|
325
|
-
<pre><span class="ruby-comment"># File lib/sycsvpro/filter.rb, line
|
341
|
+
<pre><span class="ruby-comment"># File lib/sycsvpro/filter.rb, line 50</span>
|
326
342
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">pivot_each_column</span>(<span class="ruby-identifier">values</span>=[])
|
327
343
|
<span class="ruby-identifier">pivot</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">column</span>, <span class="ruby-identifier">parameters</span><span class="ruby-operator">|</span>
|
328
344
|
<span class="ruby-identifier">value</span> = <span class="ruby-identifier">values</span>[<span class="ruby-identifier">parameters</span>[<span class="ruby-value">:col</span>].<span class="ruby-identifier">to_i</span>]
|
@@ -364,7 +380,7 @@ otherwise false</p>
|
|
364
380
|
|
365
381
|
|
366
382
|
<div class="method-source-code" id="process-source">
|
367
|
-
<pre><span class="ruby-comment"># File lib/sycsvpro/filter.rb, line
|
383
|
+
<pre><span class="ruby-comment"># File lib/sycsvpro/filter.rb, line 45</span>
|
368
384
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">process</span>(<span class="ruby-identifier">object</span>, <span class="ruby-identifier">options</span>={})
|
369
385
|
<span class="ruby-identifier">raise</span> <span class="ruby-string">'Needs to be overridden by sub class'</span>
|
370
386
|
<span class="ruby-keyword">end</span></pre>
|