jira_cards 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b2dfc2f40758812ba339be9218660486eb9dd4e1
4
+ data.tar.gz: 3ee10786b920a74cdab3ea4a2a7f161d1eb152aa
5
+ SHA512:
6
+ metadata.gz: 5f12cc734c520f760ef66a3c74f97e9f99b7cb21de32f410453cd2fccaaedc8bf32781e64a3d5cac6310a719192e216ba7b4a57ce1e91c14dfc12d40048612d3
7
+ data.tar.gz: 9bfb442a72720c29cae361360caded548cbb2978b412a7db5f985499f3b881be15f9e54e6334add08e9ee890f1e37fe9f2addbc8e018e420138f774036b70b14
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2013 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,43 @@
1
+ [![Build Status](https://travis-ci.org/schasse/jira_cards.svg?branch=master)](https://travis-ci.org/schasse/jira_cards)
2
+ [![Coverage Status](https://coveralls.io/repos/schasse/jira_cards/badge.png)](https://coveralls.io/r/schasse/jira_cards)
3
+ [![Dependency Status](https://gemnasium.com/schasse/jira_cards.svg)](https://gemnasium.com/schasse/jira_cards)
4
+ [![Code Climate](https://codeclimate.com/github/schasse/jira_cards/badges/gpa.svg)](https://codeclimate.com/github/schasse/jira_cards)
5
+
6
+ jira_cards
7
+ =========
8
+ converts your jira issues to a printable pdf.
9
+
10
+ ## Installation
11
+ The recommended way of installing jira_cards is via RubyGems:
12
+ `gem install jira_cards`
13
+
14
+ ## Configuration
15
+ You can configure jira_cards with a config file located in the current folder of execution or your home directory:
16
+ ```
17
+ # ~/.jira_cards
18
+ user: john
19
+ password: top_secret
20
+ ```
21
+ ```
22
+ # ./.jira_cards
23
+ domain: jira.atlassian.com
24
+ ```
25
+
26
+ Alternatively you can control the configuration with the following environment variables:
27
+ ```
28
+ JIRA_CARDS_DOMAIN
29
+ JIRA_CARDS_USER
30
+ JIRA_CARDS_PASSWORD
31
+ JIRA_CARDS_QUERY
32
+ JIRA_CARDS_OUTPUT
33
+ ```
34
+
35
+ ## examples
36
+ ```
37
+ jira_cards --query 'key = P-123' --output output.pdf
38
+ ```
39
+ ```
40
+ DOMAIN=jira.atlassian.com QUERY='project = P' jira_cards
41
+ ```
42
+
43
+ For all available options use `jira_cards --help`.
data/bin/jira_cards ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'jira_cards'
3
+ JiraCards::Config.load ARGV
4
+ JiraCards::Runner.invoke
@@ -0,0 +1,2 @@
1
+ domain: jira.atlassian.com
2
+ output: jira_issues.pdf
data/lib/jira_cards.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'json'
2
+ require 'restclient'
3
+ require 'cgi'
4
+ require 'active_support/configurable'
5
+ require 'active_support/core_ext/hash'
6
+ require 'yaml'
7
+ require 'prawn-svg'
8
+ require 'erb'
9
+ require 'optparse'
10
+
11
+ module JiraCards
12
+ PATH = File.expand_path '../..', __FILE__
13
+ LIB_PATH = File.expand_path '..', __FILE__
14
+ RESOURCES_PATH = File.expand_path '../../resources', __FILE__
15
+ CONFIG_PATH = File.expand_path '../../config', __FILE__
16
+ end
17
+
18
+ Dir[JiraCards::LIB_PATH + '/**/*.rb'].each { |file| require file }
@@ -0,0 +1,90 @@
1
+ module JiraCards
2
+ class Config < Struct.new(:argv)
3
+ include ActiveSupport::Configurable
4
+
5
+ DEFAULT_CONFIG = File.expand_path 'default.yml', JiraCards::CONFIG_PATH
6
+ HOME_CONFIG = File.expand_path '~/.jira_cards'
7
+ LOCAL_CONFIG = File.expand_path '.jira_cards'
8
+
9
+ AVAILABLE_OPTIONS = {
10
+ domain: 'The jira domain.',
11
+ user: 'Username for basic auth.',
12
+ password: 'Password for basic auth.',
13
+ query: 'A query defined in jql (jira query language).',
14
+ output: 'Output file name.'
15
+ }
16
+
17
+ AVAILABLE_OPTIONS.keys.each do |config|
18
+ config_accessor config
19
+ end
20
+
21
+ class << self
22
+ def load(argv = nil)
23
+ config = new argv
24
+ AVAILABLE_OPTIONS.keys.each do |option|
25
+ option_value = config.options[option] ||
26
+ config.local_config[option.to_s] ||
27
+ config.home_config[option.to_s] ||
28
+ ENV['JIRA_CARDS' + option.to_s.upcase] ||
29
+ config.default_config[option.to_s]
30
+ send "#{option}=", option_value
31
+ end
32
+ end
33
+
34
+ def reset
35
+ AVAILABLE_OPTIONS.keys.each do |option|
36
+ send "#{option}=", nil
37
+ end
38
+ end
39
+ end
40
+
41
+ def default_config
42
+ @defaule_config ||= YAML.load File.read DEFAULT_CONFIG
43
+ end
44
+
45
+ def home_config
46
+ @home_config ||=
47
+ (File.exist?(HOME_CONFIG) && YAML.load(File.read(HOME_CONFIG))) || {}
48
+ end
49
+
50
+ def local_config
51
+ @local_config ||=
52
+ (File.exist?(LOCAL_CONFIG) && YAML.load(File.read(LOCAL_CONFIG))) || {}
53
+ end
54
+
55
+ def options
56
+ unless @options
57
+ @options = {}
58
+ option_parser.parse argv
59
+ end
60
+ @options
61
+ end
62
+
63
+ private
64
+
65
+ def option_parser
66
+ OptionParser.new do |opts|
67
+ opts.banner = 'Usage: jira_cards [options]'
68
+
69
+ AVAILABLE_OPTIONS.each do |option, description|
70
+ add_option opts, option, description
71
+ end
72
+
73
+ opts.on_tail('--version', 'Show version.') do
74
+ puts JiraCards::VERSION
75
+ exit
76
+ end
77
+ end
78
+ end
79
+
80
+ def add_option(opts, option, description)
81
+ opts.on(
82
+ "-#{option.to_s.chars.first}",
83
+ "--#{option} #{option.to_s.upcase}",
84
+ description) do |option_value|
85
+
86
+ @options[option] = option_value
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,15 @@
1
+ unless {}.respond_to? :compact
2
+ class Hash
3
+ # Returns a hash with non +nil+ values.
4
+ #
5
+ # hash = { a: true, b: false, c: nil}
6
+ # hash.compact # => { a: true, b: false}
7
+ # hash # => { a: true, b: false, c: nil}
8
+ # { c: nil }.compact # => {}
9
+ def compact
10
+ # rubocop:disable Style/RedundantSelf
11
+ self.select { |_, value| !value.nil? }
12
+ # rubocop:enable Style/RedundantSelf
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,65 @@
1
+ module JiraCards
2
+ module JiraApi
3
+ class Issue
4
+ def self.where(jira_query)
5
+ criteria.where(jira_query)
6
+ end
7
+
8
+ def self.count
9
+ criteria.count
10
+ end
11
+
12
+ private
13
+
14
+ def self.criteria
15
+ @criteria ||= Criteria.new(api_end_point)
16
+ end
17
+
18
+ def self.api_end_point
19
+ 'https://' + JiraCards::Config.domain + '/rest/api/2/search/'
20
+ end
21
+ end
22
+
23
+ class Criteria < Struct.new(:api_end_point)
24
+ include Enumerable
25
+
26
+ BATCH_SIZE = 50
27
+
28
+ def where(jira_query)
29
+ @query = (@query || '') + jira_query.to_s
30
+ self
31
+ end
32
+
33
+ def each(&block)
34
+ objects.each(&block)
35
+ end
36
+
37
+ def count
38
+ batch(1)['total']
39
+ end
40
+
41
+ private
42
+
43
+ def objects
44
+ @objects ||= offsets.map { |offset| batch(offset)['issues'] }.flatten
45
+ end
46
+
47
+ def get(params: {})
48
+ JSON.parse resource.get params: params.merge(jql: @query).compact
49
+ end
50
+
51
+ def batch(offset)
52
+ get(params: { startAt: offset, maxResults: BATCH_SIZE })
53
+ end
54
+
55
+ def offsets
56
+ (0..(count - 1)).step(BATCH_SIZE)
57
+ end
58
+
59
+ def resource
60
+ @resource ||= RestClient::Resource.new(
61
+ api_end_point, JiraCards::Config.user, JiraCards::Config.password)
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,21 @@
1
+ module JiraCards
2
+ class PdfCreator < Struct.new(:svgs)
3
+ def create_pdf
4
+ Prawn::Document.generate(JiraCards::Config.output) do |pdf|
5
+ svgs.each do |svg|
6
+ append_page pdf, svg
7
+ pdf.start_new_page unless pdf.page_count == svgs.size
8
+ end
9
+ end
10
+ end
11
+
12
+ private
13
+
14
+ def append_page(pdf, svg)
15
+ pdf.svg(
16
+ svg,
17
+ at: [pdf.bounds.left, pdf.bounds.top],
18
+ width: pdf.bounds.width)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ module JiraCards
2
+ class Runner
3
+ class << self
4
+ def invoke
5
+ create_pdf_from rendered_templates_from jira_issues
6
+ end
7
+
8
+ private
9
+
10
+ def create_pdf_from(templates)
11
+ PdfCreator.new(templates).create_pdf
12
+ end
13
+
14
+ def rendered_templates_from(jira_issues)
15
+ TemplateRenderer.new(jira_issues).rendered_templates
16
+ end
17
+
18
+ def jira_issues
19
+ JiraApi::Issue.where JiraCards::Config.query
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,40 @@
1
+ module JiraCards
2
+ class TemplateRenderer < Struct.new(:issues)
3
+ TEMPLATE_PATH = File.expand_path(
4
+ '9_issues_for_dina4.svg', JiraCards::RESOURCES_PATH)
5
+
6
+ def rendered_templates
7
+ issue_summaries.each_slice(9).map do |issue_summaries_slice|
8
+ rendered_template issue_summaries_slice
9
+ end.flatten
10
+ end
11
+
12
+ private
13
+
14
+ def rendered_template(issue_summaries_slice)
15
+ @issues =
16
+ issue_summaries_slice +
17
+ (9 - issue_summaries_slice.length).times.map { { summary: [] } }
18
+ ERB.new(template_file_contents.clone).result binding
19
+ end
20
+
21
+ def issue_summaries
22
+ issues.map do |issue|
23
+ {
24
+ key: CGI.escapeHTML(issue['key']),
25
+ summary: aligned(issue['fields']['summary'])
26
+ }
27
+ end
28
+ end
29
+
30
+ def template_file_contents
31
+ @template_file_contents ||= CGI.unescapeHTML File.read TEMPLATE_PATH
32
+ end
33
+
34
+ def aligned(issue_summary)
35
+ issue_summary.chars.each_slice(40).map do |summary_slice|
36
+ CGI.escapeHTML(summary_slice.join)
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,3 @@
1
+ module JiraCards
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,1160 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ width="744.09448819"
13
+ height="1052.3622047"
14
+ id="svg2"
15
+ version="1.1"
16
+ inkscape:version="0.48.4 r9939"
17
+ sodipodi:docname="dina4_6_template.svg">
18
+ <defs
19
+ id="defs4" />
20
+ <sodipodi:namedview
21
+ id="base"
22
+ pagecolor="#ffffff"
23
+ bordercolor="#666666"
24
+ borderopacity="1.0"
25
+ inkscape:pageopacity="0.0"
26
+ inkscape:pageshadow="2"
27
+ inkscape:zoom="1.4142136"
28
+ inkscape:cx="390.4784"
29
+ inkscape:cy="240.55292"
30
+ inkscape:document-units="px"
31
+ inkscape:current-layer="layer1"
32
+ showgrid="true"
33
+ inkscape:window-width="1366"
34
+ inkscape:window-height="747"
35
+ inkscape:window-x="0"
36
+ inkscape:window-y="21"
37
+ inkscape:window-maximized="1"
38
+ inkscape:snap-global="true">
39
+ <inkscape:grid
40
+ type="xygrid"
41
+ id="grid2985"
42
+ empspacing="5"
43
+ visible="true"
44
+ enabled="true"
45
+ snapvisiblegridlinesonly="true"
46
+ units="mm"
47
+ spacingx="56mm"
48
+ spacingy="88mm"
49
+ originx="15mm"
50
+ originy="15mm" />
51
+ </sodipodi:namedview>
52
+ <metadata
53
+ id="metadata7">
54
+ <rdf:RDF>
55
+ <cc:Work
56
+ rdf:about="">
57
+ <dc:format>image/svg+xml</dc:format>
58
+ <dc:type
59
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
60
+ <dc:title />
61
+ </cc:Work>
62
+ </rdf:RDF>
63
+ </metadata>
64
+ <g
65
+ inkscape:label="Layer 1"
66
+ inkscape:groupmode="layer"
67
+ id="layer1">
68
+ <rect
69
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
70
+ id="rect2987"
71
+ width="198.4252"
72
+ height="311.81104"
73
+ x="-251.57481"
74
+ y="-375.59055"
75
+ transform="scale(-1,-1)" />
76
+ <rect
77
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
78
+ id="rect2987-3"
79
+ width="198.4252"
80
+ height="311.81104"
81
+ x="251.5748"
82
+ y="63.779503" />
83
+ <rect
84
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
85
+ id="rect2987-2"
86
+ width="198.4252"
87
+ height="311.81104"
88
+ x="53.149605"
89
+ y="375.59052" />
90
+ <rect
91
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
92
+ id="rect2987-9"
93
+ width="198.4252"
94
+ height="311.81104"
95
+ x="251.5748"
96
+ y="375.59052" />
97
+ <rect
98
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
99
+ id="rect2987-0"
100
+ width="198.4252"
101
+ height="311.81104"
102
+ x="450"
103
+ y="375.59052" />
104
+ <rect
105
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
106
+ id="rect2987-05"
107
+ width="198.4252"
108
+ height="311.81104"
109
+ x="450"
110
+ y="687.40155" />
111
+ <rect
112
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
113
+ id="rect2987-6"
114
+ width="198.4252"
115
+ height="311.81104"
116
+ x="251.5748"
117
+ y="687.40155" />
118
+ <rect
119
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
120
+ id="rect2987-67"
121
+ width="198.4252"
122
+ height="311.81104"
123
+ x="53.149605"
124
+ y="687.40155" />
125
+ <flowRoot
126
+ xml:space="preserve"
127
+ id="flowRoot3941"
128
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><flowRegion
129
+ id="flowRegion3943"><rect
130
+ id="rect3945"
131
+ width="115.15739"
132
+ height="123.23861"
133
+ x="97.984795"
134
+ y="203.83405" /></flowRegion><flowPara
135
+ id="flowPara3947">hello , </flowPara></flowRoot> <text
136
+ xml:space="preserve"
137
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
138
+ x="657.60931"
139
+ y="189.69191"
140
+ id="text3279"
141
+ sodipodi:linespacing="125%"><tspan
142
+ sodipodi:role="line"
143
+ id="tspan3281" /></text>
144
+ <rect
145
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
146
+ id="rect2987-1"
147
+ width="198.4252"
148
+ height="311.81104"
149
+ x="449.99426"
150
+ y="63.78133" />
151
+ <g
152
+ id="g4044"
153
+ transform="matrix(0,1,-1,0,768.89372,-329.52003)">
154
+ <text
155
+ sodipodi:linespacing="125%"
156
+ id="text3210"
157
+ y="146.36218"
158
+ x="403"
159
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
160
+ xml:space="preserve"><tspan
161
+ style="font-size:20px;font-weight:bold;-inkscape-font-specification:Sans Bold"
162
+ y="146.36218"
163
+ x="403"
164
+ id="tspan3212"
165
+ sodipodi:role="line">&lt;%= @issues[0][:key] %&gt;</tspan></text>
166
+ <text
167
+ sodipodi:linespacing="125%"
168
+ id="text3214"
169
+ y="173.36218"
170
+ x="404"
171
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
172
+ xml:space="preserve"><tspan
173
+ style="font-size:16px"
174
+ y="173.36218"
175
+ x="404"
176
+ id="tspan3216"
177
+ sodipodi:role="line">&lt;%= @issues[0][:summary][0] %&gt;</tspan></text>
178
+ <text
179
+ sodipodi:linespacing="125%"
180
+ id="text3214-3"
181
+ y="191.36218"
182
+ x="404"
183
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
184
+ xml:space="preserve"><tspan
185
+ style="font-size:16px"
186
+ y="191.36218"
187
+ x="404"
188
+ id="tspan3216-2"
189
+ sodipodi:role="line">&lt;%= @issues[0][:summary][1] %&gt;</tspan></text>
190
+ <text
191
+ sodipodi:linespacing="125%"
192
+ id="text3214-2"
193
+ y="209.36218"
194
+ x="404"
195
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
196
+ xml:space="preserve"><tspan
197
+ style="font-size:16px"
198
+ y="209.36218"
199
+ x="404"
200
+ id="tspan3216-9"
201
+ sodipodi:role="line">&lt;%= @issues[0][:summary][2] %&gt;</tspan></text>
202
+ <text
203
+ sodipodi:linespacing="125%"
204
+ id="text3214-33"
205
+ y="227.36218"
206
+ x="404"
207
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
208
+ xml:space="preserve"><tspan
209
+ style="font-size:16px"
210
+ y="227.36218"
211
+ x="404"
212
+ id="tspan3216-3"
213
+ sodipodi:role="line">&lt;%= @issues[0][:summary][3] %&gt;</tspan></text>
214
+ <text
215
+ sodipodi:linespacing="125%"
216
+ id="text3214-0"
217
+ y="245.36218"
218
+ x="404"
219
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
220
+ xml:space="preserve"><tspan
221
+ style="font-size:16px"
222
+ y="245.36218"
223
+ x="404"
224
+ id="tspan3216-38"
225
+ sodipodi:role="line">&lt;%= @issues[0][:summary][4] %&gt;</tspan></text>
226
+ <text
227
+ sodipodi:linespacing="125%"
228
+ id="text3214-4"
229
+ y="263.36218"
230
+ x="404"
231
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
232
+ xml:space="preserve"><tspan
233
+ style="font-size:16px"
234
+ y="263.36218"
235
+ x="404"
236
+ id="tspan3216-8"
237
+ sodipodi:role="line">&lt;%= @issues[0][:summary][5] %&gt;</tspan></text>
238
+ <text
239
+ sodipodi:linespacing="125%"
240
+ id="text3214-7"
241
+ y="283.36218"
242
+ x="404"
243
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
244
+ xml:space="preserve"><tspan
245
+ style="font-size:16px"
246
+ y="283.36218"
247
+ x="404"
248
+ id="tspan3216-93"
249
+ sodipodi:role="line">&lt;%= @issues[0][:summary][6] %&gt;</tspan></text>
250
+ <text
251
+ sodipodi:linespacing="125%"
252
+ id="text3214-70"
253
+ y="301.36218"
254
+ x="404"
255
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
256
+ xml:space="preserve"><tspan
257
+ style="font-size:16px"
258
+ y="301.36218"
259
+ x="404"
260
+ id="tspan3216-4"
261
+ sodipodi:role="line">&lt;%= @issues[0][:summary][7] %&gt;</tspan></text>
262
+ </g>
263
+ <g
264
+ id="g4044-4"
265
+ transform="matrix(0,1,-1,0,570.46852,-329.52003)">
266
+ <text
267
+ sodipodi:linespacing="125%"
268
+ id="text3210-0"
269
+ y="146.36218"
270
+ x="403"
271
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
272
+ xml:space="preserve"><tspan
273
+ style="font-size:20px;font-weight:bold;-inkscape-font-specification:Sans Bold"
274
+ y="146.36218"
275
+ x="403"
276
+ id="tspan3212-9"
277
+ sodipodi:role="line">&lt;%= @issues[3][:key] %&gt;</tspan></text>
278
+ <text
279
+ sodipodi:linespacing="125%"
280
+ id="text3214-05"
281
+ y="173.36218"
282
+ x="404"
283
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
284
+ xml:space="preserve"><tspan
285
+ style="font-size:16px"
286
+ y="173.36218"
287
+ x="404"
288
+ id="tspan3216-933"
289
+ sodipodi:role="line">&lt;%= @issues[3][:summary][0] %&gt;</tspan></text>
290
+ <text
291
+ sodipodi:linespacing="125%"
292
+ id="text3214-3-1"
293
+ y="191.36218"
294
+ x="404"
295
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
296
+ xml:space="preserve"><tspan
297
+ style="font-size:16px"
298
+ y="191.36218"
299
+ x="404"
300
+ id="tspan3216-2-9"
301
+ sodipodi:role="line">&lt;%= @issues[3][:summary][1] %&gt;</tspan></text>
302
+ <text
303
+ sodipodi:linespacing="125%"
304
+ id="text3214-2-1"
305
+ y="209.36218"
306
+ x="404"
307
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
308
+ xml:space="preserve"><tspan
309
+ style="font-size:16px"
310
+ y="209.36218"
311
+ x="404"
312
+ id="tspan3216-9-6"
313
+ sodipodi:role="line">&lt;%= @issues[3][:summary][2] %&gt;</tspan></text>
314
+ <text
315
+ sodipodi:linespacing="125%"
316
+ id="text3214-33-5"
317
+ y="227.36218"
318
+ x="404"
319
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
320
+ xml:space="preserve"><tspan
321
+ style="font-size:16px"
322
+ y="227.36218"
323
+ x="404"
324
+ id="tspan3216-3-3"
325
+ sodipodi:role="line">&lt;%= @issues[3][:summary][3] %&gt;</tspan></text>
326
+ <text
327
+ sodipodi:linespacing="125%"
328
+ id="text3214-0-0"
329
+ y="245.36218"
330
+ x="404"
331
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
332
+ xml:space="preserve"><tspan
333
+ style="font-size:16px"
334
+ y="245.36218"
335
+ x="404"
336
+ id="tspan3216-38-2"
337
+ sodipodi:role="line">&lt;%= @issues[3][:summary][4] %&gt;</tspan></text>
338
+ <text
339
+ sodipodi:linespacing="125%"
340
+ id="text3214-4-6"
341
+ y="263.36218"
342
+ x="404"
343
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
344
+ xml:space="preserve"><tspan
345
+ style="font-size:16px"
346
+ y="263.36218"
347
+ x="404"
348
+ id="tspan3216-8-3"
349
+ sodipodi:role="line">&lt;%= @issues[3][:summary][5] %&gt;</tspan></text>
350
+ <text
351
+ sodipodi:linespacing="125%"
352
+ id="text3214-7-7"
353
+ y="283.36218"
354
+ x="404"
355
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
356
+ xml:space="preserve"><tspan
357
+ style="font-size:16px"
358
+ y="283.36218"
359
+ x="404"
360
+ id="tspan3216-93-7"
361
+ sodipodi:role="line">&lt;%= @issues[3][:summary][6] %&gt;</tspan></text>
362
+ <text
363
+ sodipodi:linespacing="125%"
364
+ id="text3214-70-7"
365
+ y="301.36218"
366
+ x="404"
367
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
368
+ xml:space="preserve"><tspan
369
+ style="font-size:16px"
370
+ y="301.36218"
371
+ x="404"
372
+ id="tspan3216-4-3"
373
+ sodipodi:role="line">&lt;%= @issues[3][:summary][7] %&gt;</tspan></text>
374
+ </g>
375
+ <g
376
+ id="g4044-2"
377
+ transform="matrix(0,1,-1,0,372.04332,-329.52003)">
378
+ <text
379
+ sodipodi:linespacing="125%"
380
+ id="text3210-08"
381
+ y="146.36218"
382
+ x="403"
383
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
384
+ xml:space="preserve"><tspan
385
+ style="font-size:20px;font-weight:bold;-inkscape-font-specification:Sans Bold"
386
+ y="146.36218"
387
+ x="403"
388
+ id="tspan3212-2"
389
+ sodipodi:role="line">&lt;%= @issues[6][:key] %&gt;</tspan></text>
390
+ <text
391
+ sodipodi:linespacing="125%"
392
+ id="text3214-40"
393
+ y="173.36218"
394
+ x="404"
395
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
396
+ xml:space="preserve"><tspan
397
+ style="font-size:16px"
398
+ y="173.36218"
399
+ x="404"
400
+ id="tspan3216-1"
401
+ sodipodi:role="line">&lt;%= @issues[6][:summary][0] %&gt;</tspan></text>
402
+ <text
403
+ sodipodi:linespacing="125%"
404
+ id="text3214-3-2"
405
+ y="191.36218"
406
+ x="404"
407
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
408
+ xml:space="preserve"><tspan
409
+ style="font-size:16px"
410
+ y="191.36218"
411
+ x="404"
412
+ id="tspan3216-2-1"
413
+ sodipodi:role="line">&lt;%= @issues[6][:summary][1] %&gt;</tspan></text>
414
+ <text
415
+ sodipodi:linespacing="125%"
416
+ id="text3214-2-7"
417
+ y="209.36218"
418
+ x="404"
419
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
420
+ xml:space="preserve"><tspan
421
+ style="font-size:16px"
422
+ y="209.36218"
423
+ x="404"
424
+ id="tspan3216-9-2"
425
+ sodipodi:role="line">&lt;%= @issues[6][:summary][2] %&gt;</tspan></text>
426
+ <text
427
+ sodipodi:linespacing="125%"
428
+ id="text3214-33-0"
429
+ y="227.36218"
430
+ x="404"
431
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
432
+ xml:space="preserve"><tspan
433
+ style="font-size:16px"
434
+ y="227.36218"
435
+ x="404"
436
+ id="tspan3216-3-8"
437
+ sodipodi:role="line">&lt;%= @issues[6][:summary][3] %&gt;</tspan></text>
438
+ <text
439
+ sodipodi:linespacing="125%"
440
+ id="text3214-0-9"
441
+ y="245.36218"
442
+ x="404"
443
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
444
+ xml:space="preserve"><tspan
445
+ style="font-size:16px"
446
+ y="245.36218"
447
+ x="404"
448
+ id="tspan3216-38-1"
449
+ sodipodi:role="line">&lt;%= @issues[6][:summary][4] %&gt;</tspan></text>
450
+ <text
451
+ sodipodi:linespacing="125%"
452
+ id="text3214-4-3"
453
+ y="263.36218"
454
+ x="404"
455
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
456
+ xml:space="preserve"><tspan
457
+ style="font-size:16px"
458
+ y="263.36218"
459
+ x="404"
460
+ id="tspan3216-8-33"
461
+ sodipodi:role="line">&lt;%= @issues[6][:summary][5] %&gt;</tspan></text>
462
+ <text
463
+ sodipodi:linespacing="125%"
464
+ id="text3214-7-4"
465
+ y="283.36218"
466
+ x="404"
467
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
468
+ xml:space="preserve"><tspan
469
+ style="font-size:16px"
470
+ y="283.36218"
471
+ x="404"
472
+ id="tspan3216-93-6"
473
+ sodipodi:role="line">&lt;%= @issues[6][:summary][6] %&gt;</tspan></text>
474
+ <text
475
+ sodipodi:linespacing="125%"
476
+ id="text3214-70-1"
477
+ y="301.36218"
478
+ x="404"
479
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
480
+ xml:space="preserve"><tspan
481
+ style="font-size:16px"
482
+ y="301.36218"
483
+ x="404"
484
+ id="tspan3216-4-9"
485
+ sodipodi:role="line">&lt;%= @issues[6][:summary][7] %&gt;</tspan></text>
486
+ </g>
487
+ <g
488
+ id="g4044-21"
489
+ transform="matrix(0,1,-1,0,372.04332,-17.709004)">
490
+ <text
491
+ sodipodi:linespacing="125%"
492
+ id="text3210-4"
493
+ y="146.36218"
494
+ x="403"
495
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
496
+ xml:space="preserve"><tspan
497
+ style="font-size:20px;font-weight:bold;-inkscape-font-specification:Sans Bold"
498
+ y="146.36218"
499
+ x="403"
500
+ id="tspan3212-0"
501
+ sodipodi:role="line">&lt;%= @issues[7][:key] %&gt;</tspan></text>
502
+ <text
503
+ sodipodi:linespacing="125%"
504
+ id="text3214-43"
505
+ y="173.36218"
506
+ x="404"
507
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
508
+ xml:space="preserve"><tspan
509
+ style="font-size:16px"
510
+ y="173.36218"
511
+ x="404"
512
+ id="tspan3216-7"
513
+ sodipodi:role="line">&lt;%= @issues[7][:summary][0] %&gt;</tspan></text>
514
+ <text
515
+ sodipodi:linespacing="125%"
516
+ id="text3214-3-3"
517
+ y="191.36218"
518
+ x="404"
519
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
520
+ xml:space="preserve"><tspan
521
+ style="font-size:16px"
522
+ y="191.36218"
523
+ x="404"
524
+ id="tspan3216-2-6"
525
+ sodipodi:role="line">&lt;%= @issues[7][:summary][1] %&gt;</tspan></text>
526
+ <text
527
+ sodipodi:linespacing="125%"
528
+ id="text3214-2-13"
529
+ y="209.36218"
530
+ x="404"
531
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
532
+ xml:space="preserve"><tspan
533
+ style="font-size:16px"
534
+ y="209.36218"
535
+ x="404"
536
+ id="tspan3216-9-4"
537
+ sodipodi:role="line">&lt;%= @issues[7][:summary][2] %&gt;</tspan></text>
538
+ <text
539
+ sodipodi:linespacing="125%"
540
+ id="text3214-33-59"
541
+ y="227.36218"
542
+ x="404"
543
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
544
+ xml:space="preserve"><tspan
545
+ style="font-size:16px"
546
+ y="227.36218"
547
+ x="404"
548
+ id="tspan3216-3-6"
549
+ sodipodi:role="line">&lt;%= @issues[7][:summary][3] %&gt;</tspan></text>
550
+ <text
551
+ sodipodi:linespacing="125%"
552
+ id="text3214-0-6"
553
+ y="245.36218"
554
+ x="404"
555
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
556
+ xml:space="preserve"><tspan
557
+ style="font-size:16px"
558
+ y="245.36218"
559
+ x="404"
560
+ id="tspan3216-38-17"
561
+ sodipodi:role="line">&lt;%= @issues[7][:summary][4] %&gt;</tspan></text>
562
+ <text
563
+ sodipodi:linespacing="125%"
564
+ id="text3214-4-4"
565
+ y="263.36218"
566
+ x="404"
567
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
568
+ xml:space="preserve"><tspan
569
+ style="font-size:16px"
570
+ y="263.36218"
571
+ x="404"
572
+ id="tspan3216-8-6"
573
+ sodipodi:role="line">&lt;%= @issues[7][:summary][5] %&gt;</tspan></text>
574
+ <text
575
+ sodipodi:linespacing="125%"
576
+ id="text3214-7-9"
577
+ y="283.36218"
578
+ x="404"
579
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
580
+ xml:space="preserve"><tspan
581
+ style="font-size:16px"
582
+ y="283.36218"
583
+ x="404"
584
+ id="tspan3216-93-4"
585
+ sodipodi:role="line">&lt;%= @issues[7][:summary][6] %&gt;</tspan></text>
586
+ <text
587
+ sodipodi:linespacing="125%"
588
+ id="text3214-70-5"
589
+ y="301.36218"
590
+ x="404"
591
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
592
+ xml:space="preserve"><tspan
593
+ style="font-size:16px"
594
+ y="301.36218"
595
+ x="404"
596
+ id="tspan3216-4-39"
597
+ sodipodi:role="line">&lt;%= @issues[7][:summary][7] %&gt;</tspan></text>
598
+ </g>
599
+ <g
600
+ id="g4044-8"
601
+ transform="matrix(0,1,-1,0,570.46852,-17.709004)">
602
+ <text
603
+ sodipodi:linespacing="125%"
604
+ id="text3210-6"
605
+ y="146.36218"
606
+ x="403"
607
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
608
+ xml:space="preserve"><tspan
609
+ style="font-size:20px;font-weight:bold;-inkscape-font-specification:Sans Bold"
610
+ y="146.36218"
611
+ x="403"
612
+ id="tspan3212-4"
613
+ sodipodi:role="line">&lt;%= @issues[4][:key] %&gt;</tspan></text>
614
+ <text
615
+ sodipodi:linespacing="125%"
616
+ id="text3214-79"
617
+ y="173.36218"
618
+ x="404"
619
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
620
+ xml:space="preserve"><tspan
621
+ style="font-size:16px"
622
+ y="173.36218"
623
+ x="404"
624
+ id="tspan3216-39"
625
+ sodipodi:role="line">&lt;%= @issues[4][:summary][0] %&gt;</tspan></text>
626
+ <text
627
+ sodipodi:linespacing="125%"
628
+ id="text3214-3-0"
629
+ y="191.36218"
630
+ x="404"
631
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
632
+ xml:space="preserve"><tspan
633
+ style="font-size:16px"
634
+ y="191.36218"
635
+ x="404"
636
+ id="tspan3216-2-99"
637
+ sodipodi:role="line">&lt;%= @issues[4][:summary][1] %&gt;</tspan></text>
638
+ <text
639
+ sodipodi:linespacing="125%"
640
+ id="text3214-2-72"
641
+ y="209.36218"
642
+ x="404"
643
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
644
+ xml:space="preserve"><tspan
645
+ style="font-size:16px"
646
+ y="209.36218"
647
+ x="404"
648
+ id="tspan3216-9-8"
649
+ sodipodi:role="line">&lt;%= @issues[4][:summary][2] %&gt;</tspan></text>
650
+ <text
651
+ sodipodi:linespacing="125%"
652
+ id="text3214-33-08"
653
+ y="227.36218"
654
+ x="404"
655
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
656
+ xml:space="preserve"><tspan
657
+ style="font-size:16px"
658
+ y="227.36218"
659
+ x="404"
660
+ id="tspan3216-3-9"
661
+ sodipodi:role="line">&lt;%= @issues[4][:summary][3] %&gt;</tspan></text>
662
+ <text
663
+ sodipodi:linespacing="125%"
664
+ id="text3214-0-64"
665
+ y="245.36218"
666
+ x="404"
667
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
668
+ xml:space="preserve"><tspan
669
+ style="font-size:16px"
670
+ y="245.36218"
671
+ x="404"
672
+ id="tspan3216-38-4"
673
+ sodipodi:role="line">&lt;%= @issues[4][:summary][4] %&gt;</tspan></text>
674
+ <text
675
+ sodipodi:linespacing="125%"
676
+ id="text3214-4-5"
677
+ y="263.36218"
678
+ x="404"
679
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
680
+ xml:space="preserve"><tspan
681
+ style="font-size:16px"
682
+ y="263.36218"
683
+ x="404"
684
+ id="tspan3216-8-30"
685
+ sodipodi:role="line">&lt;%= @issues[4][:summary][5] %&gt;</tspan></text>
686
+ <text
687
+ sodipodi:linespacing="125%"
688
+ id="text3214-7-72"
689
+ y="283.36218"
690
+ x="404"
691
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
692
+ xml:space="preserve"><tspan
693
+ style="font-size:16px"
694
+ y="283.36218"
695
+ x="404"
696
+ id="tspan3216-93-63"
697
+ sodipodi:role="line">&lt;%= @issues[4][:summary][6] %&gt;</tspan></text>
698
+ <text
699
+ sodipodi:linespacing="125%"
700
+ id="text3214-70-2"
701
+ y="301.36218"
702
+ x="404"
703
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
704
+ xml:space="preserve"><tspan
705
+ style="font-size:16px"
706
+ y="301.36218"
707
+ x="404"
708
+ id="tspan3216-4-0"
709
+ sodipodi:role="line">&lt;%= @issues[4][:summary][7] %&gt;</tspan></text>
710
+ </g>
711
+ <g
712
+ id="g4044-0"
713
+ transform="matrix(0,1,-1,0,768.89372,-17.709004)">
714
+ <text
715
+ sodipodi:linespacing="125%"
716
+ id="text3210-5"
717
+ y="146.36218"
718
+ x="403"
719
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
720
+ xml:space="preserve"><tspan
721
+ style="font-size:20px;font-weight:bold;-inkscape-font-specification:Sans Bold"
722
+ y="146.36218"
723
+ x="403"
724
+ id="tspan3212-09"
725
+ sodipodi:role="line">&lt;%= @issues[1][:key] %&gt;</tspan></text>
726
+ <text
727
+ sodipodi:linespacing="125%"
728
+ id="text3214-36"
729
+ y="173.36218"
730
+ x="404"
731
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
732
+ xml:space="preserve"><tspan
733
+ style="font-size:16px"
734
+ y="173.36218"
735
+ x="404"
736
+ id="tspan3216-82"
737
+ sodipodi:role="line">&lt;%= @issues[1][:summary][0] %&gt;</tspan></text>
738
+ <text
739
+ sodipodi:linespacing="125%"
740
+ id="text3214-3-19"
741
+ y="191.36218"
742
+ x="404"
743
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
744
+ xml:space="preserve"><tspan
745
+ style="font-size:16px"
746
+ y="191.36218"
747
+ x="404"
748
+ id="tspan3216-2-4"
749
+ sodipodi:role="line">&lt;%= @issues[1][:summary][1] %&gt;</tspan></text>
750
+ <text
751
+ sodipodi:linespacing="125%"
752
+ id="text3214-2-10"
753
+ y="209.36218"
754
+ x="404"
755
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
756
+ xml:space="preserve"><tspan
757
+ style="font-size:16px"
758
+ y="209.36218"
759
+ x="404"
760
+ id="tspan3216-9-3"
761
+ sodipodi:role="line">&lt;%= @issues[1][:summary][2] %&gt;</tspan></text>
762
+ <text
763
+ sodipodi:linespacing="125%"
764
+ id="text3214-33-3"
765
+ y="227.36218"
766
+ x="404"
767
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
768
+ xml:space="preserve"><tspan
769
+ style="font-size:16px"
770
+ y="227.36218"
771
+ x="404"
772
+ id="tspan3216-3-86"
773
+ sodipodi:role="line">&lt;%= @issues[1][:summary][3] %&gt;</tspan></text>
774
+ <text
775
+ sodipodi:linespacing="125%"
776
+ id="text3214-0-4"
777
+ y="245.36218"
778
+ x="404"
779
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
780
+ xml:space="preserve"><tspan
781
+ style="font-size:16px"
782
+ y="245.36218"
783
+ x="404"
784
+ id="tspan3216-38-7"
785
+ sodipodi:role="line">&lt;%= @issues[1][:summary][4] %&gt;</tspan></text>
786
+ <text
787
+ sodipodi:linespacing="125%"
788
+ id="text3214-4-2"
789
+ y="263.36218"
790
+ x="404"
791
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
792
+ xml:space="preserve"><tspan
793
+ style="font-size:16px"
794
+ y="263.36218"
795
+ x="404"
796
+ id="tspan3216-8-0"
797
+ sodipodi:role="line">&lt;%= @issues[1][:summary][5] %&gt;</tspan></text>
798
+ <text
799
+ sodipodi:linespacing="125%"
800
+ id="text3214-7-3"
801
+ y="283.36218"
802
+ x="404"
803
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
804
+ xml:space="preserve"><tspan
805
+ style="font-size:16px"
806
+ y="283.36218"
807
+ x="404"
808
+ id="tspan3216-93-73"
809
+ sodipodi:role="line">&lt;%= @issues[1][:summary][6] %&gt;</tspan></text>
810
+ <text
811
+ sodipodi:linespacing="125%"
812
+ id="text3214-70-3"
813
+ y="301.36218"
814
+ x="404"
815
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
816
+ xml:space="preserve"><tspan
817
+ style="font-size:16px"
818
+ y="301.36218"
819
+ x="404"
820
+ id="tspan3216-4-6"
821
+ sodipodi:role="line">&lt;%= @issues[1][:summary][7] %&gt;</tspan></text>
822
+ </g>
823
+ <g
824
+ id="g4044-6"
825
+ transform="matrix(0,1,-1,0,768.89372,294.10202)">
826
+ <text
827
+ sodipodi:linespacing="125%"
828
+ id="text3210-2"
829
+ y="146.36218"
830
+ x="403"
831
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
832
+ xml:space="preserve"><tspan
833
+ style="font-size:20px;font-weight:bold;-inkscape-font-specification:Sans Bold"
834
+ y="146.36218"
835
+ x="403"
836
+ id="tspan3212-1"
837
+ sodipodi:role="line">&lt;%= @issues[2][:key] %&gt;</tspan></text>
838
+ <text
839
+ sodipodi:linespacing="125%"
840
+ id="text3214-04"
841
+ y="173.36218"
842
+ x="404"
843
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
844
+ xml:space="preserve"><tspan
845
+ style="font-size:16px"
846
+ y="173.36218"
847
+ x="404"
848
+ id="tspan3216-27"
849
+ sodipodi:role="line">&lt;%= @issues[2][:summary][0] %&gt;</tspan></text>
850
+ <text
851
+ sodipodi:linespacing="125%"
852
+ id="text3214-3-6"
853
+ y="191.36218"
854
+ x="404"
855
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
856
+ xml:space="preserve"><tspan
857
+ style="font-size:16px"
858
+ y="191.36218"
859
+ x="404"
860
+ id="tspan3216-2-3"
861
+ sodipodi:role="line">&lt;%= @issues[2][:summary][1] %&gt;</tspan></text>
862
+ <text
863
+ sodipodi:linespacing="125%"
864
+ id="text3214-2-0"
865
+ y="209.36218"
866
+ x="404"
867
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
868
+ xml:space="preserve"><tspan
869
+ style="font-size:16px"
870
+ y="209.36218"
871
+ x="404"
872
+ id="tspan3216-9-21"
873
+ sodipodi:role="line">&lt;%= @issues[2][:summary][2] %&gt;</tspan></text>
874
+ <text
875
+ sodipodi:linespacing="125%"
876
+ id="text3214-33-4"
877
+ y="227.36218"
878
+ x="404"
879
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
880
+ xml:space="preserve"><tspan
881
+ style="font-size:16px"
882
+ y="227.36218"
883
+ x="404"
884
+ id="tspan3216-3-4"
885
+ sodipodi:role="line">&lt;%= @issues[2][:summary][3] %&gt;</tspan></text>
886
+ <text
887
+ sodipodi:linespacing="125%"
888
+ id="text3214-0-00"
889
+ y="245.36218"
890
+ x="404"
891
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
892
+ xml:space="preserve"><tspan
893
+ style="font-size:16px"
894
+ y="245.36218"
895
+ x="404"
896
+ id="tspan3216-38-70"
897
+ sodipodi:role="line">&lt;%= @issues[2][:summary][4] %&gt;</tspan></text>
898
+ <text
899
+ sodipodi:linespacing="125%"
900
+ id="text3214-4-40"
901
+ y="263.36218"
902
+ x="404"
903
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
904
+ xml:space="preserve"><tspan
905
+ style="font-size:16px"
906
+ y="263.36218"
907
+ x="404"
908
+ id="tspan3216-8-8"
909
+ sodipodi:role="line">&lt;%= @issues[2][:summary][5] %&gt;</tspan></text>
910
+ <text
911
+ sodipodi:linespacing="125%"
912
+ id="text3214-7-0"
913
+ y="283.36218"
914
+ x="404"
915
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
916
+ xml:space="preserve"><tspan
917
+ style="font-size:16px"
918
+ y="283.36218"
919
+ x="404"
920
+ id="tspan3216-93-67"
921
+ sodipodi:role="line">&lt;%= @issues[2][:summary][6] %&gt;</tspan></text>
922
+ <text
923
+ sodipodi:linespacing="125%"
924
+ id="text3214-70-4"
925
+ y="301.36218"
926
+ x="404"
927
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
928
+ xml:space="preserve"><tspan
929
+ style="font-size:16px"
930
+ y="301.36218"
931
+ x="404"
932
+ id="tspan3216-4-7"
933
+ sodipodi:role="line">&lt;%= @issues[2][:summary][7] %&gt;</tspan></text>
934
+ </g>
935
+ <g
936
+ id="g4044-03"
937
+ transform="matrix(0,1,-1,0,570.46852,294.10202)">
938
+ <text
939
+ sodipodi:linespacing="125%"
940
+ id="text3210-25"
941
+ y="146.36218"
942
+ x="403"
943
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
944
+ xml:space="preserve"><tspan
945
+ style="font-size:20px;font-weight:bold;-inkscape-font-specification:Sans Bold"
946
+ y="146.36218"
947
+ x="403"
948
+ id="tspan3212-08"
949
+ sodipodi:role="line">&lt;%= @issues[5][:key] %&gt;</tspan></text>
950
+ <text
951
+ sodipodi:linespacing="125%"
952
+ id="text3214-71"
953
+ y="173.36218"
954
+ x="404"
955
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
956
+ xml:space="preserve"><tspan
957
+ style="font-size:16px"
958
+ y="173.36218"
959
+ x="404"
960
+ id="tspan3216-823"
961
+ sodipodi:role="line">&lt;%= @issues[5][:summary][0] %&gt;</tspan></text>
962
+ <text
963
+ sodipodi:linespacing="125%"
964
+ id="text3214-3-5"
965
+ y="191.36218"
966
+ x="404"
967
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
968
+ xml:space="preserve"><tspan
969
+ style="font-size:16px"
970
+ y="191.36218"
971
+ x="404"
972
+ id="tspan3216-2-0"
973
+ sodipodi:role="line">&lt;%= @issues[5][:summary][1] %&gt;</tspan></text>
974
+ <text
975
+ sodipodi:linespacing="125%"
976
+ id="text3214-2-6"
977
+ y="209.36218"
978
+ x="404"
979
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
980
+ xml:space="preserve"><tspan
981
+ style="font-size:16px"
982
+ y="209.36218"
983
+ x="404"
984
+ id="tspan3216-9-7"
985
+ sodipodi:role="line">&lt;%= @issues[5][:summary][2] %&gt;</tspan></text>
986
+ <text
987
+ sodipodi:linespacing="125%"
988
+ id="text3214-33-39"
989
+ y="227.36218"
990
+ x="404"
991
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
992
+ xml:space="preserve"><tspan
993
+ style="font-size:16px"
994
+ y="227.36218"
995
+ x="404"
996
+ id="tspan3216-3-39"
997
+ sodipodi:role="line">&lt;%= @issues[5][:summary][3] %&gt;</tspan></text>
998
+ <text
999
+ sodipodi:linespacing="125%"
1000
+ id="text3214-0-94"
1001
+ y="245.36218"
1002
+ x="404"
1003
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1004
+ xml:space="preserve"><tspan
1005
+ style="font-size:16px"
1006
+ y="245.36218"
1007
+ x="404"
1008
+ id="tspan3216-38-6"
1009
+ sodipodi:role="line">&lt;%= @issues[5][:summary][4] %&gt;</tspan></text>
1010
+ <text
1011
+ sodipodi:linespacing="125%"
1012
+ id="text3214-4-1"
1013
+ y="263.36218"
1014
+ x="404"
1015
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1016
+ xml:space="preserve"><tspan
1017
+ style="font-size:16px"
1018
+ y="263.36218"
1019
+ x="404"
1020
+ id="tspan3216-8-06"
1021
+ sodipodi:role="line">&lt;%= @issues[5][:summary][5] %&gt;</tspan></text>
1022
+ <text
1023
+ sodipodi:linespacing="125%"
1024
+ id="text3214-7-1"
1025
+ y="283.36218"
1026
+ x="404"
1027
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1028
+ xml:space="preserve"><tspan
1029
+ style="font-size:16px"
1030
+ y="283.36218"
1031
+ x="404"
1032
+ id="tspan3216-93-2"
1033
+ sodipodi:role="line">&lt;%= @issues[5][:summary][6] %&gt;</tspan></text>
1034
+ <text
1035
+ sodipodi:linespacing="125%"
1036
+ id="text3214-70-58"
1037
+ y="301.36218"
1038
+ x="404"
1039
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1040
+ xml:space="preserve"><tspan
1041
+ style="font-size:16px"
1042
+ y="301.36218"
1043
+ x="404"
1044
+ id="tspan3216-4-64"
1045
+ sodipodi:role="line">&lt;%= @issues[5][:summary][7] %&gt;</tspan></text>
1046
+ </g>
1047
+ <g
1048
+ id="g4044-09"
1049
+ transform="matrix(0,1,-1,0,372.04332,294.10202)">
1050
+ <text
1051
+ sodipodi:linespacing="125%"
1052
+ id="text3210-66"
1053
+ y="146.36218"
1054
+ x="403"
1055
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1056
+ xml:space="preserve"><tspan
1057
+ style="font-size:20px;font-weight:bold;-inkscape-font-specification:Sans Bold"
1058
+ y="146.36218"
1059
+ x="403"
1060
+ id="tspan3212-15"
1061
+ sodipodi:role="line">&lt;%= @issues[8][:key] %&gt;</tspan></text>
1062
+ <text
1063
+ sodipodi:linespacing="125%"
1064
+ id="text3214-35"
1065
+ y="173.36218"
1066
+ x="404"
1067
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1068
+ xml:space="preserve"><tspan
1069
+ style="font-size:16px"
1070
+ y="173.36218"
1071
+ x="404"
1072
+ id="tspan3216-5"
1073
+ sodipodi:role="line">&lt;%= @issues[8][:summary][0] %&gt;</tspan></text>
1074
+ <text
1075
+ sodipodi:linespacing="125%"
1076
+ id="text3214-3-7"
1077
+ y="191.36218"
1078
+ x="404"
1079
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1080
+ xml:space="preserve"><tspan
1081
+ style="font-size:16px"
1082
+ y="191.36218"
1083
+ x="404"
1084
+ id="tspan3216-2-8"
1085
+ sodipodi:role="line">&lt;%= @issues[8][:summary][1] %&gt;</tspan></text>
1086
+ <text
1087
+ sodipodi:linespacing="125%"
1088
+ id="text3214-2-3"
1089
+ y="209.36218"
1090
+ x="404"
1091
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1092
+ xml:space="preserve"><tspan
1093
+ style="font-size:16px"
1094
+ y="209.36218"
1095
+ x="404"
1096
+ id="tspan3216-9-87"
1097
+ sodipodi:role="line">&lt;%= @issues[8][:summary][2] %&gt;</tspan></text>
1098
+ <text
1099
+ sodipodi:linespacing="125%"
1100
+ id="text3214-33-2"
1101
+ y="227.36218"
1102
+ x="404"
1103
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1104
+ xml:space="preserve"><tspan
1105
+ style="font-size:16px"
1106
+ y="227.36218"
1107
+ x="404"
1108
+ id="tspan3216-3-36"
1109
+ sodipodi:role="line">&lt;%= @issues[8][:summary][3] %&gt;</tspan></text>
1110
+ <text
1111
+ sodipodi:linespacing="125%"
1112
+ id="text3214-0-62"
1113
+ y="245.36218"
1114
+ x="404"
1115
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1116
+ xml:space="preserve"><tspan
1117
+ style="font-size:16px"
1118
+ y="245.36218"
1119
+ x="404"
1120
+ id="tspan3216-38-8"
1121
+ sodipodi:role="line">&lt;%= @issues[8][:summary][4] %&gt;</tspan></text>
1122
+ <text
1123
+ sodipodi:linespacing="125%"
1124
+ id="text3214-4-28"
1125
+ y="263.36218"
1126
+ x="404"
1127
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1128
+ xml:space="preserve"><tspan
1129
+ style="font-size:16px"
1130
+ y="263.36218"
1131
+ x="404"
1132
+ id="tspan3216-8-9"
1133
+ sodipodi:role="line">&lt;%= @issues[8][:summary][5] %&gt;</tspan></text>
1134
+ <text
1135
+ sodipodi:linespacing="125%"
1136
+ id="text3214-7-2"
1137
+ y="283.36218"
1138
+ x="404"
1139
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1140
+ xml:space="preserve"><tspan
1141
+ style="font-size:16px"
1142
+ y="283.36218"
1143
+ x="404"
1144
+ id="tspan3216-93-61"
1145
+ sodipodi:role="line">&lt;%= @issues[8][:summary][6] %&gt;</tspan></text>
1146
+ <text
1147
+ sodipodi:linespacing="125%"
1148
+ id="text3214-70-41"
1149
+ y="301.36218"
1150
+ x="404"
1151
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1152
+ xml:space="preserve"><tspan
1153
+ style="font-size:16px"
1154
+ y="301.36218"
1155
+ x="404"
1156
+ id="tspan3216-4-1"
1157
+ sodipodi:role="line">&lt;%= @issues[8][:summary][7] %&gt;</tspan></text>
1158
+ </g>
1159
+ </g>
1160
+ </svg>