pivotal_doc 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/README +37 -0
- data/Rakefile +49 -0
- data/VERSION +1 -0
- data/assets/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/assets/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/assets/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
- data/assets/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/assets/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/assets/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/assets/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/assets/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/assets/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/assets/css/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
- data/assets/css/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
- data/assets/css/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
- data/assets/css/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
- data/assets/css/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
- data/assets/css/ui-lightness/jquery-ui-1.8.5.custom.css +572 -0
- data/assets/js/jquery-1.4.2.min.js +154 -0
- data/assets/js/jquery-ui-1.8.5.custom.min.js +778 -0
- data/ext/date.rb +9 -0
- data/lib/pivotal_doc/configuration.rb +37 -0
- data/lib/pivotal_doc/exceptions.rb +22 -0
- data/lib/pivotal_doc/generator.rb +30 -0
- data/lib/pivotal_doc/generators/base.rb +52 -0
- data/lib/pivotal_doc/generators/html.rb +14 -0
- data/lib/pivotal_doc/generators/text.rb +12 -0
- data/lib/pivotal_doc/release.rb +50 -0
- data/lib/pivotal_doc.rb +14 -0
- data/pivotal_doc.gemspec +106 -0
- data/spec/fixtures/configs.yml +11 -0
- data/spec/fixtures/iterations.yml +4 -0
- data/spec/fixtures/projects.yml +11 -0
- data/spec/fixtures/stories.yml +87 -0
- data/spec/lib/configuration_spec.rb +88 -0
- data/spec/lib/generator_spec.rb +57 -0
- data/spec/lib/generators/base_spec.rb +64 -0
- data/spec/lib/generators/html_spec.rb +40 -0
- data/spec/lib/generators/text_spec.rb +25 -0
- data/spec/lib/release_spec.rb +92 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/support/mocks_helper.rb +31 -0
- data/spec/support/pt_api_helpers.rb +42 -0
- data/templates/fancy.haml +74 -0
- data/templates/html_gen.haml +53 -0
- data/templates/text_gen.txt +0 -0
- 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
|
data/spec/spec_helper.rb
ADDED
@@ -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
|