chirp 0.2.0 → 0.3
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/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
|