twkb 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +6 -0
- data/Rakefile +10 -0
- data/bin/twkb +106 -2
- data/lib/twkb.rb +1 -1
- data/lib/twkb/formatter.rb +2 -1
- data/lib/twkb/version.rb +1 -1
- data/twkb.gemspec +1 -0
- metadata +68 -69
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 088cef4b7297e511896fdd9f827bb6dbef4f9865
|
4
|
+
data.tar.gz: b699939cc577a8305297b369f49350e6207e46ad
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 54d8312b91d064f51c75aeb745a81eca489d13d1d6341adfcbf25d6260e3ad77f8a0f202feafd48535622c32f5a2b52a0372c4c7188854d1943e8b3b831cd7a3
|
7
|
+
data.tar.gz: f732ec4b428dcd0e96f247f30b457e0a454626884587b62ebce6264643edd65f6f60e5f007ec1eadbf342119a061d3ea47d85f1eaba13a3b7a0c850c3cb04845
|
data/Gemfile
ADDED
data/Rakefile
ADDED
data/bin/twkb
CHANGED
@@ -1,6 +1,110 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
require 'rubygems'
|
4
|
+
require 'open3'
|
5
|
+
require 'gli'
|
3
6
|
require 'twkb'
|
4
7
|
|
5
|
-
|
6
|
-
|
8
|
+
include GLI::App
|
9
|
+
|
10
|
+
# Cross-platform way of finding an executable in the $PATH.
|
11
|
+
#
|
12
|
+
# which('ruby') #=> /usr/bin/ruby
|
13
|
+
# source: http://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
|
14
|
+
def which(cmd)
|
15
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
16
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
17
|
+
exts.each { |ext|
|
18
|
+
exe = File.join(path, "#{cmd}#{ext}")
|
19
|
+
return exe if File.executable? exe
|
20
|
+
}
|
21
|
+
end
|
22
|
+
return nil
|
23
|
+
end
|
24
|
+
|
25
|
+
program_desc 'Kanban boards for TaskWarrior'
|
26
|
+
|
27
|
+
exit_now!("The taskwarrior binary 'task' was not found in PATH.") unless which('task')
|
28
|
+
|
29
|
+
default_command :show
|
30
|
+
|
31
|
+
desc "Add task"
|
32
|
+
long_desc "Add a task to a given board and stage."
|
33
|
+
arg_name 'task_description'
|
34
|
+
command :add do |c|
|
35
|
+
c.desc 'Board to use'
|
36
|
+
c.flag [:b, :board], :default_value => 'personal'
|
37
|
+
|
38
|
+
c.desc 'Stage to use'
|
39
|
+
c.flag [:s, :stage], :default_value=> 'backlog'
|
40
|
+
|
41
|
+
c.action do |global_options, options, args|
|
42
|
+
help_now!('Task description is required') if args.empty?
|
43
|
+
o, e, s = Open3.capture3("task add board:#{options[:board]} stage:#{options[:stage]} #{args.join(' ')}")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
desc 'Move task to stage'
|
48
|
+
long_desc <<EOF
|
49
|
+
Move a task to a stage. If no stage is set, the task will be moved to the
|
50
|
+
next one as defined in uda.stage.values. If the current stage is the last one
|
51
|
+
the task will be set to completed.
|
52
|
+
EOF
|
53
|
+
command :move do |c|
|
54
|
+
c.desc 'ID of task'
|
55
|
+
c.flag [:i, :id]
|
56
|
+
|
57
|
+
c.desc 'Stage to move task to'
|
58
|
+
c.flag [:s, :stage]
|
59
|
+
|
60
|
+
c.action do |global_options, options, args|
|
61
|
+
help_now!('-i <ID> is required') unless options[:id]
|
62
|
+
help_now!('-i <ID> is required') if options[:id].empty?
|
63
|
+
|
64
|
+
o, e, s = Open3.capture3("task #{options[:id]} info")
|
65
|
+
exit_now!("There was an error getting info stage ID #{options[:id]}.") unless s.success?
|
66
|
+
|
67
|
+
if options[:stage]
|
68
|
+
puts "Task ID #{options[:id]} - setting stage to \"#{options[:stage]}\"."
|
69
|
+
o, e, s = Open3.capture3("task #{options[:id]} modify stage:#{options[:stage]}")
|
70
|
+
exit_now!(nil, 0)
|
71
|
+
end
|
72
|
+
|
73
|
+
stage_line = o.split("\n").grep(/^Stage/)
|
74
|
+
exit_now!("Task ID #{options[:id]} has no stage set. Aborting.") unless stage_line.count > 0
|
75
|
+
current_stage = stage_line.first.split(" ").pop
|
76
|
+
|
77
|
+
taskrc_file = File.join(Dir.home, ".taskrc")
|
78
|
+
exit_now!('Could not read ~/.taskrc. Aborting.') unless File.readable? taskrc_file
|
79
|
+
taskrc = File.open(taskrc_file).readlines
|
80
|
+
stages_line = taskrc.grep(/^uda.stage.values=/)
|
81
|
+
exit_now!('Could not find uda.stage.values in ~/.taskrc. Aborting.') unless stages_line.count > 0
|
82
|
+
stages = stages_line.first.split("=").pop.split(",")
|
83
|
+
|
84
|
+
current_stage.chomp!
|
85
|
+
last_stage = stages.last
|
86
|
+
last_stage.chomp!
|
87
|
+
if current_stage == stages.last
|
88
|
+
puts "Already at last stage. Completing task..."
|
89
|
+
o, e, s = Open3.capture3("task #{options[:id]} done")
|
90
|
+
else
|
91
|
+
next_stage = stages[stages.index(current_stage)+1]
|
92
|
+
puts "Task ID #{options[:id]} - Setting stage to #{next_stage}..."
|
93
|
+
o, e, s = Open3.capture3("task #{options[:id]} modify stage:#{next_stage}")
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
desc "Show board"
|
99
|
+
long_desc "Show all tasks belonging to a given (or the default) kankab board."
|
100
|
+
command :show do |c|
|
101
|
+
c.desc 'Board to use'
|
102
|
+
c.flag [:b, :board]
|
103
|
+
|
104
|
+
c.action do |global_options, options, args|
|
105
|
+
twkb = TWKB::App.new( :board_name => options[:board] )
|
106
|
+
twkb.print_table
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
exit run(ARGV)
|
data/lib/twkb.rb
CHANGED
@@ -14,7 +14,7 @@ module TWKB
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def print_table
|
17
|
-
formatter = TWKB::Formatter.new(:stages => @config.stages, :cell_width => @config['view.cell_width'])
|
17
|
+
formatter = TWKB::Formatter.new(:title => @board_name, :stages => @config.stages, :cell_width => @config['view.cell_width'])
|
18
18
|
puts formatter.table
|
19
19
|
end
|
20
20
|
|
data/lib/twkb/formatter.rb
CHANGED
@@ -9,12 +9,13 @@ module TWKB
|
|
9
9
|
@cell_width = options[:cell_width]
|
10
10
|
@cell_width ||= 15
|
11
11
|
@stages = options[:stages]
|
12
|
+
@title = options[:title]
|
12
13
|
prepare
|
13
14
|
end
|
14
15
|
|
15
16
|
def table
|
16
17
|
stage_labels = @stages.keys.map{|k,v| @stages[k][:label]}
|
17
|
-
Terminal::Table.new :headings => stage_labels, :rows => [@lanes]
|
18
|
+
Terminal::Table.new :title => @title, :headings => stage_labels, :rows => [@lanes]
|
18
19
|
end
|
19
20
|
|
20
21
|
private
|
data/lib/twkb/version.rb
CHANGED
data/twkb.gemspec
CHANGED
@@ -14,6 +14,7 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.add_runtime_dependency 'terminal-table', '~>1.4.5'
|
15
15
|
s.add_runtime_dependency 'parseconfig', '~>1.0.2'
|
16
16
|
s.add_runtime_dependency 'rainbow', '~>1.1.4'
|
17
|
+
s.add_runtime_dependency 'gli', '~>2.5.6'
|
17
18
|
|
18
19
|
s.files = `git ls-files`.split("\n")
|
19
20
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
metadata
CHANGED
@@ -1,75 +1,82 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: twkb
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
segments:
|
6
|
-
- 0
|
7
|
-
- 0
|
8
|
-
- 3
|
9
|
-
version: 0.0.3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.4
|
10
5
|
platform: ruby
|
11
|
-
authors:
|
12
|
-
-
|
6
|
+
authors:
|
7
|
+
- Kim Nørgaard
|
13
8
|
autorequire:
|
14
9
|
bindir: bin
|
15
10
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
dependencies:
|
20
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2013-05-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
21
14
|
name: terminal-table
|
22
|
-
|
23
|
-
|
24
|
-
requirements:
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
25
17
|
- - ~>
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
segments:
|
28
|
-
- 1
|
29
|
-
- 4
|
30
|
-
- 5
|
18
|
+
- !ruby/object:Gem::Version
|
31
19
|
version: 1.4.5
|
32
20
|
type: :runtime
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: parseconfig
|
36
21
|
prerelease: false
|
37
|
-
|
38
|
-
requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.4.5
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: parseconfig
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
39
31
|
- - ~>
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
segments:
|
42
|
-
- 1
|
43
|
-
- 0
|
44
|
-
- 2
|
32
|
+
- !ruby/object:Gem::Version
|
45
33
|
version: 1.0.2
|
46
34
|
type: :runtime
|
47
|
-
|
48
|
-
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.0.2
|
41
|
+
- !ruby/object:Gem::Dependency
|
49
42
|
name: rainbow
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.1.4
|
48
|
+
type: :runtime
|
50
49
|
prerelease: false
|
51
|
-
|
52
|
-
requirements:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
53
52
|
- - ~>
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
segments:
|
56
|
-
- 1
|
57
|
-
- 1
|
58
|
-
- 4
|
53
|
+
- !ruby/object:Gem::Version
|
59
54
|
version: 1.1.4
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: gli
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.5.6
|
60
62
|
type: :runtime
|
61
|
-
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 2.5.6
|
62
69
|
description: A command line utility based on task warrior to create kanban boards.
|
63
70
|
email: jasen@jasen.dk
|
64
|
-
executables:
|
71
|
+
executables:
|
65
72
|
- twkb
|
66
73
|
extensions: []
|
67
|
-
|
68
74
|
extra_rdoc_files: []
|
69
|
-
|
70
|
-
files:
|
75
|
+
files:
|
71
76
|
- .rvmrc
|
77
|
+
- Gemfile
|
72
78
|
- README.md
|
79
|
+
- Rakefile
|
73
80
|
- bin/twkb
|
74
81
|
- lib/twkb.rb
|
75
82
|
- lib/twkb/config.rb
|
@@ -77,35 +84,27 @@ files:
|
|
77
84
|
- lib/twkb/task.rb
|
78
85
|
- lib/twkb/version.rb
|
79
86
|
- twkb.gemspec
|
80
|
-
has_rdoc: true
|
81
87
|
homepage: https://github.com/KimNorgaard/twkb
|
82
88
|
licenses: []
|
83
|
-
|
89
|
+
metadata: {}
|
84
90
|
post_install_message:
|
85
91
|
rdoc_options: []
|
86
|
-
|
87
|
-
require_paths:
|
92
|
+
require_paths:
|
88
93
|
- lib
|
89
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
90
|
-
requirements:
|
91
|
-
- -
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
segments:
|
101
|
-
- 0
|
102
|
-
version: "0"
|
94
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
103
104
|
requirements: []
|
104
|
-
|
105
105
|
rubyforge_project:
|
106
|
-
rubygems_version:
|
106
|
+
rubygems_version: 2.0.3
|
107
107
|
signing_key:
|
108
|
-
specification_version:
|
108
|
+
specification_version: 4
|
109
109
|
summary: TaskWarrior Kanban
|
110
110
|
test_files: []
|
111
|
-
|