jtag 0.1.10 → 0.1.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: db1f81c4454558bb43b86b14534a46106fffd94a
4
+ data.tar.gz: bbdbb8861c0be80a8199f019e586ddad637a3500
5
+ SHA512:
6
+ metadata.gz: e9a3aa5f5d9123c3d94a3a63d972781f3289267badac6ea367d3ac7b5242bc7d0a240af242985b7b42a1944dde1655582ab1d8daf17c099e3df7636c2aac9af7
7
+ data.tar.gz: a3bb2004a8e9e6760abb2c28ab5edec017eba25a4c213a4509efc59bd663132f1f43b9a7a4f311b52bb3ba78ba4deac88e1197bf2732ecde80eb6a3203b27152
data/bin/jtag CHANGED
@@ -22,19 +22,33 @@ end
22
22
  desc 'Debug level'
23
23
  default_value '0'
24
24
  arg_name 'debug_level'
25
- flag [:d,:debug]
25
+ flag [:d,:debug], :must_match => /\d+/, :type => Integer, :default_value => 0
26
26
 
27
27
  desc 'Run silently'
28
- switch [:s,'silent']
28
+ switch [:s,:silent]
29
29
 
30
- desc "Test (Dry run, don't update files)"
30
+ desc 'Perform case-insensitive matches and searches'
31
+ switch [:i,:case_insensitive]
32
+
33
+ desc "Test (dry run, don't update files)"
31
34
  long_desc "Run all commands and show results on the command line, but don't overwrite/update any files"
32
35
  default_value false
33
- switch [:t,'test']
36
+ switch [:t,:test]
34
37
 
35
38
  def console_log(msg="", options={})
36
- return if @silent
37
39
  err = options[:err] || false
40
+ options[:log] ||= false
41
+
42
+ if options[:log]
43
+ if err
44
+ @log.warn(msg)
45
+ else
46
+ @log.info(msg)
47
+ end
48
+ end
49
+
50
+ return if @silent
51
+
38
52
  unless err
39
53
  $stdout.puts msg
40
54
  else
@@ -106,8 +120,8 @@ command :search do |c|
106
120
  c.action do |global_options,options,args|
107
121
  tags = @jt.get_tags({:counts => true})
108
122
  if args.length > 0
123
+ re = args.join("|")
109
124
  tags.delete_if {|tag|
110
- re = args.join("|")
111
125
  if tag && tag['name'] =~ /(#{re})/i
112
126
  false
113
127
  else
@@ -158,10 +172,15 @@ command :posts_tagged do |c|
158
172
  if File.exists?(arg)
159
173
  files.push(arg)
160
174
  else
161
- exit_now! "No valid filename in arguments" if files.empty?
162
175
  tags.push(arg)
163
176
  end
164
177
  end
178
+ if files.empty?
179
+ if @jt.default_post_location && File.exists?(File.dirname(@jt.default_post_location))
180
+ files = Dir.glob(@jt.default_post_location)
181
+ end
182
+ end
183
+ exit_now! "No valid filename in arguments" if files.empty?
165
184
  files.each {|file|
166
185
  if File.exists?(file)
167
186
  post_tags = @jt.post_tags(file)
@@ -200,9 +219,116 @@ command :posts_tagged do |c|
200
219
  end
201
220
  end
202
221
 
222
+ desc 'Show tags with fewer than X posts attached to them, optionally removing them from specified posts'
223
+ arg_name 'file_pattern', :multiple
224
+ command :loners do |c|
225
+ c.desc 'Format to use when outputting tags to console: list, json, plist, csv or yaml. Defaults to yaml.'
226
+ c.arg_name 'output_format'
227
+ c.default_value 'yaml'
228
+ c.flag [:f,:format], :must_match => /^(csv|list|yaml|json|plist)$/, :type => String
229
+
230
+ c.desc 'Upper limit for how many posts a tag can be attached to and still be a loner'
231
+ c.arg_name 'max'
232
+ c.default_value '2'
233
+ c.flag [:m,:max], :default_value => 2, :must_match => /^\d+$/
234
+
235
+ c.desc "Remove tags with fewer than X posts attached"
236
+ c.switch [:r,:remove], :default_value => false
237
+
238
+ c.desc "Display output without attached occurence counts"
239
+ c.switch [:no_counts], :default_value => false
240
+
241
+ c.desc 'Output a file list of tags that can be edited and passed back in for removing'
242
+ c.arg_name 'filename'
243
+ c.flag [:e,:edit], :default_value => false, :type => String
244
+
245
+ c.action do |global_options,options,args|
246
+ max = options[:m].to_i
247
+ loner_tags = @jt.get_tags({:counts => true})
248
+ loner_tags.delete_if { |tag|
249
+ tag.class == FalseClass || tag['count'] > max
250
+ }
251
+ loner_tags.sort_by! {|tag| tag['count']}
252
+
253
+ exit_now! "No tags matched the criteria" if loner_tags.empty? || loner_tags.nil?
254
+
255
+ if options[:e]
256
+ path = File.expand_path(options[:e])
257
+ while File.exists?(path)
258
+ if path =~ /(\d+)(\.[^\.]+?)?$/
259
+ path.sub!(/(\d+)(\.[^\.]+?)?$/) do |m|
260
+ $1.next! + $2
261
+ end
262
+ else
263
+ path.sub!(/(\.[^\.]+?)?$/,'01\1')
264
+ end
265
+ end
266
+ File.open(path, 'w+') do |f|
267
+ f.puts "# Edit this file to remove tags you want to keep,"
268
+ f.puts "# then run `jtag remove -p '#{path}' [/path/to/posts/*.md]`"
269
+ f.puts "# to remove any tags left in the file."
270
+ f.puts "#"
271
+ f.puts "# The post counts are included for your convenience, and will"
272
+ f.puts "# be automatically ignored when reading the list back in."
273
+ f.puts "#"
274
+ f.puts "# Lines beginning with a # are comments (ignored), but you probably figured that out."
275
+ loner_tags.each{ |t|
276
+ f.printf "% 3d |\t%s\n", t['count'], t['name']
277
+ }
278
+ end
279
+
280
+ console_log "A list of results and instructions for use have been written to #{path}."
281
+ if ENV['EDITOR']
282
+ console_log
283
+ print "Would you like to open the file in #{ENV['EDITOR']} now? (y/N) "
284
+ input = STDIN.gets
285
+ if input =~ /^y/i
286
+ system "#{ENV['EDITOR']} '#{path}'"
287
+ end
288
+ end
289
+ elsif options[:r]
290
+ files = []
291
+ args.length.times do
292
+ arg = args.pop
293
+ files.push(arg) if File.exists?(arg)
294
+ end
295
+ if files.empty?
296
+ if @jt.default_post_location && File.exists?(File.dirname(@jt.default_post_location))
297
+ files = Dir.glob(@jt.default_post_location)
298
+ end
299
+ end
300
+ exit_now! "No valid filename in arguments" if files.empty?
301
+ files.each {|file|
302
+ tags = @jt.post_tags(file)
303
+ loner_tags.each { |d|
304
+ tags.delete_if { |tag|
305
+ if global_options[:i]
306
+ tag.downcase == d.downcase
307
+ else
308
+ tag == d
309
+ end
310
+ }
311
+ }
312
+ unless global_options[:t]
313
+ @jt.update_file_tags(file,tags)
314
+ console_log "Updated tags for #{file}", :log => true
315
+ end
316
+
317
+ console_log
318
+ console_log File.basename(file) + ":"
319
+ output_tags(tags, :format => options[:format], :filename => file )
320
+ }
321
+ else
322
+ output_tags(loner_tags.map{|tag|
323
+ count = options[:no_counts] ? "" : " (#{tag['count']})"
324
+ "#{tag['name']}#{count}"}, :format => options[:format] )
325
+ end
326
+ end
327
+ end
328
+
203
329
 
204
330
  desc 'Show the current tags for posts'
205
- arg_name 'filenames', :multiple
331
+ arg_name 'file_pattern', :multiple
206
332
  command :tags do |c|
207
333
  c.desc 'Format to use when outputting tags to console: list, json, plist, csv or yaml. Defaults to yaml.'
208
334
  c.arg_name 'output_format'
@@ -233,7 +359,7 @@ command :tags do |c|
233
359
  if tags.empty? || tags.nil?
234
360
  console_log "No tags in post", {:err => true}
235
361
  else
236
- output_tags(tags,{ :format => options[:format] })
362
+ output_tags(tags,{ :format => options[:format], :filename => file })
237
363
  end
238
364
  else
239
365
  raise "File not found: #{file}"
@@ -244,7 +370,7 @@ end
244
370
 
245
371
 
246
372
  desc 'Sort the existing tags for posts'
247
- arg_name 'filenames', :multiple
373
+ arg_name 'file_pattern', :multiple
248
374
  command :sort do |c|
249
375
  c.desc 'Format to use when outputting tags to console: list, json, plist, csv or yaml. Defaults to yaml.'
250
376
  c.arg_name 'output_format'
@@ -259,14 +385,13 @@ command :sort do |c|
259
385
  unless global_options[:t]
260
386
  @jt.update_file_tags(file, tags)
261
387
  end
262
- if args.length > 1
263
- console_log
264
- console_log File.basename(file) + ":"
265
- end
388
+ console_log
389
+ console_log File.basename(file) + ":"
390
+
266
391
  if tags.empty? || tags.nil?
267
392
  console_log "No tags in post", {:err => true}
268
393
  else
269
- output_tags(tags,{ :format => options[:format] })
394
+ output_tags(tags,{ :format => options[:format], :filename => file })
270
395
  end
271
396
  }
272
397
  end
@@ -289,11 +414,15 @@ command :merge do |c|
289
414
  if File.exists?(arg)
290
415
  files.push(arg)
291
416
  else
292
- exit_now! "No valid filename in arguments" if files.empty?
293
417
  tags.push(arg)
294
418
  end
295
419
  end
296
-
420
+ if files.empty?
421
+ if @jt.default_post_location && File.exists?(File.dirname(@jt.default_post_location))
422
+ files = Dir.glob(@jt.default_post_location)
423
+ end
424
+ end
425
+ exit_now! "No valid filename in arguments" if files.empty?
297
426
  exit_now! "Needs at least two tag inputs, one or more to merge, one to merge to" if tags.length < 2
298
427
  tags.reverse!
299
428
  merge_tag = tags.pop
@@ -304,11 +433,13 @@ command :merge do |c|
304
433
  unless global_options[:t]
305
434
  @jt.update_file_tags(file, new_tags)
306
435
  console_log
307
- console_log "Updated tags for #{file}"
436
+ console_log "Updated tags for #{file}", :log => true
308
437
  end
438
+
309
439
  console_log
310
440
  console_log File.basename(file) + ":"
311
- output_tags(new_tags,{ :format => options[:format] })
441
+ output_tags(new_tags,{ :format => options[:format], :filename => file })
442
+
312
443
  }
313
444
  end
314
445
  end
@@ -333,6 +464,7 @@ end
333
464
 
334
465
  desc 'Add tags to post(s)'
335
466
  arg_name 'tags', :multiple
467
+ arg_name 'file_pattern'
336
468
  command :add do |c|
337
469
  c.desc 'Format to use when outputting tags to console: list, json, plist, csv or yaml. Defaults to yaml.'
338
470
  c.arg_name 'output_format'
@@ -348,11 +480,15 @@ command :add do |c|
348
480
  if File.exists?(arg)
349
481
  files.push(arg)
350
482
  else
351
- exit_now! "No valid filename in arguments" if files.empty?
352
483
  new_tags.push(arg)
353
484
  end
354
485
  end
355
-
486
+ if files.empty?
487
+ if @jt.default_post_location && File.exists?(File.dirname(@jt.default_post_location))
488
+ files = Dir.glob(@jt.default_post_location)
489
+ end
490
+ end
491
+ exit_now! "No valid filename in arguments" if files.empty?
356
492
  exit_now! "No tags found in arguments" if new_tags.empty?
357
493
 
358
494
  files.each {|file|
@@ -362,12 +498,12 @@ command :add do |c|
362
498
  tags.sort!
363
499
  unless global_options[:t]
364
500
  @jt.update_file_tags(file,tags)
365
- console_log "Updated tags for #{file}"
501
+ console_log "Updated tags for #{file}", :log => true
366
502
  end
367
503
 
368
504
  console_log
369
505
  console_log File.basename(file) + ":"
370
- output_tags(tags,{ :format => options[:format] })
506
+ output_tags(tags, :format => options[:format], :filename => file)
371
507
  }
372
508
  end
373
509
  end
@@ -380,6 +516,11 @@ command :remove do |c|
380
516
  c.default_value 'yaml'
381
517
  c.flag [:f,:format], :must_match => /^(csv|list|yaml|json|plist)$/, :type => String
382
518
 
519
+ c.desc 'A filepath to a list of tags to be removed'
520
+ c.long_desc 'One tag per line, and leading numbers and pipes (|) will be ignored. This file format is generated automatically by the `loners` command, but any text file will do the trick.'
521
+ c.arg_name 'input_file'
522
+ c.flag [:p,:path], :type => String
523
+
383
524
  c.action do |global_options,options,args|
384
525
  files = []
385
526
  remove_tags = []
@@ -388,32 +529,55 @@ command :remove do |c|
388
529
  if File.exists?(arg)
389
530
  files.push(arg)
390
531
  else
391
- exit_now! "No valid filename in arguments" if files.empty?
392
- remove_tags.push(arg)
532
+ remove_tags.push(arg) unless options[:p]
533
+ end
534
+ end
535
+ if files.empty?
536
+ if @jt.default_post_location && File.exists?(File.dirname(@jt.default_post_location))
537
+ files = Dir.glob(@jt.default_post_location)
393
538
  end
394
539
  end
540
+ exit_now! "No valid filename in arguments" if files.empty?
541
+
542
+ if options[:p]
543
+ path = File.expand_path(options[:p])
544
+ exit_now! "Input file does not appear to be where you think it is." unless File.exists?(path)
545
+ IO.read(path).each_line {|l|
546
+ next if l =~ /^\s*#/
547
+ if l =~ /^(?:[\s\d])*(?:\|\s*)?(\S.*?)$/
548
+ remove_tags.push($1.strip)
549
+ end
550
+ }
551
+ console_log "Found #{remove_tags.length} tags in #{File.basename(path)}..."
552
+ end
395
553
 
396
- exit_now! "No tags found in arguments" if remove_tags.empty?
554
+ exit_now! "No tags found in input, my work here is done" if remove_tags.empty?
397
555
 
398
556
  files.each {|file|
399
557
  tags = @jt.post_tags(file)
400
558
  remove_tags.each { |d|
401
- tags.delete_if { |tag| tag == d }
559
+ tags.delete_if { |tag|
560
+ if global_options[:i]
561
+ tag.downcase == d.downcase
562
+ else
563
+ tag == d
564
+ end
565
+ }
402
566
  }
403
567
  unless global_options[:t]
404
568
  @jt.update_file_tags(file,tags)
405
- console_log "Updated tags for #{file}"
569
+ console_log "Updated tags for #{file}", :log => true
406
570
  end
407
571
 
408
572
  console_log
409
573
  console_log File.basename(file) + ":"
410
- output_tags(tags,{ :format => options[:format] })
574
+ output_tags(tags,{ :format => options[:format], :filename => file })
411
575
  }
412
576
  end
413
577
  end
414
578
 
415
579
  desc 'Generate a list of recommended tags, optionally updating the file'
416
- arg_name 'filename', :multiple
580
+ arg_name 'file_pattern', :multiple
417
581
  command :tag do |c|
418
582
  c.desc 'Format to use when outputting tags to console: list, json, plist, csv or yaml. Defaults to yaml.'
419
583
  c.arg_name 'output_format'
@@ -426,9 +590,9 @@ command :tag do |c|
426
590
  if !global_options[:s] || global_options[:t]
427
591
  if args.length > 1
428
592
  console_log
429
- console_log "STDIN:", {:err => true}
593
+ console_log "STDIN:", :err => true
430
594
  end
431
- output_tags(suggestions,{ :format => options[:format] })
595
+ output_tags(suggestions, :format => options[:format], :filename => file )
432
596
  end
433
597
  end
434
598
  args.each {|file|
@@ -439,18 +603,18 @@ command :tag do |c|
439
603
  unless global_options[:t]
440
604
  if @jt.update_file_tags(file, suggestions)
441
605
  console_log
442
- console_log "Updated file #{file} with:"
606
+ console_log "Updated file #{file} with:", :log => true
443
607
  else
444
608
  console_log
445
- console_log "Failed to update #{file} with:"
609
+ console_log "Failed to update #{file} with:", :log => true
446
610
  end
447
611
  end
448
612
  if !global_options[:s] || global_options[:t]
449
613
  if args.length > 1
450
614
  console_log
451
- console_log File.basename(file) + ":", {:err => true}
615
+ console_log File.basename(file) + ":", :err => true, :log => true
452
616
  end
453
- output_tags(suggestions,{ :format => options[:format] })
617
+ output_tags(suggestions, :format => options[:format], :filename => file )
454
618
  end
455
619
  suggestions = nil
456
620
  else
@@ -463,7 +627,7 @@ end
463
627
  def output_tags(tags,options)
464
628
  format = options[:format] || 'yaml'
465
629
  print0 = options[:print0] || false
466
-
630
+ filename = options[:filename] || false
467
631
  case format
468
632
  when 'list'
469
633
  unless print0
@@ -482,12 +646,14 @@ def output_tags(tags,options)
482
646
  when 'json'
483
647
  out = {}
484
648
  out['tags'] = tags
649
+ out['path'] = filename if filename
485
650
  console_log out.to_json
486
651
  when 'plist'
487
652
  out = {}
653
+ out['path'] = filename if filename
488
654
  console_log tags.to_plist
489
655
  else
490
- out = {}
656
+ out = {}
491
657
  options[:grouping] ||= "tags"
492
658
  out[options[:grouping]] = tags
493
659
  console_log out.to_yaml
@@ -505,16 +671,17 @@ end
505
671
  # end
506
672
 
507
673
  pre do |global,command,options,args|
508
- # Pre logic here
509
- # Return true to proceed; false to abort and not call the
510
- # chosen command
511
674
  # Use skips_pre before a command to skip this block
512
675
  # on that command only
513
676
  @silent = global[:silent]
514
677
 
678
+ @logfile = File.open(File.join(Dir.tmpdir, "jtag_actions.log"), 'a')
679
+
680
+ @log = Logger.new(@logfile, shift_age = 7, shift_size = 1048576)
681
+
515
682
  unless config_files_complete?
516
683
  write_config
517
- console_log "Missing config files written to #{@config_target}. Please check your configuration."
684
+ console_log "Missing config files written to #{@config_target}. Please check your configuration.", {:err => true}
518
685
  return false
519
686
  end
520
687
 
@@ -9,6 +9,5 @@ require 'jtag/version.rb'
9
9
  require 'jtag/string.rb'
10
10
  require 'jtag/porter_stemming.rb'
11
11
  require 'jtag/jekylltag.rb'
12
-
13
- # Add requires for other files you add to your project here, so
14
- # you just need to require this one file in your bin file
12
+ require 'tmpdir'
13
+ require 'logger'
@@ -1,3 +1,5 @@
1
1
  ---
2
2
  tags_location: localhost/data/tags.json
3
3
  min_matches: 2
4
+ default_post_location:
5
+ tags_key: tags
@@ -1,13 +1,32 @@
1
1
  # encoding: utf-8
2
+
2
3
  class JTag
4
+ attr_reader :default_post_location
5
+ attr_accessor :tags_key
3
6
 
4
7
  def initialize(support_dir, config)
5
8
  @support = support_dir
6
- @min_matches = config["min_matches"] || 2
7
- @tags_loc = config["tags_location"]
8
- @blacklistfile = File.join(@support,"blacklist.txt")
9
+ begin
10
+ @tags_loc = config['tags_location']
11
+ @tags_loc.sub!(/^https?:\/\//,'')
12
+ rescue
13
+ raise "No tags location in configuration."
14
+ end
15
+ @min_matches = config['min_matches'] || 2
16
+ @tags_key = config['tags_key'] || 'tags'
17
+
18
+ if config.has_key? 'default_post_location'
19
+ @default_post_location = File.expand_path(config['default_post_location']) || false
20
+ else
21
+ console_log "#{color('yellow')}No #{color('boldyellow')}default_post_location#{color('yellow')} set.", :err => true
22
+ console_log "If you commonly work on the same posts you can add the path and *.ext", :err => true
23
+ console_log "to this key in ~/.jtag/config.yml. Then, if you don't specify files", :err => true
24
+ console_log "to act on in a command, it will fall back to those. Nice!#{color('default')}", :err => true
25
+ @default_post_location = false
26
+ end
27
+ @blacklistfile = File.join(@support,'blacklist.txt')
9
28
  @blacklist = IO.read(@blacklistfile).split("\n") || []
10
- @skipwords = IO.read(File.join(support_dir,"stopwords.txt")).split("\n") || []
29
+ @skipwords = IO.read(File.join(support_dir,'stopwords.txt')).split("\n") || []
11
30
  remote_tags = get_tags
12
31
  @tags = {}
13
32
  remote_tags.each {|tag| @tags[Text::PorterStemming.stem(tag).downcase] = tag if tag}
@@ -72,11 +91,11 @@ class JTag
72
91
  [yaml, after]
73
92
  end
74
93
 
75
- def post_tags(file,piped=false)
94
+ def post_tags(file, piped=false)
76
95
  begin
77
96
  input = piped ? file : IO.read(file)
78
97
  yaml = YAML::load(input)
79
- return yaml["tags"] || []
98
+ return yaml[@tags_key] || []
80
99
  rescue
81
100
  return []
82
101
  end
@@ -103,7 +122,7 @@ class JTag
103
122
  if parts.length >= 2
104
123
  begin
105
124
  yaml = YAML::load(parts[1])
106
- current_tags = yaml["tags"] || []
125
+ current_tags = yaml[@tags_key] || []
107
126
  title = yaml["title"] || ""
108
127
  rescue
109
128
  current_tags = []
@@ -175,7 +194,7 @@ class JTag
175
194
  begin
176
195
  if File.exists?(file)
177
196
  yaml, after = split_post(file)
178
- yaml["tags"] = tags
197
+ yaml[@tags_key] = tags
179
198
  File.open(file,'w+') do |f|
180
199
  f.puts yaml.to_yaml
181
200
  f.puts "---"
@@ -190,5 +209,52 @@ class JTag
190
209
  return false
191
210
  end
192
211
  end
193
- end
194
212
 
213
+ private
214
+
215
+ def color(name)
216
+ color = {}
217
+ color['black'] = "\033[0;30m"
218
+ color['red'] = "\033[0;31m"
219
+ color['green'] = "\033[0;32m"
220
+ color['yellow'] = "\033[0;33m"
221
+ color['blue'] = "\033[0;34m"
222
+ color['magenta'] = "\033[0;35m"
223
+ color['cyan'] = "\033[0;36m"
224
+ color['white'] = "\033[0;37m"
225
+ color['bgblack'] = "\033[0;40m"
226
+ color['bgred'] = "\033[0;41m"
227
+ color['bggreen'] = "\033[0;42m"
228
+ color['bgyellow'] = "\033[0;43m"
229
+ color['bgblue'] = "\033[0;44m"
230
+ color['bgmagenta'] = "\033[0;45m"
231
+ color['bgcyan'] = "\033[0;46m"
232
+ color['bgwhite'] = "\033[0;47m"
233
+ color['boldblack'] = "\033[1;30m"
234
+ color['boldred'] = "\033[1;31m"
235
+ color['boldgreen'] = "\033[1;32m"
236
+ color['boldyellow'] = "\033[1;33m"
237
+ color['boldblue'] = "\033[1;34m"
238
+ color['boldmagenta'] = "\033[1;35m"
239
+ color['boldcyan'] = "\033[1;36m"
240
+ color['boldwhite'] = "\033[1;37m"
241
+ color['boldbgblack'] = "\033[1;40m"
242
+ color['boldbgred'] = "\033[1;41m"
243
+ color['boldbggreen'] = "\033[1;42m"
244
+ color['boldbgyellow'] = "\033[1;43m"
245
+ color['boldbgblue'] = "\033[1;44m"
246
+ color['boldbgmagenta'] = "\033[1;45m"
247
+ color['boldbgcyan'] = "\033[1;46m"
248
+ color['boldbgwhite'] = "\033[1;47m"
249
+ color['default'] = "\033[0;39m"
250
+ color['warning'] = color['yellow']
251
+ color['warningb'] = color['boldyellow']
252
+ color['success'] = color['green']
253
+ color['successb'] = color['boldgreen']
254
+ color['neutral'] = color['white']
255
+ color['neutralb'] = color['boldwhite']
256
+ color['info'] = color['cyan']
257
+ color['infob'] = color['boldcyan']
258
+ color[name]
259
+ end
260
+ end
@@ -1,3 +1,3 @@
1
1
  module Jtag
2
- VERSION = '0.1.10'
2
+ VERSION = '0.1.12'
3
3
  end
metadata CHANGED
@@ -1,110 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jtag
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.10
5
- prerelease:
4
+ version: 0.1.12
6
5
  platform: ruby
7
6
  authors:
8
7
  - Brett Terpstra
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-09-01 00:00:00.000000000 Z
11
+ date: 2017-11-24 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rake
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rdoc
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: aruba
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: gli
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - '='
59
+ - - "~>"
68
60
  - !ruby/object:Gem::Version
69
- version: 2.7.0
61
+ version: 2.17.1
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - '='
66
+ - - "~>"
76
67
  - !ruby/object:Gem::Version
77
- version: 2.7.0
68
+ version: 2.17.1
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: json
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - "~>"
84
74
  - !ruby/object:Gem::Version
85
- version: '0'
75
+ version: 1.8.1
86
76
  type: :runtime
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - "~>"
92
81
  - !ruby/object:Gem::Version
93
- version: '0'
82
+ version: 1.8.1
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: plist
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - ">="
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0'
102
90
  type: :runtime
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - ">="
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0'
110
97
  description:
@@ -116,46 +103,45 @@ extra_rdoc_files:
116
103
  - README.rdoc
117
104
  - jtag.rdoc
118
105
  files:
106
+ - README.rdoc
119
107
  - bin/jtag
120
- - lib/jtag/version.rb
108
+ - jtag.rdoc
109
+ - lib/jtag.rb
121
110
  - lib/jtag/config_files/blacklist.txt
122
111
  - lib/jtag/config_files/config.yml
123
112
  - lib/jtag/config_files/stopwords.txt
124
113
  - lib/jtag/config_files/synonyms.yml
125
- - lib/jtag/porter_stemming.rb
126
114
  - lib/jtag/jekylltag.rb
115
+ - lib/jtag/porter_stemming.rb
127
116
  - lib/jtag/string.rb
128
- - lib/jtag.rb
129
- - README.rdoc
130
- - jtag.rdoc
117
+ - lib/jtag/version.rb
131
118
  homepage: http://brettterpstra.com
132
119
  licenses: []
120
+ metadata: {}
133
121
  post_install_message:
134
122
  rdoc_options:
135
- - --title
123
+ - "--title"
136
124
  - jtag
137
- - --main
125
+ - "--main"
138
126
  - README.rdoc
139
- - -ri
127
+ - "-ri"
140
128
  require_paths:
141
129
  - lib
142
130
  - lib
143
131
  required_ruby_version: !ruby/object:Gem::Requirement
144
- none: false
145
132
  requirements:
146
- - - ! '>='
133
+ - - ">="
147
134
  - !ruby/object:Gem::Version
148
135
  version: '0'
149
136
  required_rubygems_version: !ruby/object:Gem::Requirement
150
- none: false
151
137
  requirements:
152
- - - ! '>='
138
+ - - ">="
153
139
  - !ruby/object:Gem::Version
154
140
  version: '0'
155
141
  requirements: []
156
142
  rubyforge_project:
157
- rubygems_version: 1.8.25
143
+ rubygems_version: 2.6.13
158
144
  signing_key:
159
- specification_version: 3
145
+ specification_version: 4
160
146
  summary: Auto-tagging and tagging tools for Jekyll
161
147
  test_files: []