pivotalprinter 0.1.8 → 0.2.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.
- data/.gitignore +1 -0
- data/bin/pivotalprinter +35 -19
- data/lib/pivotalprinter.rb +1 -2
- data/lib/pivotalprinter/version.rb +1 -1
- data/pivotalprinter.gemspec +8 -7
- metadata +70 -24
data/.gitignore
CHANGED
data/bin/pivotalprinter
CHANGED
|
@@ -15,7 +15,7 @@ module Pivotalprinter
|
|
|
15
15
|
class Printer
|
|
16
16
|
def run
|
|
17
17
|
opts = parse_options
|
|
18
|
-
yaml = load_yaml_config
|
|
18
|
+
yaml = load_yaml_config
|
|
19
19
|
project,token = extract_config(opts, yaml)
|
|
20
20
|
Pivotalprinter::Client.project = project
|
|
21
21
|
Pivotalprinter::Client.token = token
|
|
@@ -26,7 +26,7 @@ module Pivotalprinter
|
|
|
26
26
|
else Pivotalprinter::Iteration.open('current').stories
|
|
27
27
|
end
|
|
28
28
|
generate_output
|
|
29
|
-
rescue ConfigNeeded
|
|
29
|
+
rescue ConfigNeeded
|
|
30
30
|
print_config
|
|
31
31
|
rescue TokenMissing
|
|
32
32
|
Trollop::die :token, "token must be specified through config file or explicitly"
|
|
@@ -37,18 +37,18 @@ module Pivotalprinter
|
|
|
37
37
|
puts "[!] There was an error while generating the PDF file... What happened was:".white.on_red
|
|
38
38
|
raise
|
|
39
39
|
end
|
|
40
|
-
|
|
40
|
+
|
|
41
41
|
def print_config
|
|
42
42
|
puts %{---\ndefault: &default\n token: "YOUR TOKEN HERE"\n project: 123\n\nsome_project:\n <<: *default # so you don't need to rewrite the token\n project: 789}
|
|
43
43
|
end
|
|
44
|
-
|
|
44
|
+
|
|
45
45
|
def parse_options
|
|
46
46
|
opts = Trollop::options do
|
|
47
47
|
version "pivotalprinter #{Pivotalprinter::VERSION} (c) 2010#{(year = Time.now.year) > 2010 ? "-#{year}" : ''} pkw.de"
|
|
48
48
|
banner <<-EOS
|
|
49
49
|
Pivotalprinter is an awesome program to print stories from the PivotalTracker.
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
Usage:
|
|
52
52
|
pivotalprinter [-p PROJECT] [-t TOKEN] [current|backlog|done|STORY]
|
|
53
53
|
pivotalprinter --config > ~/.pivotalprinterrc
|
|
54
54
|
|
|
@@ -58,15 +58,15 @@ EOS
|
|
|
58
58
|
opt :token, "Pivotaltracker Token", :short => "-t", :type => :string
|
|
59
59
|
opt :config, "show example configuration", :short => "-c"
|
|
60
60
|
end
|
|
61
|
-
|
|
61
|
+
|
|
62
62
|
raise ConfigNeeded if opts[:config]
|
|
63
63
|
opts
|
|
64
64
|
end
|
|
65
|
-
|
|
65
|
+
|
|
66
66
|
def load_yaml_config
|
|
67
67
|
File.exist?("#{ENV["HOME"]}/.pivotalprinterrc") ? YAML::load_file("#{ENV["HOME"]}/.pivotalprinterrc") : {}
|
|
68
68
|
end
|
|
69
|
-
|
|
69
|
+
|
|
70
70
|
def extract_config(opts, yaml)
|
|
71
71
|
if opts[:project].nil? && yaml.key?("default")
|
|
72
72
|
return yaml["default"]["project"], yaml["default"]["token"]
|
|
@@ -78,7 +78,7 @@ EOS
|
|
|
78
78
|
raise ProjectMissing
|
|
79
79
|
end
|
|
80
80
|
end
|
|
81
|
-
|
|
81
|
+
|
|
82
82
|
def generate_output
|
|
83
83
|
Prawn::Document.generate("/tmp/stories.pdf", :page_layout => :landscape, :margin => [25, 25, 50, 25], :page_size => 'A4') do |pdf|
|
|
84
84
|
@num_cards_on_page = 0
|
|
@@ -97,7 +97,7 @@ EOS
|
|
|
97
97
|
pdf.define_grid(:columns => 2, :rows => 2, :gutter => 42)
|
|
98
98
|
# pdf.grid.show_all
|
|
99
99
|
|
|
100
|
-
row = (@num_cards_on_page+1) / 4
|
|
100
|
+
row = (@num_cards_on_page + 1) / 4
|
|
101
101
|
column = i % 2
|
|
102
102
|
padding = 12
|
|
103
103
|
cell = pdf.grid( row, column )
|
|
@@ -105,25 +105,41 @@ EOS
|
|
|
105
105
|
|
|
106
106
|
pdf.stroke_color = "666666"
|
|
107
107
|
pdf.stroke_bounds
|
|
108
|
-
|
|
109
|
-
pdf.text_box story.name, :size => 14, :height => 50, :overflow => :truncate,
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
108
|
+
|
|
109
|
+
pdf.text_box story.name, :size => 14, :height => 50, :overflow => :truncate,
|
|
110
|
+
:width => cell.width - (padding * 2) - 50,
|
|
111
|
+
:at => [pdf.bounds.left + padding + 50, pdf.bounds.top - padding]
|
|
112
|
+
|
|
113
|
+
pdf.text_box story.description, :size => 8, :overflow => :truncate,
|
|
114
|
+
:width => cell.width - ( padding * 2), :height => cell.height - (padding * 7),
|
|
115
|
+
:at => [pdf.bounds.left + padding, pdf.bounds.top - padding - 55]
|
|
116
|
+
|
|
117
|
+
pdf.text_box "Created at: #{story.created_at.strftime('%F')}", :size => 8,
|
|
118
|
+
:at => [pdf.bounds.left + padding, pdf.bounds.bottom + padding]
|
|
119
|
+
|
|
120
|
+
pdf.text_box "ID: #{story.id}", :size => 8,
|
|
121
|
+
:at => [pdf.bounds.left + 110, pdf.bounds.bottom + padding]
|
|
122
|
+
|
|
123
|
+
pdf.text_box "State: #{story.current_state}", :size => 8,
|
|
124
|
+
:at => [pdf.bounds.left + 170, pdf.bounds.bottom + padding]
|
|
125
|
+
|
|
126
|
+
pdf.text_box "Requester: #{story.requested_by}", :size => 8,
|
|
127
|
+
:at => [pdf.bounds.left + 240, pdf.bounds.bottom + padding]
|
|
128
|
+
|
|
113
129
|
|
|
114
130
|
x, y = 32, 205
|
|
115
|
-
if story.story_type=="feature"
|
|
131
|
+
if story.story_type == "feature"
|
|
116
132
|
pdf.fill_color story.points_background
|
|
117
|
-
pdf.fill_circle [x,y], 25
|
|
133
|
+
pdf.fill_circle [x, y], 25
|
|
118
134
|
pdf.font_size = 36
|
|
119
135
|
pdf.font "Helvetica", :style => :bold
|
|
120
136
|
pdf.fill_color 'ffffff'
|
|
121
|
-
pdf.draw_text "#{story.points}", :at => [x-10, y-12]
|
|
137
|
+
pdf.draw_text "#{story.points}", :at => [x - 10, y - 12]
|
|
122
138
|
pdf.fill_color '000000'
|
|
123
139
|
pdf.font_size = 14
|
|
124
140
|
pdf.font "#{Prawn::BASEDIR}/data/fonts/DejaVuSans.ttf", :style => :normal
|
|
125
141
|
else
|
|
126
|
-
pdf.image open("#{File.dirname(__FILE__)}/../images/#{story.story_type}.png"), :position => 5, :vposition => 5
|
|
142
|
+
pdf.image open("#{File.dirname(__FILE__)}/../images/#{story.story_type}.png"), :position => 5, :vposition => 5
|
|
127
143
|
end
|
|
128
144
|
end
|
|
129
145
|
end
|
data/lib/pivotalprinter.rb
CHANGED
|
@@ -7,10 +7,9 @@ module Pivotalprinter
|
|
|
7
7
|
require 'term/ansicolor'
|
|
8
8
|
require 'prawn'
|
|
9
9
|
require 'prawn/layout/grid'
|
|
10
|
-
require '
|
|
10
|
+
require 'tins/xt/full'
|
|
11
11
|
require 'trollop'
|
|
12
12
|
require 'yaml'
|
|
13
|
-
require "rubygems"
|
|
14
13
|
require "open-uri"
|
|
15
14
|
require "nokogiri"
|
|
16
15
|
require "pivotalprinter/client"
|
data/pivotalprinter.gemspec
CHANGED
|
@@ -11,16 +11,17 @@ Gem::Specification.new do |s|
|
|
|
11
11
|
s.homepage = "http://pkw.de"
|
|
12
12
|
s.summary = %q{Story printer for pivotaltracker}
|
|
13
13
|
s.description = %q{Generate nice story cards from pivotaltracker.}
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
s.files = `git ls-files`.split("\n")
|
|
16
16
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
17
17
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
18
18
|
s.require_paths = ["lib"]
|
|
19
|
-
|
|
20
|
-
s.add_dependency('term-ansicolor'
|
|
21
|
-
s.add_dependency('prawn'
|
|
22
|
-
s.add_dependency('
|
|
23
|
-
s.add_dependency('trollop'
|
|
24
|
-
s.add_dependency('nokogiri'
|
|
19
|
+
|
|
20
|
+
s.add_dependency('term-ansicolor')
|
|
21
|
+
s.add_dependency('prawn')
|
|
22
|
+
s.add_dependency('tins')
|
|
23
|
+
s.add_dependency('trollop')
|
|
24
|
+
s.add_dependency('nokogiri')
|
|
25
25
|
s.add_development_dependency('rake')
|
|
26
|
+
s.add_development_dependency('pry')
|
|
26
27
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pivotalprinter
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,66 +9,107 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2012-11-27 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: term-ansicolor
|
|
16
|
-
requirement:
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
17
|
none: false
|
|
18
18
|
requirements:
|
|
19
19
|
- - ! '>='
|
|
20
20
|
- !ruby/object:Gem::Version
|
|
21
|
-
version: 0
|
|
21
|
+
version: '0'
|
|
22
22
|
type: :runtime
|
|
23
23
|
prerelease: false
|
|
24
|
-
version_requirements:
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
none: false
|
|
26
|
+
requirements:
|
|
27
|
+
- - ! '>='
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: '0'
|
|
25
30
|
- !ruby/object:Gem::Dependency
|
|
26
31
|
name: prawn
|
|
27
|
-
requirement:
|
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
|
28
33
|
none: false
|
|
29
34
|
requirements:
|
|
30
|
-
- -
|
|
35
|
+
- - ! '>='
|
|
31
36
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: 0
|
|
37
|
+
version: '0'
|
|
33
38
|
type: :runtime
|
|
34
39
|
prerelease: false
|
|
35
|
-
version_requirements:
|
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
+
none: false
|
|
42
|
+
requirements:
|
|
43
|
+
- - ! '>='
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: '0'
|
|
36
46
|
- !ruby/object:Gem::Dependency
|
|
37
|
-
name:
|
|
38
|
-
requirement:
|
|
47
|
+
name: tins
|
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
|
39
49
|
none: false
|
|
40
50
|
requirements:
|
|
41
51
|
- - ! '>='
|
|
42
52
|
- !ruby/object:Gem::Version
|
|
43
|
-
version: 0
|
|
53
|
+
version: '0'
|
|
44
54
|
type: :runtime
|
|
45
55
|
prerelease: false
|
|
46
|
-
version_requirements:
|
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
+
none: false
|
|
58
|
+
requirements:
|
|
59
|
+
- - ! '>='
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
47
62
|
- !ruby/object:Gem::Dependency
|
|
48
63
|
name: trollop
|
|
49
|
-
requirement:
|
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
|
50
65
|
none: false
|
|
51
66
|
requirements:
|
|
52
67
|
- - ! '>='
|
|
53
68
|
- !ruby/object:Gem::Version
|
|
54
|
-
version:
|
|
69
|
+
version: '0'
|
|
55
70
|
type: :runtime
|
|
56
71
|
prerelease: false
|
|
57
|
-
version_requirements:
|
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
73
|
+
none: false
|
|
74
|
+
requirements:
|
|
75
|
+
- - ! '>='
|
|
76
|
+
- !ruby/object:Gem::Version
|
|
77
|
+
version: '0'
|
|
58
78
|
- !ruby/object:Gem::Dependency
|
|
59
79
|
name: nokogiri
|
|
60
|
-
requirement:
|
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
|
61
81
|
none: false
|
|
62
82
|
requirements:
|
|
63
83
|
- - ! '>='
|
|
64
84
|
- !ruby/object:Gem::Version
|
|
65
|
-
version:
|
|
85
|
+
version: '0'
|
|
66
86
|
type: :runtime
|
|
67
87
|
prerelease: false
|
|
68
|
-
version_requirements:
|
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
89
|
+
none: false
|
|
90
|
+
requirements:
|
|
91
|
+
- - ! '>='
|
|
92
|
+
- !ruby/object:Gem::Version
|
|
93
|
+
version: '0'
|
|
69
94
|
- !ruby/object:Gem::Dependency
|
|
70
95
|
name: rake
|
|
71
|
-
requirement:
|
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
|
97
|
+
none: false
|
|
98
|
+
requirements:
|
|
99
|
+
- - ! '>='
|
|
100
|
+
- !ruby/object:Gem::Version
|
|
101
|
+
version: '0'
|
|
102
|
+
type: :development
|
|
103
|
+
prerelease: false
|
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
105
|
+
none: false
|
|
106
|
+
requirements:
|
|
107
|
+
- - ! '>='
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: '0'
|
|
110
|
+
- !ruby/object:Gem::Dependency
|
|
111
|
+
name: pry
|
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
113
|
none: false
|
|
73
114
|
requirements:
|
|
74
115
|
- - ! '>='
|
|
@@ -76,7 +117,12 @@ dependencies:
|
|
|
76
117
|
version: '0'
|
|
77
118
|
type: :development
|
|
78
119
|
prerelease: false
|
|
79
|
-
version_requirements:
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
none: false
|
|
122
|
+
requirements:
|
|
123
|
+
- - ! '>='
|
|
124
|
+
- !ruby/object:Gem::Version
|
|
125
|
+
version: '0'
|
|
80
126
|
description: Generate nice story cards from pivotaltracker.
|
|
81
127
|
email:
|
|
82
128
|
- dev@pkw.de
|
|
@@ -123,7 +169,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
123
169
|
version: '0'
|
|
124
170
|
segments:
|
|
125
171
|
- 0
|
|
126
|
-
hash:
|
|
172
|
+
hash: 3495001522045933990
|
|
127
173
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
128
174
|
none: false
|
|
129
175
|
requirements:
|
|
@@ -132,10 +178,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
132
178
|
version: '0'
|
|
133
179
|
segments:
|
|
134
180
|
- 0
|
|
135
|
-
hash:
|
|
181
|
+
hash: 3495001522045933990
|
|
136
182
|
requirements: []
|
|
137
183
|
rubyforge_project:
|
|
138
|
-
rubygems_version: 1.8.
|
|
184
|
+
rubygems_version: 1.8.24
|
|
139
185
|
signing_key:
|
|
140
186
|
specification_version: 3
|
|
141
187
|
summary: Story printer for pivotaltracker
|