rubygrep 0.0.2 → 0.0.4
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.
- checksums.yaml +4 -4
- data/README.md +8 -12
- data/bin/rubygrep +6 -0
- data/lib/rubygrep.rb +2 -1
- data/lib/rubygrep/file_reader.rb +8 -27
- data/lib/rubygrep/file_searcher.rb +47 -0
- data/lib/rubygrep/grep_manager.rb +12 -6
- data/lib/rubygrep/outputter.rb +22 -4
- data/lib/rubygrep/ruby_grep_options.rb +9 -1
- data/lib/rubygrep/version.rb +1 -1
- data/rubygrep.gemspec +2 -2
- data/spec/file_reader_spec.rb +36 -13
- data/spec/file_searcher_spec.rb +55 -0
- data/spec/grep_manager_spec.rb +48 -0
- data/spec/ruby_grep_options_spec.rb +8 -3
- data/spec/spec_helper.rb +1 -0
- metadata +11 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ac2a3d55254f307dc0b56908c0bcd0bc54ade54
|
4
|
+
data.tar.gz: e2e6fa9f6846737e61cf85f152adad84c54c0a21
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b4ab09265f720b24aa175e4913d52b5c71c28bbfba35a39e7a7efd3c0d0dbf8c6363c72a4532b215e20d4d58952f11d671e3d0b070384bb731e6e579f8495316
|
7
|
+
data.tar.gz: 71e1fdee9f2c3cc00feae3b7a5c98a30dc02ef54d654f221d1390dcfb8792731ec8d7f3d3b8f812a3c30a24edb4faa5c4fceec0e1ef5c1d5f5238fa62c6306ab
|
data/README.md
CHANGED
@@ -1,24 +1,20 @@
|
|
1
1
|
# Rubygrep
|
2
2
|
|
3
|
-
|
3
|
+
Searches for regexp in files and print out strings that match.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
7
|
-
Add this line to your application's Gemfile:
|
8
|
-
|
9
|
-
gem 'rubygrep'
|
10
|
-
|
11
|
-
And then execute:
|
12
|
-
|
13
|
-
$ bundle
|
14
|
-
|
15
|
-
Or install it yourself as:
|
16
|
-
|
17
7
|
$ gem install rubygrep
|
18
8
|
|
19
9
|
## Usage
|
20
10
|
|
21
|
-
|
11
|
+
Usage: rubygrep [options] expression file1 [file2 file3 ...]
|
12
|
+
-r, --recursive recursively read directories
|
13
|
+
-i, --ignore-case Ignore case when matching strings.
|
14
|
+
-v, --invert-selection Invert the sense of matching, to select non-matching lines.
|
15
|
+
-n, --line-number Prefix each line of output with the 1-based line number within its input file.
|
16
|
+
-H, --with-filename Print the file name for each match. This is the default when there is more than one file to search.
|
17
|
+
|
22
18
|
|
23
19
|
## Contributing
|
24
20
|
|
data/bin/rubygrep
ADDED
data/lib/rubygrep.rb
CHANGED
@@ -2,6 +2,7 @@ require 'rubygrep/version'
|
|
2
2
|
require 'rubygrep/grep_manager'
|
3
3
|
require 'rubygrep/ruby_grep_options'
|
4
4
|
require 'rubygrep/file_reader'
|
5
|
+
require 'rubygrep/file_searcher'
|
5
6
|
require 'rubygrep/matcher'
|
6
7
|
require 'rubygrep/outputter'
|
7
8
|
require 'optparse'
|
@@ -10,7 +11,7 @@ module Rubygrep
|
|
10
11
|
|
11
12
|
def self.grep
|
12
13
|
options = RubyGrepOptions.new(ARGV)
|
13
|
-
GrepManager.new(options
|
14
|
+
GrepManager.new(options).run
|
14
15
|
end
|
15
16
|
|
16
17
|
end
|
data/lib/rubygrep/file_reader.rb
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
module Rubygrep
|
2
2
|
class FileReader
|
3
|
+
|
3
4
|
attr_accessor :file_names, :skip_current_file, :options
|
4
5
|
|
5
6
|
def initialize(file_names, options = {})
|
6
7
|
@options = options
|
7
|
-
@file_names =
|
8
|
-
|
8
|
+
@file_names = FileSearcher.new(options).search(file_names)
|
9
|
+
end
|
10
|
+
|
11
|
+
def has_several_files?
|
12
|
+
file_names.length > 1
|
9
13
|
end
|
10
14
|
|
11
15
|
def each_line
|
@@ -14,6 +18,7 @@ module Rubygrep
|
|
14
18
|
num = 0
|
15
19
|
if next_file
|
16
20
|
next_file.each_line do |str|
|
21
|
+
str = str.encode("UTF-16be", :invalid=>:replace, :replace=>"").encode('UTF-8') unless str.valid_encoding?
|
17
22
|
yield({str: str, path: file_name, str_num: num+=1})
|
18
23
|
if skip_current_file
|
19
24
|
@skip_current_file = false
|
@@ -30,32 +35,8 @@ module Rubygrep
|
|
30
35
|
|
31
36
|
private
|
32
37
|
|
33
|
-
def process_with_options(file_names, current_folder = '.')
|
34
|
-
file_names.each do |file_name|
|
35
|
-
if File.directory?(file_name) && options[:recursive]
|
36
|
-
process_with_options(inner_files(file_name), relative_path(file_name, current_folder))
|
37
|
-
elsif File.file?(file_name)
|
38
|
-
@file_names << relative_path(file_name, current_folder)
|
39
|
-
else
|
40
|
-
puts "No such file or directory #{file_name}"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def inner_files(folder_name)
|
46
|
-
Dir.entries(folder_name).delete_if {|file| file =~ /^\./}
|
47
|
-
end
|
48
|
-
|
49
|
-
def relative_path(file_name, folder)
|
50
|
-
if file_name =~ /^\\|\./
|
51
|
-
file_name
|
52
|
-
else
|
53
|
-
"#{folder}/#{file_name}"
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
38
|
def open_file(file_name)
|
58
|
-
File.open(
|
39
|
+
File.open(file_name)
|
59
40
|
rescue Errno::ENOENT
|
60
41
|
puts "No such file or directory #{file_name}"
|
61
42
|
false
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Rubygrep
|
2
|
+
class FileSearcher
|
3
|
+
attr_accessor :options, :found_file_names
|
4
|
+
|
5
|
+
def initialize(options = {})
|
6
|
+
@options = options
|
7
|
+
@found_file_names = []
|
8
|
+
end
|
9
|
+
|
10
|
+
def search(file_names)
|
11
|
+
search_with_options(file_names)
|
12
|
+
found_file_names
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def search_with_options(file_names, current_folder = '.')
|
18
|
+
file_names.each do |file_name|
|
19
|
+
file_path = relative_path(file_name, current_folder)
|
20
|
+
if File.directory?(file_path) && options[:recursive]
|
21
|
+
search_with_options(inner_files(file_path), file_path)
|
22
|
+
elsif text_file?(file_path)
|
23
|
+
found_file_names << file_path
|
24
|
+
elsif !File.exists?(file_path)
|
25
|
+
puts "No such file or directory #{file_path}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def inner_files(folder_name)
|
31
|
+
Dir.entries(folder_name).select {|entry| entry != '.' and entry != '..'}
|
32
|
+
end
|
33
|
+
|
34
|
+
def relative_path(file_name, folder)
|
35
|
+
if file_name =~ /^\\/ || folder == '.'
|
36
|
+
file_name
|
37
|
+
else
|
38
|
+
"#{folder}/#{file_name}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def text_file?(file_name)
|
43
|
+
File.file?(file_name)
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
@@ -2,17 +2,23 @@ module Rubygrep
|
|
2
2
|
class GrepManager
|
3
3
|
attr_reader :file_reader, :matcher, :outputter
|
4
4
|
|
5
|
-
def initialize(options
|
6
|
-
@file_reader = FileReader.new(file_names, options.file_reader_options)
|
7
|
-
|
5
|
+
def initialize(options)
|
6
|
+
@file_reader = FileReader.new(options.file_names, options.file_reader_options)
|
7
|
+
options.set_multi_file_mode if @file_reader.has_several_files?
|
8
|
+
@matcher = Matcher.new(options.expression, options.matcher_options)
|
8
9
|
@outputter = Outputter.new(options.outputter_options)
|
9
10
|
end
|
10
11
|
|
11
12
|
def run
|
12
13
|
file_reader.each_line do |line_data|
|
13
|
-
|
14
|
-
|
15
|
-
|
14
|
+
begin
|
15
|
+
match_data = matcher.matches?(line_data)
|
16
|
+
if match_data
|
17
|
+
outputter.out(match_data, line_data)
|
18
|
+
end
|
19
|
+
rescue Exception => e
|
20
|
+
file_reader.next_file!
|
21
|
+
outputter.error(e.message, line_data)
|
16
22
|
end
|
17
23
|
end
|
18
24
|
end
|
data/lib/rubygrep/outputter.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
module Rubygrep
|
2
2
|
class Outputter
|
3
|
+
|
4
|
+
COLORS = {red: 31, magenta: 35}
|
5
|
+
|
3
6
|
attr_accessor :options
|
4
7
|
|
5
8
|
def initialize(options = {})
|
@@ -10,16 +13,31 @@ module Rubygrep
|
|
10
13
|
$stdout << format_with_options(match_data, line_data)
|
11
14
|
end
|
12
15
|
|
16
|
+
def error(message, line_data)
|
17
|
+
$stdout << "#{colorize(line_data[:path])}: #{message}\n"
|
18
|
+
end
|
19
|
+
|
13
20
|
private
|
14
21
|
|
15
|
-
# puts line_data[:str_num].to_s + ' ' + line_data[:str].insert(match_data.begin(0),'|').insert(match_data.end(0) + 1,'|')
|
16
22
|
def format_with_options(match_data, line_data)
|
17
|
-
result = "#{line_data[:str]}"
|
23
|
+
result = colorize_match(match_data, "#{line_data[:str]}")
|
18
24
|
if options[:line_number]
|
19
|
-
result = "#{line_data[:str_num]}: #{result}"
|
25
|
+
result = "#{colorize(line_data[:str_num], :magenta)}: #{result}"
|
26
|
+
end
|
27
|
+
if options[:with_filename]
|
28
|
+
result = "#{colorize(line_data[:path], :magenta)}: #{result}"
|
20
29
|
end
|
21
|
-
result
|
30
|
+
result.include?("\n") ? result : "#{result}\n"
|
22
31
|
end
|
23
32
|
|
33
|
+
def colorize(string, color = :red)
|
34
|
+
"\033[#{COLORS[color]}m#{string}\033[0m"
|
35
|
+
end
|
36
|
+
|
37
|
+
def colorize_match(match_data, string)
|
38
|
+
string.gsub(match_data.regexp) do |match|
|
39
|
+
colorize(match)
|
40
|
+
end
|
41
|
+
end
|
24
42
|
end
|
25
43
|
end
|
@@ -8,6 +8,10 @@ module Rubygrep
|
|
8
8
|
parse_options(args)
|
9
9
|
end
|
10
10
|
|
11
|
+
def set_multi_file_mode
|
12
|
+
outputter_options[:with_filename] = true
|
13
|
+
end
|
14
|
+
|
11
15
|
private
|
12
16
|
|
13
17
|
def parse_options(args)
|
@@ -24,7 +28,7 @@ module Rubygrep
|
|
24
28
|
|
25
29
|
def options_parser
|
26
30
|
OptionParser.new do |opts|
|
27
|
-
opts.banner = 'Usage: rubygrep
|
31
|
+
opts.banner = 'Usage: rubygrep [options] expression file1 [file2 file3 ...]'
|
28
32
|
|
29
33
|
#file_reader_options
|
30
34
|
opts.on( '-r', '--recursive', 'recursively read directories' ) do
|
@@ -48,6 +52,10 @@ module Rubygrep
|
|
48
52
|
opts.on('-n','--line-number','Prefix each line of output with the 1-based line number within its input file.') do
|
49
53
|
outputter_options[:line_number] = true
|
50
54
|
end
|
55
|
+
|
56
|
+
opts.on('-H','--with-filename', 'Print the file name for each match. This is the default when there is more than one file to search.') do
|
57
|
+
outputter_options[:with_filename] = true
|
58
|
+
end
|
51
59
|
end
|
52
60
|
end
|
53
61
|
|
data/lib/rubygrep/version.rb
CHANGED
data/rubygrep.gemspec
CHANGED
@@ -9,12 +9,12 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["andrey"]
|
10
10
|
spec.email = ["om08uhkn@gmail.com"]
|
11
11
|
spec.summary = %q{Analog of unix grep utility.}
|
12
|
-
spec.description = %q{Globally searches regexp and prints it}
|
12
|
+
spec.description = %q{Globally searches for in files regexp and prints it}
|
13
13
|
spec.homepage = "https://github.com/fatbeard2/rubygrep"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
17
|
-
spec.executables =
|
17
|
+
spec.executables = 'rubygrep'
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
data/spec/file_reader_spec.rb
CHANGED
@@ -1,30 +1,53 @@
|
|
1
1
|
RSpec.describe Rubygrep::FileReader do
|
2
2
|
|
3
|
-
let (:
|
4
|
-
let (:
|
3
|
+
let (:several_files) {%w(text1.txt ./text2.txt ../text3.txt ../folder/text4.txt /etc/woop/text5.txt)}
|
4
|
+
let (:no_access_files) {%w(/root/smth)}
|
5
|
+
|
6
|
+
before :each do
|
7
|
+
allow(File).to receive(:open) do |file_name|
|
8
|
+
if several_files.include?(file_name)
|
9
|
+
StringIO.new("#{file_name}\n#{file_name}\n#{file_name}\n")
|
10
|
+
elsif no_access_files.include?(file_name)
|
11
|
+
raise Errno::EACCES
|
12
|
+
else
|
13
|
+
raise Errno::ENOENT
|
14
|
+
end
|
15
|
+
end
|
5
16
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
17
|
+
allow(File).to receive(:file?) do |file_name|
|
18
|
+
several_files.include?(file_name) ||
|
19
|
+
no_access_files.include?(file_name)
|
20
|
+
end
|
10
21
|
end
|
11
22
|
|
12
23
|
context 'with several files' do
|
13
|
-
|
14
|
-
|
15
|
-
|
24
|
+
subject(:reader) { Rubygrep::FileReader.new(several_files) }
|
25
|
+
|
26
|
+
it 'should read files line by line' do
|
27
|
+
reader.each_line do |line_data|
|
28
|
+
expect(line_data[:str]).to eq(line_data[:path]+"\n")
|
29
|
+
expect(line_data[:str_num]).to be_between(1,3)
|
30
|
+
end
|
16
31
|
end
|
17
32
|
|
18
|
-
it 'should
|
19
|
-
expect
|
33
|
+
it 'should read all lines' do
|
34
|
+
expect { |b| reader.each_line(&b) }.to yield_control.exactly(15).times
|
20
35
|
end
|
21
36
|
|
22
|
-
it 'should
|
23
|
-
|
37
|
+
it 'should skip files' do
|
38
|
+
reader.each_line do |line_data|
|
39
|
+
reader.next_file!
|
40
|
+
expect(line_data[:str_num]).to eq(1)
|
41
|
+
end
|
24
42
|
end
|
25
43
|
|
44
|
+
it 'should respond to has_several_files? message' do
|
45
|
+
expect(reader.has_several_files?).to eq(true)
|
46
|
+
end
|
26
47
|
end
|
27
48
|
|
28
49
|
|
29
50
|
|
51
|
+
|
52
|
+
|
30
53
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
RSpec.describe Rubygrep::FileSearcher do
|
2
|
+
|
3
|
+
let (:one_file) { 'text1.txt' }
|
4
|
+
let (:several_files) {%w(text1.txt ./text2.txt ../text3.txt ../folder/text4.txt /root/woop/foo/bar/text5.txt)}
|
5
|
+
|
6
|
+
let (:init_dirs) { %w(folder1 /home/user/me) }
|
7
|
+
let (:inner_files_tree) {{
|
8
|
+
'folder1' => %w(inner1 inner2 inner3),
|
9
|
+
'folder1/inner1' => %w(inner1.txt inner2.txt),
|
10
|
+
'folder1/inner2' => %w(inner1.txt inner2.txt),
|
11
|
+
'folder1/inner3' => %w(inner1.txt inner2.txt),
|
12
|
+
'/home/user/me' => %w(1.txt 2.txt 1 2),
|
13
|
+
'/home/user/me/1' => %w(1.txt 2.txt),
|
14
|
+
'/home/user/me/2' => %w(1.txt 2.txt)
|
15
|
+
}}
|
16
|
+
let (:result_files) do
|
17
|
+
inner_files_tree.map do |dir, files|
|
18
|
+
files.collect { |file_name| "#{dir}/#{file_name}" if file_name =~ /\.txt/ }
|
19
|
+
end.flatten.compact
|
20
|
+
end
|
21
|
+
|
22
|
+
def get_entries(dir_name)
|
23
|
+
inner_files_tree[dir_name]
|
24
|
+
end
|
25
|
+
|
26
|
+
let (:searcher) { Rubygrep::FileSearcher.new }
|
27
|
+
let (:recursive_searcher) { Rubygrep::FileSearcher.new({:recursive => true}) }
|
28
|
+
|
29
|
+
it 'lookup for one file' do
|
30
|
+
allow(File).to receive(:file?).with(one_file).and_return(true)
|
31
|
+
expect(searcher.search([one_file])).to eq(%w(text1.txt))
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'with several files' do
|
35
|
+
it 'should lookup for several files' do
|
36
|
+
allow(File).to receive(:file?) { |file_name| several_files.include?(file_name) }
|
37
|
+
expect(searcher.search(several_files)).to eq(several_files)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'with -recursive option' do
|
42
|
+
before do
|
43
|
+
allow(File).to receive(:file?) { |file_name| file_name =~ /\.txt/ }
|
44
|
+
allow(File).to receive(:directory?) { |dir_name| !(dir_name =~ /\.txt/) }
|
45
|
+
allow(Dir).to receive(:entries) { |dir_name| get_entries(dir_name) }
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should recursivly pick up files' do
|
49
|
+
expect(recursive_searcher.search(init_dirs)).to eq(result_files)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
describe Rubygrep::GrepManager do
|
2
|
+
text2 = <<-'HERE'
|
3
|
+
Lorem Ipsum is simply dummy text of the printing and
|
4
|
+
typesetting industry. Lorem Ipsum has been the industry\'s
|
5
|
+
standard dummy text ever since the 1500s, when an unknown
|
6
|
+
printer took a galley of type and scrambled it to make a type
|
7
|
+
specimen book. It has survived not only five centuries, but also
|
8
|
+
the leap into electronic typesetting, remaining essentially unchanged.
|
9
|
+
It was popularised in the 1960s with the release of Letraset sheets
|
10
|
+
containing Lorem Ipsum passages, and more recently with desktop
|
11
|
+
publishing software like Aldus PageMaker including versions of Lorem Ipsum.
|
12
|
+
HERE
|
13
|
+
text1 = <<-'HERE'
|
14
|
+
Contrary to popular belief, Lorem Ipsum is not simply random text
|
15
|
+
It has roots in a piece of classical Latin literature from 45 BC, making it over
|
16
|
+
2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College
|
17
|
+
in Virginia, looked up one of the more obscure Latin words, consectetur, from
|
18
|
+
a Lorem Ipsum passage, and going through the cites of the word in classical
|
19
|
+
literature, discovered the undoubtable source. Lorem Ipsum comes from
|
20
|
+
sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum"
|
21
|
+
(The Extremes of Good and Evil) by Cicero, written in 45 BC.
|
22
|
+
This book is a treatise on the theory of ethics, very popular
|
23
|
+
during the Renaissance. The first line of Lorem Ipsum,
|
24
|
+
"Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.
|
25
|
+
HERE
|
26
|
+
match_output = <<-'HERE'
|
27
|
+
text1: 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College
|
28
|
+
text2: standard dummy text ever since the 1500s, when an unknown
|
29
|
+
text2: It was popularised in the 1960s with the release of Letraset sheets
|
30
|
+
HERE
|
31
|
+
|
32
|
+
|
33
|
+
let (:files) { %w(text1 text2)}
|
34
|
+
|
35
|
+
let (:file_contents) {{
|
36
|
+
'text1' => text1,
|
37
|
+
'text2' => text2
|
38
|
+
}}
|
39
|
+
let (:options) { Rubygrep::RubyGrepOptions.new(%w(\d\d\d\d text1 text2)) }
|
40
|
+
|
41
|
+
subject(:grep_manager) { Rubygrep::GrepManager.new(options) }
|
42
|
+
|
43
|
+
it 'should print out matched strings from files' do
|
44
|
+
allow(File).to receive(:file?).and_return(true)
|
45
|
+
allow(File).to receive(:open) { |file_name| (StringIO.new(file_contents[file_name])) }
|
46
|
+
expect { grep_manager.run }.to output(match_output).to_stdout
|
47
|
+
end
|
48
|
+
end
|
@@ -15,14 +15,14 @@ RSpec.describe Rubygrep::RubyGrepOptions do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
context 'with no additional options' do
|
18
|
-
subject(:options_object) {create_options(%w(exp text text2))}
|
18
|
+
subject(:options_object) {create_options(%w(exp text text1 text2))}
|
19
19
|
|
20
20
|
it 'should parse expression' do
|
21
21
|
expect(options_object.expression).to eq('exp')
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'should parse file_names' do
|
25
|
-
expect(options_object.file_names).to eq(%w(text text2))
|
25
|
+
expect(options_object.file_names).to eq(%w(text text1 text2))
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'should have blank options' do
|
@@ -30,10 +30,15 @@ RSpec.describe Rubygrep::RubyGrepOptions do
|
|
30
30
|
expect(options_object.matcher_options).to eq({})
|
31
31
|
expect(options_object.outputter_options).to eq({})
|
32
32
|
end
|
33
|
+
|
34
|
+
it 'should set with_filename option to true' do
|
35
|
+
options_object.set_multi_file_mode
|
36
|
+
expect(options_object.outputter_options).to eq({:with_filename => true})
|
37
|
+
end
|
33
38
|
end
|
34
39
|
|
35
40
|
context 'with all additional options' do
|
36
|
-
subject(:options_object) {create_options(%w(-r -i -v -n exp
|
41
|
+
subject(:options_object) {create_options(%w(-r -i -v -n exp text2))}
|
37
42
|
it 'should have parsed options' do
|
38
43
|
expect(options_object.file_reader_options).to eq({recursive: true})
|
39
44
|
expect(options_object.matcher_options).to eq({ignore_case: true, invert_selection: true})
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubygrep
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- andrey
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,10 +52,11 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
-
description: Globally searches regexp and prints it
|
55
|
+
description: Globally searches for in files regexp and prints it
|
56
56
|
email:
|
57
57
|
- om08uhkn@gmail.com
|
58
|
-
executables:
|
58
|
+
executables:
|
59
|
+
- rubygrep
|
59
60
|
extensions: []
|
60
61
|
extra_rdoc_files: []
|
61
62
|
files:
|
@@ -65,8 +66,10 @@ files:
|
|
65
66
|
- LICENSE.txt
|
66
67
|
- README.md
|
67
68
|
- Rakefile
|
69
|
+
- bin/rubygrep
|
68
70
|
- lib/rubygrep.rb
|
69
71
|
- lib/rubygrep/file_reader.rb
|
72
|
+
- lib/rubygrep/file_searcher.rb
|
70
73
|
- lib/rubygrep/grep_manager.rb
|
71
74
|
- lib/rubygrep/matcher.rb
|
72
75
|
- lib/rubygrep/outputter.rb
|
@@ -74,6 +77,8 @@ files:
|
|
74
77
|
- lib/rubygrep/version.rb
|
75
78
|
- rubygrep.gemspec
|
76
79
|
- spec/file_reader_spec.rb
|
80
|
+
- spec/file_searcher_spec.rb
|
81
|
+
- spec/grep_manager_spec.rb
|
77
82
|
- spec/matcher_spec.rb
|
78
83
|
- spec/outputter_spec.rb
|
79
84
|
- spec/ruby_grep_options_spec.rb
|
@@ -104,6 +109,8 @@ specification_version: 4
|
|
104
109
|
summary: Analog of unix grep utility.
|
105
110
|
test_files:
|
106
111
|
- spec/file_reader_spec.rb
|
112
|
+
- spec/file_searcher_spec.rb
|
113
|
+
- spec/grep_manager_spec.rb
|
107
114
|
- spec/matcher_spec.rb
|
108
115
|
- spec/outputter_spec.rb
|
109
116
|
- spec/ruby_grep_options_spec.rb
|