chirp 0.2.0 → 0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +0 -0
- data/Manifest.txt +44 -2
- data/README.txt +10 -2
- data/Rakefile +1 -1
- data/bin/chirp +6 -4
- data/lib/chirp.rb +7 -3
- data/lib/chirp/application.rb +248 -159
- data/lib/chirp/context.rb +101 -0
- data/lib/chirp/fs_expression.rb +180 -0
- data/lib/chirp/path_filter.rb +58 -0
- data/lib/chirp/pathmap.rb +200 -0
- data/lib/chirp/span.rb +38 -0
- data/test/account.dir/input +0 -0
- data/test/account.dir/output +0 -0
- data/test/account.dir/program.chirp +7 -4
- data/test/action.dir/input +0 -0
- data/test/action.dir/output +0 -0
- data/test/action.dir/program.chirp +2 -2
- data/test/beforeafter.dir/input +0 -0
- data/test/beforeafter.dir/output +0 -0
- data/test/beforeafter.dir/program.chirp +3 -3
- data/test/copy1.dir/input +0 -0
- data/test/copy1.dir/output +5 -0
- data/test/copy1.dir/program.chirp +9 -0
- data/test/copy1.dir/source +2 -0
- data/test/copy2.dir/input +0 -0
- data/test/copy2.dir/output +5 -0
- data/test/copy2.dir/program.chirp +9 -0
- data/test/copy2.dir/source +2 -0
- data/test/copy3.dir/input +0 -0
- data/test/copy3.dir/output +5 -0
- data/test/copy3.dir/program.chirp +7 -0
- data/test/copy3.dir/source +2 -0
- data/test/copy_file.dir/a.txt +1 -0
- data/test/copy_file.dir/b.txt +1 -0
- data/test/copy_file.dir/c.txt +1 -0
- data/test/copy_file.dir/input +0 -0
- data/test/copy_file.dir/output +2 -0
- data/test/copy_file.dir/program.chirp +5 -0
- data/test/fields.dir/input +0 -0
- data/test/fields.dir/output +0 -0
- data/test/fields.dir/program.chirp +2 -2
- data/test/fields_sep.dir/input +0 -0
- data/test/fields_sep.dir/output +0 -0
- data/test/fields_sep.dir/program.chirp +1 -2
- data/test/files.dir/a.ignore +0 -0
- data/test/files.dir/a.txt +0 -0
- data/test/files.dir/b.txt +0 -0
- data/test/files.dir/c.stuff +0 -0
- data/test/files.dir/input +0 -0
- data/test/files.dir/output +3 -0
- data/test/files.dir/program.chirp +7 -3
- data/test/fs_expr.dir/aa.txt +1 -0
- data/test/fs_expr.dir/bb.txt +9 -0
- data/test/fs_expr.dir/cc.txt +0 -0
- data/test/fs_expr.dir/dir1/dir2/dir3/a.txt +1 -0
- data/test/fs_expr.dir/input +0 -0
- data/test/fs_expr.dir/output +7 -0
- data/test/fs_expr.dir/program.chirp +17 -0
- data/test/inplace.dir/a.txt +0 -0
- data/test/inplace.dir/b.txt +0 -0
- data/test/inplace.dir/input +0 -0
- data/test/inplace.dir/output +0 -0
- data/test/inplace.dir/program.chirp +4 -6
- data/test/line_no.dir/input +0 -0
- data/test/line_no.dir/output +1 -0
- data/test/line_no.dir/program.chirp +5 -1
- data/test/match.dir/input +0 -0
- data/test/match.dir/output +0 -0
- data/test/match.dir/program.chirp +1 -1
- data/test/path.dir/dir1/dir2/dir3/a.txt +1 -0
- data/test/path.dir/input +0 -0
- data/test/path.dir/new +5 -0
- data/test/path.dir/output +20 -0
- data/test/path.dir/program.chirp +44 -0
- data/test/proc.dir/input +0 -0
- data/test/proc.dir/output +0 -0
- data/test/proc.dir/program.chirp +2 -2
- data/test/rename_file.dir/a.txt +4 -0
- data/test/rename_file.dir/b.txt +4 -0
- data/test/rename_file.dir/c.txt +4 -0
- data/test/rename_file.dir/input +0 -0
- data/test/rename_file.dir/output +2 -0
- data/test/rename_file.dir/program.chirp +7 -0
- data/test/requires.rb +6 -0
- data/test/span.dir/input +0 -0
- data/test/span.dir/output +0 -0
- data/test/span.dir/program.chirp +1 -1
- data/test/span2.dir/input +0 -0
- data/test/span2.dir/output +0 -0
- data/test/span2.dir/program.chirp +3 -1
- data/test/string.dir/input +0 -0
- data/test/string.dir/output +0 -0
- data/test/string.dir/program.chirp +1 -1
- data/test/test_application.rb +14 -9
- data/test/test_fs_expression.rb +99 -0
- data/test/test_span.rb +36 -0
- metadata +64 -7
- data/lib/chirp/statement.rb +0 -91
- data/test/test_statement.rb +0 -118
data/lib/chirp/span.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
module Chirp
|
2
|
+
class Span
|
3
|
+
BEFORE_SPAN = 0
|
4
|
+
IN_SPAN = 1
|
5
|
+
AFTER_SPAN = 2
|
6
|
+
|
7
|
+
def initialize(v1, v2)
|
8
|
+
v2 = 999999999999 unless v2
|
9
|
+
@p1 = predicate(v1)
|
10
|
+
@p2 = predicate(v2)
|
11
|
+
reset
|
12
|
+
end
|
13
|
+
|
14
|
+
def reset
|
15
|
+
@state = BEFORE_SPAN
|
16
|
+
end
|
17
|
+
|
18
|
+
def evaluate(context)
|
19
|
+
if @state == BEFORE_SPAN
|
20
|
+
@state = IN_SPAN if @p1.call(context)
|
21
|
+
end
|
22
|
+
ret = @state == IN_SPAN
|
23
|
+
if @state == IN_SPAN
|
24
|
+
@state = AFTER_SPAN if @p2.call(context)
|
25
|
+
end
|
26
|
+
ret
|
27
|
+
end
|
28
|
+
|
29
|
+
def predicate(value)
|
30
|
+
if value.kind_of?(Regexp)
|
31
|
+
return lambda {|context| value =~ context.line}
|
32
|
+
else
|
33
|
+
return lambda {|context| value == context.line_no}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
data/test/account.dir/input
CHANGED
File without changes
|
data/test/account.dir/output
CHANGED
File without changes
|
@@ -1,16 +1,19 @@
|
|
1
1
|
#!/usr/bin/env chirp
|
2
|
+
require 'pp'
|
2
3
|
|
3
4
|
#
|
4
5
|
# Simple bank acccount program, shows the use of fields
|
5
6
|
#
|
6
|
-
|
7
|
-
before
|
7
|
+
each :path=>'input' do
|
8
|
+
before do
|
9
|
+
@sum=0
|
10
|
+
end
|
8
11
|
|
9
|
-
line
|
12
|
+
line :expr=>lambda{fields[0] =~ /credit/} do
|
10
13
|
@sum += fields[1].to_i
|
11
14
|
end
|
12
15
|
|
13
|
-
line
|
16
|
+
line :expr=>lambda{fields[0] =~ /debit/} do
|
14
17
|
@sum -= fields[1].to_i
|
15
18
|
end
|
16
19
|
|
data/test/action.dir/input
CHANGED
File without changes
|
data/test/action.dir/output
CHANGED
File without changes
|
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
line(3) { puts "matched line #{line_no} text is #{line}" }
|
1
|
+
each :path=>'input' do
|
2
|
+
line(:number=>3) { puts "matched line #{line_no} text is #{line}" }
|
3
3
|
end
|
data/test/beforeafter.dir/input
CHANGED
File without changes
|
data/test/beforeafter.dir/output
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
Each path: a.txt output path: a.txt.new
|
@@ -0,0 +1 @@
|
|
1
|
+
Each path: b.txt output path: b.txt.new
|
@@ -0,0 +1 @@
|
|
1
|
+
Each path: c.txt output path: c.txt.new
|
File without changes
|
data/test/fields.dir/input
CHANGED
File without changes
|
data/test/fields.dir/output
CHANGED
File without changes
|
data/test/fields_sep.dir/input
CHANGED
File without changes
|
data/test/fields_sep.dir/output
CHANGED
File without changes
|
data/test/files.dir/a.ignore
CHANGED
File without changes
|
data/test/files.dir/a.txt
CHANGED
File without changes
|
data/test/files.dir/b.txt
CHANGED
File without changes
|
data/test/files.dir/c.stuff
CHANGED
File without changes
|
data/test/files.dir/input
CHANGED
File without changes
|
data/test/files.dir/output
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
123456789
|
@@ -0,0 +1,9 @@
|
|
1
|
+
total 24
|
2
|
+
-rw-r--r-- 1 rolsen rolsen 10 2007-12-13 14:35 aa.txt
|
3
|
+
-rw-r--r-- 1 rolsen rolsen 0 2007-12-13 14:54 bb.txt
|
4
|
+
drwxr-xr-x 3 rolsen rolsen 4096 2007-12-13 14:33 dir1
|
5
|
+
-rw-r--r-- 1 rolsen rolsen 0 2007-12-13 14:33 input
|
6
|
+
-rw-r--r-- 1 rolsen rolsen 183 2007-12-13 14:33 output
|
7
|
+
-rw-r--r-- 1 rolsen rolsen 69 2007-12-13 14:53 program.chirp
|
8
|
+
-rw-r--r-- 1 rolsen rolsen 183 2007-12-13 14:33 qq
|
9
|
+
-rw-r--r-- 1 rolsen rolsen 389 2007-12-13 14:33 zzz
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
example file
|
File without changes
|
@@ -0,0 +1,17 @@
|
|
1
|
+
|
2
|
+
each_path :path=>"*.txt", :fsexp=>length(10) do
|
3
|
+
puts path
|
4
|
+
end
|
5
|
+
|
6
|
+
now {puts "========="}
|
7
|
+
|
8
|
+
each_path :path=>"*.txt", :fsexp=>bigger(1) do
|
9
|
+
puts path
|
10
|
+
end
|
11
|
+
|
12
|
+
now {puts "========="}
|
13
|
+
each_path :path=>"dir*", :fsexp=>dir? do
|
14
|
+
puts path
|
15
|
+
end
|
16
|
+
|
17
|
+
now {puts "========="}
|
data/test/inplace.dir/a.txt
CHANGED
File without changes
|
data/test/inplace.dir/b.txt
CHANGED
File without changes
|
data/test/inplace.dir/input
CHANGED
File without changes
|
data/test/inplace.dir/output
CHANGED
File without changes
|
@@ -1,9 +1,7 @@
|
|
1
|
-
|
1
|
+
now { puts "before any processing" }
|
2
2
|
|
3
|
-
|
4
|
-
file do
|
5
|
-
edit_in_place
|
3
|
+
each :path=>'*.txt', :output=>'%p' do
|
6
4
|
line { puts line.upcase }
|
7
5
|
end
|
8
|
-
|
9
|
-
|
6
|
+
now { puts File.read('a.txt') }
|
7
|
+
now { puts File.read('b.txt') }
|
data/test/line_no.dir/input
CHANGED
File without changes
|
data/test/line_no.dir/output
CHANGED
data/test/match.dir/input
CHANGED
File without changes
|
data/test/match.dir/output
CHANGED
File without changes
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
each_line :path=>'input', :pattern=>/abc/
|
@@ -0,0 +1 @@
|
|
1
|
+
example file
|
data/test/path.dir/input
ADDED
File without changes
|
data/test/path.dir/new
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
path: dir1/dir2/dir3/a.txt
|
2
|
+
dirname: dir1/dir2/dir3
|
3
|
+
basename: a.txt
|
4
|
+
extname: .txt
|
5
|
+
name: a
|
6
|
+
full_path: ./dir1/dir2/dir3/a.txt
|
7
|
+
path_name: dir1/dir2/dir3/a.txt
|
8
|
+
path_name.class: Pathname
|
9
|
+
full_path_name: ./dir1/dir2/dir3/a.txt
|
10
|
+
full_path_name.class: Pathname
|
11
|
+
path: dir1/dir2/dir3/a.txt
|
12
|
+
====================
|
13
|
+
dir1/dir2/dir3/a.txt
|
14
|
+
====================
|
15
|
+
dir2/dir3
|
16
|
+
====================
|
17
|
+
dir1/dir2/dir3/a.txt
|
18
|
+
====================
|
19
|
+
foo.txt
|
20
|
+
this is the foo file
|
@@ -0,0 +1,44 @@
|
|
1
|
+
each :path=>'dir1/**/*.txt' do
|
2
|
+
before { puts "path: #{path}" }
|
3
|
+
before { puts "dirname: #{dirname}" }
|
4
|
+
before { puts "basename: #{basename}" }
|
5
|
+
before { puts "extname: #{extname}" }
|
6
|
+
before { puts "name: #{name}" }
|
7
|
+
before { puts "full_path: #{full_path}" }
|
8
|
+
before { puts "path_name: #{path_name}" }
|
9
|
+
before { puts "path_name.class: #{path_name.class}" }
|
10
|
+
before { puts "full_path_name: #{full_path_name}" }
|
11
|
+
before { puts "full_path_name.class: #{full_path_name.class}" }
|
12
|
+
path { puts "path: #{path}" }
|
13
|
+
end
|
14
|
+
|
15
|
+
now {puts "===================="}
|
16
|
+
|
17
|
+
each :path=>/dir1.*txt$/ do
|
18
|
+
path {puts path}
|
19
|
+
end
|
20
|
+
|
21
|
+
now {puts "===================="}
|
22
|
+
|
23
|
+
now do
|
24
|
+
rm_rf 'dir2'
|
25
|
+
mkdir_p 'dir2/dir3/dir4'
|
26
|
+
end
|
27
|
+
|
28
|
+
each :dir=>'dir2' do
|
29
|
+
path {puts path}
|
30
|
+
end
|
31
|
+
|
32
|
+
now {puts "===================="}
|
33
|
+
|
34
|
+
each :path=>/dir1.*txt$/ do
|
35
|
+
file {puts path}
|
36
|
+
end
|
37
|
+
|
38
|
+
now {puts "===================="}
|
39
|
+
|
40
|
+
each :path=>'*.txt', :contains=>/foo/ do
|
41
|
+
path {puts path}
|
42
|
+
path {puts contents}
|
43
|
+
end
|
44
|
+
|
data/test/proc.dir/input
CHANGED
File without changes
|
data/test/proc.dir/output
CHANGED
File without changes
|
data/test/proc.dir/program.chirp
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
line(lambda{/russ/=~fields[0]})
|
1
|
+
each :path=>'input' do
|
2
|
+
line(:expr=>lambda{/russ/=~fields[0]})
|
3
3
|
end
|