abstract-tables 1.0.1 → 1.0.2
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/README.textile +40 -6
- data/abstract-tables.gemspec +1 -1
- data/bin/atgrep +6 -7
- data/lib/abtab/filter.rb +4 -0
- data/lib/abtab/filter/grep.rb +1 -23
- metadata +3 -3
data/README.textile
CHANGED
@@ -9,6 +9,8 @@ h2. atcat
|
|
9
9
|
|
10
10
|
<pre>
|
11
11
|
# dump a postgres table to the console (default is tab delimited)
|
12
|
+
atcat dbi://user:pass@Pg/localhost/db_name/table_name | atview | less
|
13
|
+
# if you create an $HOME/.abtab.dbrc (see below), you can omit the user/pass:
|
12
14
|
atcat dbi://pg/localhost/database_name/table_name
|
13
15
|
|
14
16
|
# export a table to a tab file:
|
@@ -41,12 +43,6 @@ atview dbi://pg/localhost/database_name/table_name | less
|
|
41
43
|
atview dbi://pg/localhost/database_name | less
|
42
44
|
</pre>
|
43
45
|
|
44
|
-
h2. atcat
|
45
|
-
|
46
|
-
Limitations: only implemented 'driver' is dbi. Only supported output port is stdout as tab delimited.
|
47
|
-
|
48
|
-
<pre>
|
49
|
-
atcat dbi://user:pass@Pg/localhost/db_name/table_name | atview | less
|
50
46
|
</pre>
|
51
47
|
|
52
48
|
h2. atgrep
|
@@ -55,8 +51,22 @@ Filter a table source by passing an expression, which has access to the record v
|
|
55
51
|
|
56
52
|
<pre>
|
57
53
|
atgrep -e 'r[0] == "this"' test/fixtures/files/file1.csv | atview
|
54
|
+
|
55
|
+
# ruby is mutable, so if you feel like being naughty, you can modify during the grep:
|
56
|
+
atgrep -e 'r[0] = r[0].upcase; r[0] == "THIS"' test/fixtures/files/file1.csv
|
57
|
+
|
58
|
+
# but that's what atmod is for...
|
58
59
|
</pre>
|
59
60
|
|
61
|
+
h2. atcut
|
62
|
+
|
63
|
+
Filter a source, selecting specific columns.
|
64
|
+
|
65
|
+
<pre>
|
66
|
+
# pull only the first and 3rd column:
|
67
|
+
bin/atcut -f 1,3 test/fixtures/files/file1.tab
|
68
|
+
<pre>
|
69
|
+
|
60
70
|
h1. Suported Drivers
|
61
71
|
|
62
72
|
h2. tab
|
@@ -79,6 +89,30 @@ h3. quote_char
|
|
79
89
|
|
80
90
|
Override the default quote_char (").
|
81
91
|
|
92
|
+
h2. dbi
|
93
|
+
|
94
|
+
(only tested with PostgreSQL)
|
95
|
+
|
96
|
+
h3. @$HOME/.abtab.dbrc@
|
97
|
+
|
98
|
+
With the dbi driver, you can create the file @.abtab.dbrc@ in your home directory and include the connection credentails for the databases you commonly use. It must be a YAML file, you can create it from a ruby script or irb with:
|
99
|
+
|
100
|
+
<pre>
|
101
|
+
require 'yaml'
|
102
|
+
|
103
|
+
cfg = {
|
104
|
+
"localhost" => {
|
105
|
+
"database_name" => {
|
106
|
+
"user" => "username",
|
107
|
+
"pass" => "password"
|
108
|
+
}
|
109
|
+
}
|
110
|
+
}
|
111
|
+
File.open("#{ENV['HOME']}/.abtab.dbrc","w") do |f|
|
112
|
+
f.puts cfg.to_yaml
|
113
|
+
end
|
114
|
+
</pre>
|
115
|
+
|
82
116
|
h1. License
|
83
117
|
|
84
118
|
h1. Authors
|
data/abstract-tables.gemspec
CHANGED
data/bin/atgrep
CHANGED
@@ -7,7 +7,8 @@ require 'base_app'
|
|
7
7
|
class GrepApp < BaseApp
|
8
8
|
def command_line_arguments
|
9
9
|
super.concat [
|
10
|
-
['e','expression','Grep Expression',true]
|
10
|
+
['e','expression=s','Grep Expression',true],
|
11
|
+
['v','invert','Invert the predicate']
|
11
12
|
]
|
12
13
|
end
|
13
14
|
|
@@ -19,12 +20,10 @@ class GrepApp < BaseApp
|
|
19
20
|
input_uri = ARGV.shift or raise "You must speicfy a URI to grep"
|
20
21
|
end
|
21
22
|
|
22
|
-
flt = Abtab::Filter::Grep.new input_uri
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
flt.filter_predicate = proc
|
27
|
-
#puts "flt=#{flt}"
|
23
|
+
flt = Abtab::Filter::Grep.new Abtab.read_handle input_uri
|
24
|
+
inv = self.invert ? "!" : ""
|
25
|
+
pred = eval("Proc.new {|r| #{inv}(#{self.expression}) }")
|
26
|
+
flt.filter_predicate = pred
|
28
27
|
|
29
28
|
outp = nil
|
30
29
|
if ARGV.empty?
|
data/lib/abtab/filter.rb
CHANGED
data/lib/abtab/filter/grep.rb
CHANGED
@@ -2,48 +2,26 @@ require 'abtab/filter'
|
|
2
2
|
|
3
3
|
module Abtab
|
4
4
|
class Filter::Grep < Abtab::Filter
|
5
|
-
def initialize url
|
6
|
-
@url = url
|
7
|
-
end
|
8
5
|
|
9
6
|
def filter_predicate= p
|
10
7
|
@filter = p
|
11
8
|
end
|
12
9
|
|
13
|
-
def open_for_reading url=@url
|
14
|
-
@url = url
|
15
|
-
@driver = Abtab.read_handle @url
|
16
|
-
end
|
17
|
-
|
18
10
|
def next_record
|
19
11
|
rec = nil
|
20
|
-
while rec =
|
12
|
+
while rec = driver.next_record
|
21
13
|
if @filter.call(rec)
|
22
14
|
break
|
23
15
|
else
|
24
|
-
#puts "rejecting: #{rec.inspect}"
|
25
16
|
0
|
26
17
|
end
|
27
18
|
end
|
28
19
|
return rec
|
29
20
|
end
|
30
21
|
|
31
|
-
def set_columns cols
|
32
|
-
@driver.set_columns cols
|
33
|
-
end
|
34
|
-
|
35
22
|
def columns
|
36
23
|
@driver.columns
|
37
24
|
end
|
38
25
|
|
39
|
-
def open_for_writing url=@url
|
40
|
-
raise "Error: grep does not support writing."
|
41
|
-
@driver = Abtab.write_handle @url
|
42
|
-
end
|
43
|
-
|
44
|
-
def write_record
|
45
|
-
raise "Error: grep does not support writing."
|
46
|
-
end
|
47
|
-
|
48
26
|
end
|
49
27
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: abstract-tables
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 2
|
10
|
+
version: 1.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Kyle Burton
|