ditz-str 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.
Files changed (65) hide show
  1. data/.document +5 -0
  2. data/Gemfile +14 -0
  3. data/Gemfile.lock +24 -0
  4. data/LICENSE +674 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.rdoc +19 -0
  7. data/README.txt +143 -0
  8. data/Rakefile +55 -0
  9. data/VERSION +1 -0
  10. data/bin/ditz-str +189 -0
  11. data/bugs/issue-02615b8c3dd0382c92f350ce2158ecfe94d11ef8.yaml +22 -0
  12. data/bugs/issue-06a3bbf35a60c4da2d8ea0fdc86164263126d6b2.yaml +22 -0
  13. data/bugs/issue-0c00c1d7fdffaad304e62d79d9b3d5e92547055b.yaml +38 -0
  14. data/bugs/issue-20dad4b4533d6d76d496fe5970098f1eb8efd561.yaml +26 -0
  15. data/bugs/issue-360ae6529dbc66358fde6b532cbea79ece37a670.yaml +22 -0
  16. data/bugs/issue-5177d61bf3c2783f71ef63e6e2c5e720247ef699.yaml +18 -0
  17. data/bugs/issue-695b564c210da1965a2bb38eef782178aead6952.yaml +26 -0
  18. data/bugs/issue-7d0ce6429a9fb5fa09ce3376a8921a5ecb7ecfe5.yaml +34 -0
  19. data/bugs/issue-a04462fa22ab6e1b02cfdd052d1f6c6f491f08f5.yaml +22 -0
  20. data/bugs/issue-bca54ca5107eabc3b281701041cc36ea0641cbdd.yaml +26 -0
  21. data/bugs/issue-d0c7d04b014d705c5fd865e4d487b5e5b6983c33.yaml +26 -0
  22. data/bugs/issue-f94b879842aa0274aa74fc2833252d4a06ec65cc.yaml +22 -0
  23. data/bugs/project.yaml +18 -0
  24. data/data/ditz-str/blue-check.png +0 -0
  25. data/data/ditz-str/close.rhtml +39 -0
  26. data/data/ditz-str/component.rhtml +38 -0
  27. data/data/ditz-str/dropdown.css +11 -0
  28. data/data/ditz-str/dropdown.js +58 -0
  29. data/data/ditz-str/edit_issue.rhtml +53 -0
  30. data/data/ditz-str/green-bar.png +0 -0
  31. data/data/ditz-str/green-check.png +0 -0
  32. data/data/ditz-str/header.gif +0 -0
  33. data/data/ditz-str/header_over.gif +0 -0
  34. data/data/ditz-str/index.rhtml +148 -0
  35. data/data/ditz-str/issue.rhtml +152 -0
  36. data/data/ditz-str/issue_table.rhtml +28 -0
  37. data/data/ditz-str/new_component.rhtml +28 -0
  38. data/data/ditz-str/new_issue.rhtml +57 -0
  39. data/data/ditz-str/new_release.rhtml +29 -0
  40. data/data/ditz-str/plugins/git-sync.rb +83 -0
  41. data/data/ditz-str/plugins/git.rb +153 -0
  42. data/data/ditz-str/plugins/issue-claiming.rb +174 -0
  43. data/data/ditz-str/red-check.png +0 -0
  44. data/data/ditz-str/release.rhtml +111 -0
  45. data/data/ditz-str/style.css +236 -0
  46. data/data/ditz-str/unassigned.rhtml +37 -0
  47. data/data/ditz-str/yellow-bar.png +0 -0
  48. data/ditz-str.gemspec +121 -0
  49. data/lib/ditzstr/brick.rb +251 -0
  50. data/lib/ditzstr/file-storage.rb +54 -0
  51. data/lib/ditzstr/hook.rb +67 -0
  52. data/lib/ditzstr/html.rb +104 -0
  53. data/lib/ditzstr/lowline.rb +201 -0
  54. data/lib/ditzstr/model-objects.rb +346 -0
  55. data/lib/ditzstr/model.rb +265 -0
  56. data/lib/ditzstr/operator.rb +593 -0
  57. data/lib/ditzstr/trollop.rb +614 -0
  58. data/lib/ditzstr/util.rb +61 -0
  59. data/lib/ditzstr/view.rb +16 -0
  60. data/lib/ditzstr/views.rb +157 -0
  61. data/lib/ditzstr.rb +69 -0
  62. data/man/ditz.1 +38 -0
  63. data/test/helper.rb +18 -0
  64. data/test/test_ditz-str.rb +7 -0
  65. metadata +219 -0
@@ -0,0 +1,157 @@
1
+ require 'ditzstr/view'
2
+ require 'ditzstr/html'
3
+
4
+ module DitzStr
5
+
6
+ class ScreenView < View
7
+ def initialize project, config, device=$stdout
8
+ @device = device
9
+ @config = config
10
+ end
11
+
12
+ def format_log_events events
13
+ return "none" if events.empty?
14
+ events.reverse.map do |time, who, what, comment|
15
+ "- #{what} (#{who.shortened_email}, #{time.ago} ago)" +
16
+ (comment =~ /\S/ ? "\n" + comment.gsub(/^/, " > ") : "")
17
+ end.join("\n")
18
+ end
19
+ private :format_log_events
20
+
21
+ def render_issue issue
22
+ status = case issue.status
23
+ when :closed
24
+ "#{issue.status_string}: #{issue.disposition_string}"
25
+ else
26
+ issue.status_string
27
+ end
28
+ desc = if issue.desc.size < 80 - "Description: ".length
29
+ issue.desc
30
+ else
31
+ "\n" + issue.desc.gsub(/^/, " ") + "\n"
32
+ end
33
+ @device.puts <<EOS
34
+ #{"Issue #{issue.name}".underline}
35
+ Title: #{issue.title}
36
+ Description: #{desc}
37
+ Type: #{issue.type}
38
+ Status: #{status}
39
+ Creator: #{issue.reporter}
40
+ Age: #{issue.creation_time.ago}
41
+ Release: #{issue.release}
42
+ References: #{issue.references.listify " "}
43
+ Identifier: #{issue.id}
44
+ EOS
45
+
46
+ self.class.view_additions_for(:issue_summary).each { |b| @device.print(b[issue, @config] || next) }
47
+ puts
48
+ self.class.view_additions_for(:issue_details).each { |b| @device.print(b[issue, @config] || next) }
49
+
50
+ @device.puts <<EOS
51
+ Event log:
52
+ #{format_log_events issue.log_events}
53
+ EOS
54
+ end
55
+ end
56
+
57
+ class HtmlView < View
58
+ SUPPORT_FILES = %w(style.css blue-check.png red-check.png green-check.png green-bar.png yellow-bar.png)
59
+
60
+ def initialize project, config, dir
61
+ @project = project
62
+ @config = config
63
+ @dir = dir
64
+ @template_dir = File.dirname DitzStr::find_ditz_file("index.rhtml")
65
+ end
66
+
67
+ def generate_issue_html_str links, issue, brickargs={}
68
+
69
+ extra_summary = self.class.view_additions_for(:issue_summary).map { |b| b[issue, @config] }.compact
70
+ extra_details = self.class.view_additions_for(:issue_details).map { |b| b[issue, @config] }.compact
71
+
72
+ erb = ErbHtml.new(@template_dir, links, :issue => issue,
73
+ :release => (issue.release ? @project.release_for(issue.release) : nil),
74
+ :component => @project.component_for(issue.component),
75
+ :project => @project,:commands=>{},:brickargs=>brickargs)
76
+
77
+ extra_summary_html = extra_summary.map { |string, extra_binding| erb.render_string string, extra_binding }.join
78
+ extra_details_html = extra_details.map { |string, extra_binding| erb.render_string string, extra_binding }.join
79
+
80
+ erb.render_template("issue", { :extra_summary_html => extra_summary_html, :extra_details_html => extra_details_html })
81
+
82
+ end
83
+
84
+ def generate_release_html_str links, r, brickargs={}
85
+ ErbHtml.new(@template_dir, links, :release => r,
86
+ :issues => @project.issues_for_release(r), :project => @project, :brickargs=>brickargs).
87
+ render_template("release")
88
+ end
89
+
90
+ def generate_index_html_str links, brickargs={}
91
+ past_rels, upcoming_rels = @project.releases.partition { |r| r.released? }
92
+ ErbHtml.new(@template_dir, links, :project => @project,
93
+ :past_releases => past_rels, :upcoming_releases => upcoming_rels,
94
+ :components => @project.components, :brickargs=>brickargs).
95
+ render_template("index")
96
+ end
97
+
98
+ def generate_unassigned_html_str links, brickargs={}
99
+ ErbHtml.new(@template_dir, links, :brickargs=>brickargs,
100
+ :issues => @project.unassigned_issues, :project => @project).
101
+ render_template("unassigned")
102
+ end
103
+
104
+ def generate_component_html_str links, c, brickargs={}
105
+ ErbHtml.new(@template_dir, links, :component => c, :brickargs=>brickargs,
106
+ :issues => @project.issues_for_component(c), :project => @project).
107
+ render_template("component")
108
+ end
109
+
110
+ def generate_links
111
+ ## build up links
112
+ links = {}
113
+ @project.releases.each { |r| links[r] = "release-#{r.name}.html" }
114
+ @project.issues.each { |i| links[i] = "issue-#{i.id}.html" }
115
+ @project.components.each { |c| links[c] = "component-#{c.name}.html" }
116
+ links["unassigned"] = "unassigned.html" # special case: unassigned
117
+ links["index"] = "index.html" # special case: index
118
+
119
+ links
120
+ end
121
+
122
+
123
+ def render_all
124
+ Dir.mkdir @dir unless File.exists? @dir
125
+ SUPPORT_FILES.each { |f| FileUtils.cp File.join(@template_dir, f), @dir }
126
+
127
+ links = generate_links
128
+
129
+ @project.issues.each do |issue|
130
+ fn = File.join @dir, links[issue]
131
+ File.open(fn, "w") { |f| f.puts generate_issue_html_str links, issue}
132
+ end
133
+
134
+ @project.releases.each do |r|
135
+ fn = File.join @dir, links[r]
136
+ File.open(fn, "w") { |f| f.puts generate_release_html_str links, r}
137
+ end
138
+
139
+ @project.components.each do |c|
140
+ fn = File.join @dir, links[c]
141
+ File.open(fn, "w") { |f| f.puts generate_component_html_str links, c}
142
+ end
143
+
144
+ fn = File.join @dir, links["unassigned"]
145
+ File.open(fn, "w") do |f|
146
+ f.puts generate_unassigned_html_str links
147
+ end
148
+
149
+ fn = File.join @dir, links["index"]
150
+ File.open(fn, "w") do |f|
151
+ f.puts generate_index_html_str links
152
+ end
153
+ puts "Local generated URL: file://#{File.expand_path(fn)}"
154
+ end
155
+ end
156
+
157
+ end
data/lib/ditzstr.rb ADDED
@@ -0,0 +1,69 @@
1
+ module DitzStr
2
+
3
+ VERSION = "0.5"
4
+
5
+ def debug s
6
+ puts "# #{s}" if $verbose
7
+ end
8
+ module_function :debug
9
+
10
+ def self.has_readline?
11
+ @has_readline
12
+ end
13
+
14
+ def self.has_readline= val
15
+ @has_readline = val
16
+ end
17
+
18
+ begin
19
+ DitzStr::has_readline = false
20
+ require 'readline'
21
+ DitzStr::has_readline = true
22
+ rescue LoadError
23
+ # do nothing
24
+ end
25
+
26
+ def home_dir
27
+ @home ||=
28
+ ENV["HOME"] || (ENV["HOMEDRIVE"] && ENV["HOMEPATH"] ? ENV["HOMEDRIVE"] + ENV["HOMEPATH"] : nil) || begin
29
+ $stderr.puts "warning: can't determine home directory, using '.'"
30
+ "."
31
+ end
32
+ end
33
+
34
+ ## helper for recursive search
35
+ def find_dir_containing target, start=Pathname.new(".")
36
+ return start if (start + target).exist?
37
+ unless start.parent.realpath == start.realpath
38
+ find_dir_containing target, start.parent
39
+ end
40
+ end
41
+
42
+ ## my brilliant solution to the 'gem datadir' problem
43
+ def find_ditz_file fn
44
+ #dir = $:.find { |p| File.exist? File.expand_path(File.join(p, fn)) }
45
+ dir = File.exist? File.expand_path(File.join(Gem.datadir("ditz-str"), fn))
46
+ raise "can't find #{fn} in any load path (tried #{File.join(Gem.datadir("ditz-str"),fn)}" unless dir
47
+ File.expand_path File.join(Gem.datadir("ditz-str"), fn)
48
+ end
49
+
50
+ def load_plugins fn
51
+ DitzStr::debug "loading plugins from #{fn}"
52
+ plugins = YAML::load_file $opts[:plugins_file]
53
+ plugins.each do |p|
54
+ fn = DitzStr::find_ditz_file "plugins/#{p}.rb"
55
+ DitzStr::debug "loading plugin #{p.inspect} from #{fn}"
56
+ require File.expand_path(fn)
57
+ end
58
+ plugins
59
+ end
60
+
61
+ module_function :home_dir, :find_dir_containing, :find_ditz_file, :load_plugins
62
+ end
63
+
64
+ require 'ditzstr/model-objects'
65
+ require 'ditzstr/operator'
66
+ require 'ditzstr/views'
67
+ require 'ditzstr/hook'
68
+ require 'ditzstr/file-storage'
69
+ require 'ditzstr/brick'
data/man/ditz.1 ADDED
@@ -0,0 +1,38 @@
1
+ .TH "ditz" "1" "0.5" "" ""
2
+ .SH "NAME"
3
+ ditz \- simple, light\-weight distributed issue tracker
4
+ .SH "SYNOPSIS"
5
+ \fBditz\fR [ \fIoptions\fR ] \fIcommand\fR [ \fIarguments\fR ]
6
+
7
+ To list all available commands, use \fBditz help\fR. To get help for a specific command, use \fBditz help
8
+ command\fR.
9
+ .SH "DESCRIPTION"
10
+ Ditz is a simple, light\-weight distributed issue tracker designed to work with
11
+ distributed version control systems like darcs and git. Ditz maintains an issue
12
+ database directory on disk, with files written in a line\-based and human\-
13
+ editable format. This directory is kept under version control alongside
14
+ project code. Changes in issue state is handled by version control like code
15
+ change: included as part of a commit, merged with changes from other
16
+ developers, conflict\-resolved in the standard manner, etc.
17
+
18
+ Ditz provides a simple, console\-based interface for creating and updating the
19
+ issue database files, and some rudimentary HTML generation capabilities for
20
+ producing world\-readable status pages. It offers no central public method of
21
+ bug submission.
22
+ .SH "AUTHOR"
23
+ ditz was written by William Morgan <\fIwmorgan\-ditz@masanjin.net\fR>.
24
+
25
+ This manpage was written for the Debian package of ditz by Christian Garbs
26
+ <\fIdebian@cgarbs.de\fR>.
27
+ .SH "LICENSE"
28
+ Copyright (c) 2008 William Morgan.
29
+
30
+ This program is free software: you can redistribute it and/or modify
31
+ it under the terms of the GNU General Public License as published by
32
+ the Free Software Foundation, either version 3 of the License, or
33
+ (at your option) any later version.
34
+
35
+ This program is distributed in the hope that it will be useful,
36
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
37
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
38
+ GNU General Public License for more details.
data/test/helper.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require 'shoulda'
12
+
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
15
+ require 'ditz-str'
16
+
17
+ class Test::Unit::TestCase
18
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestDitzStr < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,219 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ditz-str
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Nils F. Sandell
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-12-03 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ prerelease: false
22
+ type: :development
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ version_requirements: *id001
33
+ name: shoulda
34
+ - !ruby/object:Gem::Dependency
35
+ prerelease: false
36
+ type: :development
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ~>
41
+ - !ruby/object:Gem::Version
42
+ hash: 23
43
+ segments:
44
+ - 1
45
+ - 0
46
+ - 0
47
+ version: 1.0.0
48
+ version_requirements: *id002
49
+ name: bundler
50
+ - !ruby/object:Gem::Dependency
51
+ prerelease: false
52
+ type: :development
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ~>
57
+ - !ruby/object:Gem::Version
58
+ hash: 7
59
+ segments:
60
+ - 1
61
+ - 6
62
+ - 4
63
+ version: 1.6.4
64
+ version_requirements: *id003
65
+ name: jeweler
66
+ - !ruby/object:Gem::Dependency
67
+ prerelease: false
68
+ type: :development
69
+ requirement: &id004 !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ hash: 3
75
+ segments:
76
+ - 0
77
+ version: "0"
78
+ version_requirements: *id004
79
+ name: rcov
80
+ - !ruby/object:Gem::Dependency
81
+ prerelease: false
82
+ type: :development
83
+ requirement: &id005 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ hash: 3
89
+ segments:
90
+ - 0
91
+ version: "0"
92
+ version_requirements: *id005
93
+ name: rdoc
94
+ - !ruby/object:Gem::Dependency
95
+ prerelease: false
96
+ type: :runtime
97
+ requirement: &id006 !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ hash: 29
103
+ segments:
104
+ - 1
105
+ - 9
106
+ version: "1.9"
107
+ version_requirements: *id006
108
+ name: trollop
109
+ description: Modification of the ditz issue tracking originally created by William Morgan. First new feature is a portable web server for interacting with the issue system.
110
+ email: nils.sandell@systemstechnologyresearch.com
111
+ executables:
112
+ - ditz-str
113
+ extensions: []
114
+
115
+ extra_rdoc_files:
116
+ - LICENSE
117
+ - LICENSE.txt
118
+ - README.rdoc
119
+ - README.txt
120
+ files:
121
+ - .document
122
+ - Gemfile
123
+ - Gemfile.lock
124
+ - LICENSE
125
+ - LICENSE.txt
126
+ - README.rdoc
127
+ - README.txt
128
+ - Rakefile
129
+ - VERSION
130
+ - bin/ditz-str
131
+ - bugs/issue-02615b8c3dd0382c92f350ce2158ecfe94d11ef8.yaml
132
+ - bugs/issue-06a3bbf35a60c4da2d8ea0fdc86164263126d6b2.yaml
133
+ - bugs/issue-0c00c1d7fdffaad304e62d79d9b3d5e92547055b.yaml
134
+ - bugs/issue-20dad4b4533d6d76d496fe5970098f1eb8efd561.yaml
135
+ - bugs/issue-360ae6529dbc66358fde6b532cbea79ece37a670.yaml
136
+ - bugs/issue-5177d61bf3c2783f71ef63e6e2c5e720247ef699.yaml
137
+ - bugs/issue-695b564c210da1965a2bb38eef782178aead6952.yaml
138
+ - bugs/issue-7d0ce6429a9fb5fa09ce3376a8921a5ecb7ecfe5.yaml
139
+ - bugs/issue-a04462fa22ab6e1b02cfdd052d1f6c6f491f08f5.yaml
140
+ - bugs/issue-bca54ca5107eabc3b281701041cc36ea0641cbdd.yaml
141
+ - bugs/issue-d0c7d04b014d705c5fd865e4d487b5e5b6983c33.yaml
142
+ - bugs/issue-f94b879842aa0274aa74fc2833252d4a06ec65cc.yaml
143
+ - bugs/project.yaml
144
+ - data/ditz-str/blue-check.png
145
+ - data/ditz-str/close.rhtml
146
+ - data/ditz-str/component.rhtml
147
+ - data/ditz-str/dropdown.css
148
+ - data/ditz-str/dropdown.js
149
+ - data/ditz-str/edit_issue.rhtml
150
+ - data/ditz-str/green-bar.png
151
+ - data/ditz-str/green-check.png
152
+ - data/ditz-str/header.gif
153
+ - data/ditz-str/header_over.gif
154
+ - data/ditz-str/index.rhtml
155
+ - data/ditz-str/issue.rhtml
156
+ - data/ditz-str/issue_table.rhtml
157
+ - data/ditz-str/new_component.rhtml
158
+ - data/ditz-str/new_issue.rhtml
159
+ - data/ditz-str/new_release.rhtml
160
+ - data/ditz-str/plugins/git-sync.rb
161
+ - data/ditz-str/plugins/git.rb
162
+ - data/ditz-str/plugins/issue-claiming.rb
163
+ - data/ditz-str/red-check.png
164
+ - data/ditz-str/release.rhtml
165
+ - data/ditz-str/style.css
166
+ - data/ditz-str/unassigned.rhtml
167
+ - data/ditz-str/yellow-bar.png
168
+ - ditz-str.gemspec
169
+ - lib/ditzstr.rb
170
+ - lib/ditzstr/brick.rb
171
+ - lib/ditzstr/file-storage.rb
172
+ - lib/ditzstr/hook.rb
173
+ - lib/ditzstr/html.rb
174
+ - lib/ditzstr/lowline.rb
175
+ - lib/ditzstr/model-objects.rb
176
+ - lib/ditzstr/model.rb
177
+ - lib/ditzstr/operator.rb
178
+ - lib/ditzstr/trollop.rb
179
+ - lib/ditzstr/util.rb
180
+ - lib/ditzstr/view.rb
181
+ - lib/ditzstr/views.rb
182
+ - man/ditz.1
183
+ - test/helper.rb
184
+ - test/test_ditz-str.rb
185
+ homepage: http://github.com/nsandell/ditz-str
186
+ licenses:
187
+ - GPL
188
+ post_install_message:
189
+ rdoc_options: []
190
+
191
+ require_paths:
192
+ - lib
193
+ required_ruby_version: !ruby/object:Gem::Requirement
194
+ none: false
195
+ requirements:
196
+ - - ">="
197
+ - !ruby/object:Gem::Version
198
+ hash: 3
199
+ segments:
200
+ - 0
201
+ version: "0"
202
+ required_rubygems_version: !ruby/object:Gem::Requirement
203
+ none: false
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ hash: 3
208
+ segments:
209
+ - 0
210
+ version: "0"
211
+ requirements: []
212
+
213
+ rubyforge_project:
214
+ rubygems_version: 1.7.2
215
+ signing_key:
216
+ specification_version: 3
217
+ summary: Customized STR version of ditz issue tracking system (original by William Morgan).
218
+ test_files: []
219
+