tps_reporter 0.4.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/HISTORY.md +7 -0
- data/README.md +1 -38
- data/data/index.haml +3 -0
- data/docs/Format.md +86 -0
- data/docs/Sprints.md +27 -0
- data/docs/Trello.md +22 -0
- data/lib/tps.rb +1 -0
- data/lib/tps/cli_reporter.rb +7 -7
- data/lib/tps/task.rb +18 -0
- data/lib/tps/taskpaper.rb +61 -23
- data/lib/tps/taskpaper_shim.rb +4 -4
- data/lib/tps/version.rb +1 -1
- data/test/bar_test.rb +10 -10
- data/test/html_test.rb +10 -12
- data/test/multi_sprints_test.rb +5 -5
- data/test/settings_test.rb +3 -3
- data/test/sprint_points_test.rb +7 -7
- data/test/sprint_test.rb +12 -12
- data/test/taskpaper_test.rb +121 -7
- data/test/test_helper.rb +10 -8
- data/test/tps_test.rb +22 -22
- data/test/url_test.rb +16 -0
- data/tps_reporter.gemspec +1 -1
- metadata +22 -20
- data/GUIDE.md +0 -53
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 42257e91f5dd1536461f61bcb04fb9237ae4f850
|
4
|
+
data.tar.gz: 54636995c94cee9252da033f5db98dd5d9556132
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a50835503a18037b7f0bb5cd1fd45197cb09b0f492a3d90777759036708d7b1b0c4282c7b84708791f2816d59222dd50fb41dcfecffd2d656526d476eaf0fed
|
7
|
+
data.tar.gz: 602f6567d09fb0312d07187ea1bbfc0b912817afcab419b0ee552d88aaec5d37cce665bde9c2dc3a9bb09d6760d49252ef066b5876674dcab1377df4ef5d6718
|
data/.gitignore
CHANGED
data/HISTORY.md
CHANGED
data/README.md
CHANGED
@@ -56,44 +56,7 @@ Edit it, then generate the report:
|
|
56
56
|
Format
|
57
57
|
------
|
58
58
|
|
59
|
-
|
60
|
-
|
61
|
-
They're simply a hierarchy of projects and tasks.
|
62
|
-
|
63
|
-
``` yaml
|
64
|
-
Edit users:
|
65
|
-
- Register and signup
|
66
|
-
- Login and logout
|
67
|
-
```
|
68
|
-
|
69
|
-
You can tag some projects or tasks.
|
70
|
-
|
71
|
-
``` yaml
|
72
|
-
Facebook connect:
|
73
|
-
- Register via Facebook @done
|
74
|
-
- Capture email
|
75
|
-
|
76
|
-
Manage employees: @done
|
77
|
-
- Create user
|
78
|
-
- Edit user
|
79
|
-
```
|
80
|
-
|
81
|
-
The following tags are recognized:
|
82
|
-
|
83
|
-
- `@done`
|
84
|
-
- `@in_progress`
|
85
|
-
- `@pt/2839478` *(Pivotal tracker ID. Links to a Pivotal tracker story.)*
|
86
|
-
- `@tr/LabxGP3` *(Trello card short name. Links to a Trello card.)*
|
87
|
-
- `@0pt` *(points; influences percentage. needs to end in __pt__ or __pts__.)*
|
88
|
-
- `@10%` *(task progress. implies __in progress__.)*
|
89
|
-
|
90
|
-
Example:
|
91
|
-
|
92
|
-
``` yaml
|
93
|
-
Employee management:
|
94
|
-
- Creating employees @40%
|
95
|
-
- Editing employees @done @2pts
|
96
|
-
```
|
59
|
+
See [docs/Format.md](docs/Format.md).
|
97
60
|
|
98
61
|
Exporting to PDF or image
|
99
62
|
-------------------------
|
data/data/index.haml
CHANGED
@@ -431,6 +431,9 @@
|
|
431
431
|
%a.meta{href: task.pivotal_url, target: '_blank'}= "PT ##{task.pivotal_id}"
|
432
432
|
- if task.trello_id
|
433
433
|
%a.meta{href: list.trello_board_url, target: '_blank'}= "Trello ##{task.trello_id}"
|
434
|
+
- if task.url
|
435
|
+
%a.meta{href: task.url, target: '_blank', class: "ext"}
|
436
|
+
!= task.url_label ? task.url_label : "›"
|
434
437
|
|
435
438
|
- if task.tags.any?
|
436
439
|
- task.tags.each do |tag|
|
data/docs/Format.md
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
File format
|
2
|
+
===========
|
3
|
+
|
4
|
+
The tasks file, usually `tasks.taskpaper`, is loosely based off of the [TaskPaper] format.
|
5
|
+
|
6
|
+
They're simply a hierarchy of projects and tasks. Projects are lines that end with `:`, and tasks are lines that begin with `- `, with indentation.
|
7
|
+
|
8
|
+
``` yaml
|
9
|
+
Edit users:
|
10
|
+
- Register and signup
|
11
|
+
- Login and logout
|
12
|
+
```
|
13
|
+
|
14
|
+
### Nesting
|
15
|
+
|
16
|
+
You can nest tasks as deep as you like.
|
17
|
+
|
18
|
+
``` yaml
|
19
|
+
Edit users:
|
20
|
+
- Register and signup
|
21
|
+
- Login and logout
|
22
|
+
- Design for the pages
|
23
|
+
- Responsive
|
24
|
+
- Implement functionality
|
25
|
+
```
|
26
|
+
|
27
|
+
### Tagging
|
28
|
+
|
29
|
+
You can tag some projects or tasks using `@`. For projects, you may put the tags after the colon.
|
30
|
+
|
31
|
+
``` yaml
|
32
|
+
Facebook connect:
|
33
|
+
- Register via Facebook @done
|
34
|
+
- Capture email
|
35
|
+
|
36
|
+
Manage employees: @done
|
37
|
+
- Create user
|
38
|
+
- Edit user
|
39
|
+
```
|
40
|
+
|
41
|
+
### Done
|
42
|
+
|
43
|
+
Mark tasks as done by adding a `@done` tag, or using `x` instead of `-`.
|
44
|
+
|
45
|
+
``` yaml
|
46
|
+
Manage user records:
|
47
|
+
- Create user
|
48
|
+
x Edit user
|
49
|
+
x Delete user
|
50
|
+
- Update user
|
51
|
+
```
|
52
|
+
|
53
|
+
### GitHub Flavored Markdown style
|
54
|
+
|
55
|
+
You can make your lists GitHub-compatible by using `- [ ]` and `- [x]` in your tasks. Projects in Markdown headings (`### heading`) are also supported.
|
56
|
+
|
57
|
+
``` yaml
|
58
|
+
### Manage user records
|
59
|
+
|
60
|
+
- [ ] Create user
|
61
|
+
- [x] Edit user
|
62
|
+
- [x] Delete user
|
63
|
+
- [ ] Update user
|
64
|
+
```
|
65
|
+
|
66
|
+
### Done
|
67
|
+
|
68
|
+
### Tags
|
69
|
+
|
70
|
+
The following tags are recognized:
|
71
|
+
|
72
|
+
- `@done`
|
73
|
+
- `@in_progress`
|
74
|
+
- `@pt/2839478` *(Pivotal tracker ID. Links to a Pivotal tracker story.)*
|
75
|
+
- `@tr/LabxGP3` *(Trello card short name. Links to a Trello card.)*
|
76
|
+
- `@0pt` *(points; influences percentage. needs to end in __pt__ or __pts__.)*
|
77
|
+
- `@10%` *(task progress. implies __in progress__.)*
|
78
|
+
|
79
|
+
Example:
|
80
|
+
|
81
|
+
``` yaml
|
82
|
+
Employee management:
|
83
|
+
- Creating employees @40%
|
84
|
+
- Editing employees @done @2pts
|
85
|
+
```
|
86
|
+
|
data/docs/Sprints.md
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
Sprint support
|
2
|
+
==============
|
3
|
+
|
4
|
+
First, make a sprints block, preferrably at the top of your `tasks.yml` file.
|
5
|
+
List down the sprints.
|
6
|
+
|
7
|
+
Then simply add the sprint ID to your tasks.
|
8
|
+
|
9
|
+
# tasks.taskpaper
|
10
|
+
Sprints:
|
11
|
+
s1: Sprint 1 (Nov 1-15)
|
12
|
+
s2: Sprint 2 (Nov 16-30)
|
13
|
+
s3: Sprint 3 (Dec 1-15)
|
14
|
+
|
15
|
+
Beta release:
|
16
|
+
- Account
|
17
|
+
- Login @s1
|
18
|
+
- Logout @s1 @done
|
19
|
+
- Signup @s2
|
20
|
+
|
21
|
+
It's also recursive--you can put sprints in your parent tasks under `_`:
|
22
|
+
|
23
|
+
Beta release:
|
24
|
+
- Blog @s3
|
25
|
+
- Create posts
|
26
|
+
- Read posts
|
27
|
+
- Delete posts
|
data/docs/Trello.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Trello card linking support
|
2
|
+
===========================
|
3
|
+
|
4
|
+
**DEPRECATED**: this feature has been deprecated and is not guaranteed to work.
|
5
|
+
|
6
|
+
Simply link the card shortcut under each item using `tr/XXXX`, where *XXXX* is
|
7
|
+
the short URL ID for the Trello card. You can see the short ID in Trello by
|
8
|
+
clicking "more..." inside the card popup.
|
9
|
+
|
10
|
+
Beta release:
|
11
|
+
- Blog @tr/Xh3pAGp1
|
12
|
+
- Account management
|
13
|
+
|
14
|
+
You can also link the card numbers, but you have to define the main Trello board
|
15
|
+
URL. Simply add `Trello URL: ____` to the top of the file.
|
16
|
+
|
17
|
+
|
18
|
+
Trello URL: https://trello.com/board/trello-resources/4f84a60f0cbdcb7e7d40e099
|
19
|
+
|
20
|
+
Beta release:
|
21
|
+
- Blog @tr/42
|
22
|
+
- Account management @tr/12
|
data/lib/tps.rb
CHANGED
data/lib/tps/cli_reporter.rb
CHANGED
@@ -30,7 +30,7 @@ module TPS
|
|
30
30
|
' '*19
|
31
31
|
end
|
32
32
|
|
33
|
-
pref = c("
|
33
|
+
pref = c("━"*80, 30)+"\n" if task.feature?
|
34
34
|
|
35
35
|
# Put together
|
36
36
|
"#{pref}" + "%-88s%s\n" % [ c1, c2 ]
|
@@ -55,14 +55,14 @@ module TPS
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def status
|
58
|
-
l = c("
|
59
|
-
r = c("
|
58
|
+
l = c("", 30)
|
59
|
+
r = c(" ", 30)
|
60
60
|
if task.done?
|
61
|
-
l + c('
|
61
|
+
l + c('✓', color) + r
|
62
62
|
elsif task.in_progress?
|
63
|
-
l + c('
|
63
|
+
l + c('•', color) + r
|
64
64
|
else
|
65
|
-
l + c('
|
65
|
+
l + c(' ', color) + r
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
@@ -71,7 +71,7 @@ module TPS
|
|
71
71
|
len = (task.percent * max).to_i
|
72
72
|
|
73
73
|
prog = ("%-#{max}s" % ["="*len])
|
74
|
-
prog = c("
|
74
|
+
prog = c("❚"*len, color) + c("❘"*(max-len), 30)
|
75
75
|
|
76
76
|
prog
|
77
77
|
end
|
data/lib/tps/task.rb
CHANGED
@@ -11,6 +11,7 @@ module TPS
|
|
11
11
|
attr_reader :parent
|
12
12
|
attr_reader :tags
|
13
13
|
attr_reader :list # the root TaskList
|
14
|
+
attr_reader :url
|
14
15
|
attr_reader :id
|
15
16
|
|
16
17
|
def initialize(parent, name, data=nil, list)
|
@@ -31,6 +32,15 @@ module TPS
|
|
31
32
|
tasks = data
|
32
33
|
end
|
33
34
|
|
35
|
+
# Parse crap from name
|
36
|
+
if @name
|
37
|
+
@name = @name.dup
|
38
|
+
|
39
|
+
# Get URL
|
40
|
+
@name.gsub!(/https?:\/\/[^ ]+/) { |url| @url = url; "" }
|
41
|
+
@name.strip!
|
42
|
+
end
|
43
|
+
|
34
44
|
# Parse tags.
|
35
45
|
tags.each do |t|
|
36
46
|
# [done]
|
@@ -69,6 +79,14 @@ module TPS
|
|
69
79
|
@id = list.get_id if list
|
70
80
|
end
|
71
81
|
|
82
|
+
# The label of the link, if applicable.
|
83
|
+
def url_label
|
84
|
+
return unless url
|
85
|
+
if url =~ /github\.com\/.*?\/(\d+)$/
|
86
|
+
$1.strip
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
72
90
|
def status
|
73
91
|
# If no status is given, infer the status based on tasks.
|
74
92
|
if !@status && tasks?
|
data/lib/tps/taskpaper.rb
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
# node.level #=> 1 (depth)
|
7
7
|
#
|
8
8
|
# node.text #=> 'do things @done'
|
9
|
-
# node.
|
9
|
+
# node.text #=> 'do things'
|
10
10
|
# node.tags #=> ['@done']
|
11
11
|
#
|
12
12
|
# node.node_type
|
@@ -22,16 +22,21 @@ module TPS::TaskPaper
|
|
22
22
|
attr_reader :children
|
23
23
|
attr_reader :parent
|
24
24
|
|
25
|
+
TAG_REGEX = %r[(?:^|\s*)@[^\s]*(?:\([^\)]*\))?]
|
26
|
+
|
25
27
|
DEFAULTS = {
|
26
28
|
:level => 0,
|
27
29
|
:node_type => :root,
|
28
30
|
:text => ''
|
29
31
|
}
|
30
32
|
|
31
|
-
def initialize(options)
|
33
|
+
def initialize(options = {})
|
32
34
|
options = DEFAULTS.merge(options)
|
33
35
|
options.each { |k, v| instance_variable_set :"@#{k}", v }
|
34
|
-
|
36
|
+
|
37
|
+
@children = options[:children].map { |data|
|
38
|
+
Node.new data.merge(:parent => self)
|
39
|
+
}
|
35
40
|
end
|
36
41
|
|
37
42
|
def project?
|
@@ -58,18 +63,8 @@ module TPS::TaskPaper
|
|
58
63
|
(parent? ? parent.breadcrumbs : []) + [self]
|
59
64
|
end
|
60
65
|
|
61
|
-
TAG_REGEX = %r[(?:^|\s*)@[^\s]*(?:\([^\)]*\))?]
|
62
|
-
|
63
|
-
# Returns text without tags
|
64
|
-
def plain_text
|
65
|
-
text
|
66
|
-
.gsub(TAG_REGEX, '')
|
67
|
-
.gsub(/\s*:\s*$/, '')
|
68
|
-
.strip
|
69
|
-
end
|
70
|
-
|
71
66
|
def tags
|
72
|
-
|
67
|
+
@tags || []
|
73
68
|
end
|
74
69
|
|
75
70
|
def description
|
@@ -89,32 +84,75 @@ module TPS::TaskPaper
|
|
89
84
|
end
|
90
85
|
|
91
86
|
def to_line_s
|
87
|
+
tags_str = tags.any? ? (tags.map { |t| " #{t}" }.join("")) : ""
|
88
|
+
|
92
89
|
if project?
|
93
|
-
"#{text}
|
90
|
+
"#{text}:#{tags_str}"
|
94
91
|
elsif task?
|
95
|
-
"- #{text}"
|
92
|
+
"- #{text}#{tags_str}"
|
96
93
|
else
|
97
94
|
"#{text}"
|
98
95
|
end
|
99
96
|
end
|
100
97
|
|
101
|
-
|
98
|
+
def self.parse_text(text)
|
99
|
+
[
|
100
|
+
text
|
101
|
+
.gsub(TAG_REGEX, '')
|
102
|
+
.gsub(/\s*:\s*$/, '')
|
103
|
+
.strip,
|
104
|
+
text.scan(TAG_REGEX).map(&:strip)
|
105
|
+
]
|
106
|
+
end
|
107
|
+
|
108
|
+
# Returns a hash from a line.
|
109
|
+
#
|
110
|
+
# The `root` reference serves as the context.
|
102
111
|
#
|
103
|
-
# parse_line("\t- Hello")
|
112
|
+
# parse_line("\t- Hello", root)
|
104
113
|
# #=> { node_type: :task, level: 2, text: "Hello" }
|
105
114
|
#
|
106
|
-
def self.parse_line(line)
|
115
|
+
def self.parse_line(line, root={})
|
107
116
|
node = {}
|
108
117
|
|
109
|
-
|
118
|
+
# find indentation level
|
119
|
+
if line =~ /^(\s+)/
|
120
|
+
if root[:indent]
|
121
|
+
node[:level] = $1.length / root[:indent].length + 1
|
122
|
+
else
|
123
|
+
root[:indent] = $1
|
124
|
+
node[:level] = 2
|
125
|
+
end
|
126
|
+
else
|
127
|
+
node[:level] = 1
|
128
|
+
end
|
110
129
|
|
111
130
|
line = line.strip
|
112
|
-
|
131
|
+
|
132
|
+
# GitHub-style task
|
133
|
+
if line =~ /^- \[([ x])\] +(.*)$/
|
134
|
+
node[:node_type] = :task
|
135
|
+
node[:text] = $1
|
136
|
+
node[:text], node[:tags] = parse_text($2)
|
137
|
+
node[:tags] << "@done" if $1 == "x"
|
138
|
+
|
139
|
+
elsif line =~ /^([\-x]) +(.*)$/
|
113
140
|
node[:node_type] = :task
|
114
141
|
node[:text] = $1
|
142
|
+
node[:text], node[:tags] = parse_text($2)
|
143
|
+
node[:tags] << "@done" if $1 == "x"
|
144
|
+
|
145
|
+
# Project
|
115
146
|
elsif line =~ /^(.*):((?:\s*#{TAG_REGEX})+)?$/m
|
116
147
|
node[:node_type] = :project
|
117
|
-
node[:text] = "#{$1}#{$2}"
|
148
|
+
node[:text], node[:tags] = parse_text("#{$1}#{$2}")
|
149
|
+
|
150
|
+
# GitHub-style project
|
151
|
+
elsif line =~ /^#+ (.*)$/
|
152
|
+
node[:node_type] = :project
|
153
|
+
node[:text], node[:tags] = parse_text($1)
|
154
|
+
|
155
|
+
# Note
|
118
156
|
else
|
119
157
|
node[:node_type] = :note
|
120
158
|
node[:text] = line
|
@@ -147,7 +185,7 @@ module TPS::TaskPaper
|
|
147
185
|
lines.each_with_index do |line, i|
|
148
186
|
next if line.strip == ""
|
149
187
|
|
150
|
-
node = Node.parse_line(line)
|
188
|
+
node = Node.parse_line(line, root)
|
151
189
|
|
152
190
|
if node[:level] <= level # Sibling
|
153
191
|
ancestry[node[:level]-1][:children] << node
|
data/lib/tps/taskpaper_shim.rb
CHANGED
@@ -32,15 +32,15 @@ module TPS::TaskPaperShim
|
|
32
32
|
|
33
33
|
# Load children
|
34
34
|
node.children.each do |child|
|
35
|
-
text = child.
|
35
|
+
text = child.text
|
36
36
|
|
37
37
|
# For "Trello URL: xxx" settings
|
38
38
|
if is_setting?(child)
|
39
|
-
child.
|
39
|
+
child.text =~ /^(.*?): (.*)$/
|
40
40
|
hash[$1] = $2
|
41
41
|
|
42
42
|
# For "s1: Sprint 1" notes
|
43
|
-
elsif node.
|
43
|
+
elsif node.text == "Sprints"
|
44
44
|
text.match(/^(.*?): (.*)$/) && hash[$1] = $2
|
45
45
|
|
46
46
|
# For everything else
|
@@ -55,7 +55,7 @@ module TPS::TaskPaperShim
|
|
55
55
|
# Checks if a given node is a settings node
|
56
56
|
def is_setting?(node)
|
57
57
|
if node.note?
|
58
|
-
SETTINGS.any? { |tag| node.
|
58
|
+
SETTINGS.any? { |tag| node.text =~ /^#{tag}:/ }
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
data/lib/tps/version.rb
CHANGED
data/test/bar_test.rb
CHANGED
@@ -1,45 +1,45 @@
|
|
1
1
|
require File.expand_path('../test_helper', __FILE__)
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
describe "Bar test" do
|
4
|
+
before do
|
5
5
|
@list = TPS::TaskList.new :yaml => f('markers.yml')
|
6
6
|
@milestone = @list.tasks.first
|
7
7
|
|
8
8
|
@week = %w[w0 w1 w2 w3 w4 w5 w6].map { |id| @list.sprints[id] }
|
9
9
|
end
|
10
10
|
|
11
|
-
|
11
|
+
it "basic sanity check" do
|
12
12
|
assert_equal 2, @list.find("Login").sprints.length
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
|
15
|
+
describe "#index_segments" do
|
16
|
+
it "disjointed" do
|
17
17
|
task = @list.find("Disjointed")
|
18
18
|
bar = task.bar_formatter
|
19
19
|
assert_equal [(1..2), (4..4)], bar.index_segments
|
20
20
|
end
|
21
21
|
|
22
|
-
|
22
|
+
it "continuous" do
|
23
23
|
task = @list.find("Continuous")
|
24
24
|
bar = task.bar_formatter
|
25
25
|
assert_equal [(1..4)], bar.index_segments
|
26
26
|
end
|
27
27
|
|
28
|
-
|
28
|
+
it "disjointed with head" do
|
29
29
|
task = @list.find("Disjointed with head")
|
30
30
|
bar = task.bar_formatter
|
31
31
|
assert_equal [(1..1), (3..4)], bar.index_segments
|
32
32
|
end
|
33
33
|
|
34
|
-
|
34
|
+
it "disjointed with two segments" do
|
35
35
|
task = @list.find("Disjointed with two segments")
|
36
36
|
bar = task.bar_formatter
|
37
37
|
assert_equal [(2..3), (5..6)], bar.index_segments
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
|
42
|
-
|
41
|
+
describe "#segments" do
|
42
|
+
it "disjointed" do
|
43
43
|
task = @list.find("Disjointed")
|
44
44
|
bar = task.bar_formatter
|
45
45
|
end
|
data/test/html_test.rb
CHANGED
@@ -1,19 +1,17 @@
|
|
1
1
|
require File.expand_path('../test_helper', __FILE__)
|
2
2
|
|
3
|
-
|
4
|
-
TESTS = %w[hello.yml multi_sprints.yml sprint_points.yml sprints.yml]
|
3
|
+
TESTS = %w[hello.yml multi_sprints.yml sprint_points.yml sprints.yml]
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
TESTS.each do |yml_file|
|
6
|
+
describe yml_file do
|
7
|
+
before do
|
8
|
+
@list = TPS::TaskList.new :yaml => f(yml_file)
|
9
|
+
end
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
11
|
+
it "HTML" do
|
12
|
+
html = @list.to_html
|
13
|
+
assert html.include?("span")
|
14
|
+
assert html.include?("body")
|
17
15
|
end
|
18
16
|
end
|
19
17
|
end
|
data/test/multi_sprints_test.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
require File.expand_path('../test_helper', __FILE__)
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
describe "Multi sprints" do
|
4
|
+
before do
|
5
5
|
@list = TPS::TaskList.new :yaml => f('multi_sprints.yml')
|
6
6
|
@milestone = @list.tasks.first
|
7
7
|
|
8
8
|
@week = %w[_ w1 w2 w3 w4].map { |id| @list.sprints[id] }
|
9
9
|
end
|
10
10
|
|
11
|
-
|
11
|
+
it "Sprints" do
|
12
12
|
sprints = @list.find('Login').sprints
|
13
13
|
|
14
14
|
assert_equal 2, sprints.length
|
@@ -16,11 +16,11 @@ class MultiSprintsTest < UnitTest
|
|
16
16
|
assert sprints.include?(@week[2])
|
17
17
|
end
|
18
18
|
|
19
|
-
|
19
|
+
it "points (1)" do
|
20
20
|
assert_equal 6, @week[1].points
|
21
21
|
end
|
22
22
|
|
23
|
-
|
23
|
+
it "points (2)" do
|
24
24
|
assert_equal 2, @week[2].points
|
25
25
|
end
|
26
26
|
end
|
data/test/settings_test.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
require File.expand_path('../test_helper', __FILE__)
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
describe "Settings" do
|
4
|
+
before do
|
5
5
|
@hash = TPS::TaskPaperShim.parse("Trello URL: http://xyz\nVersion 1:\n\t- Hello")
|
6
6
|
end
|
7
7
|
|
8
|
-
|
8
|
+
it "use setting" do
|
9
9
|
assert_equal "http://xyz", @hash["Trello URL"]
|
10
10
|
end
|
11
11
|
end
|
data/test/sprint_points_test.rb
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
require File.expand_path('../test_helper', __FILE__)
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
describe "Sprint points" do
|
4
|
+
before do
|
5
5
|
@list = TPS::TaskList.new :yaml => f('sprint_points.yml')
|
6
6
|
@milestone = @list.tasks.first
|
7
7
|
@s = %w[_ s1 s2 s3 s4 s5].map { |id| @list.sprints[id] }
|
8
8
|
end
|
9
9
|
|
10
|
-
|
10
|
+
it "S1 points" do
|
11
11
|
assert_equal 1.0, @s[1].points
|
12
12
|
end
|
13
13
|
|
14
|
-
|
14
|
+
it "S2 points" do
|
15
15
|
assert_equal 3.0, @s[2].points
|
16
16
|
end
|
17
17
|
|
18
|
-
|
18
|
+
it "S3 points" do
|
19
19
|
assert_equal 0.0, @s[3].points
|
20
20
|
end
|
21
21
|
|
22
|
-
|
22
|
+
it "S4 points" do
|
23
23
|
assert_equal 2.5, @s[4].points
|
24
24
|
end
|
25
25
|
|
26
|
-
|
26
|
+
it "S5 points" do
|
27
27
|
assert_equal 1.0, @s[5].points
|
28
28
|
end
|
29
29
|
end
|
data/test/sprint_test.rb
CHANGED
@@ -1,62 +1,62 @@
|
|
1
1
|
require File.expand_path('../test_helper', __FILE__)
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
describe "Sprint" do
|
4
|
+
before do
|
5
5
|
@list = TPS::TaskList.new :yaml => f('sprints.yml')
|
6
6
|
@milestone = @list.tasks.first
|
7
7
|
@s1 = @list.sprints['s1']
|
8
8
|
@s2 = @list.sprints['s2']
|
9
9
|
end
|
10
10
|
|
11
|
-
|
11
|
+
it "Sprints" do
|
12
12
|
assert_equal 2, @list.sprints.size
|
13
13
|
assert_equal 'Sprint one', @s1.name
|
14
14
|
assert_equal 'Sprint two', @s2.name
|
15
15
|
end
|
16
16
|
|
17
|
-
|
17
|
+
it "Sprint model attributes" do
|
18
18
|
sprint = @list.sprints['s1']
|
19
19
|
assert_equal 'Sprint one', sprint.name
|
20
20
|
assert_equal @list, sprint.list
|
21
21
|
end
|
22
22
|
|
23
|
-
|
23
|
+
it "Tasks should be assigned to sprints" do
|
24
24
|
assert @list['Version 1']['Account']['Login'].sprints.include?(@s1)
|
25
25
|
end
|
26
26
|
|
27
|
-
|
27
|
+
it "Task#contains_sprint?" do
|
28
28
|
assert @list.contains_sprint?(@s1)
|
29
29
|
assert @list.contains_sprint?(@s2)
|
30
30
|
end
|
31
31
|
|
32
|
-
|
32
|
+
it "Task#contains_sprint? part 2" do
|
33
33
|
task = @list['Version 1']['Account']['Login']
|
34
34
|
assert task.contains_sprint?(@s1)
|
35
35
|
assert ! task.contains_sprint?(@s2)
|
36
36
|
end
|
37
37
|
|
38
|
-
|
38
|
+
it "Task#filter_by_sprint" do
|
39
39
|
list = @list.filter_by_sprint(@s1)
|
40
40
|
assert ! list['Version 1']['Account']['Login'].nil?
|
41
41
|
assert list['Version 1']['Account']['Signup'].nil?
|
42
42
|
end
|
43
43
|
|
44
|
-
|
44
|
+
it "Sub-tasks of a sprint task" do
|
45
45
|
list = @list.filter_by_sprint(@s1)
|
46
46
|
task = list['Version 1']['Comments']['Creating']
|
47
47
|
assert ! task.nil?
|
48
48
|
end
|
49
49
|
|
50
|
-
|
50
|
+
it "Sprint#index" do
|
51
51
|
assert_equal 0, @list.sprints['s1'].index
|
52
52
|
assert_equal 1, @list.sprints['s2'].index
|
53
53
|
end
|
54
54
|
|
55
|
-
|
55
|
+
it "Sprint#points" do
|
56
56
|
assert_equal 5, @s1.points
|
57
57
|
end
|
58
58
|
|
59
|
-
|
59
|
+
it "Sprint#points_done" do
|
60
60
|
assert_equal 3, @s1.points_done
|
61
61
|
end
|
62
62
|
end
|
data/test/taskpaper_test.rb
CHANGED
@@ -1,28 +1,142 @@
|
|
1
1
|
require File.expand_path('../test_helper', __FILE__)
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
describe "Taskpaper" do
|
4
|
+
it "parseable" do
|
5
5
|
data = File.read('tasks.taskpaper')
|
6
6
|
root = TPS::TaskPaper.parse(data)
|
7
7
|
end
|
8
8
|
|
9
9
|
describe "basic doc" do
|
10
|
-
|
10
|
+
before do
|
11
11
|
@source = "Version 1:\n\t- Log in @done"
|
12
12
|
@node = TPS::TaskPaper.parse(@source)
|
13
13
|
end
|
14
14
|
|
15
|
-
|
15
|
+
it "exports back to its original state" do
|
16
16
|
assert_equal @node.to_s.strip, @source
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
describe "
|
21
|
-
|
20
|
+
describe "2 spaces as tabs" do
|
21
|
+
before do
|
22
|
+
@source = "Version 1:\n - Log in\n - Sign up"
|
23
|
+
@node = TPS::TaskPaper.parse(@source)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should work" do
|
27
|
+
assert_equal @node.to_s.strip, @source.gsub(' ', "\t")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "single lines" do
|
32
|
+
it "parses a basic task" do
|
33
|
+
@node = TPS::TaskPaper.parse("- hello").children[0]
|
34
|
+
assert_equal @node.text, "hello"
|
35
|
+
assert_equal @node.task?, true
|
36
|
+
assert_equal @node.level, 1
|
37
|
+
assert_equal @node.to_line_s, "- hello"
|
38
|
+
end
|
39
|
+
|
40
|
+
it "parses a done task" do
|
41
|
+
@node = TPS::TaskPaper.parse("x hello").children[0]
|
42
|
+
assert_equal @node.text, "hello"
|
43
|
+
assert_equal @node.task?, true
|
44
|
+
assert_equal @node.level, 1
|
45
|
+
assert_equal @node.tags, ["@done"]
|
46
|
+
end
|
47
|
+
|
48
|
+
it "parses a task with tags" do
|
49
|
+
@node = TPS::TaskPaper.parse("- hello @done").children[0]
|
50
|
+
assert_equal @node.text, "hello"
|
51
|
+
assert_equal @node.tags, ["@done"]
|
52
|
+
assert_equal @node.task?, true
|
53
|
+
assert_equal @node.level, 1
|
54
|
+
assert_equal @node.to_line_s, "- hello @done"
|
55
|
+
end
|
56
|
+
|
57
|
+
it "parses a note" do
|
58
|
+
@node = TPS::TaskPaper.parse("hello").children[0]
|
59
|
+
assert_equal @node.text, "hello"
|
60
|
+
assert_equal @node.note?, true
|
61
|
+
assert_equal @node.level, 1
|
62
|
+
assert_equal @node.to_line_s, "hello"
|
63
|
+
end
|
64
|
+
|
65
|
+
it "parses a note with fake tags" do
|
66
|
+
@node = TPS::TaskPaper.parse("hello @done").children[0]
|
67
|
+
assert_equal @node.text, "hello @done"
|
68
|
+
assert_equal @node.note?, true
|
69
|
+
assert_equal @node.level, 1
|
70
|
+
assert_equal @node.to_line_s, "hello @done"
|
71
|
+
end
|
72
|
+
|
73
|
+
it "parses a task with multiple tags" do
|
74
|
+
@node = TPS::TaskPaper.parse("- hello @ok @done").children[0]
|
75
|
+
assert_equal @node.text, "hello"
|
76
|
+
assert_equal @node.tags, ["@ok", "@done"]
|
77
|
+
assert_equal @node.task?, true
|
78
|
+
assert_equal @node.level, 1
|
79
|
+
assert_equal @node.to_line_s, "- hello @ok @done"
|
80
|
+
end
|
81
|
+
|
82
|
+
it "parses a basic project" do
|
83
|
+
@node = TPS::TaskPaper.parse("hello:").children[0]
|
84
|
+
assert_equal @node.text, "hello"
|
85
|
+
assert_equal @node.project?, true
|
86
|
+
assert_equal @node.level, 1
|
87
|
+
end
|
88
|
+
|
89
|
+
it "parses a project with tags" do
|
90
|
+
@node = TPS::TaskPaper.parse("hello: @done").children[0]
|
91
|
+
assert_equal @node.text, "hello"
|
92
|
+
assert_equal @node.tags, ["@done"]
|
93
|
+
assert_equal @node.project?, true
|
94
|
+
assert_equal @node.level, 1
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
describe "github style" do
|
99
|
+
it "parses a basic task" do
|
100
|
+
@node = TPS::TaskPaper.parse("- [ ] hello").children[0]
|
101
|
+
assert_equal @node.text, "hello"
|
102
|
+
assert_equal @node.task?, true
|
103
|
+
assert_equal @node.tags, []
|
104
|
+
assert_equal @node.level, 1
|
105
|
+
end
|
106
|
+
|
107
|
+
it "parses a basic task as done" do
|
108
|
+
@node = TPS::TaskPaper.parse("- [x] hello").children[0]
|
109
|
+
assert_equal @node.text, "hello"
|
110
|
+
assert_equal @node.task?, true
|
111
|
+
assert_equal @node.tags, ["@done"]
|
112
|
+
assert_equal @node.level, 1
|
113
|
+
end
|
114
|
+
|
115
|
+
it "parses a basic project" do
|
116
|
+
@node = TPS::TaskPaper.parse("## hello").children[0]
|
117
|
+
assert_equal @node.text, "hello"
|
118
|
+
assert_equal @node.project?, true
|
119
|
+
assert_equal @node.tags, []
|
120
|
+
assert_equal @node.level, 1
|
121
|
+
end
|
122
|
+
|
123
|
+
it "parses a basic task as done" do
|
124
|
+
@node = TPS::TaskPaper.parse("## hello @done").children[0]
|
125
|
+
assert_equal @node.text, "hello"
|
126
|
+
assert_equal @node.project?, true
|
127
|
+
assert_equal @node.tags, ["@done"]
|
128
|
+
assert_equal @node.level, 1
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
|
133
|
+
|
134
|
+
describe "TaskPaperShim" do
|
135
|
+
before do
|
22
136
|
@hash = TPS::TaskPaperShim.load('tasks.taskpaper')
|
23
137
|
end
|
24
138
|
|
25
|
-
|
139
|
+
it "should work" do
|
26
140
|
expected = {"Sprints"=>{"s1"=>"Sprint 1 (November)", "s2"=>"Sprint 2 (Jan)", "s3"=>"Sprint 3 (December)"}, "Version 1"=>{"User signup"=>{"_"=>["s1"], "Register for an account"=>nil, "Log in"=>["done"], "Forget password"=>nil}, "Manage users"=>{"_"=>["in progress", "s1"], "Create users"=>["in progress", "s3"], "Delete users"=>nil, "User profile page"=>nil}, "Blog"=>{"Creating new posts"=>["done"], "Comments"=>["done"], "Moderating comments"=>nil}}}
|
27
141
|
assert_equal expected, @hash
|
28
142
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
$:.unshift File.expand_path('../../lib', __FILE__)
|
2
|
-
require '
|
2
|
+
require 'minitest/autorun'
|
3
|
+
|
4
|
+
require 'minitest/reporters'
|
5
|
+
Minitest::Reporters.use! Minitest::Reporters::ProgressReporter.new
|
6
|
+
|
3
7
|
require 'tps'
|
4
8
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
end
|
9
|
+
def f(*a)
|
10
|
+
File.join fixture_root, *a
|
11
|
+
end
|
9
12
|
|
10
|
-
|
11
|
-
|
12
|
-
end
|
13
|
+
def fixture_root
|
14
|
+
File.expand_path('../fixtures', __FILE__)
|
13
15
|
end
|
data/test/tps_test.rb
CHANGED
@@ -1,25 +1,25 @@
|
|
1
1
|
require File.expand_path('../test_helper', __FILE__)
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
describe "TPS" do
|
4
|
+
before do
|
5
5
|
@list = TPS::TaskList.new :yaml => f('hello.yml')
|
6
6
|
@milestone = @list.tasks.first
|
7
7
|
end
|
8
8
|
|
9
|
-
|
9
|
+
it "Has tasks" do
|
10
10
|
assert @list.tasks?
|
11
11
|
assert_equal 2, @list.tasks.size
|
12
12
|
assert @list.tasks.first.tasks.size >= 2
|
13
13
|
end
|
14
14
|
|
15
|
-
|
15
|
+
it "Explicit percent" do
|
16
16
|
task = @milestone.tasks[0]
|
17
17
|
assert task.in_progress?
|
18
18
|
assert_equal :in_progress, task.status
|
19
19
|
assert_equal 0.25, task.percent
|
20
20
|
end
|
21
21
|
|
22
|
-
|
22
|
+
it "Overriding percent" do
|
23
23
|
task = @milestone.tasks[2]
|
24
24
|
assert_equal "Overridden percent", task.name
|
25
25
|
assert task.in_progress?
|
@@ -27,32 +27,32 @@ class MyTest < UnitTest
|
|
27
27
|
assert_equal 0.5, task.percent
|
28
28
|
end
|
29
29
|
|
30
|
-
|
30
|
+
it "Points" do
|
31
31
|
task = @milestone.tasks[1]
|
32
32
|
assert_equal 2.0, task.points
|
33
33
|
end
|
34
34
|
|
35
|
-
|
35
|
+
it "Explicit points" do
|
36
36
|
task = @milestone.tasks[3]
|
37
37
|
assert_equal 15, task.points
|
38
38
|
assert_equal 0.75, task.percent
|
39
39
|
assert_equal 11.25, task.points_done
|
40
40
|
end
|
41
41
|
|
42
|
-
|
42
|
+
it "Compound points" do
|
43
43
|
task = @milestone.tasks[4]
|
44
44
|
assert_equal 6, task.points
|
45
45
|
assert_equal 0.50, task.percent
|
46
46
|
end
|
47
47
|
|
48
|
-
|
48
|
+
it "Point rescaling" do
|
49
49
|
task = @milestone.tasks[5]
|
50
50
|
assert_equal 8, task.points
|
51
51
|
assert_equal 4.0, task.points_done
|
52
52
|
assert_equal 0.5, task.percent
|
53
53
|
end
|
54
54
|
|
55
|
-
|
55
|
+
it "In progress" do
|
56
56
|
task = @milestone.tasks[6]
|
57
57
|
assert_equal 2, task.tasks.size
|
58
58
|
assert task.tasks[1].in_progress?
|
@@ -61,48 +61,48 @@ class MyTest < UnitTest
|
|
61
61
|
assert_equal 0.25, task.percent
|
62
62
|
end
|
63
63
|
|
64
|
-
|
64
|
+
it "Progress override" do
|
65
65
|
task = @milestone.tasks[7]
|
66
66
|
assert_equal 0.2, task.percent
|
67
67
|
assert_equal 0.4, task.points_done
|
68
68
|
end
|
69
69
|
|
70
|
-
|
70
|
+
it "Milestone" do
|
71
71
|
assert @milestone.milestone?
|
72
72
|
end
|
73
73
|
|
74
|
-
|
74
|
+
it "Not milestone" do
|
75
75
|
@milestone.tasks.each do |t|
|
76
76
|
assert ! t.milestone?
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
|
-
|
80
|
+
it "HTML works" do
|
81
81
|
assert @list.to_html
|
82
82
|
end
|
83
83
|
|
84
|
-
|
84
|
+
it "Lookup" do
|
85
85
|
assert_equal @milestone, @list['Milestone 1']
|
86
86
|
end
|
87
87
|
|
88
|
-
|
89
|
-
|
88
|
+
describe "Task#find" do
|
89
|
+
it "self name" do
|
90
90
|
end
|
91
91
|
|
92
|
-
|
92
|
+
it "descendant" do
|
93
93
|
assert_equal @list['Milestone 1'], @list.find('Milestone 1')
|
94
94
|
end
|
95
95
|
|
96
|
-
|
96
|
+
it "Grand-child" do
|
97
97
|
assert_equal @list.tasks[0].tasks[1], @list.find('User login')
|
98
98
|
end
|
99
99
|
|
100
|
-
|
100
|
+
it "non-existent" do
|
101
101
|
assert_equal nil, @list.find("X")
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
105
|
-
|
105
|
+
it "Task#breadcrumbs" do
|
106
106
|
crumbs = @list['Milestone 1']['User login']['Signup'].breadcrumbs
|
107
107
|
expected = [
|
108
108
|
@list['Milestone 1'],
|
@@ -112,7 +112,7 @@ class MyTest < UnitTest
|
|
112
112
|
assert_equal expected, crumbs
|
113
113
|
end
|
114
114
|
|
115
|
-
|
115
|
+
it "Task#breadcrumbs(false)" do
|
116
116
|
crumbs = @list['Milestone 1']['User login']['Signup'].breadcrumbs(false)
|
117
117
|
expected = [
|
118
118
|
@list['Milestone 1'],
|
data/test/url_test.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require File.expand_path('../test_helper', __FILE__)
|
2
|
+
|
3
|
+
describe "URLs" do
|
4
|
+
before do
|
5
|
+
@list = TPS::TaskList.new data: [
|
6
|
+
"Hello http://google.com"
|
7
|
+
]
|
8
|
+
|
9
|
+
@task = @list.tasks[0]
|
10
|
+
end
|
11
|
+
|
12
|
+
it "use setting" do
|
13
|
+
assert_equal "Hello", @task.name
|
14
|
+
assert_equal "http://google.com", @task.url
|
15
|
+
end
|
16
|
+
end
|
data/tps_reporter.gemspec
CHANGED
metadata
CHANGED
@@ -1,71 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tps_reporter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rico Sta. Cruz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-12-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tilt
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 1.4.1
|
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: 1.4.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: haml
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 4.0.0
|
34
34
|
type: :runtime
|
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: 4.0.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
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
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: minitest-reporters
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0
|
61
|
+
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0
|
68
|
+
version: '0'
|
69
69
|
description: A YAML-powered, simple command-line task report builder.
|
70
70
|
email:
|
71
71
|
- rico@sinefunc.com
|
@@ -74,9 +74,8 @@ executables:
|
|
74
74
|
extensions: []
|
75
75
|
extra_rdoc_files: []
|
76
76
|
files:
|
77
|
-
- .gitignore
|
78
|
-
- .travis.yml
|
79
|
-
- GUIDE.md
|
77
|
+
- ".gitignore"
|
78
|
+
- ".travis.yml"
|
80
79
|
- Gemfile
|
81
80
|
- HISTORY.md
|
82
81
|
- Notes.md
|
@@ -85,6 +84,9 @@ files:
|
|
85
84
|
- bin/tps
|
86
85
|
- data/index.haml
|
87
86
|
- data/sample.taskpaper
|
87
|
+
- docs/Format.md
|
88
|
+
- docs/Sprints.md
|
89
|
+
- docs/Trello.md
|
88
90
|
- lib/tps.rb
|
89
91
|
- lib/tps/bar_formatter.rb
|
90
92
|
- lib/tps/cli_reporter.rb
|
@@ -111,6 +113,7 @@ files:
|
|
111
113
|
- test/taskpaper_test.rb
|
112
114
|
- test/test_helper.rb
|
113
115
|
- test/tps_test.rb
|
116
|
+
- test/url_test.rb
|
114
117
|
- tps_reporter.gemspec
|
115
118
|
homepage: http://github.com/rstacruz/tps_reporter
|
116
119
|
licenses:
|
@@ -122,19 +125,18 @@ require_paths:
|
|
122
125
|
- lib
|
123
126
|
required_ruby_version: !ruby/object:Gem::Requirement
|
124
127
|
requirements:
|
125
|
-
- -
|
128
|
+
- - ">="
|
126
129
|
- !ruby/object:Gem::Version
|
127
130
|
version: '0'
|
128
131
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
132
|
requirements:
|
130
|
-
- -
|
133
|
+
- - ">="
|
131
134
|
- !ruby/object:Gem::Version
|
132
135
|
version: '0'
|
133
136
|
requirements: []
|
134
137
|
rubyforge_project:
|
135
|
-
rubygems_version: 2.
|
138
|
+
rubygems_version: 2.2.2
|
136
139
|
signing_key:
|
137
140
|
specification_version: 4
|
138
141
|
summary: Task progress sheet reporter.
|
139
142
|
test_files: []
|
140
|
-
has_rdoc:
|
data/GUIDE.md
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
Guide
|
2
|
-
=====
|
3
|
-
|
4
|
-
Advanced usage guide!
|
5
|
-
|
6
|
-
Sprint support
|
7
|
-
--------------
|
8
|
-
|
9
|
-
First, make a sprints block, preferrably at the top of your `tasks.yml` file.
|
10
|
-
List down the sprints.
|
11
|
-
|
12
|
-
Then simply add the sprint ID to your tasks.
|
13
|
-
|
14
|
-
# tasks.taskpaper
|
15
|
-
Sprints:
|
16
|
-
s1: Sprint 1 (Nov 1-15)
|
17
|
-
s2: Sprint 2 (Nov 16-30)
|
18
|
-
s3: Sprint 3 (Dec 1-15)
|
19
|
-
|
20
|
-
Beta release:
|
21
|
-
- Account
|
22
|
-
- Login @s1
|
23
|
-
- Logout @s1 @done
|
24
|
-
- Signup @s2
|
25
|
-
|
26
|
-
It's also recursive--you can put sprints in your parent tasks under `_`:
|
27
|
-
|
28
|
-
Beta release:
|
29
|
-
- Blog @s3
|
30
|
-
- Create posts
|
31
|
-
- Read posts
|
32
|
-
- Delete posts
|
33
|
-
|
34
|
-
Trello card linking support
|
35
|
-
---------------------------
|
36
|
-
|
37
|
-
Simply link the card shortcut under each item using `tr/XXXX`, where *XXXX* is
|
38
|
-
the short URL ID for the Trello card. You can see the short ID in Trello by
|
39
|
-
clicking "more..." inside the card popup.
|
40
|
-
|
41
|
-
Beta release:
|
42
|
-
- Blog @tr/Xh3pAGp1
|
43
|
-
- Account management
|
44
|
-
|
45
|
-
You can also link the card numbers, but you have to define the main Trello board
|
46
|
-
URL. Simply add `Trello URL: ____` to the top of the file.
|
47
|
-
|
48
|
-
|
49
|
-
Trello URL: https://trello.com/board/trello-resources/4f84a60f0cbdcb7e7d40e099
|
50
|
-
|
51
|
-
Beta release:
|
52
|
-
Blog: [tr/42]
|
53
|
-
Account management: [tr/12, done]
|