lutra 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/lutra +3 -11
- data/lib/lutra.rb +0 -2
- data/lib/lutra/scanner.rb +13 -13
- data/lib/lutra/version.rb +1 -1
- data/spec/lib/scanner_spec.rb +13 -23
- metadata +2 -6
- data/lib/lutra/formatter.rb +0 -47
- data/lib/lutra/formatter_entry.rb +0 -3
- data/spec/lib/formatter_spec.rb +0 -48
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7337112eafc3be539708c9e4ca191af02a8948cd
|
4
|
+
data.tar.gz: b3d62818e4b3ef41951f905d6ac8ae1e01b19da7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2fe4243548f43a30468271ff6c718519331955f499c09c0f305f8451b4080e0d07bbac6c7dd45bca0f08de7e98be233547189cf6289839a7e469b8c93efd1242
|
7
|
+
data.tar.gz: 02733a43a2d7c3e2958bdf02feb18f9871cd584980a11c76d0b32c2a72b51017f97d0d20bdf2703fe2f3830d8a1cbc44f98b3b3d8f4d4608a85adf4c7a537086
|
data/bin/lutra
CHANGED
@@ -9,7 +9,6 @@ color = STDOUT.tty?
|
|
9
9
|
usage = 'Usage: lutra [OPTIONS] [PATH]'
|
10
10
|
tags = Lutra::TAGS
|
11
11
|
comments = Lutra::COMMENTS
|
12
|
-
formatter_name = :default
|
13
12
|
formatter_opts = {}
|
14
13
|
|
15
14
|
ARGV.options do |o|
|
@@ -24,10 +23,6 @@ ARGV.options do |o|
|
|
24
23
|
comments = com.split(',').map(&:strip)
|
25
24
|
end
|
26
25
|
|
27
|
-
o.on('-f', '--formatter=NAME', 'Use your own formatter') do |name|
|
28
|
-
formatter_name = name.to_sym
|
29
|
-
end
|
30
|
-
|
31
26
|
o.on('-s', '--text-size=SIZE', 'Set text size for formatter') do |size|
|
32
27
|
formatter_opts[:text_size] = size.to_i
|
33
28
|
end
|
@@ -55,7 +50,8 @@ rescue => e
|
|
55
50
|
exit 1
|
56
51
|
end
|
57
52
|
|
58
|
-
|
53
|
+
formatter = Lutra::Formatters::Default.new(formatter_opts)
|
54
|
+
scanner = Lutra::Scanner.new(formatter)
|
59
55
|
|
60
56
|
Find.find(*paths) do |path|
|
61
57
|
unless paths.include?(path)
|
@@ -65,7 +61,7 @@ Find.find(*paths) do |path|
|
|
65
61
|
next if File.directory?(path)
|
66
62
|
|
67
63
|
begin
|
68
|
-
scanner.scan_file(path)
|
64
|
+
scanner.scan_file(path, tags, comments)
|
69
65
|
rescue Errno::ENOENT => e
|
70
66
|
STDERR.puts "lutra: #{e.message} (broken symlink?)" if verbose
|
71
67
|
rescue => e
|
@@ -73,8 +69,4 @@ Find.find(*paths) do |path|
|
|
73
69
|
end
|
74
70
|
end
|
75
71
|
|
76
|
-
formatter = Lutra::Formatter.new(formatter_opts)
|
77
|
-
formatter.set(formatter_name)
|
78
|
-
formatter.display(scanner.notes)
|
79
|
-
|
80
72
|
exit
|
data/lib/lutra.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'lutra/scanner'
|
2
|
-
require 'lutra/formatter'
|
3
2
|
require 'lutra/formatters/base'
|
4
3
|
require 'lutra/formatters/default'
|
5
4
|
|
@@ -10,5 +9,4 @@ module Lutra
|
|
10
9
|
NotImplementedError = Class.new(StandardError)
|
11
10
|
EmptyTagListError = Class.new(StandardError)
|
12
11
|
EmptyCommentListError = Class.new(StandardError)
|
13
|
-
FormatterNotFound = Class.new(StandardError)
|
14
12
|
end
|
data/lib/lutra/scanner.rb
CHANGED
@@ -2,31 +2,31 @@ require 'lutra/note'
|
|
2
2
|
|
3
3
|
module Lutra
|
4
4
|
class Scanner
|
5
|
-
|
6
|
-
attr_reader :notes
|
5
|
+
attr_reader :formatter
|
7
6
|
|
8
|
-
def initialize(
|
9
|
-
|
10
|
-
raise EmptyCommentListError if comments.empty?
|
11
|
-
|
12
|
-
@tags, @comments = tags, comments
|
13
|
-
@notes = []
|
7
|
+
def initialize(formatter = Formatters::Default.new)
|
8
|
+
@formatter = formatter
|
14
9
|
end
|
15
10
|
|
16
|
-
def scan_file(path)
|
17
|
-
extract(File.open(path), path)
|
11
|
+
def scan_file(path, tags, comments)
|
12
|
+
notes = extract(File.open(path), path, tags, comments)
|
13
|
+
|
14
|
+
formatter.display(notes)
|
18
15
|
end
|
19
16
|
|
20
17
|
private
|
21
18
|
|
22
|
-
def extract(source, path)
|
23
|
-
regexp = compile_regexp(
|
19
|
+
def extract(source, path, tags, comments)
|
20
|
+
regexp = compile_regexp(comments, tags)
|
21
|
+
notes = []
|
24
22
|
|
25
23
|
source.each_with_index do |line, i|
|
26
24
|
if result = regexp.match(line)
|
27
|
-
|
25
|
+
notes << Note.new(result[:tag], result[:comment], result[:text], i + 1, path)
|
28
26
|
end
|
29
27
|
end
|
28
|
+
|
29
|
+
notes
|
30
30
|
end
|
31
31
|
|
32
32
|
def compile_regexp(comments, tags)
|
data/lib/lutra/version.rb
CHANGED
data/spec/lib/scanner_spec.rb
CHANGED
@@ -4,46 +4,36 @@ describe Lutra::Scanner do
|
|
4
4
|
context '.new' do
|
5
5
|
subject { described_class }
|
6
6
|
|
7
|
-
it 'default
|
8
|
-
expect(subject.new.
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'custom tags' do
|
12
|
-
expect(subject.new(tags: ['X']).tags).to eq(['X'])
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'default comments' do
|
16
|
-
expect(subject.new.comments).to eq(['#', '%', ';', '//', '--'])
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'custom comments' do
|
20
|
-
expect(subject.new(comments: ['#']).comments).to eq(['#'])
|
7
|
+
it 'default formatter' do
|
8
|
+
expect(subject.new.formatter).to be_a(Lutra::Formatters::Default)
|
21
9
|
end
|
22
10
|
end
|
23
11
|
|
24
|
-
context '#
|
25
|
-
let(:
|
26
|
-
let(:
|
12
|
+
context '#extract' do
|
13
|
+
let(:path) { data_file('sample') }
|
14
|
+
let(:file) { File.open(path) }
|
15
|
+
let(:tags) { Lutra::TAGS }
|
16
|
+
let(:comm) { Lutra::COMMENTS }
|
27
17
|
|
28
|
-
|
18
|
+
subject { described_class.new.send(:extract, file, path, tags, comm) }
|
29
19
|
|
30
20
|
it 'have todo, fixme and optimize' do
|
31
|
-
expect(
|
21
|
+
expect(subject.map(&:tag)).to eq(['TODO', 'FIXME', 'OPTIMIZE'])
|
32
22
|
end
|
33
23
|
|
34
24
|
context 'with custom tags' do
|
35
|
-
|
25
|
+
let(:tags) { ['TODO'] }
|
36
26
|
|
37
27
|
it 'returns notes with only specified tag' do
|
38
|
-
expect(
|
28
|
+
expect(subject.map(&:tag)).to eq(['TODO'])
|
39
29
|
end
|
40
30
|
end
|
41
31
|
|
42
32
|
context 'with custom comments' do
|
43
|
-
|
33
|
+
let(:comm) { ['#'] }
|
44
34
|
|
45
35
|
it 'returns notes with only specified comments' do
|
46
|
-
expect(
|
36
|
+
expect(subject.map(&:comment)).to eq(['#'])
|
47
37
|
end
|
48
38
|
end
|
49
39
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lutra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuri Artemev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-15 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Parse tags (todo, fixme, optimize) in your source code
|
14
14
|
email:
|
@@ -22,8 +22,6 @@ files:
|
|
22
22
|
- README.md
|
23
23
|
- bin/lutra
|
24
24
|
- lib/lutra.rb
|
25
|
-
- lib/lutra/formatter.rb
|
26
|
-
- lib/lutra/formatter_entry.rb
|
27
25
|
- lib/lutra/formatters/base.rb
|
28
26
|
- lib/lutra/formatters/default.rb
|
29
27
|
- lib/lutra/note.rb
|
@@ -31,7 +29,6 @@ files:
|
|
31
29
|
- lib/lutra/version.rb
|
32
30
|
- lutra.gemspec
|
33
31
|
- spec/fixtures/sample
|
34
|
-
- spec/lib/formatter_spec.rb
|
35
32
|
- spec/lib/formatters/base_spec.rb
|
36
33
|
- spec/lib/formatters/default_spec.rb
|
37
34
|
- spec/lib/scanner_spec.rb
|
@@ -64,7 +61,6 @@ specification_version: 4
|
|
64
61
|
summary: In source annotaions parser
|
65
62
|
test_files:
|
66
63
|
- spec/fixtures/sample
|
67
|
-
- spec/lib/formatter_spec.rb
|
68
64
|
- spec/lib/formatters/base_spec.rb
|
69
65
|
- spec/lib/formatters/default_spec.rb
|
70
66
|
- spec/lib/scanner_spec.rb
|
data/lib/lutra/formatter.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
require 'lutra/formatter_entry'
|
2
|
-
|
3
|
-
module Lutra
|
4
|
-
class Formatter
|
5
|
-
attr_reader :formatters, :current
|
6
|
-
|
7
|
-
def initialize(options = {})
|
8
|
-
@options = options
|
9
|
-
@current = :default
|
10
|
-
@formatters = [default_formatter]
|
11
|
-
end
|
12
|
-
|
13
|
-
def get(name)
|
14
|
-
@formatters.find do |f|
|
15
|
-
f.name == name || f.short == name
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def set(name)
|
20
|
-
if get(name)
|
21
|
-
@current = name
|
22
|
-
else
|
23
|
-
raise FormatterNotFound
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def add(name, short_name, class_name)
|
28
|
-
if formatter?(class_name)
|
29
|
-
@formatters << FormatterEntry.new(name, short_name, class_name)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def display(notes)
|
34
|
-
get(@current).class_name.new(@options).display(notes)
|
35
|
-
end
|
36
|
-
|
37
|
-
private
|
38
|
-
|
39
|
-
def formatter?(class_name)
|
40
|
-
class_name.new.respond_to?(:display)
|
41
|
-
end
|
42
|
-
|
43
|
-
def default_formatter
|
44
|
-
FormatterEntry.new(:default, :d, Lutra::Formatters::Default)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
data/spec/lib/formatter_spec.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
describe Lutra::Formatter do
|
2
|
-
context '.new' do
|
3
|
-
it 'have one formatter' do
|
4
|
-
expect(subject.formatters.size).to eq(1)
|
5
|
-
end
|
6
|
-
|
7
|
-
it 'have default formatter' do
|
8
|
-
expect(subject.formatters.first[:name]).to eq(:default)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
context '#add' do
|
13
|
-
it 'adds new formatter' do
|
14
|
-
expect(subject.add(:new, :n, Lutra::Formatters::Default).size).to eq(2)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
context '#get' do
|
19
|
-
it 'finds formatter by name' do
|
20
|
-
expect(subject.get(:default)[:name]).to eq(:default)
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'finds formatter short name' do
|
24
|
-
expect(subject.get(:d)[:name]).to eq(:default)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
context '#set' do
|
29
|
-
it 'sets default formatter' do
|
30
|
-
subject.set(:default)
|
31
|
-
expect(subject.current).to eq(:default)
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'raise error when formatter dont exist' do
|
35
|
-
expect {
|
36
|
-
subject.set(:poke)
|
37
|
-
}.to raise_error(Lutra::FormatterNotFound)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context '#display' do
|
42
|
-
let(:out) { capture_stdout { subject.display([]) } }
|
43
|
-
|
44
|
-
it 'prints notes with selected formatter' do
|
45
|
-
expect(out).to eq('')
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|