JasonKing-grep 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/README.markdown +40 -0
- data/lib/grep.rb +27 -0
- data/test/data/first.txt +7 -0
- data/test/data/third/first.txt +6 -0
- data/test/grep.rb +20 -0
- metadata +57 -0
data/README.markdown
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
grep
|
|
2
|
+
====
|
|
3
|
+
|
|
4
|
+
Yes, there are already a couple of grep gems around - but they didn't do things
|
|
5
|
+
the way I wanted, and weren't easy to fork. So here's mine.
|
|
6
|
+
|
|
7
|
+
Installation
|
|
8
|
+
------------
|
|
9
|
+
|
|
10
|
+
To perform a system wide installation:
|
|
11
|
+
|
|
12
|
+
gem source -a http://gems.github.com
|
|
13
|
+
gem install JasonKing-grep
|
|
14
|
+
|
|
15
|
+
Just require it, it just reopens Dir and File and adds the grep instance method
|
|
16
|
+
to each of them. You pass it a regular expression and it returns an array of
|
|
17
|
+
hashes, very simple:
|
|
18
|
+
|
|
19
|
+
:match => Contains the MatchData object (so you can add parens and capture parts)
|
|
20
|
+
:file => Contains the File#path where the pattern matched (mainly useful for the Dir)
|
|
21
|
+
:lineno => Contains the line number where the pattern matched
|
|
22
|
+
:line => Contains the full line from the file where the pattern matched
|
|
23
|
+
|
|
24
|
+
That's it, I think that's the best grep you can have. Call it on a Dir object
|
|
25
|
+
and it will drill down through the directory, matching as it goes. Call it on a
|
|
26
|
+
File object and it will just match in that file.
|
|
27
|
+
|
|
28
|
+
Usage
|
|
29
|
+
-----
|
|
30
|
+
|
|
31
|
+
require 'grep'
|
|
32
|
+
f = File.open('foo')
|
|
33
|
+
m = f.grep(/^\s*Include\s+(\S+)/)
|
|
34
|
+
m.first[:match][1] # => captured parens expression
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
Contributors
|
|
38
|
+
------------
|
|
39
|
+
|
|
40
|
+
* Jason King (JasonKing)
|
data/lib/grep.rb
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
class Dir
|
|
2
|
+
def grep(re)
|
|
3
|
+
res = []
|
|
4
|
+
|
|
5
|
+
require 'find'
|
|
6
|
+
Find.find(path) do |f|
|
|
7
|
+
if File.file? f
|
|
8
|
+
File.open(f) do |io|
|
|
9
|
+
res += io.grep(re)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
res
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class File
|
|
18
|
+
def grep(re)
|
|
19
|
+
res = []
|
|
20
|
+
each_line do |line|
|
|
21
|
+
if m = line.match(re)
|
|
22
|
+
res << { :match => m, :file => path, :lineno => $., :line => line }
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
res
|
|
26
|
+
end
|
|
27
|
+
end
|
data/test/grep.rb
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require "test/unit"
|
|
2
|
+
|
|
3
|
+
DIR = File.dirname(__FILE__)
|
|
4
|
+
require File.join(DIR, '..', 'lib', 'grep')
|
|
5
|
+
|
|
6
|
+
T = File.join( DIR, 'data')
|
|
7
|
+
|
|
8
|
+
class Grep < Test::Unit::TestCase
|
|
9
|
+
def setup
|
|
10
|
+
@dir = Dir.open(T)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_dir_grep
|
|
14
|
+
m = @dir.grep(/foobar/)
|
|
15
|
+
assert_equal 2, m.size
|
|
16
|
+
assert_equal 4, m.find{|e|e[:file] == './test/data/first.txt'}[:lineno]
|
|
17
|
+
assert_equal 3, m.find{|e|e[:file] == './test/data/third/first.txt'}[:lineno]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: JasonKing-grep
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.3
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Jason King
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
|
|
12
|
+
date: 2009-03-12 00:00:00 -07:00
|
|
13
|
+
default_executable:
|
|
14
|
+
dependencies: []
|
|
15
|
+
|
|
16
|
+
description:
|
|
17
|
+
email: jk@handle.it
|
|
18
|
+
executables: []
|
|
19
|
+
|
|
20
|
+
extensions: []
|
|
21
|
+
|
|
22
|
+
extra_rdoc_files: []
|
|
23
|
+
|
|
24
|
+
files:
|
|
25
|
+
- README.markdown
|
|
26
|
+
- lib/grep.rb
|
|
27
|
+
has_rdoc: true
|
|
28
|
+
homepage: http://github.com/JasonKing/grep
|
|
29
|
+
post_install_message:
|
|
30
|
+
rdoc_options:
|
|
31
|
+
- --inline-source
|
|
32
|
+
- --charset=UTF-8
|
|
33
|
+
require_paths:
|
|
34
|
+
- lib
|
|
35
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: "0"
|
|
40
|
+
version:
|
|
41
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
42
|
+
requirements:
|
|
43
|
+
- - ">="
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: "0"
|
|
46
|
+
version:
|
|
47
|
+
requirements: []
|
|
48
|
+
|
|
49
|
+
rubyforge_project:
|
|
50
|
+
rubygems_version: 1.2.0
|
|
51
|
+
signing_key:
|
|
52
|
+
specification_version: 2
|
|
53
|
+
summary: grep - grep library done the Ruby way by extending Dir and File
|
|
54
|
+
test_files:
|
|
55
|
+
- test/data/first.txt
|
|
56
|
+
- test/data/third/first.txt
|
|
57
|
+
- test/grep.rb
|