Skip to content

Commit

Permalink
standardized on sprint.
Browse files Browse the repository at this point in the history
  • Loading branch information
Tim Linquist committed Mar 1, 2011
1 parent fde80ab commit e5b1008
Show file tree
Hide file tree
Showing 20 changed files with 231 additions and 403 deletions.
3 changes: 0 additions & 3 deletions lib/pivotal_doc.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,10 @@
require File.join('pivotal_doc/generator')

#Core classes
require File.join('pivotal_doc/work')
require File.join('pivotal_doc/release')
require File.join('pivotal_doc/sprint')

#Generators
require File.join('pivotal_doc/generators', 'base')
require File.join('pivotal_doc/generators', 'html')
require File.join('pivotal_doc/generators', 'csv')
require File.join('pivotal_doc/generators', 'sprint')

20 changes: 7 additions & 13 deletions lib/pivotal_doc/generator.rb
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
module PivotalDoc
class Generator
class << self
#TODO: Clean this mutatant up
def generate(format, settings={})
raise FormatNotSupported.new(format) unless generators.has_key?(format)
config= PivotalDoc::Configuration.new(settings)
config.authenticate!
releases= collect_releases!(config)
releases.each do |release|
generator= release.generator(format) if release.respond_to?(:generator)
(generator || generators[format]).new(release, config.settings).render_doc
sprints= collect_sprints!(config)
sprints.each do |sprint|
generators[format].new(sprint, config.settings).render_doc
end
true
end
Expand All @@ -18,17 +16,13 @@ def generators
{ :html=>Generators::HTML, :csv=>Generators::CSV }
end

def collect_releases!(config)
releases= []
def collect_sprints!(config)
sprints= []
config.projects.each do |name, _attrs|
project= PT::Project.find(_attrs['id'].to_i)
if _attrs['current']
releases << Sprint.new(project)
else
releases << Release.new(project)
end
sprints << PivotalDoc::Sprint.new(project, _attrs['current'])
end
return releases
return sprints
end
end
end
Expand Down
6 changes: 3 additions & 3 deletions lib/pivotal_doc/generators/base.rb
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
module PivotalDoc
module Generators
class Base
def initialize(release, options={})
@release= release
def initialize(sprint, options={})
@sprint= sprint
@options= options
end

Expand All @@ -13,7 +13,7 @@ def output_path
def output_file
name= @options['output_file']
unless name
name=@release.name || @release.project_name || self.object_id.to_s
name=@sprint.release_name || @sprint.project_name || self.object_id.to_s
name.gsub!(/\//, '') and name.gsub!(/\s/,'')
end
File.join(output_path, (name + output_ext))
Expand Down
2 changes: 1 addition & 1 deletion lib/pivotal_doc/generators/csv.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ def output_ext; '.csv' end
def render_doc
output = FasterCSV.generate do |csv|
csv << COLUMNS.clone
@release.features.each {|f| csv << fields(f) }
@sprint.features.each {|f| csv << fields(f) }
end
super(output)
end
Expand Down
2 changes: 1 addition & 1 deletion lib/pivotal_doc/generators/html.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ def template_name
end
def output_ext; '.html' end
def render_doc
html= Haml::Engine.new(template).render(Object.new, {:release=>@release})
html= Haml::Engine.new(template).render(Object.new, {:sprint=>@sprint})
super(html)
end
end
Expand Down
18 changes: 0 additions & 18 deletions lib/pivotal_doc/generators/sprint.rb

This file was deleted.

36 changes: 0 additions & 36 deletions lib/pivotal_doc/release.rb

This file was deleted.

62 changes: 50 additions & 12 deletions lib/pivotal_doc/sprint.rb
Original file line number Diff line number Diff line change
@@ -1,24 +1,62 @@
module PivotalDoc
class Sprint
include Work
class Sprint
attr_reader :project, :iteration

def initialize(project, current=false)
@project= project
@current= current
@iteration= (@current) ? current_iteration : latest_iteration
end

def current?
@current
end

attr_reader :project
attr_reader :iteration
def project_name
@project.name
end

def features
self.stories + self.bugs + self.chores
end

def stories
@stories ||= filter_stories
end

def initialize(project)
@project= project
@iteration= PT::Iteration.current(project)
def bugs
@bugs ||= filter_stories('bug')
end

def chores
@chores ||= filter_stories('chore')
end

def release
@release ||= self.iteration.stories.detect{|s| s.story_type.downcase=='release'} if self.iteration.stories
end

def name; nil end

def generator(format=:html)
{:html=>PivotalDoc::Generators::Sprint}[format]
def release_name
release.name if release.respond_to?(:name)
end

def latest_iteration
PT::Iteration.done(@project, :offset=>'-1').first
end

def current_iteration
PT::Iteration.current(@project)
end

[:stories, :bugs, :chores].each do |m|
define_method("#{m}_delivered") { self.send(m).size }
end

private
def filter_stories(type='feature')
self.iteration.stories.reject {|s| s.story_type.downcase != type }
self.iteration.stories.reject do |s|
s.story_type.downcase != type || s.current_state.downcase != 'accepted'
end
end
end
end
19 changes: 0 additions & 19 deletions lib/pivotal_doc/work.rb
Original file line number Diff line number Diff line change
@@ -1,23 +1,4 @@
module PivotalDoc
module Work
def project_name
@project.name
end

def features
self.stories + self.bugs + self.chores
end

def stories
@stories ||= filter_stories
end

def bugs
@bugs ||= filter_stories('bug')
end

def chores
@chores ||= filter_stories('chore')
end
end
end
50 changes: 12 additions & 38 deletions spec/lib/generator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

describe "Configuring" do
before(:each) do
PivotalDoc::Generator.stub!(:collect_releases!).and_return([])
PivotalDoc::Generator.stub!(:collect_sprints!).and_return([])
end
it "should create a config object from the settings" do
settings= {}
Expand All @@ -28,48 +28,28 @@
end
end

describe "releases" do
describe "sprints" do
before(:each) do
@release= mocks_helper(:release)
PivotalDoc::Release.stub!(:new).and_return(@release)
@sprint= mocks_helper(:sprint)
PivotalDoc::Sprint.stub!(:new).and_return(@sprint)
end

it "should create a release for each project" do
it "should create a sprint for each project" do
PT::Iteration.stub!(:current).and_return(mocks_helper(:iteration))
@config.projects.each do |name, settings|
PT::Project.should_receive(:find).with(settings['id'].to_i).and_return(@release.project)
end
releases= PivotalDoc::Generator.collect_releases!(@config)
releases.size.should eql(@config.projects.size)
end

describe "current" do
it "create a current iteration for the release if current is set for the project" do
PT::Project.stub!(:find).and_return(@release.project)
iteration= mocks_helper(:iteration)
PT::Iteration.should_receive(:current).exactly(:once).and_return(iteration)
PivotalDoc::Generator.collect_releases!(@config)
end

it "create a sprint for the current iteration instead of a release" do
PT::Project.stub!(:find).and_return(@release.project)
iteration= mocks_helper(:iteration)
PT::Iteration.stub!(:current).and_return(iteration)
releases= PivotalDoc::Generator.collect_releases!(@config)
releases.last.should be_an_instance_of(PivotalDoc::Sprint)
PT::Project.should_receive(:find).with(settings['id'].to_i).and_return(@sprint.project)
end
sprints= PivotalDoc::Generator.collect_sprints!(@config)
sprints.size.should eql(@config.projects.size)
end
end

describe "generation" do
before(:each) do
@config.stub!(:authenticate!).and_return(true)
@release = mocks_helper(:release)
PT::Iteration.stub!(:current).and_return(mocks_helper(:iteration))
@sprint = PivotalDoc::Sprint.new(@release.project)
PT::Project.stub!(:find).and_return(@release.project)
@sprint = mocks_helper(:sprint)
PT::Project.stub!(:find).and_return(@sprint.project)
PivotalDoc::Sprint.stub!(:new).and_return(@sprint)
PivotalDoc::Release.stub!(:new).and_return(@release)
end

describe "Formattting" do
Expand All @@ -78,15 +58,9 @@
@html_gen= PivotalDoc::Generators::HTML.new({})
@html_gen.stub!(:render_doc)
end
it "use the generators format if there is one" do
sprint_generator= mock('PivotalDoc::Generators::Sprint')
@sprint.generator(:html).should_receive(:new).exactly(:once).with(@sprint, @config.settings).and_return(sprint_generator)
sprint_generator.should_receive(:render_doc)
PivotalDoc::Generator.generate(:html)
end

it "should render the release with the specified format and custom settings" do
@sprint.generator(:html).stub!(:new).and_return(@html_gen)
PivotalDoc::Generators::HTML.should_receive(:new).with(@release, @config.settings).and_return(@html_gen)
PivotalDoc::Generators::HTML.should_receive(:new).with(@sprint, @config.settings).and_return(@html_gen)
PivotalDoc::Generator.generate(:html)
end
it "should raise an error if the specified format isn't supported" do
Expand Down
14 changes: 7 additions & 7 deletions spec/lib/generators/base_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

describe PivotalDoc::Generators::Base do
before(:each) do
@release= mocks_helper(:release)
@base= PivotalDoc::Generators::Base.new(@release)
@sprint= mocks_helper(:sprint)
@base= PivotalDoc::Generators::Base.new(@sprint)
end
it "should raise an exception if the template doesn't exist" do
@base.stub!(:template_name).and_return('non-existent.txt')
Expand All @@ -21,24 +21,24 @@

describe "options" do
it "should be a fully qualified file" do
base= PivotalDoc::Generators::Base.new(@release, {:output_file=>'my_file'})
base= PivotalDoc::Generators::Base.new(@sprint, {:output_file=>'my_file'})
f= File.open(base.output_file, 'w')
f.should be_an_instance_of(File)
File.delete(f.path)
end

it "should use the output_file if present" do
base= PivotalDoc::Generators::Base.new(@release, {'output_file'=>'my_file'})
base= PivotalDoc::Generators::Base.new(@sprint, {'output_file'=>'my_file'})
base.output_file.should =~ /\/my_file/
end

it "should default the output_file to the release's name (unique filename for multiple projects)" do
base= PivotalDoc::Generators::Base.new(@release)
base.output_file.should =~ /\/#{@release.name}/
base= PivotalDoc::Generators::Base.new(@sprint)
base.output_file.should =~ /\/#{@sprint.release_name}/
end

it "should use the output_path if present" do
base= PivotalDoc::Generators::Base.new(@release, {'output_path'=>'my_path'})
base= PivotalDoc::Generators::Base.new(@sprint, {'output_path'=>'my_path'})
base.output_path.should =~ /^my_path/
end

Expand Down
Loading

0 comments on commit e5b1008

Please sign in to comment.