abstract-tables 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.textile CHANGED
@@ -31,12 +31,14 @@ atcat some-file.csv some-file.tab
31
31
  atcat csv://some-file.csv 'tab://some-file.tab?col_sep=|'
32
32
  </pre>
33
33
 
34
- h2. rec-view
34
+ h2. atview
35
35
 
36
36
  <pre>
37
- rec-view tab://some-file.tab | less
38
- rec-view csv://some-file.csv | less
39
- rec-view dbi://Pg/some-file.csv | less
37
+ atview tab://some-file.tab | less
38
+ atview csv://some-file.csv | less
39
+ atview dbi://pg/localhost/database_name/table_name | less
40
+ # view a list of tables:
41
+ atview dbi://pg/localhost/database_name | less
40
42
  </pre>
41
43
 
42
44
  h2. atcat
@@ -44,7 +46,15 @@ h2. atcat
44
46
  Limitations: only implemented 'driver' is dbi. Only supported output port is stdout as tab delimited.
45
47
 
46
48
  <pre>
47
- atcat dbi://user:pass@Pg/localhost/db_name/table_name | rec-view | less
49
+ atcat dbi://user:pass@Pg/localhost/db_name/table_name | atview | less
50
+ </pre>
51
+
52
+ h2. atgrep
53
+
54
+ Filter a table source by passing an expression, which has access to the record via the var @r@:
55
+
56
+ <pre>
57
+ atgrep -e 'r[0] == "this"' test/fixtures/files/file1.csv | atview
48
58
  </pre>
49
59
 
50
60
  h1. Suported Drivers
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
 
3
3
  SPEC = Gem::Specification.new do |s|
4
4
  s.name = "abstract-tables"
5
- s.version = "1.0.0"
5
+ s.version = "1.0.1"
6
6
  s.date = '2011-02-09'
7
7
  s.authors = ["Kyle Burton"]
8
8
  s.email = "kyle.burton@gmail.com"
@@ -22,15 +22,17 @@ DESC
22
22
  s.summary = "Table Abstraction as a URI : Record Streams, Filters, ETL Ginsu"
23
23
  s.homepage = "http://github.com/kyleburton/abstract-tables"
24
24
  s.files = %w[
25
- abstract-tables-1.0.0.gem
26
25
  abstract-tables.gemspec
27
26
  bin/atcat
28
27
  bin/atview
28
+ bin/atgrep
29
29
  introducing-abtab/README.textile
30
30
  lib/abtab/driver.rb
31
31
  lib/abtab/drivers/csv_driver.rb
32
32
  lib/abtab/drivers/dbi_driver.rb
33
33
  lib/abtab/drivers/tab_driver.rb
34
+ lib/abtab/filter/grep.rb
35
+ lib/abtab/filter.rb
34
36
  lib/abtab.rb
35
37
  README.textile
36
38
  test/fixtures/files/file1.csv
data/bin/atgrep ADDED
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'
3
+ require 'abtab'
4
+ require 'abtab/filter/grep'
5
+ require 'base_app'
6
+
7
+ class GrepApp < BaseApp
8
+ def command_line_arguments
9
+ super.concat [
10
+ ['e','expression','Grep Expression',true]
11
+ ]
12
+ end
13
+
14
+ def run
15
+ input_uri = nil
16
+ if File.pipe?('/dev/stdin')
17
+ input_uri = 'tab:///dev/stdin'
18
+ else
19
+ input_uri = ARGV.shift or raise "You must speicfy a URI to grep"
20
+ end
21
+
22
+ flt = Abtab::Filter::Grep.new input_uri
23
+ flt.open_for_reading
24
+ # TODO: getopt args for
25
+ proc = eval("Proc.new {|r| #{self.expression} }")
26
+ flt.filter_predicate = proc
27
+ #puts "flt=#{flt}"
28
+
29
+ outp = nil
30
+ if ARGV.empty?
31
+ outp = Abtab.write_handle 'tab:///dev/stdout'
32
+ else
33
+ outp = Abtab.write_handle ARGV.shift
34
+ end
35
+
36
+ outp.import flt
37
+ end
38
+ end
39
+
40
+ if $0 == __FILE__
41
+ GrepApp.main
42
+ end
data/lib/abtab/driver.rb CHANGED
@@ -1,6 +1,12 @@
1
1
  module Abtab
2
2
  class Driver
3
+
4
+ [:open_for_reading, :open_for_writing, :next_record, :write_record].each do |m|
5
+ define_method(m) { raise "Error: #{m} not implemented in: #{self.class}" }
6
+ end
7
+
3
8
  def import inp
9
+ set_columns inp.columns
4
10
  while rec = inp.next_record
5
11
  break if rec.nil?
6
12
  write_record rec
@@ -0,0 +1,5 @@
1
+ require 'abtab/driver'
2
+ module Abtab
3
+ class Filter
4
+ end
5
+ end
@@ -0,0 +1,49 @@
1
+ require 'abtab/filter'
2
+
3
+ module Abtab
4
+ class Filter::Grep < Abtab::Filter
5
+ def initialize url
6
+ @url = url
7
+ end
8
+
9
+ def filter_predicate= p
10
+ @filter = p
11
+ end
12
+
13
+ def open_for_reading url=@url
14
+ @url = url
15
+ @driver = Abtab.read_handle @url
16
+ end
17
+
18
+ def next_record
19
+ rec = nil
20
+ while rec = @driver.next_record
21
+ if @filter.call(rec)
22
+ break
23
+ else
24
+ #puts "rejecting: #{rec.inspect}"
25
+ 0
26
+ end
27
+ end
28
+ return rec
29
+ end
30
+
31
+ def set_columns cols
32
+ @driver.set_columns cols
33
+ end
34
+
35
+ def columns
36
+ @driver.columns
37
+ end
38
+
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
+ end
49
+ 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: 23
4
+ hash: 21
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 0
10
- version: 1.0.0
9
+ - 1
10
+ version: 1.0.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kyle Burton
@@ -54,15 +54,17 @@ extensions: []
54
54
  extra_rdoc_files:
55
55
  - README.textile
56
56
  files:
57
- - abstract-tables-1.0.0.gem
58
57
  - abstract-tables.gemspec
59
58
  - bin/atcat
60
59
  - bin/atview
60
+ - bin/atgrep
61
61
  - introducing-abtab/README.textile
62
62
  - lib/abtab/driver.rb
63
63
  - lib/abtab/drivers/csv_driver.rb
64
64
  - lib/abtab/drivers/dbi_driver.rb
65
65
  - lib/abtab/drivers/tab_driver.rb
66
+ - lib/abtab/filter/grep.rb
67
+ - lib/abtab/filter.rb
66
68
  - lib/abtab.rb
67
69
  - README.textile
68
70
  - test/fixtures/files/file1.csv