pivotal_to_pdf 0.5.2.1 → 0.6
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.
- data/CHANGELOG +5 -0
- data/Manifest +2 -1
- data/README.md +5 -2
- data/bin/pivotal_to_pdf +5 -3
- data/lib/pivotal_to_pdf/pdf_writer.rb +6 -7
- data/lib/pivotal_to_pdf/story.rb +19 -0
- data/lib/pivotal_to_pdf.rb +4 -4
- data/pivotal_to_pdf.gemspec +4 -6
- data/spec/pivotal_to_pdf/story_spec.rb +82 -0
- data/spec/pivotal_to_pdf_bin_spec.rb +16 -2
- metadata +6 -26
- data/spec/story_spec.rb +0 -31
data/CHANGELOG
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
v0.6
|
2
|
+
* The points section will be printed only for features. Bugs and Chores don't
|
3
|
+
have points
|
4
|
+
* Printed a green bounding box for feature, a yellow box for chores and a red
|
5
|
+
box for bugs
|
1
6
|
v0.5.2.1 Fixed a manifest problem
|
2
7
|
v0.5.2 Printed labels to the cards
|
3
8
|
v0.5.1 minor improvement over printing estimate, owned by
|
data/Manifest
CHANGED
@@ -10,7 +10,8 @@ lib/pivotal_to_pdf/iteration.rb
|
|
10
10
|
lib/pivotal_to_pdf/pdf_writer.rb
|
11
11
|
lib/pivotal_to_pdf/pivotal.rb
|
12
12
|
lib/pivotal_to_pdf/story.rb
|
13
|
+
pivotal_to_pdf.gemspec
|
14
|
+
spec/pivotal_to_pdf/story_spec.rb
|
13
15
|
spec/pivotal_to_pdf_bin_spec.rb
|
14
16
|
spec/spec_helper.rb
|
15
|
-
spec/story_spec.rb
|
16
17
|
tasks/spec.rb
|
data/README.md
CHANGED
@@ -10,7 +10,7 @@ I steal the part of code from http://ephemera.karmi.cz/post/622136360/create-pri
|
|
10
10
|
$ [sudo] gem install pivotal_to_pdf
|
11
11
|
|
12
12
|
## USAGE
|
13
|
-
First you need to create a .pivotal.yml under your home directory.
|
13
|
+
First you need to create a .pivotal.yml under your home directory. On windows, have this file in %HOME%.pivotal.yml
|
14
14
|
|
15
15
|
a sample .pivotal.yml:
|
16
16
|
|
@@ -22,9 +22,12 @@ After install the gem, you can do:
|
|
22
22
|
* pivotal_to_pdf iteration # print stories for the current iteration into a PDF file
|
23
23
|
* pivotal_to_pdf story STORY_ID # print a single story specifed by ID into a PDF file
|
24
24
|
|
25
|
-
|
26
25
|
The gem will then read the story/stories and print it into a PDF file
|
27
26
|
|
27
|
+
The points section will be printed only for features. Bugs and Chores don't have points
|
28
|
+
|
29
|
+
Printed a green bounding box for feature, a yellow box for chores and a red box for bugs
|
30
|
+
|
28
31
|
The gem assumes that you have https access to the pivotal tracker
|
29
32
|
|
30
33
|
##Contributors
|
data/bin/pivotal_to_pdf
CHANGED
@@ -4,14 +4,16 @@ require 'pivotal_to_pdf'
|
|
4
4
|
require 'thor'
|
5
5
|
|
6
6
|
class PivotalToPdfApp < Thor
|
7
|
-
desc "story STORY_ID", "print a single story specifed by ID into a PDF file"
|
7
|
+
desc "story STORY_ID", "print a single story specifed by ID into a PDF file. The card will have a color stripe. The color will be green for features, yellow for chores and red for bugs"
|
8
|
+
method_option :nocolor, :aliases => "-nc", :desc => "Make the card having no color stripe"
|
8
9
|
def story(story_id)
|
9
|
-
PivotalToPdf.story story_id
|
10
|
+
PivotalToPdf.story story_id, options[:nocolor]
|
10
11
|
end
|
11
12
|
|
12
13
|
desc "iteration", "print stories for the current iteration into a PDF file"
|
14
|
+
method_option :nocolor, :aliases => "-nc", :desc => "Make the card having no color stripe"
|
13
15
|
def iteration(iteration_number = "current")
|
14
|
-
PivotalToPdf.iteration iteration_number
|
16
|
+
PivotalToPdf.iteration iteration_number, options[:nocolor]
|
15
17
|
end
|
16
18
|
end
|
17
19
|
|
@@ -6,7 +6,7 @@ require 'rainbow'
|
|
6
6
|
|
7
7
|
class PdfWriter
|
8
8
|
attr_reader :story_or_iteration, :stories
|
9
|
-
def initialize(story_or_iteration)
|
9
|
+
def initialize(story_or_iteration, colored_stripe = true)
|
10
10
|
@story_or_iteration = story_or_iteration
|
11
11
|
@stories = story_or_iteration.is_a?(Iteration) ? story_or_iteration.stories : [story_or_iteration]
|
12
12
|
p stories.size
|
@@ -22,13 +22,13 @@ class PdfWriter
|
|
22
22
|
# pdf.start_new_page
|
23
23
|
|
24
24
|
stories.each_with_index do |story, index|
|
25
|
-
padding =
|
26
|
-
pdf.stroke_color =
|
25
|
+
padding = 10
|
26
|
+
pdf.stroke_color = story.story_color
|
27
27
|
pdf.stroke_bounds
|
28
28
|
width = 370
|
29
29
|
# --- Write content
|
30
30
|
pdf.bounding_box [pdf.bounds.left+padding, pdf.bounds.top-padding], :width => width do
|
31
|
-
pdf.text
|
31
|
+
pdf.text story.name, :size => 14
|
32
32
|
pdf.fill_color "52D017"
|
33
33
|
pdf.text story.label_text, :size => 8
|
34
34
|
pdf.text "\n", :size => 14
|
@@ -37,8 +37,7 @@ class PdfWriter
|
|
37
37
|
pdf.fill_color "000000"
|
38
38
|
end
|
39
39
|
|
40
|
-
pdf.text_box
|
41
|
-
:size => 12, :at => [12, 50], :width => width-18
|
40
|
+
pdf.text_box story.points, :size => 12, :at => [12, 50], :width => width-18 unless story.points.nil?
|
42
41
|
pdf.text_box "Owner: " + (story.respond_to?(:owned_by) ? story.owned_by : "None"),
|
43
42
|
:size => 8, :at => [12, 18], :width => width-18
|
44
43
|
|
@@ -50,7 +49,7 @@ class PdfWriter
|
|
50
49
|
pdf.number_pages "<page>/<total>", [pdf.bounds.right-16, -28]
|
51
50
|
|
52
51
|
puts ">>> Generated PDF file in '#{story_or_iteration.id}.pdf'".foreground(:green)
|
53
|
-
|
52
|
+
end
|
54
53
|
rescue Exception
|
55
54
|
puts "[!] There was an error while generating the PDF file... What happened was:".foreground(:red)
|
56
55
|
raise
|
data/lib/pivotal_to_pdf/story.rb
CHANGED
@@ -3,4 +3,23 @@ class Story < Pivotal
|
|
3
3
|
return "" if !self.respond_to?(:labels) || self.labels.nil? || self.labels.empty?
|
4
4
|
labels
|
5
5
|
end
|
6
|
+
|
7
|
+
def points
|
8
|
+
return nil unless self.feature?
|
9
|
+
"Points: " + (self.respond_to?(:estimate) && !self.estimate.eql?(-1) ? self.estimate.to_s : "Not yet estimated")
|
10
|
+
end
|
11
|
+
|
12
|
+
def story_color
|
13
|
+
return "52D017" if feature?
|
14
|
+
return "FF0000" if bug?
|
15
|
+
return "FFFF00" if chore?
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
["feature", "bug", "chore"].each do |type_str|
|
21
|
+
define_method "#{type_str}?".to_sym do
|
22
|
+
self.story_type == type_str
|
23
|
+
end
|
24
|
+
end
|
6
25
|
end
|
data/lib/pivotal_to_pdf.rb
CHANGED
@@ -8,14 +8,14 @@ require 'pivotal_to_pdf/story'
|
|
8
8
|
require 'pivotal_to_pdf/pdf_writer'
|
9
9
|
class PivotalToPdf < Thor
|
10
10
|
class << self
|
11
|
-
def story(story_id)
|
11
|
+
def story(story_id, colored_stripe=true)
|
12
12
|
story = Story.find(story_id)
|
13
|
-
PdfWriter.new(story).write_to
|
13
|
+
PdfWriter.new(story, colored_stripe).write_to
|
14
14
|
end
|
15
15
|
|
16
|
-
def iteration(iteration_token)
|
16
|
+
def iteration(iteration_token, colored_stripe=true)
|
17
17
|
iteration = Iteration.find(:all, :params => {:group => iteration_token}).first
|
18
|
-
PdfWriter.new(iteration).write_to
|
18
|
+
PdfWriter.new(iteration, colored_stripe).write_to
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
data/pivotal_to_pdf.gemspec
CHANGED
@@ -2,26 +2,24 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{pivotal_to_pdf}
|
5
|
-
s.version = "0.
|
5
|
+
s.version = "0.6"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Yi Wen"]
|
9
|
-
s.date = %q{
|
10
|
-
s.default_executable = %q{pivotal_to_pdf}
|
9
|
+
s.date = %q{2011-04-26}
|
11
10
|
s.description = %q{Convert Pivotal Tracker Stories to 4x6 PDF for printing so that you can stick the card to your story board}
|
12
11
|
s.email = %q{hayafirst@gmail.com}
|
13
12
|
s.executables = ["pivotal_to_pdf"]
|
14
13
|
s.extra_rdoc_files = ["CHANGELOG", "README.md", "bin/pivotal_to_pdf", "lib/pivotal_to_pdf.rb", "lib/pivotal_to_pdf/iteration.rb", "lib/pivotal_to_pdf/pdf_writer.rb", "lib/pivotal_to_pdf/pivotal.rb", "lib/pivotal_to_pdf/story.rb", "tasks/spec.rb"]
|
15
|
-
s.files = ["CHANGELOG", "Gemfile", "Gemfile.lock", "Manifest", "README.md", "Rakefile", "bin/pivotal_to_pdf", "lib/pivotal_to_pdf.rb", "lib/pivotal_to_pdf/iteration.rb", "lib/pivotal_to_pdf/pdf_writer.rb", "lib/pivotal_to_pdf/pivotal.rb", "lib/pivotal_to_pdf/story.rb", "spec/
|
14
|
+
s.files = ["CHANGELOG", "Gemfile", "Gemfile.lock", "Manifest", "README.md", "Rakefile", "bin/pivotal_to_pdf", "lib/pivotal_to_pdf.rb", "lib/pivotal_to_pdf/iteration.rb", "lib/pivotal_to_pdf/pdf_writer.rb", "lib/pivotal_to_pdf/pivotal.rb", "lib/pivotal_to_pdf/story.rb", "pivotal_to_pdf.gemspec", "spec/pivotal_to_pdf/story_spec.rb", "spec/pivotal_to_pdf_bin_spec.rb", "spec/spec_helper.rb", "tasks/spec.rb"]
|
16
15
|
s.homepage = %q{https://github.com/ywen/pivotal_to_pdf}
|
17
16
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Pivotal_to_pdf", "--main", "README.md"]
|
18
17
|
s.require_paths = ["lib"]
|
19
18
|
s.rubyforge_project = %q{pivotal_to_pdf}
|
20
|
-
s.rubygems_version = %q{1.
|
19
|
+
s.rubygems_version = %q{1.7.2}
|
21
20
|
s.summary = %q{Convert Pivotal Tracker Stories to 4x6 PDF for printing}
|
22
21
|
|
23
22
|
if s.respond_to? :specification_version then
|
24
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
25
23
|
s.specification_version = 3
|
26
24
|
|
27
25
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "spec_helper"))
|
2
|
+
|
3
|
+
describe Story do
|
4
|
+
let(:story){Story.new :labels => [], :story_type => nil}
|
5
|
+
describe "#label_text" do
|
6
|
+
describe "and there is no label" do
|
7
|
+
it "should return blank string" do
|
8
|
+
story = Story.new
|
9
|
+
story.label_text.should == ""
|
10
|
+
end
|
11
|
+
end
|
12
|
+
describe "and labels is empty" do
|
13
|
+
it "should return blank string" do
|
14
|
+
story.label_text.should == ""
|
15
|
+
end
|
16
|
+
end
|
17
|
+
describe "and labels is nil" do
|
18
|
+
it "should return blank string" do
|
19
|
+
story.labels = nil
|
20
|
+
story.label_text.should == ""
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "and when there are less than 3 labels" do
|
25
|
+
it "should return them in a nice format" do
|
26
|
+
story.labels="test1, test2"
|
27
|
+
story.label_text.should == "test1, test2"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#points" do
|
33
|
+
describe "and the story is not a feature" do
|
34
|
+
before(:each) do
|
35
|
+
story.story_type = "bug"
|
36
|
+
end
|
37
|
+
it "should return nil" do
|
38
|
+
story.points.should be_nil
|
39
|
+
end
|
40
|
+
end
|
41
|
+
describe "and the story is a feature" do
|
42
|
+
before(:each) do
|
43
|
+
story.story_type = "feature"
|
44
|
+
end
|
45
|
+
describe "and the story is not respond_to estimate" do
|
46
|
+
it "should return Not yet estimated" do
|
47
|
+
story.points.should == "Points: Not yet estimated"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "and the story is respond_to estimate" do
|
52
|
+
let(:story) {Story.new :story_type => "feature", :estimate => -1}
|
53
|
+
describe "and the estimate is -1" do
|
54
|
+
it "should return not yet estimated" do
|
55
|
+
story.points.should == "Points: Not yet estimated"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
describe "and the estimate is not -1" do
|
59
|
+
it "should return the points" do
|
60
|
+
story.estimate = 5
|
61
|
+
story.points.should == "Points: 5"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "#story_color" do
|
69
|
+
it "should return green for features" do
|
70
|
+
story.story_type = "feature"
|
71
|
+
story.story_color.should == "52D017"
|
72
|
+
end
|
73
|
+
it "should return red for bugs" do
|
74
|
+
story.story_type = "bug"
|
75
|
+
story.story_color.should == "FF0000"
|
76
|
+
end
|
77
|
+
it "should return yellow for chores" do
|
78
|
+
story.story_type = "chore"
|
79
|
+
story.story_color.should == "FFFF00"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -4,19 +4,33 @@ load File.expand_path(File.join(File.dirname(__FILE__), "..", "bin", "pivotal_to
|
|
4
4
|
describe 'PivotalToPdf Bin' do
|
5
5
|
describe "when pased in story sub command" do
|
6
6
|
it "should call story" do
|
7
|
-
PivotalToPdf.should_receive(:story).with(123)
|
7
|
+
PivotalToPdf.should_receive(:story).with(123, nil)
|
8
8
|
PivotalToPdfApp.start(["story", 123])
|
9
9
|
end
|
10
10
|
it "should not call story when no story id is given" do
|
11
11
|
PivotalToPdf.should_not_receive(:story)
|
12
12
|
PivotalToPdfApp.start(["story"])
|
13
13
|
end
|
14
|
+
|
15
|
+
describe "and when the nocolor option is defined" do
|
16
|
+
it "should pass the option in" do
|
17
|
+
PivotalToPdf.should_receive(:story).with(123, "nocolor")
|
18
|
+
PivotalToPdfApp.start(["story", 123, "--nocolor"])
|
19
|
+
end
|
20
|
+
end
|
14
21
|
end
|
15
22
|
describe "when pased in iteration sub command" do
|
16
23
|
it "should call iteration" do
|
17
|
-
PivotalToPdf.should_receive(:iteration).with(123)
|
24
|
+
PivotalToPdf.should_receive(:iteration).with(123, nil)
|
18
25
|
PivotalToPdfApp.start(["iteration", 123])
|
19
26
|
end
|
27
|
+
|
28
|
+
describe "and when the nocolor option is defined" do
|
29
|
+
it "should pass the option in" do
|
30
|
+
PivotalToPdf.should_receive(:iteration).with(123, "nocolor")
|
31
|
+
PivotalToPdfApp.start(["iteration", 123, "--nocolor"])
|
32
|
+
end
|
33
|
+
end
|
20
34
|
end
|
21
35
|
end
|
22
36
|
|
metadata
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pivotal_to_pdf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 5
|
8
|
-
- 2
|
9
|
-
- 1
|
10
|
-
version: 0.5.2.1
|
4
|
+
prerelease:
|
5
|
+
version: "0.6"
|
11
6
|
platform: ruby
|
12
7
|
authors:
|
13
8
|
- Yi Wen
|
@@ -15,8 +10,7 @@ autorequire:
|
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
12
|
|
18
|
-
date:
|
19
|
-
default_executable:
|
13
|
+
date: 2011-04-26 00:00:00 Z
|
20
14
|
dependencies:
|
21
15
|
- !ruby/object:Gem::Dependency
|
22
16
|
name: activeresource
|
@@ -26,8 +20,6 @@ dependencies:
|
|
26
20
|
requirements:
|
27
21
|
- - ">="
|
28
22
|
- !ruby/object:Gem::Version
|
29
|
-
segments:
|
30
|
-
- 0
|
31
23
|
version: "0"
|
32
24
|
type: :runtime
|
33
25
|
version_requirements: *id001
|
@@ -39,8 +31,6 @@ dependencies:
|
|
39
31
|
requirements:
|
40
32
|
- - ">="
|
41
33
|
- !ruby/object:Gem::Version
|
42
|
-
segments:
|
43
|
-
- 0
|
44
34
|
version: "0"
|
45
35
|
type: :runtime
|
46
36
|
version_requirements: *id002
|
@@ -52,8 +42,6 @@ dependencies:
|
|
52
42
|
requirements:
|
53
43
|
- - ">="
|
54
44
|
- !ruby/object:Gem::Version
|
55
|
-
segments:
|
56
|
-
- 0
|
57
45
|
version: "0"
|
58
46
|
type: :runtime
|
59
47
|
version_requirements: *id003
|
@@ -65,8 +53,6 @@ dependencies:
|
|
65
53
|
requirements:
|
66
54
|
- - ">="
|
67
55
|
- !ruby/object:Gem::Version
|
68
|
-
segments:
|
69
|
-
- 0
|
70
56
|
version: "0"
|
71
57
|
type: :runtime
|
72
58
|
version_requirements: *id004
|
@@ -99,12 +85,11 @@ files:
|
|
99
85
|
- lib/pivotal_to_pdf/pdf_writer.rb
|
100
86
|
- lib/pivotal_to_pdf/pivotal.rb
|
101
87
|
- lib/pivotal_to_pdf/story.rb
|
88
|
+
- pivotal_to_pdf.gemspec
|
89
|
+
- spec/pivotal_to_pdf/story_spec.rb
|
102
90
|
- spec/pivotal_to_pdf_bin_spec.rb
|
103
91
|
- spec/spec_helper.rb
|
104
|
-
- spec/story_spec.rb
|
105
92
|
- tasks/spec.rb
|
106
|
-
- pivotal_to_pdf.gemspec
|
107
|
-
has_rdoc: true
|
108
93
|
homepage: https://github.com/ywen/pivotal_to_pdf
|
109
94
|
licenses: []
|
110
95
|
|
@@ -123,22 +108,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
123
108
|
requirements:
|
124
109
|
- - ">="
|
125
110
|
- !ruby/object:Gem::Version
|
126
|
-
segments:
|
127
|
-
- 0
|
128
111
|
version: "0"
|
129
112
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
113
|
none: false
|
131
114
|
requirements:
|
132
115
|
- - ">="
|
133
116
|
- !ruby/object:Gem::Version
|
134
|
-
segments:
|
135
|
-
- 1
|
136
|
-
- 2
|
137
117
|
version: "1.2"
|
138
118
|
requirements: []
|
139
119
|
|
140
120
|
rubyforge_project: pivotal_to_pdf
|
141
|
-
rubygems_version: 1.
|
121
|
+
rubygems_version: 1.7.2
|
142
122
|
signing_key:
|
143
123
|
specification_version: 3
|
144
124
|
summary: Convert Pivotal Tracker Stories to 4x6 PDF for printing
|
data/spec/story_spec.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
|
2
|
-
|
3
|
-
describe Story do
|
4
|
-
let(:story){Story.new :labels => []}
|
5
|
-
describe "when asked for label text" do
|
6
|
-
describe "and there is no label" do
|
7
|
-
it "should return blank string" do
|
8
|
-
story = Story.new
|
9
|
-
story.label_text.should == ""
|
10
|
-
end
|
11
|
-
end
|
12
|
-
describe "and labels is empty" do
|
13
|
-
it "should return blank string" do
|
14
|
-
story.label_text.should == ""
|
15
|
-
end
|
16
|
-
end
|
17
|
-
describe "and labels is nil" do
|
18
|
-
it "should return blank string" do
|
19
|
-
story.labels = nil
|
20
|
-
story.label_text.should == ""
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe "and when there are less than 3 labels" do
|
25
|
-
it "should return them in a nice format" do
|
26
|
-
story.labels="test1, test2"
|
27
|
-
story.label_text.should == "test1, test2"
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|