watson-ruby 1.4.3 → 1.5.0
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/Gemfile.lock +1 -1
- data/README.md +28 -11
- data/lib/watson.rb +1 -0
- data/lib/watson/bitbucket.rb +48 -70
- data/lib/watson/command.rb +11 -0
- data/lib/watson/config.rb +64 -14
- data/lib/watson/formatters/default_formatter.rb +26 -21
- data/lib/watson/github.rb +69 -85
- data/lib/watson/gitlab.rb +293 -0
- data/lib/watson/parser.rb +23 -39
- data/lib/watson/remote.rb +48 -7
- data/lib/watson/version.rb +1 -1
- data/spec/config_spec.rb +2 -6
- data/watson.gemspec +4 -4
- metadata +3 -2
data/lib/watson/parser.rb
CHANGED
@@ -59,6 +59,9 @@ module Watson
|
|
59
59
|
debug_print PP.pp(_structure, '')
|
60
60
|
debug_print "\n\n"
|
61
61
|
|
62
|
+
# Pass structure to poster with count as 0
|
63
|
+
Remote.post_structure(_structure, @config, 0)
|
64
|
+
|
62
65
|
_structure
|
63
66
|
end
|
64
67
|
|
@@ -100,23 +103,9 @@ module Watson
|
|
100
103
|
# [review] - Warning to user when file is ignored? (outside of debug_print)
|
101
104
|
# Check against ignore list, if match, set to "" which will be ignored
|
102
105
|
@config.ignore_list.each do |_ignore|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
if _ignore[0] == '*'
|
107
|
-
_cut = _ignore[1..-1]
|
108
|
-
if _entry.match(/#{ _cut }/)
|
109
|
-
debug_print "#{ _entry } is on the ignore list, setting to \"\"\n"
|
110
|
-
_entry = ''
|
111
|
-
break
|
112
|
-
end
|
113
|
-
# Else check for verbose ignore match
|
114
|
-
else
|
115
|
-
if _entry == _ignore || File.absolute_path(_entry) == _ignore
|
116
|
-
debug_print "#{ _entry } is on the ignore list, setting to \"\"\n"
|
117
|
-
_entry = ''
|
118
|
-
break
|
119
|
-
end
|
106
|
+
if _mtch = _entry.match(_ignore)
|
107
|
+
_entry = ''
|
108
|
+
break
|
120
109
|
end
|
121
110
|
end
|
122
111
|
|
@@ -137,13 +126,15 @@ module Watson
|
|
137
126
|
|
138
127
|
# Check if entry is in ignore list
|
139
128
|
_skip = false
|
129
|
+
|
140
130
|
@config.ignore_list.each do |_ignore|
|
141
|
-
if
|
142
|
-
debug_print "#{ _entry } is on the ignore list, setting to \"\"\n"
|
131
|
+
if mtch = _entry.match(_ignore)
|
143
132
|
_skip = true
|
144
133
|
end
|
145
134
|
end
|
146
135
|
|
136
|
+
debug_print "#{ _entry } was not on ignorelist, adding\n"
|
137
|
+
|
147
138
|
# If directory is on the ignore list then skip
|
148
139
|
next if _skip == true
|
149
140
|
|
@@ -273,7 +264,13 @@ module Watson
|
|
273
264
|
# Set flag for this issue_list (for file) to indicate that
|
274
265
|
_issue_list[:has_issues] = true
|
275
266
|
|
276
|
-
|
267
|
+
# [review] - This could probably be done better, elsewhere!
|
268
|
+
# If it's a HTML comment, remove trailing -->
|
269
|
+
if _mtch[0].match(/<!--/)
|
270
|
+
_title = _mtch[2].gsub(/-->/, "")
|
271
|
+
else
|
272
|
+
_title = _mtch[2]
|
273
|
+
end
|
277
274
|
debug_print "Issue found\n"
|
278
275
|
debug_print "Tag: #{ _tag }\n"
|
279
276
|
debug_print "Issue: #{ _title }\n"
|
@@ -339,27 +336,13 @@ module Watson
|
|
339
336
|
# [review] - Keep Remote as a static method and pass config every time?
|
340
337
|
# Or convert to a regular class and make an instance with @config
|
341
338
|
|
342
|
-
if @config.remote_valid
|
343
|
-
if @config.github_valid
|
344
|
-
debug_print "GitHub is valid, posting issue\n"
|
345
|
-
Remote::GitHub.post_issue(_issue, @config)
|
346
|
-
else
|
347
|
-
debug_print "GitHub invalid, not posting issue\n"
|
348
|
-
end
|
349
|
-
|
350
|
-
|
351
|
-
if @config.bitbucket_valid
|
352
|
-
debug_print "Bitbucket is valid, posting issue\n"
|
353
|
-
Remote::Bitbucket.post_issue(_issue, @config)
|
354
|
-
else
|
355
|
-
debug_print "Bitbucket invalid, not posting issue\n"
|
356
|
-
end
|
357
|
-
end
|
358
339
|
|
359
340
|
# [review] - Use _tag string as symbol reference in hash or keep as string?
|
360
341
|
# Look into to_sym to keep format of all _issue params the same
|
361
342
|
_issue_list[_tag].push(_issue)
|
362
343
|
|
344
|
+
# Increment issue counter for posting status
|
345
|
+
@config.issue_count = @config.issue_count.next
|
363
346
|
end
|
364
347
|
|
365
348
|
# [review] - Return of parse_file is different than watson-perl
|
@@ -419,11 +402,12 @@ module Watson
|
|
419
402
|
'.zsh' => ['#'], # Zsh
|
420
403
|
'.clj' => [';;'], # Clojure
|
421
404
|
'.sql' => ['---', '//', '#' ], # SQL and PL types
|
422
|
-
'.lua' => ['--', '--[[']
|
405
|
+
'.lua' => ['--', '--[['], # Lua
|
406
|
+
'.html' => ['<!--'] # HTML
|
423
407
|
}
|
424
408
|
|
425
409
|
loop do
|
426
|
-
_mtch = filename.match(/(\.(\
|
410
|
+
_mtch = filename.match(/(\.(\S+))$/)
|
427
411
|
debug_print "Extension: #{ _mtch }\n"
|
428
412
|
|
429
413
|
# Break if we don't find a match
|
@@ -432,7 +416,7 @@ module Watson
|
|
432
416
|
return _ext[_mtch[0]] if _ext.has_key?(_mtch[0])
|
433
417
|
|
434
418
|
# Can't recognize extension, keep looping in case of .bk, .#, ect
|
435
|
-
filename = filename.gsub(/(\.(\
|
419
|
+
filename = filename.gsub(/(\.(\S+))$/, '')
|
436
420
|
debug_print "Didn't recognize, searching #{ filename }\n"
|
437
421
|
|
438
422
|
end
|
data/lib/watson/remote.rb
CHANGED
@@ -19,14 +19,15 @@ module Watson
|
|
19
19
|
# Default options hash for http_call
|
20
20
|
# Will get merged with input argument hash to maintain defaults
|
21
21
|
HTTP_opts = {
|
22
|
-
:url
|
23
|
-
:ssl
|
24
|
-
|
22
|
+
:url => nil, #--> URL of endpoint [String]
|
23
|
+
:ssl => false, #--> Use SSL in connection (HTTPS) (True/False]
|
24
|
+
:method => nil, #--> GET or POST for respective HTTP method [String]
|
25
25
|
:basic_auth => Array.new(0), #--> Array of username and pw to use for basic authentication
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
# If empty, assume no user authentication [Array]
|
27
|
+
:auth => nil, #--> Authentication token [String]
|
28
|
+
:headers => Array.new(0), #--> Array of headers, where headers are hash of key value
|
29
|
+
:data => nil, #--> Hash of data to be POST'd in HTTP request [Hash]
|
30
|
+
:verbose => false #--> Turn on verbose debug for this call [True/False]
|
30
31
|
}
|
31
32
|
|
32
33
|
###########################################################
|
@@ -81,10 +82,18 @@ module Watson
|
|
81
82
|
|
82
83
|
# Check for Authentication token key in hash to be used in header
|
83
84
|
# I think this is pretty universal, but specifically works for GitHub
|
85
|
+
# This is standard for OAuth I think...
|
84
86
|
if opts[:auth]
|
85
87
|
_req["Authorization"] = "token #{ opts[:auth] }"
|
86
88
|
end
|
87
89
|
|
90
|
+
# But sometimes we need we need other headers
|
91
|
+
# Set specific header (GitLab requires PRIVATE_TOKEN)
|
92
|
+
opts[:headers].each do |header|
|
93
|
+
_req["#{ header[:field] }"] = header[:value]
|
94
|
+
end
|
95
|
+
|
96
|
+
|
88
97
|
# [review] - Add :data_format to use set_form_data vs json body?
|
89
98
|
# For now, use Hash or Array, this is to differentiate between
|
90
99
|
# putting post data in body vs putting it in the form
|
@@ -115,6 +124,38 @@ module Watson
|
|
115
124
|
# return {:json => _json, :resp => _resp}
|
116
125
|
return _json, _resp
|
117
126
|
end
|
127
|
+
|
128
|
+
|
129
|
+
def post_structure(structure, config, counter)
|
130
|
+
|
131
|
+
# Return if remote isn't valid or both github and bitbucket aren't valid
|
132
|
+
return false if !config.remote_valid || (!config.github_valid && !config.bitbucket_valid && !config.gitlab_valid)
|
133
|
+
formatter = Printer.new(config).build_formatter
|
134
|
+
|
135
|
+
# Parse through entire structure and post issues to remote
|
136
|
+
structure[:files].each do |file|
|
137
|
+
config.tag_list.each do |tag|
|
138
|
+
file[tag].each do |issue|
|
139
|
+
|
140
|
+
Remote::GitHub.post_issue(issue, config) if config.github_valid
|
141
|
+
Remote::Bitbucket.post_issue(issue, config) if config.bitbucket_valid
|
142
|
+
Remote::GitLab.post_issue(issue, config) if config.gitlab_valid
|
143
|
+
formatter.print_status "!", GREEN
|
144
|
+
print BOLD + "Remote Posting Status: #{counter += 1} / #{config.issue_count}"
|
145
|
+
print "\r"
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
# Pass any dirs we find back to this structure printer and repeat
|
151
|
+
structure[:subdirs].each do |dir|
|
152
|
+
counter = Remote::post_structure(dir, config, counter)
|
153
|
+
end
|
154
|
+
|
155
|
+
# Return counter becaused FixNums are wierd
|
156
|
+
counter
|
157
|
+
end
|
158
|
+
|
118
159
|
end
|
119
160
|
end
|
120
161
|
end
|
data/lib/watson/version.rb
CHANGED
data/spec/config_spec.rb
CHANGED
@@ -52,7 +52,6 @@ describe Config do
|
|
52
52
|
@config.read_conf.should be_true
|
53
53
|
@config.dir_list.should include('.')
|
54
54
|
@config.tag_list.should include('fix', 'review', 'todo')
|
55
|
-
@config.ignore_list.should include('.git', '*.swp')
|
56
55
|
|
57
56
|
end
|
58
57
|
end
|
@@ -92,14 +91,12 @@ describe Config do
|
|
92
91
|
@config.github_valid.should be_false
|
93
92
|
@config.github_api.should == ''
|
94
93
|
@config.github_repo.should == ''
|
95
|
-
@config.github_issues.should ==
|
96
|
-
:closed => Hash.new() }
|
94
|
+
@config.github_issues.should == Hash.new()
|
97
95
|
|
98
96
|
@config.bitbucket_valid.should be_false
|
99
97
|
@config.bitbucket_api.should == ''
|
100
98
|
@config.bitbucket_repo.should == ''
|
101
|
-
@config.bitbucket_issues.should ==
|
102
|
-
:closed => Hash.new() }
|
99
|
+
@config.bitbucket_issues.should == Hash.new()
|
103
100
|
|
104
101
|
end
|
105
102
|
end
|
@@ -107,7 +104,6 @@ describe Config do
|
|
107
104
|
describe '#run' do
|
108
105
|
it 'should populate all member vars' do
|
109
106
|
@config.run
|
110
|
-
@config.ignore_list.should include('.git', '*.swp')
|
111
107
|
@config.tag_list.should include('fix', 'review', 'todo')
|
112
108
|
@config.dir_list.should include('.')
|
113
109
|
end
|
data/watson.gemspec
CHANGED
@@ -10,13 +10,13 @@ Gem::Specification.new do |s|
|
|
10
10
|
|
11
11
|
s.authors = ["nhmood"]
|
12
12
|
s.email = 'nhmood@goosecode.com'
|
13
|
-
s.homepage
|
13
|
+
s.homepage = 'http://goosecode.com/watson'
|
14
14
|
|
15
|
-
s.summary
|
15
|
+
s.summary = "an inline issue manager"
|
16
16
|
s.description = "an inline issue manager with GitHub and Bitbucket support"
|
17
17
|
|
18
|
-
s.license
|
19
|
-
s.files
|
18
|
+
s.license = 'MIT'
|
19
|
+
s.files = `git ls-files`.split("\n").delete_if { |file| file.include?("assets/examples") }
|
20
20
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
21
21
|
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
22
22
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: watson-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nhmood
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-12-
|
11
|
+
date: 2013-12-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -81,6 +81,7 @@ files:
|
|
81
81
|
- lib/watson/formatters/unite_formatter.rb
|
82
82
|
- lib/watson/fs.rb
|
83
83
|
- lib/watson/github.rb
|
84
|
+
- lib/watson/gitlab.rb
|
84
85
|
- lib/watson/parser.rb
|
85
86
|
- lib/watson/printer.rb
|
86
87
|
- lib/watson/remote.rb
|