pivotal_doc 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe Date do
4
+ before(:each) do
5
+ @date= Date.parse('1-1-2010')
6
+ end
7
+
8
+ it "have a standard format" do
9
+ @date.standard_format.should eql('01-01-2010')
10
+ end
11
+
12
+ it "have a fancy format" do
13
+ @date.fancy_format.should eql('Jan 01, 2010')
14
+ end
15
+ end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe PivotalDoc::Generator do
4
4
  before(:each) do
@@ -13,29 +13,62 @@ describe PivotalDoc::Generator do
13
13
 
14
14
  describe "Configuring" do
15
15
  before(:each) do
16
- PivotalDoc::Generator.stub!(:collect_releases!)
17
- PivotalDoc::Generator.releases= []
16
+ PivotalDoc::Generator.stub!(:collect_releases!).and_return([])
18
17
  end
19
-
20
18
  it "should create a config object from the settings" do
21
19
  settings= {}
22
- @config.stub!(:authenticate!)
23
20
  PivotalDoc::Configuration.should_receive(:new).with(settings).and_return(@config)
21
+ @config.stub!(:authenticate!)
24
22
  PivotalDoc::Generator.generate(:html, settings)
25
- PivotalDoc::Generator.config.should eql(@config)
26
23
  end
27
24
 
28
25
  it "should authenticate against pivotal before generating the release docs" do
29
26
  @config.should_receive(:authenticate!)
30
27
  PivotalDoc::Generator.generate(:html)
28
+ end
29
+ end
30
+
31
+ describe "releases" do
32
+ before(:each) do
33
+ @release= mocks_helper(:release)
34
+ PivotalDoc::Release.stub!(:new).and_return(@release)
35
+ end
36
+
37
+ it "should create a release for each project" do
38
+ PT::Iteration.stub!(:current).and_return(mocks_helper(:iteration))
39
+ @config.projects.each do |name, settings|
40
+ PT::Project.should_receive(:find).with(settings['id'].to_i).and_return(@release.project)
41
+ end
42
+ releases= PivotalDoc::Generator.collect_releases!(@config)
43
+ releases.size.should eql(@config.projects.size)
44
+ end
45
+
46
+ describe "current" do
47
+ it "create a current iteration for the release if current is set for the project" do
48
+ PT::Project.stub!(:find).and_return(@release.project)
49
+ iteration= mocks_helper(:iteration)
50
+ PT::Iteration.should_receive(:current).exactly(:once).and_return(iteration)
51
+ PivotalDoc::Generator.collect_releases!(@config)
52
+ end
53
+
54
+ it "create a sprint for the current iteration instead of a release" do
55
+ PT::Project.stub!(:find).and_return(@release.project)
56
+ iteration= mocks_helper(:iteration)
57
+ PT::Iteration.stub!(:current).and_return(iteration)
58
+ releases= PivotalDoc::Generator.collect_releases!(@config)
59
+ releases.last.should be_an_instance_of(PivotalDoc::Sprint)
60
+ end
31
61
  end
32
62
  end
33
63
 
34
64
  describe "generation" do
35
65
  before(:each) do
36
66
  @config.stub!(:authenticate!).and_return(true)
37
- @release= mocks_helper(:release)
67
+ @release = mocks_helper(:release)
68
+ PT::Iteration.stub!(:current).and_return(mocks_helper(:iteration))
69
+ @sprint = PivotalDoc::Sprint.new(@release.project)
38
70
  PT::Project.stub!(:find).and_return(@release.project)
71
+ PivotalDoc::Sprint.stub!(:new).and_return(@sprint)
39
72
  PivotalDoc::Release.stub!(:new).and_return(@release)
40
73
  end
41
74
 
@@ -45,7 +78,14 @@ describe PivotalDoc::Generator do
45
78
  @html_gen= PivotalDoc::Generators::HTML.new({})
46
79
  @html_gen.stub!(:render_doc)
47
80
  end
81
+ it "use the generators format if there is one" do
82
+ sprint_generator= mock('PivotalDoc::Generators::Sprint')
83
+ @sprint.generator(:html).should_receive(:new).exactly(:once).with(@sprint, @config.settings).and_return(sprint_generator)
84
+ sprint_generator.should_receive(:render_doc)
85
+ PivotalDoc::Generator.generate(:html)
86
+ end
48
87
  it "should render the release with the specified format and custom settings" do
88
+ @sprint.generator(:html).stub!(:new).and_return(@html_gen)
49
89
  PivotalDoc::Generators::HTML.should_receive(:new).with(@release, @config.settings).and_return(@html_gen)
50
90
  PivotalDoc::Generator.generate(:html)
51
91
  end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe PivotalDoc::Generators::Base do
4
4
  before(:each) do
@@ -0,0 +1,35 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe PivotalDoc::Generators::CSV do
4
+ before(:each) do
5
+ @release= mocks_helper(:release)
6
+ @csv= PivotalDoc::Generators::CSV.new(@release)
7
+ end
8
+
9
+ after(:each) do
10
+ File.delete(@csv.output_file) if File.exists?(@csv.output_file)
11
+ end
12
+
13
+ describe "Generating CSV" do
14
+ it "should open the output file and write the csv with columns" do
15
+ @csv.render_doc
16
+ output= File.read(@csv.output_file)
17
+ output.should =~ /#{PivotalDoc::Generators::CSV::COLUMNS.join(',')}/
18
+ @release.features.each{|f| output =~ @csv.fields(f) }
19
+ end
20
+
21
+ it "should read the file contents" do
22
+ @csv.template.should be_an_instance_of(String)
23
+ end
24
+
25
+ it "should know its template name" do
26
+ @csv.template_name.should =~ /\.csv$/
27
+ end
28
+
29
+ it "include each field" do
30
+ fields= @csv.fields(@release.features.first)
31
+ fields.should be_an_instance_of(Array)
32
+ fields.should have(PivotalDoc::Generators::CSV::COLUMNS.size).items
33
+ end
34
+ end
35
+ end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe PivotalDoc::Generators::HTML do
4
4
  before(:each) do
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe PivotalDoc::Generators::Sprint do
4
+ before(:each) do
5
+ @release= mocks_helper(:release)
6
+ @sprint= PivotalDoc::Generators::Sprint.new(@release)
7
+ @engine= Haml::Engine.new('')
8
+ end
9
+
10
+ after(:each) do
11
+ File.delete(@sprint.output_file) if File.exists?(@sprint.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
+ @sprint.render_doc
18
+ File.read(@sprint.output_file).should eql('compiled haml')
19
+ end
20
+
21
+ it "should read the file contents" do
22
+ @sprint.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.sprint.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
+ @sprint.template_name.should =~ /\.haml$/
33
+ end
34
+
35
+ it "should render the release doc" do
36
+ Haml::Engine.should_receive(:new).with(@sprint.template).and_return(@engine)
37
+ @engine.should_receive(:render)
38
+ @sprint.render_doc
39
+ end
40
+ end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe PivotalDoc::Release do
4
4
  before(:each) do
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+
3
+ describe PivotalDoc::Sprint do
4
+ before(:each) do
5
+ @project= PT::Project.new
6
+ @iteration= PT::Iteration.new
7
+ PT::Iteration.stub!(:current).and_return([@iteration])
8
+ @sprint= PivotalDoc::Sprint.new(@project)
9
+ end
10
+
11
+ it "not have a release name" do
12
+ @sprint.name.should be_nil
13
+ end
14
+
15
+ it "know the html generator" do
16
+ @sprint.generator(:html).should eql(PivotalDoc::Generators::Sprint)
17
+ end
18
+
19
+ it "only know the html generator" do
20
+ @sprint.generator(:unknown).should be_nil
21
+ end
22
+
23
+ describe "stories" do
24
+ before(:each) do
25
+ @stories= PTApiHelpers::mock_stories
26
+ @sprint.iteration.stub!(:stories).and_return(@stories)
27
+ end
28
+
29
+ it "should get the stories only" do
30
+ @sprint.iteration.should_receive(:stories).and_return(@stories)
31
+ @sprint.stories.each{|s| s.story_type.downcase.should eql('feature') }
32
+ end
33
+
34
+ it "should get the bugs only" do
35
+ @sprint.iteration.should_receive(:stories).and_return(@stories)
36
+ @sprint.bugs.each{|b| b.story_type.downcase.should eql('bug') }
37
+ end
38
+
39
+ it "should get the chores only" do
40
+ @sprint.iteration.should_receive(:stories).and_return(@stories)
41
+ @sprint.chores.each{|c| c.story_type.downcase.should eql('chore') }
42
+ end
43
+ end
44
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --color
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,10 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ Bundler.require(:default, :test)
4
+
1
5
  require File.join(File.dirname(__FILE__), '../lib/pivotal_doc.rb')
2
6
  Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f}
3
7
 
4
- Spec::Runner.configure do |config|
8
+ RSpec.configure do |config|
5
9
  config.include MocksHelper
6
10
  end
7
-
File without changes
File without changes
@@ -0,0 +1,48 @@
1
+ !!! Strict
2
+ %html
3
+ %head
4
+ %meta{'http-equiv' => 'Content-Type', :content => 'text/html;charset=utf-8'}
5
+ %title= sprint.iteration.start.fancy_format
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#sprint_doc {padding-left: .5em;}
10
+ h2, h3 {padding: .5em 0;}
11
+ h3 {text-decoration: underline;}
12
+ div#sprint_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
+ #sprint_doc
23
+ #sprint_info
24
+ %h2= "This sprint begins on #{sprint.iteration.start.fancy_format} and ends on #{sprint.iteration.finish.fancy_format}."
25
+ #stories
26
+ %h3 Proposed Stories
27
+ - sprint.stories.each do |story|
28
+ .item
29
+ %h4= "Story ##{story.id} - #{story.name}"
30
+ .item_info
31
+ %p= "Requestor: #{story.requested_by}"
32
+ %p= "Description: #{story.description}"
33
+ #bugs
34
+ %h3 Bug Fixes
35
+ - sprint.bugs.each do |bug|
36
+ .item
37
+ %h4= "Bug ##{bug.id} - #{bug.name}"
38
+ .item_info
39
+ %p= "Requestor: #{bug.requested_by}"
40
+ %p= "Description: #{bug.description}"
41
+ #chores
42
+ %h3 Miscellaneous Chores
43
+ - sprint.chores.each do |chore|
44
+ .item
45
+ %h4= "Chore ##{chore.id} - #{chore.name}"
46
+ .item_info
47
+ %p= "Requestor: #{chore.requested_by}"
48
+ %p= "Description: #{chore.description}"
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pivotal_doc
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
5
- prerelease: false
4
+ hash: 7
5
+ prerelease:
6
6
  segments:
7
7
  - 1
8
- - 3
8
+ - 4
9
9
  - 0
10
- version: 1.3.0
10
+ version: 1.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tim Linquist
@@ -15,28 +15,25 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-29 00:00:00 -07:00
18
+ date: 2011-02-28 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: pivotal-tracker
23
- prerelease: false
22
+ type: :runtime
24
23
  requirement: &id001 !ruby/object:Gem::Requirement
25
24
  none: false
26
25
  requirements:
27
26
  - - ">="
28
27
  - !ruby/object:Gem::Version
29
- hash: 21
28
+ hash: 3
30
29
  segments:
31
30
  - 0
32
- - 2
33
- - 1
34
- version: 0.2.1
35
- type: :runtime
31
+ version: "0"
32
+ name: fastercsv
36
33
  version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: haml
39
34
  prerelease: false
35
+ - !ruby/object:Gem::Dependency
36
+ type: :runtime
40
37
  requirement: &id002 !ruby/object:Gem::Requirement
41
38
  none: false
42
39
  requirements:
@@ -46,12 +43,55 @@ dependencies:
46
43
  segments:
47
44
  - 0
48
45
  version: "0"
49
- type: :runtime
46
+ name: rake
50
47
  version_requirements: *id002
48
+ prerelease: false
51
49
  - !ruby/object:Gem::Dependency
50
+ type: :development
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ name: jeweler
61
+ version_requirements: *id003
62
+ prerelease: false
63
+ - !ruby/object:Gem::Dependency
64
+ type: :development
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ~>
69
+ - !ruby/object:Gem::Version
70
+ hash: 3
71
+ segments:
72
+ - 2
73
+ - 0
74
+ version: "2.0"
52
75
  name: rspec
76
+ version_requirements: *id004
53
77
  prerelease: false
54
- requirement: &id003 !ruby/object:Gem::Requirement
78
+ - !ruby/object:Gem::Dependency
79
+ type: :development
80
+ requirement: &id005 !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ hash: 3
86
+ segments:
87
+ - 0
88
+ version: "0"
89
+ name: pivotal-tracker
90
+ version_requirements: *id005
91
+ prerelease: false
92
+ - !ruby/object:Gem::Dependency
93
+ type: :development
94
+ requirement: &id006 !ruby/object:Gem::Requirement
55
95
  none: false
56
96
  requirements:
57
97
  - - ">="
@@ -60,8 +100,83 @@ dependencies:
60
100
  segments:
61
101
  - 0
62
102
  version: "0"
103
+ name: haml
104
+ version_requirements: *id006
105
+ prerelease: false
106
+ - !ruby/object:Gem::Dependency
63
107
  type: :development
64
- version_requirements: *id003
108
+ requirement: &id007 !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - "="
112
+ - !ruby/object:Gem::Version
113
+ hash: 31
114
+ segments:
115
+ - 1
116
+ - 3
117
+ - 2
118
+ version: 1.3.2
119
+ name: factory_girl
120
+ version_requirements: *id007
121
+ prerelease: false
122
+ - !ruby/object:Gem::Dependency
123
+ type: :development
124
+ requirement: &id008 !ruby/object:Gem::Requirement
125
+ none: false
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ hash: 3
130
+ segments:
131
+ - 0
132
+ version: "0"
133
+ name: ruby-debug
134
+ version_requirements: *id008
135
+ prerelease: false
136
+ - !ruby/object:Gem::Dependency
137
+ type: :runtime
138
+ requirement: &id009 !ruby/object:Gem::Requirement
139
+ none: false
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ hash: 21
144
+ segments:
145
+ - 0
146
+ - 2
147
+ - 1
148
+ version: 0.2.1
149
+ name: pivotal-tracker
150
+ version_requirements: *id009
151
+ prerelease: false
152
+ - !ruby/object:Gem::Dependency
153
+ type: :runtime
154
+ requirement: &id010 !ruby/object:Gem::Requirement
155
+ none: false
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ hash: 3
160
+ segments:
161
+ - 0
162
+ version: "0"
163
+ name: haml
164
+ version_requirements: *id010
165
+ prerelease: false
166
+ - !ruby/object:Gem::Dependency
167
+ type: :development
168
+ requirement: &id011 !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ hash: 3
174
+ segments:
175
+ - 0
176
+ version: "0"
177
+ name: rspec
178
+ version_requirements: *id011
179
+ prerelease: false
65
180
  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
181
  email: tim.linquist@gmail.com
67
182
  executables: []
@@ -72,6 +187,9 @@ extra_rdoc_files:
72
187
  - README
73
188
  files:
74
189
  - .gitignore
190
+ - .rvmrc
191
+ - Gemfile
192
+ - Gemfile.lock
75
193
  - README
76
194
  - Rakefile
77
195
  - VERSION
@@ -92,39 +210,47 @@ files:
92
210
  - assets/css/ui-lightness/jquery-ui-1.8.5.custom.css
93
211
  - assets/js/jquery-1.4.2.min.js
94
212
  - assets/js/jquery-ui-1.8.5.custom.min.js
95
- - ext/date.rb
96
213
  - lib/pivotal_doc.rb
97
214
  - lib/pivotal_doc/configuration.rb
98
215
  - lib/pivotal_doc/exceptions.rb
216
+ - lib/pivotal_doc/ext/date.rb
99
217
  - lib/pivotal_doc/generator.rb
100
218
  - lib/pivotal_doc/generators/base.rb
219
+ - lib/pivotal_doc/generators/csv.rb
101
220
  - lib/pivotal_doc/generators/html.rb
102
- - lib/pivotal_doc/generators/text.rb
221
+ - lib/pivotal_doc/generators/sprint.rb
103
222
  - lib/pivotal_doc/release.rb
223
+ - lib/pivotal_doc/sprint.rb
224
+ - lib/pivotal_doc/work.rb
104
225
  - pivotal_doc.gemspec
105
226
  - spec/fixtures/configs.yml
106
227
  - spec/fixtures/iterations.yml
107
228
  - spec/fixtures/projects.yml
108
229
  - spec/fixtures/stories.yml
109
230
  - spec/lib/configuration_spec.rb
231
+ - spec/lib/ext/date_spec.rb
110
232
  - spec/lib/generator_spec.rb
111
233
  - spec/lib/generators/base_spec.rb
234
+ - spec/lib/generators/csv_spec.rb
112
235
  - spec/lib/generators/html_spec.rb
113
- - spec/lib/generators/text_spec.rb
236
+ - spec/lib/generators/sprint_spec.rb
114
237
  - spec/lib/release_spec.rb
238
+ - spec/lib/sprint_spec.rb
239
+ - spec/spec.opts
115
240
  - spec/spec_helper.rb
116
241
  - spec/support/mocks_helper.rb
117
242
  - spec/support/pt_api_helpers.rb
118
243
  - templates/fancy.haml
119
- - templates/html_gen.haml
120
- - templates/text_gen.txt
244
+ - templates/output.csv
245
+ - templates/output.haml
246
+ - templates/sprint.haml
121
247
  has_rdoc: true
122
248
  homepage: http://github.com/timo3377/pivotal_doc
123
249
  licenses: []
124
250
 
125
251
  post_install_message:
126
- rdoc_options:
127
- - --charset=UTF-8
252
+ rdoc_options: []
253
+
128
254
  require_paths:
129
255
  - lib
130
256
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -148,17 +274,20 @@ required_rubygems_version: !ruby/object:Gem::Requirement
148
274
  requirements: []
149
275
 
150
276
  rubyforge_project:
151
- rubygems_version: 1.3.7
277
+ rubygems_version: 1.5.3
152
278
  signing_key:
153
279
  specification_version: 3
154
280
  summary: A release documentation generator for pivotaltracker.com
155
281
  test_files:
156
282
  - spec/lib/configuration_spec.rb
283
+ - spec/lib/ext/date_spec.rb
157
284
  - spec/lib/generator_spec.rb
158
285
  - spec/lib/generators/base_spec.rb
286
+ - spec/lib/generators/csv_spec.rb
159
287
  - spec/lib/generators/html_spec.rb
160
- - spec/lib/generators/text_spec.rb
288
+ - spec/lib/generators/sprint_spec.rb
161
289
  - spec/lib/release_spec.rb
290
+ - spec/lib/sprint_spec.rb
162
291
  - spec/spec_helper.rb
163
292
  - spec/support/mocks_helper.rb
164
293
  - spec/support/pt_api_helpers.rb
@@ -1,12 +0,0 @@
1
- module PivotalDoc
2
- module Generators
3
- class Text < Base
4
- def template_name; 'text_gen.txt' end
5
- def output_ext; '.txt' end
6
- def output; '' end
7
- def render_doc
8
- super(output)
9
- end
10
- end
11
- end
12
- end
@@ -1,25 +0,0 @@
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