comment_extractor 1.0.1
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 +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
|