rak 0.8.0

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/lib/rak.rb ADDED
@@ -0,0 +1,4 @@
1
+
2
+ class Rak
3
+ VERSION = "0.8.0"
4
+ end
data/spec/help_spec.rb ADDED
@@ -0,0 +1,50 @@
1
+
2
+
3
+ require File.dirname(__FILE__) + "/spec_helpers"
4
+
5
+ describe "Rak", "help and errors" do
6
+ before(:all) do
7
+ ENV['RAK_TEST'] = "true"
8
+ end
9
+ after(:all) do
10
+ ENV['RAK_TEST'] = "false"
11
+ end
12
+
13
+ it "--version prints version information" do
14
+ strip_ansi(%x{rak --version}).should == t=<<END
15
+ rak 0.0.1
16
+
17
+ Copyright 2007 Daniel Lucraft, all rights reserved.
18
+ Based on the perl tool 'ack' by Andy Lester.
19
+
20
+ This program is free software; you can redistribute it and/or modify it
21
+ under the same terms as Ruby.
22
+ END
23
+ end
24
+
25
+ it "prints unknown type errors" do
26
+ %x{rak Virg --type=pyth}.should == t=<<END
27
+ rak: Unknown --type "pyth"
28
+ rak: See rak --help types
29
+ END
30
+ end
31
+
32
+ it "--help prints help information" do
33
+ %x{rak Virg --help}.split("\n")[0].should == "Usage: rak [OPTION]... PATTERN [FILES]"
34
+ end
35
+
36
+ it "--help types prints type information" do
37
+ %x{rak --help types}.split("\n")[2].should == "The following is the list of filetypes supported by rak. You can"
38
+ end
39
+
40
+ it "no options or patterns prints the usage info" do
41
+ %x{rak}.split("\n")[0].should == "Usage: rak [OPTION]... PATTERN [FILES]"
42
+ end
43
+
44
+ it "prints a nice message for unknown options" do
45
+ t=<<END
46
+ rak: see rak --help for usage.
47
+ END
48
+ %x{rak foo --asfdasfd}.include?(t).should be_true
49
+ end
50
+ end
data/spec/rak_spec.rb ADDED
@@ -0,0 +1,500 @@
1
+
2
+
3
+ require File.dirname(__FILE__) + "/spec_helpers"
4
+
5
+ describe "Rak", "with no options" do
6
+ before(:all) do
7
+ ENV['RAK_TEST'] = "true"
8
+ end
9
+ after(:all) do
10
+ ENV['RAK_TEST'] = "false"
11
+ end
12
+ it "prints all matches from files in the current directory" do
13
+ asterize_ansi(%x{rak Cap.ic}).should == t=<<END
14
+ *foo.rb*
15
+ 3|foo foo foo *Capric*a foo foo foo
16
+ 4|foo *Capsic*um foo foo foo foo foo
17
+
18
+ END
19
+ end
20
+
21
+ it "prints all matches correctly" do
22
+ strip_ansi(%x{rak foo}).should == t=<<END
23
+ foo.rb
24
+ 3|foo foo foo Caprica foo foo foo
25
+ 4|foo Capsicum foo foo foo foo foo
26
+ 6|foo foo foo foo foo Pikon foo foo
27
+ 8|foo Pikon foo foo foo foo foo foo
28
+ 10|foo foo Six foo foo foo Six foo
29
+ 11|foo foo foo foo Six foo foo foo
30
+ 13|foo foo foo Gemenon foo foo foo
31
+
32
+ END
33
+ end
34
+
35
+ it "prints all matches from files in subdirectories" do
36
+ asterize_ansi(%x{rak Pikon}).should == t=<<END
37
+ *dir1/bar.rb*
38
+ 2|bar bar bar bar *Pikon* bar
39
+ 9|bar bar *Pikon* bar bar bar
40
+
41
+ *foo.rb*
42
+ 6|foo foo foo foo foo *Pikon* foo foo
43
+ 8|foo *Pikon* foo foo foo foo foo foo
44
+
45
+ END
46
+ end
47
+
48
+ it "prints multiple matches in a line" do
49
+ asterize_ansi(%x{rak Six}).should == t=<<END
50
+ *foo.rb*
51
+ 10|foo foo *Six* foo foo foo *Six* foo
52
+ 11|foo foo foo foo *Six* foo foo foo
53
+
54
+ END
55
+ end
56
+
57
+ it "skips VC dirs" do
58
+ %x{rak Aerelon}.should == ""
59
+ end
60
+
61
+ it "does not follow symlinks" do
62
+ %x{rak Sagitarron}.should == ""
63
+ end
64
+
65
+ it "changes defaults when redirected" do
66
+ ENV['RAK_TEST'] = "false"
67
+ asterize_ansi(%x{rak Six | cat}).should == t=<<END
68
+ foo.rb 10|foo foo Six foo foo foo Six foo
69
+ foo.rb 11|foo foo foo foo Six foo foo foo
70
+ END
71
+ ENV['RAK_TEST'] = "true"
72
+ end
73
+
74
+ it "searches shebangs for valid inputs" do
75
+ asterize_ansi(%x{rak Aquaria}).should == t=<<END
76
+ *shebang*
77
+ 3|goo goo goo *Aquaria* goo goo
78
+
79
+ END
80
+ end
81
+
82
+ it "recognizes Makefiles and Rakefiles" do
83
+ asterize_ansi(%x{rak Canceron}).should == t=<<END
84
+ *Rakefile*
85
+ 1|rakefile rakefile *Canceron* rakefile
86
+
87
+ END
88
+ end
89
+ end
90
+
91
+ describe "Rak", "with FILE or STDIN inputs" do
92
+ before(:all) do
93
+ ENV['RAK_TEST'] = "true"
94
+ end
95
+ after(:all) do
96
+ ENV['RAK_TEST'] = "false"
97
+ end
98
+ it "should only search in given files or directories" do
99
+ asterize_ansi(%x{rak Pikon foo.rb}).should == t=<<END
100
+ 6|foo foo foo foo foo *Pikon* foo foo
101
+ 8|foo *Pikon* foo foo foo foo foo foo
102
+ END
103
+ strip_ansi(%x{rak Pikon dir1/}).should == t=<<END
104
+ dir1/bar.rb
105
+ 2|bar bar bar bar Pikon bar
106
+ 9|bar bar Pikon bar bar bar
107
+
108
+ END
109
+ end
110
+
111
+ it "should search in STDIN by default if no files are specified" do
112
+ asterize_ansi(%x{cat _darcs/baz.rb | rak Aere}).should == t=<<END
113
+ 2|baz baz baz *Aere*lon baz baz baz
114
+ END
115
+ end
116
+
117
+ it "only searches STDIN when piped to" do
118
+ asterize_ansi(%x{echo asdfCapasdf | rak Cap}).should == t=<<END
119
+ 1|asdf*Cap*asdf
120
+ END
121
+ end
122
+ end
123
+
124
+ describe "Rak", "options" do
125
+ before(:all) do
126
+ ENV['RAK_TEST'] = "true"
127
+ end
128
+ after(:all) do
129
+ ENV['RAK_TEST'] = "false"
130
+ end
131
+ it "prints only files with --files" do
132
+ t=<<END
133
+ Rakefile
134
+ quux.py
135
+ dir1/bar.rb
136
+ foo.rb
137
+ shebang
138
+ END
139
+ sort_lines(%x{rak -f}).should == sort_lines(t)
140
+ end
141
+
142
+ it "prints a maximum number of matches if --max-count=x is specified" do
143
+ strip_ansi(%x{rak Cap.ic -m 1}).should == t=<<END
144
+ foo.rb
145
+ 3|foo foo foo Caprica foo foo foo
146
+
147
+ END
148
+ end
149
+
150
+ it "prints the evaluated output for --output" do
151
+ strip_ansi(%x{rak Cap --output='$&'}).should == t=<<END
152
+ Cap
153
+ Cap
154
+ END
155
+ end
156
+
157
+
158
+ it "-c prints only the number of matches found per file" do
159
+ t=<<END
160
+ quux.py:0
161
+ dir1/bar.rb:2
162
+ foo.rb:2
163
+ shebang:0
164
+ Rakefile:0
165
+ END
166
+ sort_lines(strip_ansi(%x{rak Pik -c})).should == sort_lines(t)
167
+ end
168
+
169
+ it "-h suppresses filename and line number printing" do
170
+ asterize_ansi(%x{rak Pik -h}).should == t=<<END
171
+ bar bar bar bar *Pik*on bar
172
+ bar bar *Pik*on bar bar bar
173
+ foo foo foo foo foo *Pik*on foo foo
174
+ foo *Pik*on foo foo foo foo foo foo
175
+ END
176
+ end
177
+
178
+ it "ignores case with -i" do
179
+ strip_ansi(%x{rak six -i}).should == t=<<END
180
+ foo.rb
181
+ 10|foo foo Six foo foo foo Six foo
182
+ 11|foo foo foo foo Six foo foo foo
183
+
184
+ END
185
+ end
186
+
187
+ it "inverts the match with -v" do
188
+ t1=<<END
189
+ quux.py
190
+ 1|quux quux quux quux Virgon quux quux
191
+ END
192
+ t12=<<END
193
+ dir1/bar.rb
194
+ 1|
195
+ 2|bar bar bar bar Pikon bar
196
+ 3|
197
+ 4|
198
+ 5|
199
+ 6|
200
+ 7|
201
+ 8|
202
+ 9|bar bar Pikon bar bar bar
203
+ END
204
+ t2=<<END
205
+ foo.rb
206
+ 1|
207
+ 2|
208
+ 5|
209
+ 7|
210
+ 9|
211
+ 12|
212
+ END
213
+ t3=<<END
214
+ shebang
215
+ 1|#!/usr/bin/env ruby
216
+ 2|
217
+ 3|goo goo goo Aquaria goo goo
218
+ END
219
+ t4=<<END
220
+ Rakefile
221
+ 1|rakefile rakefile Canceron rakefile
222
+ END
223
+ r = strip_ansi(%x{rak foo -v})
224
+ r.include?(t1).should be_true
225
+ r.include?(t12).should be_true
226
+ r.include?(t2).should be_true
227
+ r.include?(t3).should be_true
228
+ r.include?(t4).should be_true
229
+ r.split("\n").length.should == 26
230
+ end
231
+
232
+ it "doesn't descend into subdirs with -n" do
233
+ strip_ansi(%x{rak Pikon -n}).should == t=<<END
234
+ foo.rb
235
+ 6|foo foo foo foo foo Pikon foo foo
236
+ 8|foo Pikon foo foo foo foo foo foo
237
+
238
+ END
239
+ end
240
+
241
+ it "quotes meta-characters with -Q" do
242
+ strip_ansi(%x{rak Cap. -Q}).should == ""
243
+ end
244
+
245
+ it "prints only the matching portion with -o" do
246
+ strip_ansi(%x{rak Cap -o}).should == t=<<END
247
+ Cap
248
+ Cap
249
+ END
250
+ end
251
+
252
+ it "matches whole words only with -w" do
253
+ strip_ansi(%x{rak Cap -w}).should == ""
254
+ end
255
+
256
+ it "prints the file on each line with --nogroup" do
257
+ asterize_ansi(%x{rak Cap --nogroup}).should == t=<<END
258
+ *foo.rb* 3|foo foo foo *Cap*rica foo foo foo
259
+ *foo.rb* 4|foo *Cap*sicum foo foo foo foo foo
260
+ END
261
+ end
262
+
263
+ it "-l means only print filenames with matches" do
264
+ asterize_ansi(%x{rak Caprica -l}).should == t=<<END
265
+ foo.rb
266
+ END
267
+ end
268
+
269
+ it "-L means only print filenames without matches" do
270
+ t=<<END
271
+ quux.py
272
+ dir1/bar.rb
273
+ shebang
274
+ Rakefile
275
+ END
276
+ sort_lines(asterize_ansi(%x{rak Caprica -L})).should == sort_lines(t)
277
+ end
278
+
279
+ it "--passthru means print all lines whether matching or not" do
280
+ t1=<<END
281
+ quux quux quux quux Virgon quux quux
282
+ END
283
+
284
+ t2=<<END
285
+ *foo.rb*
286
+ 3|foo foo foo *Caprica* foo foo foo
287
+ foo Capsicum foo foo foo foo foo
288
+
289
+ foo foo foo foo foo Pikon foo foo
290
+
291
+ foo Pikon foo foo foo foo foo foo
292
+
293
+ foo foo Six foo foo foo Six foo
294
+ foo foo foo foo Six foo foo foo
295
+
296
+ foo foo foo Gemenon foo foo foo
297
+ END
298
+ t3=<<END
299
+ #!/usr/bin/env ruby
300
+
301
+ goo goo goo Aquaria goo goo
302
+ END
303
+ r = asterize_ansi(%x{rak Caprica --passthru -n})
304
+ r.include?(t1).should be_true
305
+ r.include?(t2).should be_true
306
+ r.include?(t3).should be_true
307
+ r.split("\n").length.should < (t1+t2+t3).split("\n").length+5
308
+ end
309
+
310
+ it "--nocolour means do not colourize the output" do
311
+ asterize_ansi(%x{rak Cap --nocolour}).should == t=<<END
312
+ foo.rb
313
+ 3|foo foo foo Caprica foo foo foo
314
+ 4|foo Capsicum foo foo foo foo foo
315
+
316
+ END
317
+ end
318
+
319
+ it "-a means to search every file" do
320
+ asterize_ansi(%x{rak Libris -a}).should == t=<<END
321
+ *qux*
322
+ 1|qux qux qux *Libris* qux qux qux
323
+
324
+ END
325
+
326
+ end
327
+
328
+ it "--ruby means only ruby files" do
329
+ asterize_ansi(%x{rak Virgon --ruby}).should == ""
330
+ end
331
+
332
+ it "--python means only python files" do
333
+ asterize_ansi(%x{rak Cap --python}).should == ""
334
+ end
335
+
336
+ it "--noruby means exclude ruby files" do
337
+ asterize_ansi(%x{rak Cap --noruby}).should == ""
338
+ end
339
+
340
+ it "--type=ruby means only ruby files" do
341
+ asterize_ansi(%x{rak Virgon --type=ruby}).should == ""
342
+ end
343
+
344
+ it "--type=python means only python files" do
345
+ asterize_ansi(%x{rak Cap --type=python}).should == ""
346
+ end
347
+
348
+ it "--type=noruby means exclude ruby files" do
349
+ asterize_ansi(%x{rak Cap --type=noruby}).should == ""
350
+ end
351
+
352
+ it "--sort-files" do
353
+ %x{rak -f --sort-files}.should == t=<<END
354
+ dir1/bar.rb
355
+ foo.rb
356
+ quux.py
357
+ Rakefile
358
+ shebang
359
+ END
360
+ end
361
+
362
+ it "--follow means follow symlinks" do
363
+ strip_ansi(%x{rak Sagitarron --follow}).should == t=<<END
364
+ corge.rb
365
+ 1|corge corge corge Sagitarron corge
366
+
367
+ ln_dir/corge.rb
368
+ 1|corge corge corge Sagitarron corge
369
+
370
+ END
371
+ end
372
+
373
+ it "-A NUM means show NUM lines after" do
374
+ strip_ansi(%x{rak Caps -A 2}).should == t=<<END
375
+ foo.rb
376
+ 4|foo Capsicum foo foo foo foo foo
377
+ 5|
378
+ 6|foo foo foo foo foo Pikon foo foo
379
+
380
+ END
381
+ end
382
+
383
+ it "-A should work when there are matches close together" do
384
+ strip_ansi(%x{rak foo -A 2}).should == t=<<END
385
+ foo.rb
386
+ 3|foo foo foo Caprica foo foo foo
387
+ 4|foo Capsicum foo foo foo foo foo
388
+ 5|
389
+ 6|foo foo foo foo foo Pikon foo foo
390
+ 7|
391
+ 8|foo Pikon foo foo foo foo foo foo
392
+ 9|
393
+ 10|foo foo Six foo foo foo Six foo
394
+ 11|foo foo foo foo Six foo foo foo
395
+ 12|
396
+ 13|foo foo foo Gemenon foo foo foo
397
+
398
+ END
399
+ end
400
+
401
+ it "-B NUM means show NUM lines before" do
402
+ strip_ansi(%x{rak Caps -B 2}).should == t=<<END
403
+ foo.rb
404
+ 2|
405
+ 3|foo foo foo Caprica foo foo foo
406
+ 4|foo Capsicum foo foo foo foo foo
407
+
408
+ END
409
+ end
410
+
411
+ it "-C means show 2 lines before and after" do
412
+ strip_ansi(%x{rak Caps -C}).should == t=<<END
413
+ foo.rb
414
+ 2|
415
+ 3|foo foo foo Caprica foo foo foo
416
+ 4|foo Capsicum foo foo foo foo foo
417
+ 5|
418
+ 6|foo foo foo foo foo Pikon foo foo
419
+
420
+ END
421
+ end
422
+
423
+ it "-C 1 means show 1 lines before and after" do
424
+ strip_ansi(%x{rak Caps -C 1}).should == t=<<END
425
+ foo.rb
426
+ 3|foo foo foo Caprica foo foo foo
427
+ 4|foo Capsicum foo foo foo foo foo
428
+ 5|
429
+
430
+ END
431
+ end
432
+
433
+ it "-C works correctly for nearby results" do
434
+ strip_ansi(%x{rak Pik -g foo -C}).should == t=<<END
435
+ foo.rb
436
+ 4|foo Capsicum foo foo foo foo foo
437
+ 5|
438
+ 6|foo foo foo foo foo Pikon foo foo
439
+ 7|
440
+ 8|foo Pikon foo foo foo foo foo foo
441
+ 9|
442
+ 10|foo foo Six foo foo foo Six foo
443
+
444
+ END
445
+ end
446
+ it "-g REGEX only searches in files matching REGEX" do
447
+ asterize_ansi(%x{rak Pikon -g f.o}).should == t=<<END
448
+ *foo.rb*
449
+ 6|foo foo foo foo foo *Pikon* foo foo
450
+ 8|foo *Pikon* foo foo foo foo foo foo
451
+
452
+ END
453
+ end
454
+
455
+ it "-x means match only whole lines" do
456
+ asterize_ansi(%x{rak Cap -x}).should == ""
457
+ asterize_ansi(%x{rak "(foo )+Cap\\w+( foo)+" -x}).should == t=<<END
458
+ *foo.rb*
459
+ 3|*foo foo foo Caprica foo foo foo*
460
+ 4|*foo Capsicum foo foo foo foo foo*
461
+
462
+ END
463
+ end
464
+ end
465
+
466
+ describe "Rak", "with combinations of options" do
467
+ before(:all) do
468
+ ENV['RAK_TEST'] = "true"
469
+ end
470
+ after(:all) do
471
+ ENV['RAK_TEST'] = "false"
472
+ end
473
+
474
+ it "should process -c -v " do
475
+ t1=<<END
476
+ quux.py:1
477
+ dir1/bar.rb:7
478
+ foo.rb:11
479
+ shebang:3
480
+ Rakefile:1
481
+ END
482
+ sort_lines(strip_ansi(%x{rak Pikon -c -v})).should == sort_lines(t1)
483
+ end
484
+
485
+ it "-h and redirection" do
486
+ ENV['RAK_TEST'] = "false"
487
+ %x{rak Pik -h | cat}.should == t=<<END
488
+ bar bar bar bar Pikon bar
489
+ bar bar Pikon bar bar bar
490
+ foo foo foo foo foo Pikon foo foo
491
+ foo Pikon foo foo foo foo foo foo
492
+ END
493
+ ENV['RAK_TEST'] = "true"
494
+ end
495
+ end
496
+
497
+
498
+
499
+
500
+