ruby-issues 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +5 -5
  2. data/bin/issues +107 -98
  3. metadata +29 -27
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 993c9fde55edc10f1aca9a895faabaf315f3e5f0
4
- data.tar.gz: 04a6522e72462267558fa86a73fa102846a40066
2
+ SHA256:
3
+ metadata.gz: c2f16149fa0033a0ca606aed7249589ab61d16b3cb1211ea8ea268d31fd8c721
4
+ data.tar.gz: fad585559cf6d01921ba26fe5a487990cd3ecaa61cb7e4134e2649dd71a50abf
5
5
  SHA512:
6
- metadata.gz: 0753cef5df82c3f68328b0bc96a6903641381c002b1e140f6526834ddcbfe133535400bb81ba53afa9655bd867c6f26457ce5da80f87a2e1eee8d2537239e034
7
- data.tar.gz: c2d09d776aa4222aa93e672cbcebcb01cbd874b8d4b461978d2a3a9cbd692681d6ed9f1b28781461ab29a4061271d838b2492fa066e642e7dc000e033a0fa701
6
+ metadata.gz: 46b70effb8c7619ffa8bc08bc0da30b38b601c94cad1a3f80e6a6305c9b21ac0aa00a85252a23ffe3cd3748b20019d16f270435a4a8654a8ddeba37a9980594b
7
+ data.tar.gz: 36a12a234dc934e7b5f88ff437f10330426b694543c05fa58ae8248501f4e2ff18e9af6de49ee3b08bf2d7ac230ecf44f2c85161a6a0f9fd0cc99a8e8c6e2f94
data/bin/issues CHANGED
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: utf-8
2
+ # encoding: utf-8
3
3
  #===========================================================================================
4
4
  require 'rubygems'
5
5
  require 'fattr'
6
6
  require 'io/console'
7
7
  require 'securerandom'
8
8
  require 'PrettyComment'
9
- require 'trollop'
9
+ require 'optimist'
10
10
  require 'yaml'
11
11
  require 'git'
12
12
 
@@ -16,11 +16,11 @@ require 'git'
16
16
 
17
17
  def git_get_current_branch()
18
18
  current_branch = `git branch`.split(/\n/).find{ |l| l.start_with?("*") }
19
-
19
+
20
20
  if current_branch
21
21
  current_branch =~ /\*\s+(.+)/
22
22
  $~[1]
23
- end
23
+ end
24
24
  end
25
25
 
26
26
  #-------------------------------------------------------------------------------------------
@@ -37,10 +37,17 @@ end
37
37
 
38
38
  #-------------------------------------------------------------------------------------------
39
39
 
40
+ def get_system_editor()
41
+ default_editor = 'editor'
42
+ ENV['EDITOR'] || `git var GIT_EDITOR`.rstrip || default_editor
43
+ end
44
+
45
+ #-------------------------------------------------------------------------------------------
46
+
40
47
  def edit_string(aString)
48
+ editor = get_system_editor
41
49
  tempfile_name = "/tmp/issues-" << SecureRandom.hex.force_encoding("UTF-8")
42
- File.write(tempfile_name, aString)
43
- system("$EDITOR #{tempfile_name}")
50
+ system("#{editor} #{tempfile_name}")
44
51
  new_string = File.read(tempfile_name)
45
52
  File.unlink(tempfile_name)
46
53
  new_string
@@ -50,7 +57,7 @@ end
50
57
 
51
58
  class LogEntry
52
59
  fattr :date, :message
53
-
60
+
54
61
  def initialize(message)
55
62
  @date = Time.new
56
63
  @message = message.dup
@@ -63,7 +70,7 @@ end
63
70
  class Issue
64
71
  fattr :id, :created, :type, :title, :description, :status, :milestone, :estimate
65
72
  attr_accessor :history
66
-
73
+
67
74
  #-------------------------------------------------------------------------------------------
68
75
 
69
76
  def initialize
@@ -91,7 +98,7 @@ class Issue
91
98
  new_value = value.is_a?(Numeric) || value == nil ? value : value.dup
92
99
  a_issue.send(a) && self.send(a, new_value)
93
100
  end
94
- end
101
+ end
95
102
 
96
103
  #-------------------------------------------------------------------------------------------
97
104
 
@@ -99,36 +106,36 @@ class Issue
99
106
  @history ||= []
100
107
  @history << LogEntry.new(message)
101
108
  end
102
-
109
+
103
110
  #-------------------------------------------------------------------------------------------
104
-
111
+
105
112
  def format_verbose(opts)
106
113
  milestone = @milestone ? "#{@milestone}" : "NO MILESTONE"
107
114
  estimate = @estimate ? "#{@estimate}h" : "NO ESTIMATE"
108
115
  milestone_estimate = "[#{estimate}, #{milestone}]"
109
-
116
+
110
117
  result = []
111
118
  result << PrettyComment.separator
112
119
  result << PrettyComment.comment("#{@id[0,6]} #{@type.capitalize} (#{@status}) #{milestone_estimate} #{@created.to_s[0,16]}")
113
120
  result << PrettyComment.comment("")
114
121
  result << PrettyComment.format_line(@title, "#", false, "#")
115
-
122
+
116
123
  if @description
117
124
  result << PrettyComment.sub_heading("Description:")
118
125
  @description.split("\n").each do |l|
119
126
  result << PrettyComment.format_line(l, "#", false, "#")
120
127
  end
121
128
  end
122
-
129
+
123
130
  if @history && @history.count > 0
124
131
  result << PrettyComment.sub_heading("Log:")
125
132
  @history.each { |l| result << PrettyComment.format_line("#{l.message}", "# #{l.date.to_s[0,16]}", true, "#", "#") }
126
133
  end
127
-
134
+
128
135
  result << PrettyComment.separator
129
136
  result << ""
130
137
  result << ""
131
-
138
+
132
139
  result.join("\n")
133
140
  end
134
141
 
@@ -148,8 +155,8 @@ class Issue
148
155
  end
149
156
 
150
157
  #suffix = estimate_milestone.count > 0 ? "[#{estimate_milestone.join(' => ')}]" : ""
151
-
152
- PrettyComment.format_line(entry, info_string, true)
158
+
159
+ PrettyComment.format_line(entry, info_string, true)
153
160
  end
154
161
 
155
162
  #-------------------------------------------------------------------------------------------
@@ -170,12 +177,12 @@ class Issue
170
177
  def edit_all
171
178
  original_yaml = self.to_yaml
172
179
  new_yaml = edit_string(original_yaml)
173
-
180
+
174
181
  if (new_yaml != original_yaml)
175
182
  self.copy_from(YAML::parse(new_string))
176
183
  return true
177
- end
178
-
184
+ end
185
+
179
186
  return false
180
187
  end
181
188
 
@@ -184,7 +191,7 @@ class Issue
184
191
  def short_id
185
192
  @id[0,6]
186
193
  end
187
-
194
+
188
195
  end
189
196
 
190
197
  #===========================================================================================
@@ -193,60 +200,63 @@ end
193
200
 
194
201
  class IssuesDb
195
202
  fattr :issues_array
196
-
203
+
197
204
  #-------------------------------------------------------------------------------------------
198
205
 
199
206
  def initialize(database_file)
200
207
  @database_file = database_file
201
- @issues_array = FileTest.exists?(database_file) && YAML.load_file(database_file) || []
208
+ @issues_array = []
209
+ if FileTest.exists?(database_file)
210
+ @issues_array = YAML.safe_load_file(database_file, permitted_classes: [Issue, Date, Time, LogEntry])
211
+ end
202
212
  end
203
-
213
+
204
214
  #-------------------------------------------------------------------------------------------
205
215
 
206
216
  def select_issues(&select_proc)
207
217
  return @issues_array.select(&select_proc)
208
218
  end
209
-
219
+
210
220
  #-------------------------------------------------------------------------------------------
211
221
 
212
222
  def select_issue(&select_proc)
213
223
  result = select_issues(&select_proc)
214
-
224
+
215
225
  if result.count == 1
216
226
  return result[0]
217
-
227
+
218
228
  elsif result.count > 1
219
229
  puts "Found more than one issue that match this query:"
220
230
  result.each{|i| puts("#{i.id} #{i.title}")}
221
231
  exit
222
-
232
+
223
233
  else
224
234
  puts "Error: No issue found for query."
225
235
  exit
226
236
  end
227
237
 
228
238
  nil
229
- end
239
+ end
230
240
 
231
241
  #-------------------------------------------------------------------------------------------
232
242
 
233
243
  def has_issue(issue_id)
234
244
  @issues_array.any? { |issue| issue.id.start_with?(issue_id) }
235
245
  end
236
-
246
+
237
247
  #-------------------------------------------------------------------------------------------
238
248
 
239
249
  def save_db()
240
250
  FileTest.exists?('.issues') || Dir.mkdir('.issues')
241
251
  File.open(@database_file, 'w' ) { |out| YAML.dump(@issues_array, out) }
242
252
  end
243
-
253
+
244
254
  #-------------------------------------------------------------------------------------------
245
255
 
246
256
  def determine_issue_type(opts)
247
257
  issue_types = %w{bug improvement task feature}
248
258
  issue_type = opts[:type] ? opts[:type].downcase : nil
249
-
259
+
250
260
  issue_type && (return issue_type)
251
261
 
252
262
  case opts[:title]
@@ -269,19 +279,19 @@ class IssuesDb
269
279
  new_issue.milestone = opts[:milestone]
270
280
  new_issue.estimate = opts[:estimate]
271
281
  @issues_array << new_issue
272
- save_db()
282
+ save_db()
273
283
  puts "Created issue #{new_issue.short_id} #{new_issue.title}"
274
284
  end
275
285
 
276
286
  #-------------------------------------------------------------------------------------------
277
-
287
+
278
288
  def select_issues_with_opts(opts)
279
- did_select_issue_types = opts[:type]
289
+ did_select_issue_types = opts[:type]
280
290
  status_regex = opts[:all] ? /^(open|resolved|duplicate|wontfix)/ : /^open$/
281
291
  did_select_milestone = opts[:milestone] != nil
282
292
  milestone = opts[:milestone]
283
-
284
- return @issues_array.select do |issue|
293
+
294
+ return @issues_array.select do |issue|
285
295
  (status_regex =~ issue.status) \
286
296
  && (issue.type == opts[:type] || !did_select_issue_types) \
287
297
  && (issue.milestone == opts[:milestone] \
@@ -362,7 +372,7 @@ class IssuesDb
362
372
 
363
373
  duplicate_of_id = opts[:cmd] == "duplicate" && select_issue {|i| i.id.start_with?(opts[:duplicate_of_id]) }.id
364
374
 
365
- status, message =
375
+ status, message =
366
376
  case opts[:cmd]
367
377
  when "resolve"
368
378
  ["resolved", "Resolved"]
@@ -376,17 +386,17 @@ class IssuesDb
376
386
 
377
387
  resolved_issue.status = status
378
388
  resolved_issue.log "Changed status to #{status}"
379
-
389
+
380
390
  message = "#{message} issue #{resolved_issue.short_id}: #{resolved_issue.title}"
381
391
  puts message
382
-
392
+
383
393
  save_db()
384
394
 
385
395
  if opts[:commit]
386
396
  system "git add .issues"
387
397
  system "git commit -m \"#{message}\""
388
398
  end
389
-
399
+
390
400
  if opts[:close_branch] == true
391
401
  issue_branch = git_get_current_branch()
392
402
  system "git checkout dev"
@@ -403,17 +413,17 @@ class IssuesDb
403
413
  opts[:issue_ids].each do |issue_id|
404
414
  delete_issues << select_issue{|i| i.id.start_with?(issue_id)}
405
415
  end
406
-
416
+
407
417
  puts "Ok to delete issues: "
408
418
  delete_issues.each { |issue| puts "#{issue.short_id} \"#{issue.title}\"" }
409
419
  puts "[y/N]"
410
-
420
+
411
421
  answer = STDIN.getch
412
-
422
+
413
423
  if /y/i =~ answer
414
424
  @issues_array -= delete_issues
415
425
  save_db()
416
-
426
+
417
427
  if delete_issues.count == 1
418
428
  puts "Removed issue #{delete_issues[0].short_id} \"#{delete_issues[0].title}\" from database."
419
429
  else
@@ -429,16 +439,16 @@ class IssuesDb
429
439
 
430
440
  def edit_issue(opts)
431
441
  issue_id = opts[:issue_id]
432
- issue = select_issue { |i| i.id.start_with?(issue_id) }
433
-
442
+ issue = select_issue { |i| i.id.start_with?(issue_id) }
443
+
434
444
  did_change_issue = false
435
-
445
+
436
446
  if (opts[:description])
437
447
  did_change_issue = issue.edit_description && issue.log("Edited description")
438
448
  else
439
449
  did_change_issue = issue.edit_all && issue.log("Edited issue")
440
450
  end
441
-
451
+
442
452
  did_change_issue && save_db()
443
453
  end
444
454
 
@@ -453,9 +463,9 @@ class IssuesDb
453
463
  end
454
464
 
455
465
  #-------------------------------------------------------------------------------------------
456
-
466
+
457
467
  def get_milestones_for_pattern(pattern)
458
- result_hash = {}
468
+ result_hash = {}
459
469
  issues_array.each { |i| select_issue_for_estimate?(i, pattern) && result_hash[i.milestone] = true }
460
470
  result_hash.keys.sort
461
471
  end
@@ -465,24 +475,24 @@ class IssuesDb
465
475
  def estimate(opts)
466
476
  milestone = opts[:milestone]
467
477
  total = 0.0
468
-
478
+
469
479
  issues_to_estimate = @issues_array.select { |i| select_issue_for_estimate?(i, milestone) }
470
480
  issues_without_estimates = @issues_array.select { |i| select_issue_for_estimate?(i, milestone) && !i.estimate }
471
481
 
472
- if issues_to_estimate.empty?
482
+ if issues_to_estimate.empty?
473
483
  puts "No open issues found for milestone " << milestone << "!"
474
484
  exit
475
485
  end
476
486
 
477
- if issues_without_estimates.count > 0
487
+ if issues_without_estimates.count > 0
478
488
  puts PrettyComment.h3("Warning: Found issues without estimates")
479
489
  issues_without_estimates.each {|i| puts i.format_list(opts)}
480
490
  puts PrettyComment.separator("-")
481
491
  puts
482
492
  end
483
-
493
+
484
494
  issues_to_estimate.each { |i| (i.estimate && total += i.estimate) }
485
-
495
+
486
496
  milestones = get_milestones_for_pattern(milestone)
487
497
 
488
498
  result_str = "Milestone" << (milestones.length > 1 ? "s" : "")
@@ -497,12 +507,12 @@ class IssuesDb
497
507
  new_type = opts[:type]
498
508
  new_milestone = opts[:milestone]
499
509
  new_estimate = opts[:estimate]
500
-
510
+
501
511
  opts[:issue_ids].each do |issue_id|
502
512
  did_update = false
503
513
  issue = select_issue { |i| i.id.start_with?(issue_id) }
504
514
 
505
- if new_type
515
+ if new_type
506
516
  if issue.type != new_type
507
517
  issue.type = new_type
508
518
  issue.log("Changed type to #{issue.type}")
@@ -542,14 +552,14 @@ class IssuesDb
542
552
  #-------------------------------------------------------------------------------------------
543
553
 
544
554
  def start_branch(opts)
545
- git_get_current_branch() == "dev" || Trollop::die("Must be on dev branch to start new issue branch.")
546
-
555
+ git_get_current_branch() == "dev" || Optimist::die("Must be on dev branch to start new issue branch.")
556
+
547
557
  issue_id = opts[:issue_id]
548
558
  issue = select_issue{|i| i.id.start_with?(issue_id) && i.status == "open"}
549
559
 
550
560
  system("git checkout -b #{issue.type}/#{issue.short_id}")
551
561
  end
552
-
562
+
553
563
  #-------------------------------------------------------------------------------------------
554
564
 
555
565
 
@@ -563,11 +573,11 @@ end
563
573
  def get_issue_ids(num_ids, usage)
564
574
  result = []
565
575
  count = num_ids >= 0 ? num_ids : ARGV.count
566
-
576
+
567
577
  begin
568
578
  count.times do
569
- ARGV.count > 0 && /^\h{1,32}$/ =~ ARGV[0] || raise
570
- result << ARGV.shift
579
+ ARGV.count > 0 && /^\h{1,32}$/ =~ ARGV[0] || raise
580
+ result << ARGV.shift
571
581
  end
572
582
 
573
583
  result.count == 1 && num_ids > 0 ? result[0] : result
@@ -596,21 +606,21 @@ SUB_COMMANDS = {
596
606
  "update" => "update issue fields.",
597
607
  "startbranch" => "start a new git branch with to work on issue"}
598
608
 
599
- LeftFieldLength =
609
+ LeftFieldLength =
600
610
  SUB_COMMANDS.collect { |key, value| key.length }.max
601
-
611
+
602
612
  SubCommandHelp =
603
613
  SUB_COMMANDS.collect {|key,value| " #{key.ljust(LeftFieldLength)} #{value}"}.join("\n")
604
614
 
605
-
606
- global_opts = Trollop::options do
615
+
616
+ global_opts = Optimist::options do
607
617
  banner <<-EOL
608
618
  issues: lightweight distributed issue management.
609
-
619
+
610
620
  Usage:
611
621
  ------
612
622
  issues [<command>] [<options] [<args>]
613
-
623
+
614
624
  Commands are:
615
625
  -------------
616
626
  #{SubCommandHelp}
@@ -628,37 +638,37 @@ cmd ||= 'list'
628
638
  cmd_opts = {}
629
639
 
630
640
  if cmd == 'list' || cmd == 'count'
631
- cmd_opts =
632
- Trollop::options do
641
+ cmd_opts =
642
+ Optimist::options do
633
643
  opt :all, "#{cmd} all issues", :short => 'a'
634
644
  opt :newest, "#{cmd} newest issues first" if cmd == 'list'
635
645
  opt :oldest, "#{cmd} oldest issues first" if cmd == 'list'
636
646
  opt :verbose, "verbose list of issues", :short => 'v' if cmd == 'list'
637
- opt :type, "#{cmd} issues of given type (bug, improvement, task, feature)", :short => 't', :type => String
647
+ opt :type, "#{cmd} issues of given type (bug, improvement, task, feature)", :short => 't', :type => String
638
648
  opt :milestone, "#{cmd} issues for given milestone", :short => 'm', :type => String
639
649
  opt "no-milestone", "#{cmd} all issues not assigned to any milestone"
640
650
  end
641
-
651
+
642
652
  if cmd == 'list'
643
653
  ARGV.count > 0 && cmd_opts[:issue_id] = get_issue_ids(1, "list ID")
644
654
  end
645
655
 
646
656
  elsif cmd == "create"
647
- cmd_opts =
648
- Trollop::options do
657
+ cmd_opts =
658
+ Optimist::options do
649
659
  opt :type, "create issue of specific type (e.g. bug, feature, improvement, task)", :short => 't', :type => String
650
660
  opt :milestone, "specify the milestone of the new issue", :short => 'm', :type => String
651
661
  opt :estimate, "specify the estimated effort", :short => 'e', :type => Float
652
662
  end
653
- cmd_opts[:title] = ARGV.shift || Trollop::die( "Please enter a title for the new issue!")
663
+ cmd_opts[:title] = ARGV.shift || Optimist::die( "Please enter a title for the new issue!")
654
664
 
655
665
 
656
666
  elsif cmd == "resolve" || cmd == "wontfix" || cmd == "duplicate" || cmd == "cantreproduce"
657
- cmd_opts =
658
- Trollop::options do
667
+ cmd_opts =
668
+ Optimist::options do
659
669
  opt :commit, "do a git commit", :short => 'c'
660
670
  end
661
-
671
+
662
672
  if cmd == "duplicate"
663
673
  cmd_opts[:issue_id], cmd_opts[:duplicate_of_id] = get_issue_ids(2, "duplicate ID(issue) ID(duplicate of)")
664
674
  elsif cmd == "resolve" && is_issue_branch()
@@ -668,17 +678,17 @@ elsif cmd == "resolve" || cmd == "wontfix" || cmd == "duplicate" || cmd == "cant
668
678
  else
669
679
  cmd_opts[:issue_id] = get_issue_ids(1, "#{cmd} [-c] ID")
670
680
  end
671
-
672
-
681
+
682
+
673
683
  elsif cmd == "edit"
674
- cmd_opts =
675
- Trollop::options do
684
+ cmd_opts =
685
+ Optimist::options do
676
686
  opt :description, "edit the issue description", :short => 'd'
677
687
  end
678
- cmd_opts[:issue_id] = get_issue_ids(1, "edit ID")
679
-
688
+ cmd_opts[:issue_id] = get_issue_ids(1, "edit ID")
689
+
680
690
  elsif cmd == "estimate"
681
- Trollop::options do
691
+ Optimist::options do
682
692
  banner <<-EOL
683
693
  Usage:
684
694
  ------
@@ -689,7 +699,7 @@ Options:
689
699
  EOL
690
700
  end
691
701
 
692
- ARGV.count > 0 || Trollop::die("Usage: issues estmiate MILSTONE")
702
+ ARGV.count > 0 || Optimist::die("Usage: issues estmiate MILSTONE")
693
703
  cmd_opts[:milestone] = ARGV.shift
694
704
 
695
705
  elsif cmd == "update"
@@ -706,15 +716,15 @@ Options:
706
716
  --------
707
717
  EOL
708
718
 
709
- cmd_opts = Trollop::options do
719
+ cmd_opts = Optimist::options do
710
720
  banner my_banner
711
721
  opt :type, "update the issue type", :short => 't', :type => String
712
722
  opt :milestone, "update the milestone", :short => 'm', :type => String
713
723
  opt :estimate, "update the estimate", :short => 'e', :type => Float
714
724
  end
715
725
 
716
- cmd_opts[:type] && (%w{bug improvement task feature}.include?(cmd_opts[:type]) || Trollop::die("Please specify one of [bug, improvement, task, freature] as new issue type"))
717
- cmd_opts[:type] || cmd_opts[:milestone] || cmd_opts[:estimate] || Trollop::die("You must specify one of (--type, --milestone, --estimate)")
726
+ cmd_opts[:type] && (%w{bug improvement task feature}.include?(cmd_opts[:type]) || Optimist::die("Please specify one of [bug, improvement, task, freature] as new issue type"))
727
+ cmd_opts[:type] || cmd_opts[:milestone] || cmd_opts[:estimate] || Optimist::die("You must specify one of (--type, --milestone, --estimate)")
718
728
 
719
729
  ARGV.count > 0 && cmd_opts[:issue_ids] = get_issue_ids(-1, "set-type {bug|improvement|task|feature} ID")
720
730
 
@@ -724,14 +734,14 @@ elsif cmd == "delete"
724
734
 
725
735
 
726
736
  elsif cmd == "startbranch"
727
- cmd_opts[:issue_id] = get_issue_ids(1, "list ID") || Trollop::die( "Please enter an id for the issue to work on in the new branch!")
737
+ cmd_opts[:issue_id] = get_issue_ids(1, "list ID") || Optimist::die( "Please enter an id for the issue to work on in the new branch!")
728
738
 
729
739
  else
730
- Trollop::die "unknown command #{cmd.inspect}"
740
+ Optimist::die "unknown command #{cmd.inspect}"
731
741
  end
732
742
 
733
743
 
734
- cmd_opts[:cmd] = cmd
744
+ cmd_opts[:cmd] = cmd
735
745
 
736
746
 
737
747
  #===========================================================================================
@@ -744,9 +754,9 @@ cmd_opts[:milestone_column_width] = Issues.milestone_column_width()
744
754
  cmd_opts[:list_milestone] = Issues.has_open_issues_with_milestone?()
745
755
 
746
756
  case cmd
747
- when "create"
757
+ when "create"
748
758
  Issues.create_issue(cmd_opts)
749
- when "list"
759
+ when "list"
750
760
  Issues.list_issues(cmd_opts)
751
761
  when "count"
752
762
  Issues.count_issues(cmd_opts)
@@ -765,4 +775,3 @@ case cmd
765
775
  end
766
776
 
767
777
  #===========================================================================================
768
-
metadata CHANGED
@@ -1,19 +1,22 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-issues
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wolfgang Steiner
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-07 00:00:00.000000000 Z
11
+ date: 2024-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: PrettyComment
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.1'
17
20
  - - ">="
18
21
  - !ruby/object:Gem::Version
19
22
  version: 0.1.2
@@ -21,51 +24,52 @@ dependencies:
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.1'
24
30
  - - ">="
25
31
  - !ruby/object:Gem::Version
26
32
  version: 0.1.2
27
33
  - !ruby/object:Gem::Dependency
28
- name: trollop
34
+ name: optimist
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.0'
31
40
  - - ">="
32
41
  - !ruby/object:Gem::Version
33
- version: 1.16.2
42
+ version: 3.0.1
34
43
  type: :runtime
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
37
46
  requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '3.0'
38
50
  - - ">="
39
51
  - !ruby/object:Gem::Version
40
- version: 1.16.2
52
+ version: 3.0.1
41
53
  - !ruby/object:Gem::Dependency
42
54
  name: fattr
43
55
  requirement: !ruby/object:Gem::Requirement
44
56
  requirements:
45
- - - ">="
57
+ - - "~>"
46
58
  - !ruby/object:Gem::Version
47
- version: 2.2.1
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
59
+ version: '2.4'
52
60
  - - ">="
53
61
  - !ruby/object:Gem::Version
54
- version: 2.2.1
55
- - !ruby/object:Gem::Dependency
56
- name: git
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: 1.3.0
62
+ version: 2.4.0
62
63
  type: :runtime
63
64
  prerelease: false
64
65
  version_requirements: !ruby/object:Gem::Requirement
65
66
  requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '2.4'
66
70
  - - ">="
67
71
  - !ruby/object:Gem::Version
68
- version: 1.3.0
72
+ version: 2.4.0
69
73
  description: Issues is a lightweight, git-style command-line issue tracker.
70
74
  email: wolfgang.steiner@gmail.com
71
75
  executables:
@@ -77,10 +81,9 @@ files:
77
81
  - bin/issues
78
82
  - bin/todos
79
83
  homepage: https://github.com/WolfgangSteiner/Issues
80
- licenses:
81
- - MIT
84
+ licenses: []
82
85
  metadata: {}
83
- post_install_message:
86
+ post_install_message:
84
87
  rdoc_options: []
85
88
  require_paths:
86
89
  - lib
@@ -95,9 +98,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
98
  - !ruby/object:Gem::Version
96
99
  version: '0'
97
100
  requirements: []
98
- rubyforge_project:
99
- rubygems_version: 2.5.1
100
- signing_key:
101
+ rubygems_version: 3.5.7
102
+ signing_key:
101
103
  specification_version: 4
102
104
  summary: Git-style issue tracker.
103
105
  test_files: []