pivotal_doc 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/.gitignore +5 -0
  2. data/README +37 -0
  3. data/Rakefile +49 -0
  4. data/VERSION +1 -0
  5. data/assets/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  6. data/assets/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  7. data/assets/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  8. data/assets/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  9. data/assets/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  10. data/assets/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  11. data/assets/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  12. data/assets/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  13. data/assets/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  14. data/assets/css/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  15. data/assets/css/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  16. data/assets/css/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
  17. data/assets/css/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  18. data/assets/css/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  19. data/assets/css/ui-lightness/jquery-ui-1.8.5.custom.css +572 -0
  20. data/assets/js/jquery-1.4.2.min.js +154 -0
  21. data/assets/js/jquery-ui-1.8.5.custom.min.js +778 -0
  22. data/ext/date.rb +9 -0
  23. data/lib/pivotal_doc/configuration.rb +37 -0
  24. data/lib/pivotal_doc/exceptions.rb +22 -0
  25. data/lib/pivotal_doc/generator.rb +30 -0
  26. data/lib/pivotal_doc/generators/base.rb +52 -0
  27. data/lib/pivotal_doc/generators/html.rb +14 -0
  28. data/lib/pivotal_doc/generators/text.rb +12 -0
  29. data/lib/pivotal_doc/release.rb +50 -0
  30. data/lib/pivotal_doc.rb +14 -0
  31. data/pivotal_doc.gemspec +106 -0
  32. data/spec/fixtures/configs.yml +11 -0
  33. data/spec/fixtures/iterations.yml +4 -0
  34. data/spec/fixtures/projects.yml +11 -0
  35. data/spec/fixtures/stories.yml +87 -0
  36. data/spec/lib/configuration_spec.rb +88 -0
  37. data/spec/lib/generator_spec.rb +57 -0
  38. data/spec/lib/generators/base_spec.rb +64 -0
  39. data/spec/lib/generators/html_spec.rb +40 -0
  40. data/spec/lib/generators/text_spec.rb +25 -0
  41. data/spec/lib/release_spec.rb +92 -0
  42. data/spec/spec_helper.rb +9 -0
  43. data/spec/support/mocks_helper.rb +31 -0
  44. data/spec/support/pt_api_helpers.rb +42 -0
  45. data/templates/fancy.haml +74 -0
  46. data/templates/html_gen.haml +53 -0
  47. data/templates/text_gen.txt +0 -0
  48. metadata +164 -0
@@ -0,0 +1,40 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe PivotalDoc::Generators::HTML do
4
+ before(:each) do
5
+ @release= mocks_helper(:release)
6
+ @html= PivotalDoc::Generators::HTML.new(@release)
7
+ @engine= Haml::Engine.new('')
8
+ end
9
+
10
+ after(:each) do
11
+ File.delete(@html.output_file) if File.exists?(@html.output_file)
12
+ end
13
+
14
+ it "should open the output file and write the compiled haml (html)" do
15
+ Haml::Engine.stub!(:new).and_return(@engine)
16
+ @engine.stub!(:render).and_return('compiled haml')
17
+ @html.render_doc
18
+ File.read(@html.output_file).should eql('compiled haml')
19
+ end
20
+
21
+ it "should read the file contents" do
22
+ @html.template.should be_an_instance_of(String)
23
+ end
24
+
25
+ it "should use the template_name if specified" do
26
+ options= {:template_name=>'fancy.html'}
27
+ html= PivotalDoc::Generators::HTML.new(@release, options)
28
+ html.template_name.should eql(options[:template_name])
29
+ end
30
+
31
+ it "should know its template name" do
32
+ @html.template_name.should =~ /\.haml$/
33
+ end
34
+
35
+ it "should render the release doc" do
36
+ Haml::Engine.should_receive(:new).with(@html.template).and_return(@engine)
37
+ @engine.should_receive(:render)
38
+ @html.render_doc
39
+ end
40
+ end
@@ -0,0 +1,25 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe PivotalDoc::Generators::Text do
4
+ before(:each) do
5
+ @text= PivotalDoc::Generators::Text.new(mocks_helper(:release))
6
+ end
7
+
8
+ after(:each) do
9
+ File.delete(@text.output_file) if File.exists?(@text.output_file)
10
+ end
11
+
12
+ it "should render the text and write to the output file" do
13
+ @text.should_receive(:output).and_return('my_text')
14
+ @text.render_doc
15
+ File.read(@text.output_file).should eql('my_text')
16
+ end
17
+
18
+ it "should read the file contents" do
19
+ @text.template.should be_an_instance_of(String)
20
+ end
21
+
22
+ it "should know its tempalte name" do
23
+ @text.template_name.should =~ /\.txt$/
24
+ end
25
+ end
@@ -0,0 +1,92 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe PivotalDoc::Release do
4
+ before(:each) do
5
+ @project= PT::Project.new
6
+ @latest_iteration= PT::Iteration.new
7
+ PT::Iteration.stub!(:done).and_return([@latest_iteration])
8
+ @release= PivotalDoc::Release.new(@project)
9
+ end
10
+
11
+ it "should get the last 'done' iteration for the project" do
12
+ PT::Iteration.should_receive(:done).with(@project, :offset=>'-1')
13
+ @release.latest_iteration
14
+ end
15
+
16
+ describe "the latest iteration" do
17
+ before(:each) do
18
+ @release.stub!(:latest_iteration).and_return(@latest_iteration)
19
+ end
20
+
21
+ it "should use the iteration if specified" do
22
+ backlog= PTApiHelpers::mock_object('iterations')
23
+ release= PivotalDoc::Release.new(@project, backlog)
24
+ release.iteration.should eql(backlog)
25
+ end
26
+
27
+ it "should default the iteration to the latest_iteration (last 'done') if one isn't specified" do
28
+ PT::Iteration.should_receive(:done).and_return([@latest_iteration])
29
+ release= PivotalDoc::Release.new(@project)
30
+ release.iteration.should eql(@latest_iteration)
31
+ end
32
+
33
+ describe "release of (me)" do
34
+ before(:each) do
35
+ @stories= PTApiHelpers::mock_stories
36
+ @me= PTApiHelpers::mock_actual_release
37
+ @latest_iteration.stub!(:stories).and_return(@stories)
38
+ end
39
+
40
+ it "should find the \"release\" if there is one" do
41
+ @latest_iteration.should_receive(:stories).and_return(@stories)
42
+ @release.me.story_type.should eql('release')
43
+ end
44
+
45
+ it "should know the name of the release" do
46
+ @release.name.should eql(@me.name)
47
+ end
48
+ end
49
+
50
+ describe "stories" do
51
+ before(:each) do
52
+ @stories= PTApiHelpers::mock_stories
53
+ @latest_iteration.stub!(:stories).and_return(@stories)
54
+ end
55
+
56
+ it "should get the stories only" do
57
+ @latest_iteration.should_receive(:stories).and_return(@stories)
58
+ @release.stories.each{|s| s.story_type.downcase.should eql('feature') }
59
+ end
60
+
61
+ it "should get the bugs only" do
62
+ @latest_iteration.should_receive(:stories).and_return(@stories)
63
+ @release.bugs.each{|b| b.story_type.downcase.should eql('bug') }
64
+ end
65
+
66
+ it "should get the chores only" do
67
+ @latest_iteration.should_receive(:stories).and_return(@stories)
68
+ @release.chores.each{|c| c.story_type.downcase.should eql('chore') }
69
+ end
70
+
71
+ describe "finished work" do
72
+ [:stories, :chores, :bugs].each do |m|
73
+ it "should know the #{m} delivered in this release" do
74
+ @release.send("#{m}_delivered").should eql(@release.send(m).size)
75
+ end
76
+ end
77
+
78
+ it "should only get the \"delivered\" stories" do
79
+ @release.stories.each{|s| s.current_state.downcase.should eql('accepted')}
80
+ end
81
+
82
+ it "should only get the \"delivered\" bugs" do
83
+ @release.bugs.each{|b| b.current_state.downcase.should eql('accepted')}
84
+ end
85
+
86
+ it "should only get the \"accepted\" chores" do
87
+ @release.chores.each{|c| c.current_state.downcase.should eql('accepted')}
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,9 @@
1
+ ENV['mode']= 'test'
2
+
3
+ require File.join(File.dirname(__FILE__), '../lib/pivotal_doc.rb')
4
+ Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f}
5
+
6
+ Spec::Runner.configure do |config|
7
+ config.include MocksHelper
8
+ end
9
+
@@ -0,0 +1,31 @@
1
+ module MocksHelper
2
+ def mocks_helper(mock)
3
+ raise "No mock exists yet for #{mock}!" unless mocks.has_key?(mock)
4
+ return mocks[mock]
5
+ end
6
+
7
+ private
8
+ def release
9
+ release= PivotalDoc::Release.new(project, iteration)
10
+ release.stub!(:stories).and_return(PTApiHelpers::mock_stories)
11
+ release.stub!(:bugs).and_return(PTApiHelpers::mock_bugs)
12
+ release.stub!(:chores).and_return(PTApiHelpers::mock_chores)
13
+ release
14
+ end
15
+
16
+ def project
17
+ return PTApiHelpers::mock_projects.first
18
+ end
19
+
20
+ def iteration
21
+ return PTApiHelpers::mock_iterations.first
22
+ end
23
+
24
+ def mocks
25
+ @@mocks= {
26
+ :release=>release,
27
+ :project=>project,
28
+ :iteration=>iteration
29
+ }
30
+ end
31
+ end
@@ -0,0 +1,42 @@
1
+ module PTApiHelpers
2
+ FIXTURE_PATH= File.join(File.dirname(__FILE__), '/../fixtures/')
3
+
4
+ def self.mock_object(file_name, attrs={})
5
+ collection= mock_collection(file_name)
6
+ collection.first.merge(attrs)
7
+ end
8
+
9
+ def self.mock_collection(file_name)
10
+ fixture= File.new(File.join(FIXTURE_PATH, "#{file_name}.yml"))
11
+ return YAML::load(fixture)
12
+ end
13
+
14
+ def self.mock_stories
15
+ mock_collection('stories').collect{|s| PT::Story.new(s) }
16
+ end
17
+
18
+ def self.mock_iterations
19
+ mock_collection('iterations').collect{|iteration| set_attributes(PT::Iteration.new, iteration) }
20
+ end
21
+
22
+ def self.mock_actual_release
23
+ mock_stories.detect{|s| s.story_type.downcase == 'release' }
24
+ end
25
+
26
+ def self.mock_bugs
27
+ mock_stories.reject{|s| s.story_type.downcase != 'bug' }
28
+ end
29
+
30
+ def self.mock_chores
31
+ mock_stories.reject{|s| s.story_type.downcase != 'chores' }
32
+ end
33
+
34
+ def self.mock_projects
35
+ mock_collection('projects').collect{|project| set_attributes(PT::Project.new, project) }
36
+ end
37
+
38
+ def self.set_attributes(obj, attrs={})
39
+ attrs.each{|k,v| obj.send("#{k}=".to_sym, v)}
40
+ obj
41
+ end
42
+ end
@@ -0,0 +1,74 @@
1
+ !!! Strict
2
+ %html
3
+ %head
4
+ %meta{'http-equiv' => 'Content-Type', :content => 'text/html;charset=utf-8'}
5
+ %title= release.name
6
+ %script{:type => "text/javascript", :src => "../../assets/js/jquery-1.4.2.min.js"}
7
+ %script{:type => "text/javascript", :src => "../../assets/js/jquery-ui-1.8.5.custom.min.js"}
8
+ %link{:rel=>"stylesheet", :href=>"../../assets/css/ui-lightness/jquery-ui-1.8.5.custom.css"}
9
+ %style{:type => "text/css", :media => "screen"}
10
+ :plain
11
+ p,div,h1,h2,h3,h4,h5,h6,span,a {font-family: Arial}
12
+ div#release_doc, div#accordian {padding-left: .5em;}
13
+ h2, h3 {padding: .5em 0;}
14
+ div#release_doc {
15
+ width: 80%;
16
+ margin-left: auto;
17
+ margin-right: auto;
18
+ text-align: left;
19
+ }
20
+ div#release_info{
21
+ text-align: center;
22
+ }
23
+ div#accordian {padding: 0 30px}
24
+ div.item {padding-left: .4em}
25
+ div.item_info {padding-left: .4em}
26
+ :javascript
27
+ $(function() {
28
+ $( "#accordian" ).accordion({ active: false, collapsible: true, autoHeight: false });
29
+ });
30
+ %body
31
+ #release_doc
32
+ #release_info
33
+ %h2= "Announcing the \"#{release.name}\" release for the #{release.project_name} project"
34
+ %p
35
+ = "This sprint began on #{release.iteration.start.fancy_format} and was completed on #{release.iteration.finish.fancy_format}. It includes #{release.stories_delivered} new stories, #{release.bugs_delivered} bug fixes, and #{release.chores_delivered} miscellaneous chores."
36
+ #accordian
37
+ %h3
38
+ %a{:href=>'#'} Accepted Stories
39
+ .accodian_container
40
+ - release.stories.each do |story|
41
+ .item
42
+ %h4= "Story ##{story.id} - #{story.name}"
43
+ .item_info
44
+ %p= "Requestor: #{story.requested_by}"
45
+ %p= "Completed By: #{story.owned_by}"
46
+ %p= "Description: #{story.description}"
47
+ %p
48
+ / %a{:href=>story.url, :target=>'_blank'} More Information
49
+
50
+ %h3
51
+ %a{:href=>'#'} Bug Fixes
52
+ .accodian_container
53
+ - release.bugs.each do |bug|
54
+ .item
55
+ %h4= "Bug ##{bug.id} - #{bug.name}"
56
+ .item_info
57
+ %p= "Requestor: #{bug.requested_by}"
58
+ %p= "Completed By: #{bug.owned_by}"
59
+ %p= "Description: #{bug.description}"
60
+ %p
61
+ / %a{:href=>bug.url, :target=>'_blank'} More Information
62
+
63
+ %h3
64
+ %a{:href=>'#'} Miscellaneous Chores
65
+ .accodian_container
66
+ - release.chores.each do |chore|
67
+ .item
68
+ %h4= "Chore ##{chore.id} - #{chore.name}"
69
+ .item_info
70
+ %p= "Requestor: #{chore.requested_by}"
71
+ %p= "Completed By: #{chore.owned_by}"
72
+ %p= "Description: #{chore.description}"
73
+ %p
74
+ / %a{:href=>chore.url, :target=>'_blank'} More Information
@@ -0,0 +1,53 @@
1
+ !!! Strict
2
+ %html
3
+ %head
4
+ %meta{'http-equiv' => 'Content-Type', :content => 'text/html;charset=utf-8'}
5
+ %title= release.name
6
+ %style{:type => "text/css", :media => "screen"}
7
+ :plain
8
+ p,div,h1,h2,h3,h4,h5,h6,span,a {font-family: Arial}
9
+ div#release_doc {padding-left: .5em;}
10
+ h2, h3 {padding: .5em 0;}
11
+ h3 {text-decoration: underline;}
12
+ div#release_doc {
13
+ width: 80%;
14
+ margin-left: auto;
15
+ margin-right: auto;
16
+ text-align: left;
17
+ }
18
+ div#chores, div#bugs, div#stories{ padding-left: 0.6em }
19
+ div.item {padding-left: .4em}
20
+ div.item_info {padding-left: .4em}
21
+ %body
22
+ #release_doc
23
+ #release_info
24
+ %h2= "Announcing the \"#{release.name}\" release for the #{release.project_name} project"
25
+ %p
26
+ = "This sprint began on #{release.iteration.start.fancy_format} and was completed on #{release.iteration.finish.fancy_format}. It includes #{release.stories_delivered} new stories, #{release.bugs_delivered} bug fixes, and #{release.chores_delivered} miscellaneous chores."
27
+ #stories
28
+ %h3 Accepted Stories
29
+ - release.stories.each do |story|
30
+ .item
31
+ %h4= "Story ##{story.id} - #{story.name}"
32
+ .item_info
33
+ %p= "Requestor: #{story.requested_by}"
34
+ %p= "Completed By: #{story.owned_by}"
35
+ %p= "Description: #{story.description}"
36
+ #bugs
37
+ %h3 Bug Fixes
38
+ - release.bugs.each do |bug|
39
+ .item
40
+ %h4= "Bug ##{bug.id} - #{bug.name}"
41
+ .item_info
42
+ %p= "Requestor: #{bug.requested_by}"
43
+ %p= "Completed By: #{bug.owned_by}"
44
+ %p= "Description: #{bug.description}"
45
+ #chores
46
+ %h3 Miscellaneous Chores
47
+ - release.chores.each do |chore|
48
+ .item
49
+ %h4= "Chore ##{chore.id} - #{chore.name}"
50
+ .item_info
51
+ %p= "Requestor: #{chore.requested_by}"
52
+ %p= "Completed By: #{chore.owned_by}"
53
+ %p= "Description: #{chore.description}"
File without changes
metadata ADDED
@@ -0,0 +1,164 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pivotal_doc
3
+ version: !ruby/object:Gem::Version
4
+ hash: 19
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 1
9
+ - 0
10
+ version: 1.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Tim Linquist
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-10-29 00:00:00 -07:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: pivotal-tracker
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 21
30
+ segments:
31
+ - 0
32
+ - 2
33
+ - 1
34
+ version: 0.2.1
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: haml
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 3
46
+ segments:
47
+ - 0
48
+ version: "0"
49
+ type: :runtime
50
+ version_requirements: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: rspec
53
+ prerelease: false
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ hash: 3
60
+ segments:
61
+ - 0
62
+ version: "0"
63
+ type: :development
64
+ version_requirements: *id003
65
+ description: "\n Automated release notes for apps hosted on pivotaltracker.com. \n Allows release notes to be generated for any project on pivotaltracker.com by retrieving the latest iteration for the specified project and displaying the completed features, bugs, and chores.\n "
66
+ email: tim.linquist@gmail.com
67
+ executables: []
68
+
69
+ extensions: []
70
+
71
+ extra_rdoc_files:
72
+ - README
73
+ files:
74
+ - .gitignore
75
+ - README
76
+ - Rakefile
77
+ - VERSION
78
+ - assets/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
79
+ - assets/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
80
+ - assets/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
81
+ - assets/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
82
+ - assets/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
83
+ - assets/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
84
+ - assets/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
85
+ - assets/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
86
+ - assets/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
87
+ - assets/css/ui-lightness/images/ui-icons_222222_256x240.png
88
+ - assets/css/ui-lightness/images/ui-icons_228ef1_256x240.png
89
+ - assets/css/ui-lightness/images/ui-icons_ef8c08_256x240.png
90
+ - assets/css/ui-lightness/images/ui-icons_ffd27a_256x240.png
91
+ - assets/css/ui-lightness/images/ui-icons_ffffff_256x240.png
92
+ - assets/css/ui-lightness/jquery-ui-1.8.5.custom.css
93
+ - assets/js/jquery-1.4.2.min.js
94
+ - assets/js/jquery-ui-1.8.5.custom.min.js
95
+ - ext/date.rb
96
+ - lib/pivotal_doc.rb
97
+ - lib/pivotal_doc/configuration.rb
98
+ - lib/pivotal_doc/exceptions.rb
99
+ - lib/pivotal_doc/generator.rb
100
+ - lib/pivotal_doc/generators/base.rb
101
+ - lib/pivotal_doc/generators/html.rb
102
+ - lib/pivotal_doc/generators/text.rb
103
+ - lib/pivotal_doc/release.rb
104
+ - pivotal_doc.gemspec
105
+ - spec/fixtures/configs.yml
106
+ - spec/fixtures/iterations.yml
107
+ - spec/fixtures/projects.yml
108
+ - spec/fixtures/stories.yml
109
+ - spec/lib/configuration_spec.rb
110
+ - spec/lib/generator_spec.rb
111
+ - spec/lib/generators/base_spec.rb
112
+ - spec/lib/generators/html_spec.rb
113
+ - spec/lib/generators/text_spec.rb
114
+ - spec/lib/release_spec.rb
115
+ - spec/spec_helper.rb
116
+ - spec/support/mocks_helper.rb
117
+ - spec/support/pt_api_helpers.rb
118
+ - templates/fancy.haml
119
+ - templates/html_gen.haml
120
+ - templates/text_gen.txt
121
+ has_rdoc: true
122
+ homepage: http://github.com/timo3377/pivotal_doc
123
+ licenses: []
124
+
125
+ post_install_message:
126
+ rdoc_options:
127
+ - --charset=UTF-8
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ hash: 3
136
+ segments:
137
+ - 0
138
+ version: "0"
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
140
+ none: false
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ hash: 3
145
+ segments:
146
+ - 0
147
+ version: "0"
148
+ requirements: []
149
+
150
+ rubyforge_project:
151
+ rubygems_version: 1.3.7
152
+ signing_key:
153
+ specification_version: 3
154
+ summary: A release documentation generator for pivotaltracker.com
155
+ test_files:
156
+ - spec/lib/configuration_spec.rb
157
+ - spec/lib/generator_spec.rb
158
+ - spec/lib/generators/base_spec.rb
159
+ - spec/lib/generators/html_spec.rb
160
+ - spec/lib/generators/text_spec.rb
161
+ - spec/lib/release_spec.rb
162
+ - spec/spec_helper.rb
163
+ - spec/support/mocks_helper.rb
164
+ - spec/support/pt_api_helpers.rb