comment_extractor 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +132 -0
- data/bin/comment_parser_debug +45 -0
- data/lib/comment_extractor/code_object/comment.rb +19 -0
- data/lib/comment_extractor/code_object.rb +12 -0
- data/lib/comment_extractor/code_objects.rb +46 -0
- data/lib/comment_extractor/configuration.rb +50 -0
- data/lib/comment_extractor/encoding.rb +40 -0
- data/lib/comment_extractor/extractor/c.rb +8 -0
- data/lib/comment_extractor/extractor/cc.rb +8 -0
- data/lib/comment_extractor/extractor/class.rb +8 -0
- data/lib/comment_extractor/extractor/clojure.rb +11 -0
- data/lib/comment_extractor/extractor/coffee.rb +13 -0
- data/lib/comment_extractor/extractor/concerns/simple_extractor.rb +189 -0
- data/lib/comment_extractor/extractor/concerns/slash_extractor.rb +16 -0
- data/lib/comment_extractor/extractor/cpp.rb +8 -0
- data/lib/comment_extractor/extractor/cs.rb +8 -0
- data/lib/comment_extractor/extractor/css.rb +8 -0
- data/lib/comment_extractor/extractor/cxx.rb +8 -0
- data/lib/comment_extractor/extractor/d.rb +9 -0
- data/lib/comment_extractor/extractor/erlang.rb +12 -0
- data/lib/comment_extractor/extractor/fortran.rb +11 -0
- data/lib/comment_extractor/extractor/go.rb +8 -0
- data/lib/comment_extractor/extractor/h.rb +8 -0
- data/lib/comment_extractor/extractor/haml.rb +49 -0
- data/lib/comment_extractor/extractor/haskell.rb +12 -0
- data/lib/comment_extractor/extractor/hpp.rb +8 -0
- data/lib/comment_extractor/extractor/html.rb +13 -0
- data/lib/comment_extractor/extractor/java.rb +8 -0
- data/lib/comment_extractor/extractor/java_script.rb +12 -0
- data/lib/comment_extractor/extractor/lisp.rb +11 -0
- data/lib/comment_extractor/extractor/lua.rb +12 -0
- data/lib/comment_extractor/extractor/m.rb +9 -0
- data/lib/comment_extractor/extractor/markdown.rb +7 -0
- data/lib/comment_extractor/extractor/mm.rb +8 -0
- data/lib/comment_extractor/extractor/perl.rb +12 -0
- data/lib/comment_extractor/extractor/php.rb +8 -0
- data/lib/comment_extractor/extractor/python.rb +13 -0
- data/lib/comment_extractor/extractor/ruby.rb +40 -0
- data/lib/comment_extractor/extractor/sass.rb +8 -0
- data/lib/comment_extractor/extractor/scala.rb +8 -0
- data/lib/comment_extractor/extractor/scss.rb +8 -0
- data/lib/comment_extractor/extractor/shell.rb +11 -0
- data/lib/comment_extractor/extractor/sqf.rb +8 -0
- data/lib/comment_extractor/extractor/sql.rb +12 -0
- data/lib/comment_extractor/extractor/sqs.rb +7 -0
- data/lib/comment_extractor/extractor/tex.rb +12 -0
- data/lib/comment_extractor/extractor/text.rb +10 -0
- data/lib/comment_extractor/extractor/yaml.rb +12 -0
- data/lib/comment_extractor/extractor.rb +96 -0
- data/lib/comment_extractor/extractor_manager.rb +158 -0
- data/lib/comment_extractor/file.rb +42 -0
- data/lib/comment_extractor/parser.rb +33 -0
- data/lib/comment_extractor/smart_string_scanner.rb +11 -0
- data/lib/comment_extractor/version.rb +4 -0
- data/lib/comment_extractor.rb +18 -0
- data/spec/assets/binary_file +0 -0
- data/spec/assets/shebang_file +3 -0
- data/spec/assets/source_code/c.c +158 -0
- data/spec/assets/source_code/cc.cc +24 -0
- data/spec/assets/source_code/class +0 -0
- data/spec/assets/source_code/clojure.clj +41 -0
- data/spec/assets/source_code/coffee.coffee +27 -0
- data/spec/assets/source_code/cpp.cpp +130 -0
- data/spec/assets/source_code/cs.cs +53 -0
- data/spec/assets/source_code/css.css +37 -0
- data/spec/assets/source_code/cxx +0 -0
- data/spec/assets/source_code/d.d +110 -0
- data/spec/assets/source_code/erlang.es +34 -0
- data/spec/assets/source_code/fortran.f +41 -0
- data/spec/assets/source_code/golang.go +61 -0
- data/spec/assets/source_code/h +0 -0
- data/spec/assets/source_code/haml.haml +26 -0
- data/spec/assets/source_code/haskell.hs +36 -0
- data/spec/assets/source_code/hpp +0 -0
- data/spec/assets/source_code/html.html +139 -0
- data/spec/assets/source_code/java.java +39 -0
- data/spec/assets/source_code/java_script.js +164 -0
- data/spec/assets/source_code/lisp.el +18 -0
- data/spec/assets/source_code/lua.lua +34 -0
- data/spec/assets/source_code/m +0 -0
- data/spec/assets/source_code/mm +0 -0
- data/spec/assets/source_code/perl.pl +36 -0
- data/spec/assets/source_code/php.php +31 -0
- data/spec/assets/source_code/python.py +139 -0
- data/spec/assets/source_code/ruby.rb +36 -0
- data/spec/assets/source_code/sass.sass +77 -0
- data/spec/assets/source_code/scala.scala +46 -0
- data/spec/assets/source_code/scss.scss +93 -0
- data/spec/assets/source_code/shell.sh +5 -0
- data/spec/assets/source_code/sqf +0 -0
- data/spec/assets/source_code/sql.sql +11 -0
- data/spec/assets/source_code/sqs +0 -0
- data/spec/assets/source_code/tex.tex +20 -0
- data/spec/assets/source_code/text.txt +15 -0
- data/spec/assets/source_code/vim +17 -0
- data/spec/assets/source_code/yaml.yml +44 -0
- data/spec/assets/stripper/children/children +0 -0
- data/spec/assets/stripper/children/children.c +0 -0
- data/spec/assets/stripper/children/children.js +0 -0
- data/spec/assets/stripper/children/children.o +0 -0
- data/spec/assets/stripper/children/children.rb +1 -0
- data/spec/assets/stripper/test +0 -0
- data/spec/assets/stripper/test.c +0 -0
- data/spec/assets/stripper/test.js +0 -0
- data/spec/assets/stripper/test.o +0 -0
- data/spec/assets/stripper/test.rb +1 -0
- data/spec/comment_extractor/code_object/comment_spec.rb +15 -0
- data/spec/comment_extractor/code_object_spec.rb +18 -0
- data/spec/comment_extractor/code_objects_spec.rb +66 -0
- data/spec/comment_extractor/configuration_spec.rb +68 -0
- data/spec/comment_extractor/encoding_spec.rb +77 -0
- data/spec/comment_extractor/extractor/c_spec.rb +9 -0
- data/spec/comment_extractor/extractor/cc_spec.rb +9 -0
- data/spec/comment_extractor/extractor/class_spec.rb +9 -0
- data/spec/comment_extractor/extractor/clojure_spec.rb +9 -0
- data/spec/comment_extractor/extractor/coffee_spec.rb +9 -0
- data/spec/comment_extractor/extractor/cpp_spec.rb +9 -0
- data/spec/comment_extractor/extractor/cs_spec.rb +9 -0
- data/spec/comment_extractor/extractor/css_spec.rb +9 -0
- data/spec/comment_extractor/extractor/cxx_spec.rb +9 -0
- data/spec/comment_extractor/extractor/d_spec.rb +10 -0
- data/spec/comment_extractor/extractor/erlang_spec.rb +10 -0
- data/spec/comment_extractor/extractor/fortran_spec.rb +9 -0
- data/spec/comment_extractor/extractor/go_spec.rb +9 -0
- data/spec/comment_extractor/extractor/h_spec.rb +9 -0
- data/spec/comment_extractor/extractor/haml_spec.rb +9 -0
- data/spec/comment_extractor/extractor/haskell_spec.rb +9 -0
- data/spec/comment_extractor/extractor/hpp_spec.rb +9 -0
- data/spec/comment_extractor/extractor/html_spec.rb +9 -0
- data/spec/comment_extractor/extractor/java_script_spec.rb +10 -0
- data/spec/comment_extractor/extractor/java_spec.rb +9 -0
- data/spec/comment_extractor/extractor/lisp_spec.rb +9 -0
- data/spec/comment_extractor/extractor/lua_spec.rb +9 -0
- data/spec/comment_extractor/extractor/m_spec.rb +9 -0
- data/spec/comment_extractor/extractor/markdown_spec.rb +8 -0
- data/spec/comment_extractor/extractor/mm_spec.rb +9 -0
- data/spec/comment_extractor/extractor/perl_spec.rb +9 -0
- data/spec/comment_extractor/extractor/php_spec.rb +9 -0
- data/spec/comment_extractor/extractor/python_spec.rb +9 -0
- data/spec/comment_extractor/extractor/ruby_spec.rb +12 -0
- data/spec/comment_extractor/extractor/sass_spec.rb +9 -0
- data/spec/comment_extractor/extractor/scala_spec.rb +9 -0
- data/spec/comment_extractor/extractor/scss_spec.rb +9 -0
- data/spec/comment_extractor/extractor/shell_spec.rb +9 -0
- data/spec/comment_extractor/extractor/sqf_spec.rb +9 -0
- data/spec/comment_extractor/extractor/sql_spec.rb +9 -0
- data/spec/comment_extractor/extractor/sqs_spec.rb +9 -0
- data/spec/comment_extractor/extractor/tex_spec.rb +9 -0
- data/spec/comment_extractor/extractor/text_spec.rb +7 -0
- data/spec/comment_extractor/extractor/yaml_spec.rb +9 -0
- data/spec/comment_extractor/extractor_manager_spec.rb +233 -0
- data/spec/comment_extractor/extractor_spec.rb +102 -0
- data/spec/comment_extractor/file_spec.rb +100 -0
- data/spec/comment_extractor/parser_spec.rb +67 -0
- data/spec/comment_extractor/smart_string_scanner_spec.rb +24 -0
- data/spec/comment_extractor/version_spec.rb +8 -0
- data/spec/comment_extractor_spec.rb +15 -0
- data/spec/spec_helper.rb +22 -0
- data/spec/support/rspec/comment_extractor/extractor_example_group.rb +115 -0
- data/spec/support/rspec/comment_extractor/matchers/extract_comment.rb +58 -0
- data/spec/support/rspec/comment_extractor/matchers.rb +7 -0
- data/spec/support/rspec/comment_extractor.rb +6 -0
- metadata +370 -0
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'comment_extractor/code_object'
|
3
|
+
require 'comment_extractor/code_objects'
|
4
|
+
|
5
|
+
module CommentExtractor
|
6
|
+
describe CodeObjects do
|
7
|
+
let(:file_path) { 'path/to/file' }
|
8
|
+
|
9
|
+
describe 'ClassMethods' do
|
10
|
+
describe '.new' do
|
11
|
+
subject { described_class.new(file: file_path) }
|
12
|
+
|
13
|
+
it 'initializes a instance of CodeObjects' do
|
14
|
+
expect(subject).to be_an_instance_of CodeObjects
|
15
|
+
expect(subject.file).to eql file_path
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe 'InstanceMethods' do
|
21
|
+
let(:described_instance) { described_class.new(file: file_path) }
|
22
|
+
let(:code_object) { CodeObject.new(value: 3) }
|
23
|
+
let(:code_object_size) { 1 }
|
24
|
+
|
25
|
+
shared_context "a extended array's method" do
|
26
|
+
context 'given a instance of CodeObject::Comment' do
|
27
|
+
it 'adds a information of self to argument' do
|
28
|
+
subject
|
29
|
+
expect(code_object.metadata[:parent]).to equal described_instance
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'adds a code_object' do
|
33
|
+
expect { subject }.to change { described_instance.size }
|
34
|
+
.to(code_object_size).from(0)
|
35
|
+
expect(subject.all? { |v| v.is_a?(code_object.class) }).to be_truthy
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'not given a instance of CodeObject::Comment' do
|
40
|
+
let(:code_object) { nil }
|
41
|
+
it { expect { subject }.to raise_error(TypeError) }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe '#<<' do
|
46
|
+
subject { described_instance << code_object }
|
47
|
+
|
48
|
+
it_behaves_like "a extended array's method"
|
49
|
+
end
|
50
|
+
|
51
|
+
describe '#push' do
|
52
|
+
subject { described_instance.push code_object, code_object }
|
53
|
+
let(:code_object_size) { 2 }
|
54
|
+
|
55
|
+
it_behaves_like "a extended array's method"
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '#concat' do
|
59
|
+
subject { described_instance.concat [code_object], [code_object] }
|
60
|
+
let(:code_object_size) { 2 }
|
61
|
+
|
62
|
+
it_behaves_like "a extended array's method"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'comment_extractor/configuration'
|
3
|
+
|
4
|
+
module CommentExtractor
|
5
|
+
describe Configuration do
|
6
|
+
describe '.new' do
|
7
|
+
subject { CommentExtractor::Configuration.new(options) }
|
8
|
+
let(:options) { { root_path: File.dirname(__FILE__) } }
|
9
|
+
|
10
|
+
it 'sets attributes to default value' do
|
11
|
+
expect(subject.extractors).to eql ExtractorManager.default_extractors
|
12
|
+
expect(subject.default_extractor).to eql Extractor::Text
|
13
|
+
expect(subject.use_default_extractor).to be_truthy
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '.add_setting' do
|
18
|
+
before do
|
19
|
+
# Initializes class variables
|
20
|
+
@required_attributes = Configuration.class_variable_set(:@@required_attributes, {})
|
21
|
+
Configuration.class_variable_set(:@@required_attributes, {})
|
22
|
+
|
23
|
+
Configuration.send(:add_setting, name, option_of_setting)
|
24
|
+
end
|
25
|
+
|
26
|
+
after do
|
27
|
+
# Restores class variables
|
28
|
+
Configuration.class_variable_set(:@@required_attributes, @required_attributes)
|
29
|
+
end
|
30
|
+
|
31
|
+
subject { Configuration.new(option_of_initialization) }
|
32
|
+
let(:name) { :setting_name }
|
33
|
+
let(:option_of_setting) { {} }
|
34
|
+
let(:option_of_initialization) { {} }
|
35
|
+
|
36
|
+
context 'given setting name' do
|
37
|
+
it 'defines accessor method' do
|
38
|
+
should be_respond_to name
|
39
|
+
should be_respond_to "#{name}="
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'given predicate option' do
|
44
|
+
let(:option_of_setting) { { predicate: true } }
|
45
|
+
let(:method) { :"#{name}?" }
|
46
|
+
|
47
|
+
it 'defines predicate method(:name?)' do
|
48
|
+
expect(subject).to be_respond_to(method)
|
49
|
+
expect(subject.send(method)).to be_falsy
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'given required option' do
|
54
|
+
let(:option_of_setting) { { required: true } }
|
55
|
+
|
56
|
+
context 'when initializations configuration without required attribute' do
|
57
|
+
let(:message) { "Unable to initialize #{name} without attribute" }
|
58
|
+
it { expect { subject }.to raise_error(message) }
|
59
|
+
end
|
60
|
+
|
61
|
+
context 'when initializations configuration with required attribute' do
|
62
|
+
let(:option_of_initialization) { { name => true } }
|
63
|
+
it { expect { subject }.to_not raise_error }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'comment_extractor/encoding'
|
3
|
+
require 'tempfile'
|
4
|
+
|
5
|
+
module CommentExtractor
|
6
|
+
describe Encoding do
|
7
|
+
describe 'ClassMethods' do
|
8
|
+
let(:body) { 'hello_world' }
|
9
|
+
let(:temp) { Tempfile.new('tempfile') }
|
10
|
+
|
11
|
+
describe '.encode' do
|
12
|
+
subject { described_class.encode(*[body, format].compact) }
|
13
|
+
|
14
|
+
shared_examples_for 'a text encoder' do
|
15
|
+
let(:expected_format_type) do
|
16
|
+
respond_to?(:format_expected) ? format_expected : format
|
17
|
+
end
|
18
|
+
let(:expected_body) do
|
19
|
+
respond_to?(:body_expected) ? body_expected : body
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'works' do
|
23
|
+
expect(subject).to eql expected_body
|
24
|
+
expect(subject.encoding).to eql expected_format_type
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'given only a raw text' do
|
29
|
+
let(:format) { nil }
|
30
|
+
let(:format_expected) { ::Encoding::UTF_8 }
|
31
|
+
|
32
|
+
it_behaves_like 'a text encoder'
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'given a text contains bom' do
|
36
|
+
let(:body) { "\xef\xbb\xbf" }
|
37
|
+
let(:format) { nil }
|
38
|
+
let(:format_expected) { ::Encoding::UTF_8 }
|
39
|
+
|
40
|
+
it_behaves_like 'a text encoder'
|
41
|
+
end
|
42
|
+
|
43
|
+
context "given #{::Encoding::UTF_8} as encoding type" do
|
44
|
+
let(:format) { ::Encoding::UTF_8 }
|
45
|
+
|
46
|
+
it_behaves_like 'a text encoder'
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'given a invalid text' do
|
50
|
+
let(:body) { "\u00D7" }
|
51
|
+
let(:format) { ::Encoding::US_ASCII }
|
52
|
+
let(:expected_error) { ::Encoding::UndefinedConversionError }
|
53
|
+
|
54
|
+
it { expect { subject }.to raise_error(expected_error) }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '.read_file' do
|
59
|
+
subject { Encoding.read_file(temp.path) }
|
60
|
+
|
61
|
+
before do
|
62
|
+
temp.write(body)
|
63
|
+
temp.flush
|
64
|
+
end
|
65
|
+
|
66
|
+
context 'given a file path' do
|
67
|
+
it 'returns a encoded content' do
|
68
|
+
expect(described_class).to receive(:encode)
|
69
|
+
.at_least(:once)
|
70
|
+
.with(body) { |v| v }
|
71
|
+
expect(subject).to eql body
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'comment_extractor/extractor/d'
|
3
|
+
|
4
|
+
class CommentExtractor::Extractor
|
5
|
+
describe D do
|
6
|
+
it_behaves_like 'detecting shebang', '/usr/local/bin/dmd'
|
7
|
+
it_behaves_like 'extracting comments from', 'd.d'
|
8
|
+
it_behaves_like 'detecting filename', 'file.d'
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'comment_extractor/extractor/erlang'
|
3
|
+
|
4
|
+
class CommentExtractor::Extractor
|
5
|
+
describe Erlang do
|
6
|
+
it_behaves_like 'detecting shebang', '/usr/bin/env escript'
|
7
|
+
it_behaves_like 'extracting comments from', 'erlang.es'
|
8
|
+
it_behaves_like 'detecting filename', 'file.es'
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'comment_extractor/extractor/java_script'
|
3
|
+
|
4
|
+
class CommentExtractor::Extractor
|
5
|
+
describe JavaScript do
|
6
|
+
it_behaves_like 'detecting shebang', '/usr/local/bin/node'
|
7
|
+
it_behaves_like 'extracting comments from', 'java_script.js'
|
8
|
+
it_behaves_like 'detecting filename', 'file.js'
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'comment_extractor/extractor/ruby'
|
3
|
+
|
4
|
+
class CommentExtractor::Extractor
|
5
|
+
describe Ruby do
|
6
|
+
it_behaves_like 'detecting shebang', '/usr/local/bin/ruby'
|
7
|
+
it_behaves_like 'extracting comments from', 'ruby.rb'
|
8
|
+
|
9
|
+
filenames = %w[file.rb Gemfile Rakefile file.gemspec Guardfile config.ru]
|
10
|
+
it_behaves_like 'detecting filename', *filenames
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'comment_extractor/extractor/shell'
|
3
|
+
|
4
|
+
class CommentExtractor::Extractor
|
5
|
+
describe Shell do
|
6
|
+
it_behaves_like 'extracting comments from', 'shell.sh'
|
7
|
+
it_behaves_like 'detecting filename', 'file.sh', 'file.zsh', 'file.bash', 'bashrc', 'zshrc'
|
8
|
+
end
|
9
|
+
end
|