watson-ruby 1.6.1 → 1.6.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1c34c96ffee2121472d23d7a52d7e2d18e3e8ec2
4
- data.tar.gz: 3ff0b2e4488f44809386da142c524c3b92102e48
3
+ metadata.gz: 514fedab81cf81f62c7a4fb415d83750ebf05ad5
4
+ data.tar.gz: 4b63e079270286b0fd7bea2a3d1a5fc3e17310ff
5
5
  SHA512:
6
- metadata.gz: c195675726ac8893b28dca39680622bcf6aa817b94139ea6488599ce4dffccf353b58ebf7198303a8f4621fdfe8f9f29c9dc2e0c31f48a020cfdf74df219330e
7
- data.tar.gz: 9fc583eec772f5471e69be16edeca2db5ae4fec5de638acfd6aa6bcb46c45d858047ed262c876b92117f15b6c81efdbb71f314c9660cbd5ae5efba2d4ff996a6
6
+ metadata.gz: db6f2c055827b284eb40682f5bb137c7ee21cbdb85dde8924f3a2653c9f334922f6493af9c974d603957b0d3901cbd3f80fa31b84ebf8ef0be7a95dcd243dc10
7
+ data.tar.gz: 14a2b0d85756bb5357c49de86029be86d6a467f955d687af9269326049196809d16d342cc41b49de1dd6ad22ba65ae3924c3923245c60b63eba82aba94a9ff9e
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- watson-ruby (1.6.1)
4
+ watson-ruby (1.6.2)
5
5
  json
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # watson-ruby [![Gem Version](https://badge.fury.io/rb/watson-ruby.png)](http://badge.fury.io/rb/watson-ruby) [![Build Status](https://travis-ci.org/nhmood/watson-ruby.png?branch=master)](https://travis-ci.org/nhmood/watson-ruby)
1
+ # watson-ruby [![Gem Version](https://badge.fury.io/rb/watson-ruby.png)](http://badge.fury.io/rb/watson-ruby) [![Build Status](https://travis-ci.org/nhmood/watson-ruby.png?branch=master)](https://travis-ci.org/nhmood/watson-ruby)
2
2
 
3
3
  ### an inline issue manager
4
4
  [watson](http://goosecode.com/watson) ([mirror](http://nhmood.github.io/watson-ruby)) is a tool for creating and tracking bug reports, issues, and internal notes in code.
@@ -8,11 +8,11 @@ It is avaliable in two flavors, [watson-ruby](http://github.com/nhmood/watson-ru
8
8
  ### See the RDoc documentation [here](http://goosecode.com/watson/ruby/doc/) ([mirror](http://nhmood.github.io/watson-ruby/ruby/doc/))
9
9
 
10
10
  ## Installation
11
- watson-ruby has been tested with **Ruby v2.0.0p247** and **RubyGems v2.0.3** (on **Arch Linux**)
11
+ watson-ruby has been tested with **Ruby v2.1** and **RubyGems v2.0.3** (on **Arch Linux**)
12
12
  watson-ruby requires the ```json``` gem
13
13
 
14
14
  ### From Repo
15
- watson-ruby is avaliable as a RubyGems ([link](https://rubygems.org/gems/watson-ruby)).
15
+ watson-ruby is avaliable as a RubyGems ([link](https://rubygems.org/gems/watson-ruby)).
16
16
  You can either download it directory from ```gem``` using
17
17
  ```
18
18
  gem install watson-ruby
@@ -38,10 +38,10 @@ bundle exec rake
38
38
 
39
39
  ## Usage
40
40
  For a quick idea of how to use watson, check out the [app demo](http://goosecode.com/watson)! ([mirror](http://nhmood.github.io/watson-ruby))
41
- See below for a description of what all the command line arguments do.
41
+ See below for a description of what all the command line arguments do.
42
42
 
43
43
  ### Supported Languages
44
- If you see something missing from the list please either file an issue or
44
+ If you see something missing from the list please either file an issue or
45
45
  submit a pull request (comment parsing happens in **lib/watson/paser.rb**)
46
46
 
47
47
  - **C / C++**
@@ -69,6 +69,7 @@ submit a pull request (comment parsing happens in **lib/watson/paser.rb**)
69
69
  - **Markdown**
70
70
  - **HTML**
71
71
  - **Emacslisp**
72
+ - **LaTex**
72
73
 
73
74
 
74
75
  ## Command line arguments
@@ -79,36 +80,37 @@ If no RC file exists, default RC file will be created
79
80
 
80
81
  -c, --context-depth lines of context to provide with posted issue
81
82
  -d, --dirs list of directories to search in
83
+ --debug enable debug prints from specified class
84
+ all debug prints enabled if no arguments passed
82
85
  -f, --files list of files to search in
83
86
  --format set output format for watson
84
87
  [print, json, unite, silent]
85
88
  -h, --help print help
86
89
  -i, --ignore list of files, directories, or types to ignore
87
90
  -p, --parse-depth depth to recursively parse directories
88
- -r, --remote list / create tokens for remote posting
89
- [github, bitbucket, gitlab, asana]
91
+ -r, --remote list / create tokens for Bitbucket/GitHub
90
92
  -s, --show filter results (files listed) based on issue status
91
93
  [all, clean, dirty]
92
94
  -t, --tags list of tags to search for
93
95
  -u, --update update remote repos with current issues
94
96
  -v, --version print watson version and info
95
97
 
96
-
97
98
  Any number of files, tags, dirs, and ignores can be listed after flag
98
99
  Ignored files should be space separated
99
100
  To use *.filetype identifier, encapsulate in "" to avoid shell substitutions
100
101
 
101
102
  Report bugs to: watson@goosecode.com
102
- watson home page: <http://goosecode.com/projects/watson>
103
+ watson home page: <http://goosecode.com/watson>
103
104
  [goosecode] labs | 2012-2013
104
105
 
106
+
105
107
  ```
106
108
  ### All file/directory/tag related parameters support relative as well as absolute paths.
107
109
 
108
110
  ### -c, --context-lines [LINES]
109
111
  This parameter specifies how many lines of context watson should include when posting issues to remote repos.
110
112
  When this parameter is set from the command line, the .watsonrc config file is written with the value; the command line option effectively sets the default value for this feature in the current directory.
111
- The default value is set to 15 (and can be found in the lib/watson/command.rb file).
113
+ The default value is set to 15 (and can be found in the lib/watson/command.rb file).
112
114
 
113
115
 
114
116
  ### -d, --dirs [DIRS]
@@ -120,7 +122,7 @@ If watson is run without this parameter, the current directory is parsed.
120
122
  ### --debug [CLASS]
121
123
  This parameter enables debug prints for the specified class.
122
124
  It should be followed by a space separated list of classes that should print debug messages.
123
- The list of classes are found in `lib/watson`.
125
+ The list of classes are found in `lib/watson`.
124
126
  If passed without arguments, debug prints in **ALL** classes of watson will be enabled.
125
127
 
126
128
 
@@ -134,19 +136,19 @@ This parameter specifies how watson should output the issues that it finds.
134
136
  If passed with `print`, the regular printing will occur, either to Unix less or STDOUT (depending on system).
135
137
  If passed with `json`, the output will be in the form of JSON, and will be stored in `.watsonresults`.
136
138
 
137
- - This particular option is useful if attempting to intergrate watson into other tools / platforms.
139
+ - This particular option is useful if attempting to intergrate watson into other tools / platforms.
138
140
 
139
141
  If passed with `unite`, the output will be compatible with the unite.vim plugin
140
142
  (see the **Unite** section below or visit [alpaca-tc/vim-unite-watson](https://github.com/alpaca-tc/vim-unite-watson.vim)
141
143
 
142
144
  If passed with `silent`, watson will have no output.
143
145
 
144
- - This particular option is useful if remote posting to GitHub, Bitbucket, or GitLab is desired without the visual component of watson.
146
+ - This particular option is useful if remote posting to GitHub, Bitbucket, or GitLab is desired without the visual component of watson.
145
147
  - For example, you could set up a **git commit hook** to post issues to GitHub/Bitbucket/GitLab, but avoid the giant print out every time.
146
148
 
147
149
 
148
150
  ### -h, --help
149
- This parameter displays the list of avaliable options for watson.
151
+ This parameter displays the list of avaliable options for watson.
150
152
 
151
153
 
152
154
  ### -i, --ignore [IGNORES]
@@ -159,13 +161,13 @@ This parameter should be used as an opposite to -d/-f, when there are more files
159
161
  This parameter specifies how deep watson should recursively parse directories.
160
162
  The 'depth' is defined as how many levels deep from the top-most specified directory to parse.
161
163
  If individual directories are passed with the -d (--dirs) flag, each will be parsed PARSE_DEPTH layers, regardless of their depth from the current directory.
162
- If watson is run without this parameter, the parsing depth is unlimited and will search through all subdirectories found.
164
+ If watson is run without this parameter, the parsing depth is unlimited and will search through all subdirectories found.
163
165
 
164
166
 
165
167
  ### -r, --remote [GITHUB, BITBUCKET, GITLAB, ASANA]
166
168
  This parameter is used to both list currently established remotes as well as setup new ones.
167
169
  If passed without any options, the currently established remotes will be listed.
168
- If passed with a github, bitbucket, gitlab, asana argument, watson will proceed to ask some questions to set up the corresponding remote.
170
+ If passed with a github, bitbucket, gitlab, asana argument, watson will proceed to ask some questions to set up the corresponding remote.
169
171
 
170
172
 
171
173
  ### -s, --show [ALL, CLEAN, DIRTY]
@@ -194,19 +196,21 @@ This parameter displays the current version of watson you are running.
194
196
  watson supports an RC file that allows for reusing commong settings without repeating command line arguments every time.
195
197
 
196
198
  The .watsonrc is placed in every directory that watson is run from as opposed to a unified file (in ~/.watsonrc for example). The thought process behind this is that each project may have a different set of folders to ignore, directories to search through, and tags to look for.
197
- For example, a C/C++ project might want to look in src/ and ignore obj/ whereas a Ruby project might want to look in lib/ and ignore assets/.
199
+ For example, a C/C++ project might want to look in src/ and ignore obj/ whereas a Ruby project might want to look in lib/ and ignore assets/.
198
200
 
199
201
  A base `.watsonrc` is created in the users `$HOME` directory and used as the template for creating all subsequent config files.
200
202
  Any changes made in the `$HOME/.watsonrc` will carry on towards new configs, but will **not** update previously created configs.
201
203
  The `$HOME/.watsonrc` is directly copied, not merged, as to avoid confusion as to the source of config parameters.
204
+ The `$HOME/.watsonrc` contains all remote GitHub API tokens created. The individual project `.watsonrc` will contain only the username
205
+ associated with the API token, and will reference `$HOME/.watsonrc` to obtain the API token on runtime.
202
206
 
203
207
  The .watsonrc file is fairly straightforward...
204
- **[dirs]** - This is a newline separated list of directories to look in while parsing.
208
+ **[dirs]** - This is a newline separated list of directories to look in while parsing.
205
209
 
206
- **[tags]** - This is a newline separated list of tags to look for while parsing.
210
+ **[tags]** - This is a newline separated list of tags to look for while parsing.
207
211
 
208
- **[ignore]** - This is a newline separated list of files / folders to ignore while parsing.
209
- This supports wildcard type selecting by providing .filename (no * required)
212
+ **[ignore]** - This is a newline separated list of files / folders to ignore while parsing.
213
+ This supports wildcard type selecting by providing .filename (no * required)
210
214
 
211
215
  **[context_depth]** - This value determines how many lines of context should be grabbed for each issue when posting to a remote.
212
216
 
@@ -216,12 +220,20 @@ The format of filetype entries should be
216
220
  ".type" => ["comment1", "comment2"]
217
221
  ".nhmood" => ["@@", "***"]
218
222
  ".cc" => ["//"]
219
- ```
223
+ ```
224
+
225
+ **[show_type]** - This field allows for setting the default show type, similar to the -s/--show command line arg
226
+ If set to `clean`, only files that watson did *NOT* find issues in will be displayed.
227
+ If set to `dirty`, only files that watson *DID* find issues in will be displayed.
228
+ If set to `all`, watson will display all files, regardless of their issue status.
229
+ The default behavior of watson is the `all` option.
230
+
231
+ **[tag_format]** - Customize the tag format for your project. Defaults to `[TAG] - COMMENT`. "TAG" and "COMMENT" are required keywords.
220
232
 
221
- **[(github/bitbucket/gitlab/asana)_api]** - If a remote is established, the API key for the corresponding remote is stored here.
222
- Currently, OAuth has yet to be implemented for Bitbucket so the Bitbucket username is stored here.
233
+ **[(github/bitbucket/gitlab/asana)_api]** - If a remote is established, the API key for the corresponding remote is stored here.
234
+ Currently, OAuth has yet to be implemented for Bitbucket so the Bitbucket username is stored here.
223
235
 
224
- **[(github/bitbucket/gitlab)_repo]** - The repo name / path is stored here.
236
+ **[(github/bitbucket/gitlab)_repo]** - The repo name / path is stored here.
225
237
 
226
238
  **[(github/gitlab)_endpoint]** - The endpoint in case of GitHub Enterprise of GitLab configuration.
227
239
 
@@ -229,19 +241,19 @@ Currently, OAuth has yet to be implemented for Bitbucket so the Bitbucket userna
229
241
 
230
242
  **[asana_workspace]** - The Asana workspace in case of Asana integration is stored here.
231
243
 
232
- The remote related .watsonrc options shouldn't need to be edited manually, as they are automatically populated when the -r, --remote setup is called.
244
+ The remote related .watsonrc options shouldn't need to be edited manually, as they are automatically populated when the -r, --remote setup is called.
233
245
 
234
246
  ## unite.vim
235
- ### [vim-unite-watson.vim](https://github.com/alpaca-tc/vim-unite-watson.vim) by [alpaca-tc](http://github.com/alpaca-tc)
247
+ ### [vim-unite-watson.vim](https://github.com/alpaca-tc/vim-unite-watson.vim) by [alpaca-tc](http://github.com/alpaca-tc)
236
248
  **alpaca-tc** was kind enough to create a [unite.vim](https://github.com/Shougo/unite.vim) plugin to integrate with watson!
237
249
  **unite.vim** allows you to create user interfaces within vim and lets you search and display any kind of information.
238
- The **unite-vim-watson.vim** plugin allows you to:
250
+ The **unite-vim-watson.vim** plugin allows you to:
239
251
 
240
- - Generate a list of issues directly inside vim
241
- - Search and select files displayed in the watson output
242
- - Jump directly to the line where the issue is located (!!)
252
+ - Generate a list of issues directly inside vim
253
+ - Search and select files displayed in the watson output
254
+ - Jump directly to the line where the issue is located (!!)
243
255
 
244
- If you use vim I ***definitely*** recommend using **vim-unite-watson.vim**, it works wonders for productivity!
256
+ If you use vim I ***definitely*** recommend using **vim-unite-watson.vim**, it works wonders for productivity!
245
257
 
246
258
  ### See it in action [here (GIF demo)](https://github.com/alpaca-tc/vim-unite-watson.vim)
247
259
 
@@ -251,7 +263,7 @@ Special thanks to [@eugenekolo](http://twitter.com/eugenekolo) [[email](eugenek@
251
263
  Special thanks to [@crowell](http://github.com/crowell) for testing out watson-ruby!
252
264
 
253
265
  ## FAQ
254
- - **Will inline issues get deleted if I close them on GitHub/Bitbucket/GitLab?**
266
+ - **Will inline issues get deleted if I close them on GitHub/Bitbucket/GitLab?**
255
267
  No, watson won't touch your source code, it will only inform you that issues have been closed remotely.
256
268
 
257
269
  - **Why Ruby?**
@@ -450,20 +450,31 @@ module Watson
450
450
  formatter = Printer.new(@config).build_formatter
451
451
  formatter.print_header
452
452
 
453
+ # Get $HOME/.watsonrc to check for remotes
454
+ _home_conf = Watson::Config.home_conf
455
+
453
456
  print BOLD + "Existing Remotes:\n" + RESET
454
457
 
455
458
  # Check the config for any remote entries (GitHub or Bitbucket) and print
456
459
  # We *should* always have a repo + API together, but API should be enough
457
- if @config.github_api.empty? && @config.bitbucket_api.empty? && @config.asana_api.empty?
460
+ if _home_conf.github_api.empty? && @config.bitbucket_api.empty? && @config.asana_api.empty?
458
461
  formatter.print_status "!", YELLOW
459
462
  print BOLD + "No remotes currently exist\n\n" + RESET
460
463
  end
461
464
 
462
- if !@config.github_api.empty?
463
- print BOLD + "GitHub User : " + RESET + "#{ @config.github_api }\n"
465
+ unless _home_conf.github_api.empty?
466
+ print BOLD + "- GitHub APIs -\n" + RESET
467
+ _home_conf.github_api.each_with_index do |_api, _i|
468
+ print BOLD + "#{_i+1}. #{_api[0]}" + RESET + " : #{_api[1]}\n"
469
+ end
470
+ print "\n\n"
471
+ end
472
+
473
+ unless @config.github_repo.empty?
464
474
  print BOLD + "GitHub Repo : " + RESET + "#{ @config.github_repo }\n\n"
465
475
  end
466
476
 
477
+
467
478
  if !@config.bitbucket_api.empty?
468
479
  print BOLD + "Bitbucket User : " + RESET + "#{ @config.bitbucket_api }\n" + RESET
469
480
  print BOLD + "Bitbucket Repo : " + RESET + "#{ @config.bitbucket_repo }\n\n" + RESET
@@ -4,12 +4,26 @@ module Watson
4
4
  # that are accessed throughout watson
5
5
  class Config
6
6
 
7
+ class << self
8
+ def home_conf
9
+ # Return Conf object for $HOME/.watsonrc
10
+ _home_conf = Watson::Config.new()
11
+ _home_conf.rc_file = File.expand_path('~') + '/.watsonrc'
12
+ _home_conf.read_conf
13
+ return _home_conf
14
+ end
15
+ end
16
+
17
+
7
18
  # Include for debug_print
8
19
  include Watson
9
20
 
10
21
  # [review] - Combine into single statement (for performance or something?)
11
22
  # [todo] - Add config options (rc file) for default max depth and context lines
12
23
 
24
+ # Location of .watsonrc, modified when working with remote API tokens
25
+ attr_accessor :rc_file
26
+
13
27
  # List of all files/folders to ignore when parsing
14
28
  attr_accessor :ignore_list
15
29
  # List of directories to parse
@@ -18,6 +32,8 @@ module Watson
18
32
  attr_accessor :file_list
19
33
  # List of tags to look for when parsing
20
34
  attr_accessor :tag_list
35
+ # Tag format for look for
36
+ attr_accessor :tag_format
21
37
  # List of custom filetypes to accept
22
38
  attr_accessor :type_list
23
39
  # Number of directories to parse recursively
@@ -132,11 +148,13 @@ module Watson
132
148
  @type_list = Hash.new()
133
149
  @issue_count = 0
134
150
 
151
+ @tag_format = "[TAG] - COMMENT"
152
+
135
153
  # Remote options
136
154
  @remote_valid = false
137
155
 
138
156
  @github_valid = false
139
- @github_api = ""
157
+ @github_api = Hash.new
140
158
  @github_endpoint = ""
141
159
  @github_repo = ""
142
160
  @github_issues = Hash.new()
@@ -394,6 +412,9 @@ module Watson
394
412
  end
395
413
  debug_print "@tag_list --> #{ @tag_list }\n"
396
414
 
415
+ when "tag_format"
416
+ @tag_format = _line.chomp!
417
+ debug_print @tag_format
397
418
 
398
419
  when "type"
399
420
  # Regex to grab ".type" => ["param1", "param2"]
@@ -427,10 +448,43 @@ module Watson
427
448
  debug_print "@ignore_list --> #{ @ignore_list }\n"
428
449
 
429
450
 
451
+ when "show_type"
452
+ # No need for parsing, just check case
453
+
454
+ case _line.chomp.downcase
455
+ when "clean"
456
+ @show_type = "clean"
457
+ debug_print "@show_type set to \"clean\" from config\n"
458
+
459
+ when "dirty"
460
+ @show_type = "dirty"
461
+ debug_print "@show_type set to \"dirty\" from config\n"
462
+
463
+ else
464
+ @show_type = "all"
465
+ debug_print "@show_type set to \"all\" from config\n"
466
+
467
+ end
468
+
469
+
470
+ # Project directories reference $HOME/.watsonrc for GitHub API token
471
+ # If we don't find a username=token format string, use username
472
+ # as Hash reference to $HOME/.watsonrc --> github_api
430
473
  when "github_api"
431
- # No need for regex on API key, GitHub setup should do this properly
432
- # Chomp to get rid of any nonsense
433
- @github_api = _line.chomp!
474
+ # Regex for username=token
475
+ _mtch = _line.chomp.match(/(\S+)=(\S+)/)
476
+
477
+ # If no = match, then it is a hash reference
478
+ if _mtch.nil?
479
+ _home = Watson::Config.home_conf
480
+ @github_api[_line.chomp] = _home.github_api[_line.chomp]
481
+
482
+ # If we do find match, this is a $HOME/.watsonrc
483
+ # Populate home conf with all API tokens
484
+ else
485
+ @github_api[_mtch[1]] = _mtch[2]
486
+ end
487
+
434
488
  debug_print "GitHub API: #{ @github_api }\n"
435
489
 
436
490
 
@@ -511,7 +565,7 @@ module Watson
511
565
 
512
566
  # Check if RC exists, if not create one
513
567
  if !Watson::FS.check_file(@rc_file)
514
- print "Unable to open #{ @rc_file }, exiting\n"
568
+ print "Unable to open #{ @rc_file }, attempting to create\n"
515
569
  create_conf
516
570
  else
517
571
  debug_print "Opened #{ @rc_file } for reading\n"
@@ -592,15 +646,48 @@ module Watson
592
646
  end
593
647
 
594
648
  # Now that we have skipped all the things that need to be updated, write them in
595
- params.each do | _param |
596
- _update.write("[#{ _param }]\n")
597
- _update.write("#{ self.instance_variable_get("@#{ _param }") }")
649
+ params.each do | _name |
650
+ _update.write("[#{ _name }]\n")
651
+ _param = self.instance_variable_get("@#{ _name }")
652
+
653
+ if _param.is_a?(Hash)
654
+ # If the config file we are dealing with is in $HOME/.watsonrc
655
+ # then write as username=token, else write just username
656
+ pp(_param)
657
+ if @rc_file == File.expand_path('~') + '/.watsonrc'
658
+ _param.each do |val|
659
+ _update.write("#{val[0]}=#{val[1]}\n")
660
+ end
661
+ else
662
+ _param.each do |val|
663
+ _update.write("#{val[0]}\n")
664
+ end
665
+ end
666
+
667
+ elsif _param.is_a?(Array)
668
+ _param.each do |val|
669
+ _update.write("#{val}\n")
670
+ end
671
+
672
+ else
673
+ _update.write("#{_param}\n")
674
+ end
675
+
598
676
  _update.write("\n\n\n")
599
677
  end
600
678
 
601
679
  _update.close
602
680
  end
603
681
 
682
+
683
+
684
+ ###########################################################
685
+ # Get first key from API list (hash)
686
+ def github_token
687
+ self.github_api[github_api.keys[0]]
688
+ end
689
+
690
+
604
691
  end
605
692
  end
606
693
 
@@ -16,6 +16,7 @@ module Watson
16
16
  # Include for debug_print
17
17
  include Watson
18
18
 
19
+
19
20
  #############################################################################
20
21
  # Setup remote access to GitHub
21
22
  # Get Username, Repo, and PW and perform necessary HTTP calls to check validity
@@ -25,21 +26,52 @@ module Watson
25
26
  debug_print "#{ self.class } : #{ __method__ }\n"
26
27
 
27
28
  formatter = Printer.new(config).build_formatter
29
+
30
+ # Create new RC for $HOME/.watsonrc and check for existing remotes there
31
+ _home_conf = Watson::Config.home_conf
32
+
33
+ return false if !get_token(config, _home_conf, formatter)
34
+ return false if !get_repo(config, formatter)
35
+
36
+ # Give user some info
37
+ print "\n"
38
+ formatter.print_status "o", GREEN
39
+ print BOLD + "GitHub successfully setup\n" + RESET
40
+ print " Issues will now automatically be retrieved from GitHub by default\n"
41
+ print " Use -u, --update to post issues to GitHub\n"
42
+ print " See help or README for more details on GitHub/Bitbucket access\n\n"
43
+
44
+ true
45
+ end
46
+
47
+
48
+ #############################################################################
49
+ # Obtain API token fom GitHub
50
+ # Either generate new Auth Token or use existing for current dir/project
51
+ def get_token(config, home_conf, formatter)
52
+
53
+ # Avaliable GitHub APIs
54
+ _github = home_conf.github_api
55
+
28
56
  formatter.print_status "+", GREEN
29
57
  print BOLD + "Obtaining OAuth Token for GitHub...\n" + RESET
30
58
 
31
- # Check config to make sure no previous API exists
32
- unless config.github_api.empty? && config.github_repo.empty? && config.github_endpoint.empty?
33
- formatter.print_status "!", RED
34
- print BOLD + "Previous GitHub API + Repo is in RC, are you sure you want to overwrite?\n" + RESET
35
- print " (Y)es/(N)o: "
59
+ unless _github.empty?
60
+ formatter.print_status "!", YELLOW
61
+ print BOLD + "Previous GitHub APIs found do you want to use one that is listed?\n" + RESET
62
+ print " Enter # of API key (blank will create new): "
36
63
 
37
64
  # Get user input
38
- _overwrite = $stdin.gets.chomp
39
- if ["no", "n"].include?(_overwrite.downcase)
40
- print "\n\n"
65
+ unless (_api = $stdin.gets.chomp).empty?
66
+ print "\n"
67
+ _api = _api.to_i - 1
68
+
69
+ # Return specified API token if # selected is valid
70
+ return _github[_github.keys[_api]] if _api >= 0 && _api < _github.length
71
+
41
72
  formatter.print_status "x", RED
42
- print BOLD + "Not overwriting current GitHub API + repo info\n" + RESET
73
+ print BOLD + "Invalid API selected\n" + RESET
74
+ print " Make sure the correct # was selected from the list!\n" + RESET
43
75
  return false
44
76
  end
45
77
  end
@@ -53,6 +85,7 @@ module Watson
53
85
  print BOLD + "Is this a GitHub Enterprise account?\n" + RESET
54
86
  print " (Y)es/(N)o: "
55
87
 
88
+
56
89
  # Get user input
57
90
  _enterprise = $stdin.gets.chomp
58
91
  if ["yes", "y"].include?(_enterprise.downcase)
@@ -144,13 +177,32 @@ module Watson
144
177
  return false
145
178
  end
146
179
 
180
+ # Add to $HOME/.watsonrc and current .watsonrc
181
+ home_conf.github_api[_username] = _json["token"]
182
+ home_conf.update_conf("github_api")
183
+
147
184
  # Store endpoint and API key obtained from POST to @config.github_api
148
185
  config.github_endpoint = _endpoint
149
- config.github_api = _json["token"]
186
+
187
+ # If we are currently in $HOME then don't touch the .watsonrc
188
+ # [todo] - Better way of selecting API if in $HOME, or just don't use in $HOME...
189
+ unless Dir.pwd.eql?(File.expand_path('~'))
190
+ config.github_api = {_username => _json["token"]}
191
+ config.update_conf("github_api", "github_endpoint")
192
+ end
193
+
194
+
150
195
  debug_print "Config GitHub API Endpoint updated to: #{ config.github_endpoint }\n"
151
196
  debug_print "Config GitHub API Key updated to: #{ config.github_api }\n"
152
197
 
198
+ true
199
+ end
200
+
153
201
 
202
+ #############################################################################
203
+ # Obtain repo info for GitHub
204
+ # Set repo for current dir/project
205
+ def get_repo(config, formatter)
154
206
  # Get repo information, if blank give error
155
207
  formatter.print_status "!", YELLOW
156
208
  print BOLD + "Repo information required\n" + RESET
@@ -186,10 +238,10 @@ module Watson
186
238
  #
187
239
  # Auth token
188
240
  opts = {
189
- :url => "#{ _endpoint }/repos/#{ _owner }/#{ _repo }/labels",
241
+ :url => "#{ config.github_endpoint }/repos/#{ _owner }/#{ _repo }/labels",
190
242
  :ssl => true,
191
243
  :method => "POST",
192
- :auth => config.github_api,
244
+ :auth => config.github_token,
193
245
  :data => {"name" => "watson",
194
246
  "color" => "00AEEF" },
195
247
  :verbose => false
@@ -217,6 +269,7 @@ module Watson
217
269
 
218
270
  # Store owner/repo obtained from POST to @config.github_repo
219
271
  config.github_repo = "#{ _owner }/#{ _repo }"
272
+ config.update_conf("github_repo")
220
273
  debug_print "Config GitHub API Key updated to: #{ config.github_repo }\n"
221
274
 
222
275
  # Inform user of label creation status (created above)
@@ -234,21 +287,7 @@ module Watson
234
287
  print " Status: #{ _resp.code } - #{ _resp.message }\n"
235
288
  end
236
289
 
237
- # All setup has been completed, need to update RC
238
- # Call config updater/writer from @config to write config
239
- debug_print "Updating config with new GitHub info\n"
240
- config.update_conf("github_api", "github_repo", "github_endpoint")
241
-
242
- # Give user some info
243
- print "\n"
244
- formatter.print_status "o", GREEN
245
- print BOLD + "GitHub successfully setup\n" + RESET
246
- print " Issues will now automatically be retrieved from GitHub by default\n"
247
- print " Use -u, --update to post issues to GitHub\n"
248
- print " See help or README for more details on GitHub/Bitbucket access\n\n"
249
-
250
- return true
251
-
290
+ true
252
291
  end
253
292
 
254
293
 
@@ -278,7 +317,7 @@ module Watson
278
317
  :url => "#{ config.github_endpoint }/repos/#{ config.github_repo }/issues?labels=watson",
279
318
  :ssl => true,
280
319
  :method => "GET",
281
- :auth => config.github_api,
320
+ :auth => config.github_token,
282
321
  :verbose => false
283
322
  }
284
323
 
@@ -361,7 +400,7 @@ module Watson
361
400
  :url => "#{ config.github_endpoint }/repos/#{ config.github_repo }/issues",
362
401
  :ssl => true,
363
402
  :method => "POST",
364
- :auth => config.github_api,
403
+ :auth => config.github_token,
365
404
  :data => { "title" => issue[:title] + " [#{ issue[:path] }]",
366
405
  "labels" => [issue[:tag], "watson"],
367
406
  "body" => _body },
@@ -208,8 +208,15 @@ module Watson
208
208
  # [review] - It is possible to embed the valid tags in the regexp,
209
209
  # with a ~5% performance gain, but this would loose the warning about
210
210
  # unrecognized tags.
211
- _comment_regex = /^[[#{ _comment_type }]+?\s+?]+\[(\w+)\]\s+-\s+(.+)/
211
+ _tag_format = Regexp.escape(@config.tag_format).gsub('\\ ', ' ')
212
+ _tag_format_regex = _tag_format
213
+ .gsub("TAG", '(\w+)')
214
+ .gsub("COMMENT", '(.+)')
215
+ .gsub(' ' , '\s+')
212
216
 
217
+ _comment_regex = /^(?:\s*[#{_comment_type}]+\s*)+#{_tag_format_regex}/
218
+
219
+ debug_print "Comment regex: #{_comment_regex}\n"
213
220
 
214
221
  # Open file and read in entire thing into an array
215
222
  # Use an array so we can look ahead when creating issues later
@@ -245,7 +252,7 @@ module Watson
245
252
  end
246
253
 
247
254
  # Set tag
248
- _tag = _mtch[1]
255
+ _tag = _mtch[1].downcase
249
256
 
250
257
  # Make sure that the tag that was found is something we accept
251
258
  # If not, skip it but tell user about an unrecognized tag
@@ -409,7 +416,8 @@ module Watson
409
416
  '.el' => [';'], # Emacslisp
410
417
  '.sqf' => ['//','/*'], # SQF
411
418
  '.sqs' => [';'], # SQS
412
- '.d' => ['//','/*'] # D
419
+ '.d' => ['//','/*'], # D
420
+ '.tex' => ['%'] # LaTex
413
421
  }
414
422
 
415
423
  # Merge config file type list with defaults
@@ -1,3 +1,3 @@
1
1
  module Watson
2
- VERSION = "1.6.1"
2
+ VERSION = "1.6.2"
3
3
  end
@@ -86,10 +86,12 @@ describe Config do
86
86
  @config.file_list.should == []
87
87
  @config.tag_list.should == []
88
88
 
89
+ @config.tag_format.should == "[TAG] - COMMENT"
90
+
89
91
  @config.remote_valid.should be_false
90
92
 
91
93
  @config.github_valid.should be_false
92
- @config.github_api.should == ''
94
+ @config.github_api.should == Hash.new()
93
95
  @config.github_repo.should == ''
94
96
  @config.github_issues.should == Hash.new()
95
97
 
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: watson-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.1
4
+ version: 1.6.2
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-29 00:00:00.000000000 Z
11
+ date: 2014-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  description: an inline issue manager with GitHub and Bitbucket support
@@ -59,8 +59,8 @@ executables:
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
- - .gitignore
63
- - .travis.yml
62
+ - ".gitignore"
63
+ - ".travis.yml"
64
64
  - Gemfile
65
65
  - Gemfile.lock
66
66
  - LICENSE
@@ -104,17 +104,17 @@ require_paths:
104
104
  - lib
105
105
  required_ruby_version: !ruby/object:Gem::Requirement
106
106
  requirements:
107
- - - '>='
107
+ - - ">="
108
108
  - !ruby/object:Gem::Version
109
109
  version: 2.0.0
110
110
  required_rubygems_version: !ruby/object:Gem::Requirement
111
111
  requirements:
112
- - - '>='
112
+ - - ">="
113
113
  - !ruby/object:Gem::Version
114
114
  version: '0'
115
115
  requirements: []
116
116
  rubyforge_project:
117
- rubygems_version: 2.0.14
117
+ rubygems_version: 2.2.0
118
118
  signing_key:
119
119
  specification_version: 4
120
120
  summary: an inline issue manager