watson-ruby 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/spec/fs_spec.rb ADDED
@@ -0,0 +1,56 @@
1
+ module Watson
2
+
3
+ require_relative 'helper_spec'
4
+
5
+ describe FS do
6
+ before(:each) do
7
+ silence_output
8
+ end
9
+
10
+ after(:each) do
11
+ enable_output
12
+ end
13
+
14
+ describe '.check_file' do
15
+ context 'blank input file' do
16
+ it 'should return false' do
17
+ FS.check_file('').should be_false
18
+ end
19
+ end
20
+
21
+ context 'invalid input file' do
22
+ it 'should return false' do
23
+ FS.check_file('chickensoup.rb').should be_false
24
+ end
25
+ end
26
+
27
+ context 'valid input file' do
28
+ it 'should return true' do
29
+ FS.check_file('spec/fs_spec.rb').should be_true
30
+ end
31
+ end
32
+ end
33
+
34
+ describe '.check_dir' do
35
+ context 'blank input dir' do
36
+ it 'should return false' do
37
+ FS.check_dir('').should be_false
38
+ end
39
+ end
40
+
41
+ context 'invalid input dir' do
42
+ it 'should return false' do
43
+ FS.check_dir('./chickensoup').should be_false
44
+ end
45
+ end
46
+
47
+ context 'valid input dir' do
48
+ it 'should return true' do
49
+ FS.check_dir('spec/').should be_true
50
+ end
51
+ end
52
+ end
53
+
54
+ end
55
+
56
+ end
@@ -0,0 +1,32 @@
1
+ # [review] - Using own funky path loading because traditional way seems wrong?
2
+ # Commented out version is traditional, seen in many apps. If you use that and
3
+ # look at load_path you get path/../lib (I'd expect those to be separate?)
4
+ # My funky version adds path/., path/bin, path/assets separately
5
+ # Maybe I don't get how the load path is supposed to look though...
6
+
7
+ #$:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
8
+ $:.unshift *%w[. assets lib].map { |m| __dir__.gsub(/\/test(.?)+/, '') + '/' + m }
9
+ #p($:)
10
+
11
+ require 'watson'
12
+
13
+
14
+ def silence_output
15
+ # Store the original stderr and stdout in order to restore them later
16
+ @original_stderr = $stderr
17
+ @original_stdout = $stdout
18
+
19
+ # Redirect stderr and stdout
20
+ $stderr = File.new(File.join(__dir__, 'null.txt'), 'w')
21
+ $stdout = File.new(File.join(__dir__, 'null.txt'), 'w')
22
+ end
23
+
24
+
25
+ def enable_output
26
+ $stderr = @original_stderr
27
+ $stdout = @original_stdout
28
+ @original_stderr = nil
29
+ @original_stdout = nil
30
+
31
+ File.delete(File.join(__dir__, 'null.txt'))
32
+ end
@@ -0,0 +1,128 @@
1
+ module Watson
2
+ require_relative 'helper_spec'
3
+
4
+ describe Parser do
5
+ before(:each) do
6
+ @config = Config.new
7
+ @config.run
8
+ @parser = Parser.new(@config)
9
+ silence_output
10
+ end
11
+
12
+ after(:each) do
13
+ @file = @config.instance_variable_get(:@rc_file)
14
+ File.delete(@file) if File.exists?(@file)
15
+ enable_output
16
+ end
17
+
18
+
19
+ describe '#get_comment_type' do
20
+ context 'known extension' do
21
+ it 'return correct extension (# for ruby)' do
22
+ @parser.get_comment_type('lib/watson.rb').should eql '#'
23
+ end
24
+
25
+ it 'return correct extension (// for c/c++)' do
26
+ @parser.get_comment_type('lib/watson.cpp').should eql '//'
27
+ end
28
+ end
29
+
30
+ context 'unknown extension' do
31
+ it 'return false for unknown extension' do
32
+ @parser.get_comment_type('lib/chickensoup').should be_false
33
+ end
34
+ end
35
+ end
36
+
37
+ describe '#parse_file' do
38
+ context 'invalid file parse' do
39
+ it 'return false on empty file input' do
40
+ @parser.parse_file('').should be_false
41
+ end
42
+ end
43
+
44
+ context 'blank file parse' do
45
+ before do
46
+ FileUtils.mkdir('test_dir')
47
+ FileUtils.touch('test_dir/test_file')
48
+ end
49
+
50
+ it 'generate (blank) hash structure' do
51
+ @structure = @parser.parse_file('test_dir/test_file')
52
+
53
+ @structure[:relative_path].should == 'test_dir/test_file'
54
+ @structure[:has_issues].should be_false
55
+
56
+ @structure['fix'].should == []
57
+ @structure['review'].should == []
58
+ @structure['todo'].should == []
59
+ end
60
+
61
+ after do
62
+ FileUtils.rm_rf('test_dir')
63
+ end
64
+ end
65
+
66
+ context 'valid file parse' do
67
+ before do
68
+ FileUtils.mkdir('test_dir')
69
+ FileUtils.cp('assets/examples/main.cpp', 'test_dir/')
70
+ end
71
+
72
+ it 'generate populated hash structure from file' do
73
+ @structure = @parser.parse_file('test_dir/main.cpp')
74
+
75
+ @structure[:relative_path].should == 'test_dir/main.cpp'
76
+ @structure[:has_issues].should be_true
77
+ @structure['fix'][0][:line_number].should == 16
78
+ end
79
+
80
+ after do
81
+ FileUtils.rm_rf('test_dir')
82
+ end
83
+ end
84
+
85
+ end
86
+
87
+ describe '#parse_dir' do
88
+ context 'empty dir parsing' do
89
+ before do
90
+ FileUtils.mkdir('test_dir')
91
+ end
92
+
93
+ it 'generate (blank) hash stucture' do
94
+ @structure = @parser.parse_dir('test_dir/', 0)
95
+
96
+ @structure[:curdir].should == 'test_dir/'
97
+ @structure[:files].should == []
98
+ @structure[:subdirs].should == []
99
+ end
100
+
101
+ after do
102
+ FileUtils.rm_rf('test_dir')
103
+ end
104
+ end
105
+
106
+ context 'single file in dir parsing' do
107
+ before do
108
+ FileUtils.mkdir('test_dir')
109
+ FileUtils.cp('assets/examples/main.cpp', 'test_dir/')
110
+ end
111
+
112
+ it 'generate hash structure with parsed file' do
113
+ @structure = @parser.parse_dir('test_dir/', 0)
114
+ @structure[:files][0][:relative_path].should == 'test_dir/main.cpp'
115
+ @structure[:files][0][:has_issues].should be_true
116
+ @structure[:files][0]["fix"][0][:line_number].should == 16
117
+ end
118
+
119
+ after do
120
+ FileUtils.rm_rf('test_dir')
121
+ end
122
+ end
123
+
124
+ end
125
+
126
+ end
127
+
128
+ end
data/watson.gemspec ADDED
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # [review] - Should this match same style as bin/watson?
3
+ $:.push File.expand_path("../lib", __FILE__)
4
+ require "watson/version"
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = 'watson-ruby'
8
+ s.version = Watson::VERSION
9
+ s.date = '2013-11-06'
10
+
11
+ s.authors = ["nhmood"]
12
+ s.email = 'nhmood@goosecode.com'
13
+ s.homepage = 'http://goosecode.com/watson'
14
+
15
+ s.summary = "an inline issue manager"
16
+ s.description = "an inline issue manager with GitHub and Bitbucket support"
17
+
18
+ s.license = 'MIT'
19
+ s.files = `git ls-files`.split("\n").delete_if { |file| file.include?("assets/examples") }
20
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
22
+
23
+ s.require_paths = ["assets", "bin", "lib"]
24
+
25
+ # Runtime Dependencies
26
+ s.add_runtime_dependency 'json'
27
+
28
+ # Development Dependencies
29
+ s.add_development_dependency 'rake'
30
+ s.add_development_dependency 'rspec'
31
+ end
32
+
33
+
metadata ADDED
@@ -0,0 +1,116 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: watson-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - nhmood
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-11-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: json
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: an inline issue manager with GitHub and Bitbucket support
56
+ email: nhmood@goosecode.com
57
+ executables:
58
+ - watson
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - .gitignore
63
+ - Gemfile
64
+ - Gemfile.lock
65
+ - LICENSE
66
+ - README.md
67
+ - Rakefile
68
+ - assets/defaultConf
69
+ - assets/watson.svg
70
+ - bin/watson
71
+ - lib/watson.rb
72
+ - lib/watson/bitbucket.rb
73
+ - lib/watson/command.rb
74
+ - lib/watson/config.rb
75
+ - lib/watson/fs.rb
76
+ - lib/watson/github.rb
77
+ - lib/watson/parser.rb
78
+ - lib/watson/printer.rb
79
+ - lib/watson/remote.rb
80
+ - lib/watson/version.rb
81
+ - spec/config_spec.rb
82
+ - spec/fs_spec.rb
83
+ - spec/helper_spec.rb
84
+ - spec/parser_spec.rb
85
+ - watson.gemspec
86
+ homepage: http://goosecode.com/watson
87
+ licenses:
88
+ - MIT
89
+ metadata: {}
90
+ post_install_message:
91
+ rdoc_options: []
92
+ require_paths:
93
+ - assets
94
+ - bin
95
+ - lib
96
+ required_ruby_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - '>='
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ requirements: []
107
+ rubyforge_project:
108
+ rubygems_version: 2.0.3
109
+ signing_key:
110
+ specification_version: 4
111
+ summary: an inline issue manager
112
+ test_files:
113
+ - spec/config_spec.rb
114
+ - spec/fs_spec.rb
115
+ - spec/helper_spec.rb
116
+ - spec/parser_spec.rb