Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge remote-tracking branch 'upstream/master'

  • Loading branch information...
commit 5f395be25ec199fded8c22011d1b8f97aa30a9dc 2 parents a61d650 + 62c44f0
@sbleon authored
Showing with 3,193 additions and 1,683 deletions.
  1. +4 −1 .gitignore
  2. +1 −0  .rspec
  3. +5 −0 .travis.yml
  4. +7 −6 Gemfile
  5. +57 −0 Gemfile.lock
  6. +1 −1  LICENSE
  7. +32 −15 README.rdoc
  8. +18 −18 Rakefile
  9. +1 −1  VERSION
  10. +14 −14 lib/pivotal-tracker.rb
  11. +1 −1  lib/pivotal-tracker/activity.rb
  12. +16 −0 lib/pivotal-tracker/attachment.rb
  13. +55 −8 lib/pivotal-tracker/client.rb
  14. +7 −1 lib/pivotal-tracker/iteration.rb
  15. +48 −1 lib/pivotal-tracker/project.rb
  16. +8 −9 lib/pivotal-tracker/proxy.rb
  17. +64 −8 lib/pivotal-tracker/story.rb
  18. +24 −1 lib/pivotal-tracker/task.rb
  19. +69 −0 lib/pivotal-tracker/validation.rb
  20. +104 −76 pivotal-tracker.gemspec
  21. +107 −148 spec/fixtures/activity.xml
  22. +279 −0 spec/fixtures/bugs.xml
  23. +6 −6 spec/fixtures/created_note.xml
  24. +6 −6 spec/fixtures/created_story.xml
  25. +293 −0 spec/fixtures/features.xml
  26. +197 −46 spec/fixtures/iterations_all.xml
  27. +139 −67 spec/fixtures/iterations_backlog.xml
  28. +18 −62 spec/fixtures/iterations_current.xml
  29. +211 −0 spec/fixtures/iterations_current_backlog.xml
  30. +21 −29 spec/fixtures/iterations_done.xml
  31. +25 −12 spec/fixtures/memberships.xml
  32. +26 −10 spec/fixtures/notes.xml
  33. +28 −17 spec/fixtures/project.xml
  34. +85 −89 spec/fixtures/project_activity.xml
  35. +41 −632 spec/fixtures/projects.xml
  36. +93 −26 spec/fixtures/stale_fish.yml
  37. +197 −131 spec/fixtures/stories.xml
  38. +37 −0 spec/fixtures/story-4459994.xml
  39. +46 −0 spec/fixtures/story-4460038.xml
  40. +32 −0 spec/fixtures/story-4460598.xml
  41. +48 −0 spec/fixtures/story-4473735.xml
  42. +6 −6 spec/fixtures/tasks.xml
  43. +8 −0 spec/fixtures/update_tasks.xml
  44. +32 −0 spec/pivotal-tracker/activity_spec.rb
  45. +62 −0 spec/pivotal-tracker/attachment_spec.rb
  46. +148 −0 spec/pivotal-tracker/client_spec.rb
  47. +25 −1 spec/{unit → }/pivotal-tracker/iteration_spec.rb
  48. +3 −3 spec/{unit → }/pivotal-tracker/membership_spec.rb
  49. +13 −13 spec/{unit → }/pivotal-tracker/note_spec.rb
  50. +98 −0 spec/pivotal-tracker/project_spec.rb
  51. +247 −0 spec/pivotal-tracker/story_spec.rb
  52. +33 −0 spec/pivotal-tracker/task_spec.rb
  53. +26 −9 spec/spec_helper.rb
  54. +21 −13 spec/support/stale_fish_fixtures.rb
  55. +0 −23 spec/unit/pivotal-tracker/activity_spec.rb
  56. +0 −47 spec/unit/pivotal-tracker/project_spec.rb
  57. +0 −105 spec/unit/pivotal-tracker/story_spec.rb
  58. +0 −21 spec/unit/pivotal-tracker/task_spec.rb
View
5 .gitignore
@@ -3,5 +3,8 @@
coverage
rdoc
pkg
-
+vendor
.bundle
+.idea
+request_test.rb
+stale_fish-tmp.yml
View
1  .rspec
@@ -0,0 +1 @@
+--colour
View
5 .travis.yml
@@ -0,0 +1,5 @@
+language: ruby
+rvm:
+ - 1.8.7
+ - 1.9.2
+ - 1.9.3
View
13 Gemfile
@@ -1,16 +1,17 @@
source 'http://rubygems.org'
group :runtime do
- gem 'rest-client', '~> 1.5.1'
- gem 'happymapper', '>= 0.2.4'
+ gem 'rest-client', '~> 1.6.0'
+ gem 'nokogiri-happymapper', '>= 0.5.4', :require => 'happymapper'
gem 'builder'
- gem 'nokogiri', '~> 1.4.1'
+ gem 'nokogiri', '>= 1.5.5'
+ gem 'crack'
end
group :test do
- gem 'rspec', :require => 'spec'
+ gem 'rspec'
gem 'rake'
- gem 'bundler', '~> 0.9.5'
gem 'jeweler'
- gem 'stale_fish', '~> 1.3.0'
+ gem 'stale_fish', '~> 1.3.2'
+ gem 'autotest'
end
View
57 Gemfile.lock
@@ -0,0 +1,57 @@
+GEM
+ remote: http://rubygems.org/
+ specs:
+ ZenTest (4.8.2)
+ activesupport (3.2.9)
+ i18n (~> 0.6)
+ multi_json (~> 1.0)
+ autotest (4.4.6)
+ ZenTest (>= 4.4.1)
+ builder (3.1.4)
+ crack (0.3.1)
+ diff-lcs (1.1.3)
+ fakeweb (1.3.0)
+ git (1.2.5)
+ i18n (0.6.1)
+ jeweler (1.8.4)
+ bundler (~> 1.0)
+ git (>= 1.2.5)
+ rake
+ rdoc
+ json (1.7.5)
+ mime-types (1.19)
+ multi_json (1.3.7)
+ nokogiri (1.5.5)
+ nokogiri-happymapper (0.5.6)
+ nokogiri (~> 1.5)
+ rake (10.0.2)
+ rdoc (3.12)
+ json (~> 1.4)
+ rest-client (1.6.7)
+ mime-types (>= 1.16)
+ rspec (2.12.0)
+ rspec-core (~> 2.12.0)
+ rspec-expectations (~> 2.12.0)
+ rspec-mocks (~> 2.12.0)
+ rspec-core (2.12.0)
+ rspec-expectations (2.12.0)
+ diff-lcs (~> 1.1.3)
+ rspec-mocks (2.12.0)
+ stale_fish (1.3.2)
+ activesupport
+ fakeweb
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ autotest
+ builder
+ crack
+ jeweler
+ nokogiri (>= 1.5.5)
+ nokogiri-happymapper (>= 0.5.4)
+ rake
+ rest-client (~> 1.6.0)
+ rspec
+ stale_fish (~> 1.3.2)
View
2  LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2009 Justin Smestad, Josh Nichols
+Copyright (c) 2009 Justin Smestad
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
View
47 README.rdoc
@@ -2,9 +2,8 @@
Ruby wrapper for Pivotal Tracker API, no frameworks required. Simply Ruby.
-== Note
-
-Version 0.0.8 and above are incompatible with previous versions.
+{<img src="https://secure.travis-ci.org/jsmestad/pivotal-tracker.png" />}[http://travis-ci.org/jsmestad/pivotal-tracker]
+{<img src="https://badge.fury.io/rb/pivotal-tracker.png" alt="Gem Version" />}[http://rubygems.org/gems/pivotal-tracker]
== Features
@@ -16,27 +15,42 @@ Version 0.0.8 and above are incompatible with previous versions.
PivotalTracker::Client.token('myusername@email.com', 'secretpassword') # Automatically fetch API Token
PivotalTracker::Client.token = 'jkfduisj97823974j2kl24899234' # Manually set API Token
-
+
@projects = PivotalTracker::Project.all # return all projects
@a_project = PivotalTracker::Project.find(84739) # find project with a given ID
-
+
@a_project.stories.all # return all stories for "a_project"
@a_project.stories.all(:label => 'overdue', :story_type => ['bug', 'chore']) # return all stories that match the passed filters
@a_project.stories.find(847762630) # find story with a given ID
-
+
@a_project.stories.create(:name => 'My Story', :story_type => 'feature') # create a story for this project
+ # all tracker defined filters are allowed, as well as :limit & :offset for pagination
+
+ # The below pattern below is planned to be added to the final release:
+
+ @a_project.stories << PivotalTracker::Story.new(84739, :name => 'Ur Story') # same as earlier story creation, useful for copying/cloning from proj
+
+
@story = @a_project.stories.find(847762630)
@story.notes.all # return all notes (comments) for a story
- @story.notes.create(:text => 'A new coment', :noted_at => '06/29/2010 05:00 EST') # add a new story
-
+ @story.notes.create(:text => 'A new comment', :noted_at => '06/29/2010 05:00 EST') # add a new note
- # all tracker defined filters are allowed, as well as :limit & :offset for pagination
- # The below are planned to be added to the final release:
+ @story.attachments # return an array of all attachment items (data only, not the files)
+ @story.upload_attachment(file_path) # add a file attachment to @story that can be found at file_path
+
- @a_project.stories << PivotalTracker::Story.new(84739, :name => 'Ur Story') # same as above, useful for copying/cloning from proj
+ # All 4 examples below return a PivotalTracker::Story from the new project, with the same story ID
+ @story.move_to_project(123456) # move @story to the project with ID 123456
+ @story.move_to_project('123456') # same as above
+ @story.move_to_project(@project) # move @story to @project
+ @story.move_to_project(@another_story) # move @story into the same project as @another_story
+
+
+ # Connect to custom API endpoint
+ PivotalTracker::Client.tracker_host = 'www.my-pivotal-tracker.com'
The API is based on the following this gist: http://gist.github.com/283120
@@ -52,14 +66,17 @@ The API is based on the following this gist: http://gist.github.com/283120
$ cd pivotal-tracker
$ bundle install
$ bundle exec rake
-
+
== Additional Information
-Wiki: http://wiki.github.com/jsmestad/pivotal-tracker
-Documentation: http://rdoc.info/projects/jsmestad/pivotal-tracker
+* Wiki: http://wiki.github.com/jsmestad/pivotal-tracker
+* Documentation: http://rdoc.info/projects/jsmestad/pivotal-tracker
+* Pivotal API v3 Docs: http://www.pivotaltracker.com/help/api?version=v3
-== Contributers
+== Contributors along the way
* Justin Smestad (http://github.com/jsmestad)
* Josh Nichols (http://github.com/technicalpickles)
* Terence Lee (http://github.com/hone)
+* Jon Mischo (http://github.com/supertaz)
+* Gabor Ratky (http://github.com/rgabo)
View
36 Rakefile
@@ -1,5 +1,9 @@
-require 'rake'
-require 'bundler'
+#!/usr/bin/env rake
+begin
+ require 'bundler/setup'
+rescue LoadError
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
+end
begin
require 'jeweler'
@@ -10,28 +14,24 @@ begin
gem.homepage = "http://github.com/jsmestad/pivotal-tracker"
gem.authors = ["Justin Smestad", "Josh Nichols", "Terence Lee"]
- bundle = Bundler::Definition.from_gemfile('Gemfile')
- bundle.dependencies.each do |dep|
- next unless dep.groups.include?(:runtime)
- gem.add_dependency(dep.name, dep.requirement.to_s)
- end
+ gem.add_dependency 'rest-client', '~> 1.6.0'
+ gem.add_dependency 'happymapper', '>= 0.3.2'
+ gem.add_dependency 'builder'
+ gem.add_dependency 'nokogiri', '>= 1.4.3'
+
+ gem.add_development_dependency 'rspec'
+ gem.add_development_dependency 'bundler', '~> 1.0.12'
+ gem.add_development_dependency 'jeweler'
+ gem.add_development_dependency 'stale_fish', '~> 1.3.0'
end
Jeweler::GemcutterTasks.new
rescue LoadError
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
end
-require 'spec/rake/spectask'
-Spec::Rake::SpecTask.new(:spec) do |spec|
- spec.libs << 'lib' << 'spec'
- spec.spec_files = FileList['spec/**/*_spec.rb']
-end
-
-Spec::Rake::SpecTask.new(:rcov) do |spec|
- spec.libs << 'lib' << 'spec'
- spec.pattern = 'spec/**/*_spec.rb'
- spec.rcov = true
-end
+require 'rspec/core'
+require 'rspec/core/rake_task'
+RSpec::Core::RakeTask.new(:spec)
task :default => :spec
View
2  VERSION
@@ -1 +1 @@
-0.2.0
+0.5.11
View
28 lib/pivotal-tracker.rb
@@ -4,10 +4,12 @@
require 'nokogiri'
+require File.join(File.dirname(__FILE__), 'pivotal-tracker', 'validation')
require File.join(File.dirname(__FILE__), 'pivotal-tracker', 'extensions')
require File.join(File.dirname(__FILE__), 'pivotal-tracker', 'proxy')
require File.join(File.dirname(__FILE__), 'pivotal-tracker', 'client')
require File.join(File.dirname(__FILE__), 'pivotal-tracker', 'project')
+require File.join(File.dirname(__FILE__), 'pivotal-tracker', 'attachment')
require File.join(File.dirname(__FILE__), 'pivotal-tracker', 'story')
require File.join(File.dirname(__FILE__), 'pivotal-tracker', 'task')
require File.join(File.dirname(__FILE__), 'pivotal-tracker', 'membership')
@@ -21,20 +23,18 @@ module PivotalTracker
class ProjectNotSpecified < StandardError; end
def self.encode_options(options)
- return nil if !options.is_a?(Hash) || options.empty?
-
- options_string = []
- options_string << "limit=#{options.delete(:limit)}" if options[:limit]
- options_string << "offset=#{options.delete(:offset)}" if options[:offset]
-
- filters = []
- options.each do |key, value|
- values = value.is_a?(Array) ? value.map {|x| CGI.escape(x) }.join(',') : CGI.escape(value)
- filters << "#{key}%3A#{values}" # %3A => :
- end
- options_string << "filter=#{filters.join('%20')}" unless filters.empty? # %20 => &amp;
-
- return "?#{options_string.join('&')}"
+ options_strings = options.inject({}) do |m, (k,v)|
+ if [:limit, :offset].include?(k.to_sym)
+ m.update k => v
+ elsif k.to_sym == :search
+ m.update :filter => v
+ else
+ filter_query = %{#{k}:#{[v].flatten.join(",")}}
+ m.update :filter => (m[:filter] ? "#{m[:filter]} #{filter_query}" : filter_query)
+ end
+ end.map {|k,v| "#{k}=#{CGI.escape(v.to_s)}"}
+
+ %{?#{options_strings.join("&")}} unless options_strings.empty?
end
end
View
2  lib/pivotal-tracker/activity.rb
@@ -23,7 +23,7 @@ def encode_options(options)
if options[:occurred_since]
options_string << "occurred_since_date=\"#{options[:occurred_since].utc}\""
elsif options[:occurred_since_date]
- options_string << "occurred_since_date=\"#{options[:occurred_since_date]}\""
+ options_string << "occurred_since_date=#{URI.escape options[:occurred_since_date].strftime("%Y/%m/%d %H:%M:%S %Z")}"
end
return "?#{options_string.join('&')}"
View
16 lib/pivotal-tracker/attachment.rb
@@ -0,0 +1,16 @@
+module PivotalTracker
+ class Attachment
+ include HappyMapper
+
+ tag 'attachment'
+
+ element :id, Integer
+ element :filename, String
+ element :description, String
+ element :uploaded_by, String
+ element :uploaded_at, DateTime
+ element :url, String
+ element :status, String
+
+ end
+end
View
63 lib/pivotal-tracker/client.rb
@@ -1,8 +1,11 @@
module PivotalTracker
+
class Client
+ class NoToken < StandardError; end
+
class << self
- attr_writer :use_ssl, :token
+ attr_writer :use_ssl, :token, :tracker_host
def use_ssl
@use_ssl || false
@@ -10,25 +13,69 @@ def use_ssl
def token(username, password, method='post')
response = if method == 'post'
- RestClient.post 'https://www.pivotaltracker.com/services/v3/tokens/active', :username => username, :password => password
+ RestClient.post api_ssl_url + '/tokens/active', :username => username, :password => password
else
- RestClient.get "https://#{username}:#{password}@www.pivotaltracker.com/services/v3/tokens/active"
+ RestClient.get "#{api_ssl_url(username, password)}/tokens/active"
end
- @token ||= Nokogiri::XML(response.body).search('guid').inner_html
+ @token= Nokogiri::XML(response.body).search('guid').inner_html
end
# this is your connection for the entire module
def connection(options={})
- @connection ||= RestClient::Resource.new("#{protocol}://www.pivotaltracker.com/services/v3", :headers => {'X-TrackerToken' => @token, 'Content-Type' => 'application/xml'})
+ raise NoToken if @token.to_s.empty?
+
+ @connections ||= {}
+
+ cached_connection? && !protocol_changed? ? cached_connection : new_connection
+ end
+
+ def clear_connections
+ @connections = nil
+ end
+
+ def tracker_host
+ @tracker_host ||= "www.pivotaltracker.com"
+ end
+
+ def api_ssl_url(user=nil, password=nil)
+ user_password = (user && password) ? "#{user}:#{password}@" : ''
+ "https://#{user_password}#{tracker_host}#{api_path}"
+ end
+
+ def api_url
+ "http://#{tracker_host}#{api_path}"
end
protected
-
+
def protocol
use_ssl ? 'https' : 'http'
end
-
+
+ def cached_connection?
+ !@connections[@token].nil?
+ end
+
+ def cached_connection
+ @connections[@token]
+ end
+
+ def new_connection
+ @connections[@token] = RestClient::Resource.new("#{use_ssl ? api_ssl_url : api_url}", :headers => {'X-TrackerToken' => @token, 'Content-Type' => 'application/xml'})
+ end
+
+ def protocol_changed?
+ cached_connection? ? (cached_connection_protocol != protocol) : false
+ end
+
+ def cached_connection_protocol
+ cached_connection.url.match(/^(.*):\/\//).captures.first
+ end
+
+ def api_path
+ '/services/v3'
+ end
end
-
+
end
end
View
8 lib/pivotal-tracker/iteration.rb
@@ -22,12 +22,18 @@ def backlog(project, options={})
params = PivotalTracker.encode_options(options)
parse(Client.connection["/projects/#{project.id}/iterations/backlog#{params}"].get)
end
+
+ def current_backlog(project, options={})
+ params = PivotalTracker.encode_options(options)
+ parse(Client.connection["/projects/#{project.id}/iterations/current_backlog#{params}"].get)
+ end
end
-
+
element :id, Integer
element :number, Integer
element :start, DateTime
element :finish, DateTime
+ element :team_strength, Float
has_many :stories, Story
end
View
49 lib/pivotal-tracker/project.rb
@@ -18,14 +18,28 @@ def find(id)
element :id, Integer
element :name, String
+ element :account, String
element :week_start_day, String
element :point_scale, String
- element :week_start_day, String
+ element :labels, String
element :velocity_scheme, String
element :iteration_length, Integer
element :initial_velocity, Integer
element :current_velocity, Integer
element :last_activity_at, DateTime
+ element :use_https, Boolean
+ element :first_iteration_start_time, DateTime
+ element :current_iteration_number, Integer
+
+ def initialize(attributes={})
+ update_attributes(attributes)
+ end
+
+ def create
+ response = Client.connection["/projects"].post(self.to_xml, :content_type => 'application/xml')
+ project = Project.parse(response)
+ return project
+ end
def activities
@activities ||= Proxy.new(self, Activity)
@@ -43,5 +57,38 @@ def memberships
@memberships ||= Proxy.new(self, Membership)
end
+ def iteration(group)
+ case group.to_sym
+ when :done then Iteration.done(self)
+ when :current then Iteration.current(self)
+ when :backlog then Iteration.backlog(self)
+ when :current_backlog then Iteration.current_backlog(self)
+ else
+ raise ArgumentError, "Invalid group. Use :done, :current, :backlog or :current_backlog instead."
+ end
+ end
+
+ protected
+
+ def to_xml
+ builder = Nokogiri::XML::Builder.new do |xml|
+ xml.project {
+ xml.name "#{name}"
+ xml.iteration_length.integer "#{iteration_length}" unless iteration_length.nil?
+ xml.point_scale "#{point_scale}" unless point_scale.nil?
+ }
+ end
+ return builder.to_xml
+ end
+
+ def update_attributes(attrs)
+ attrs.each do |key, value|
+ self.send("#{key}=", value.is_a?(Array) ? value.join(',') : value )
+ end
+ end
+
+ end
+ class Project
+ include Validation
end
end
View
17 lib/pivotal-tracker/proxy.rb
@@ -8,7 +8,7 @@ class Proxy < BasicObject
def initialize(owner, target)
@owner = owner
@target = target
- @opts = nil
+ @opts = {}
end
def all(options={})
@@ -17,6 +17,7 @@ def all(options={})
def find(param, options={})
return all(options) if param == :all
+ return @target.find(param, @owner.id) if @target.respond_to?("find")
return proxy_found(options).detect { |document| document.id == param }
end
@@ -30,7 +31,7 @@ def <<(*objects)
end
end
- def create(args)
+ def create(args = {})
object = @target.new(args.merge({:owner => @owner}))
if obj = object.create
return obj
@@ -42,12 +43,11 @@ def create(args)
protected
def proxy_found(options)
- # Check to see if options have changed
- if @opts == options
- @found ||= load_found(options)
- else
- load_found(options)
+ if @found.nil? or @opts != options
+ @opts = options
+ @found = load_found()
end
+ @found
end
private
@@ -56,8 +56,7 @@ def method_missing(method, *args, &block)
@target.send(method, *args, &block)
end
- def load_found(options)
- @opts = options
+ def load_found()
@target.all(@owner, @opts)
end
View
72 lib/pivotal-tracker/story.rb
@@ -9,14 +9,25 @@ def all(project, options={})
stories.each { |s| s.project_id = project.id }
return stories
end
+
+ def find(param, project_id)
+ begin
+ story = parse(Client.connection["/projects/#{project_id}/stories/#{param}"].get)
+ story.project_id = project_id
+ rescue RestClient::ExceptionWithResponse
+ story = nil
+ end
+ return story
+ end
end
- attr_accessor :project_id
+ tag "story"
element :id, Integer
- element :url, String
+ element :url, String
element :created_at, DateTime
element :accepted_at, DateTime
+ element :project_id, Integer
element :name, String
element :description, String
@@ -28,11 +39,16 @@ def all(project, options={})
element :labels, String
element :jira_id, Integer
element :jira_url, String
- element :other_id, Integer
+ element :other_id, String
+ element :integration_id, Integer
+ element :deadline, DateTime # Only available for Release stories
- def initialize(attributes={})
- self.project_id = attributes.delete(:owner).id if attributes[:owner]
+ has_many :attachments, Attachment, :tag => 'attachments', :xpath => '//attachments'
+ def initialize(attributes={})
+ if attributes[:owner]
+ self.project_id = attributes.delete(:owner).id
+ end
update_attributes(attributes)
end
@@ -49,6 +65,11 @@ def update(attrs={})
response = Client.connection["/projects/#{project_id}/stories/#{id}"].put(self.to_xml, :content_type => 'application/xml')
return Story.parse(response)
end
+
+ def move(position, story)
+ raise ArgumentError, "Can only move :before or :after" unless [:before, :after].include? position
+ Story.parse(Client.connection["/projects/#{project_id}/stories/#{id}/moves?move\[move\]=#{position}&move\[target\]=#{story.id}"].post(''))
+ end
def delete
Client.connection["/projects/#{project_id}/stories/#{id}"].delete
@@ -62,8 +83,34 @@ def tasks
@tasks ||= Proxy.new(self, Task)
end
- def project=(proj_id)
- self.project_id = proj_id
+ def upload_attachment(filename)
+ Attachment.parse(Client.connection["/projects/#{project_id}/stories/#{id}/attachments"].post(:Filedata => File.new(filename)))
+ end
+
+ def move_to_project(new_project)
+ move = true
+ old_project_id = self.project_id
+ target_project = -1
+ case new_project.class.to_s
+ when 'PivotalTracker::Story'
+ target_project = new_project.project_id
+ when 'PivotalTracker::Project'
+ target_project = new_project.id
+ when 'String'
+ target_project = new_project.to_i
+ when 'Fixnum', 'Integer'
+ target_project = new_project
+ else
+ move = false
+ end
+ if move
+ move_builder = Nokogiri::XML::Builder.new do |story|
+ story.story {
+ story.project_id "#{target_project}"
+ }
+ end
+ Story.parse(Client.connection["/projects/#{old_project_id}/stories/#{id}"].put(move_builder.to_xml, :content_type => 'application/xml'))
+ end
end
protected
@@ -79,10 +126,15 @@ def to_xml
xml.requested_by "#{requested_by}"
xml.owned_by "#{owned_by}"
xml.labels "#{labels}"
+ xml.project_id "#{project_id}"
# See spec
# xml.jira_id "#{jira_id}"
# xml.jira_url "#{jira_url}"
- xml.other_id "#{other_id}"
+ xml.other_id "#{other_id}" if other_id
+ xml.integration_id "#{integration_id}" if integration_id
+ xml.created_at DateTime.parse(created_at.to_s).to_s if created_at
+ xml.accepted_at DateTime.parse(accepted_at.to_s).to_s if accepted_at
+ xml.deadline DateTime.parse(deadline.to_s).to_s if deadline
}
end
return builder.to_xml
@@ -94,4 +146,8 @@ def update_attributes(attrs)
end
end
end
+
+ class Story
+ include Validation
+ end
end
View
25 lib/pivotal-tracker/task.rb
@@ -17,13 +17,25 @@ def all(story, options={})
element :position, Integer
element :complete, Boolean
element :created_at, DateTime
+ has_one :story, Story
+
+ def initialize(attributes={})
+ if attributes[:owner]
+ self.story = attributes.delete(:owner)
+ self.project_id = self.story.project_id
+ self.story_id = self.story.id
+ end
+
+ update_attributes(attributes)
+ end
def create
response = Client.connection["/projects/#{project_id}/stories/#{story_id}/tasks"].post(self.to_xml, :content_type => 'application/xml')
return Task.parse(response)
end
- def update
+ def update(attr = {})
+ update_attributes(attr)
response = Client.connection["/projects/#{project_id}/stories/#{story_id}/tasks/#{id}"].put(self.to_xml, :content_type => 'application/xml')
return Task.parse(response)
end
@@ -42,7 +54,18 @@ def to_xml
xml.complete "#{complete}"
}
end
+ return builder.to_xml
end
+
+ def update_attributes(attrs)
+ attrs.each do |key, value|
+ self.send("#{key}=", value.is_a?(Array) ? value.join(',') : value )
+ end
+ end
+
+ end
+ class Task
+ include Validation
end
end
View
69 lib/pivotal-tracker/validation.rb
@@ -0,0 +1,69 @@
+module PivotalTracker
+
+ class Errors
+ include Enumerable
+ attr_reader :errors
+
+ alias :messages :errors
+
+ def initialize
+ @errors = []
+ end
+
+ def each
+ @errors.each do |error|
+ yield error
+ end
+ end
+
+ def empty?
+ @errors.empty?
+ end
+
+ def add_from_xml(xml)
+ Nokogiri::XML(xml).xpath("/errors/error").each do |error|
+ @errors << error.text
+ end
+ end
+ end
+
+ module Validation
+
+ def self.included(klass)
+ klass.class_eval do
+ instance_methods = klass.instance_methods.map {|name| name.to_sym}
+ if instance_methods.include?(:create)
+ alias_method :create_without_validations, :create
+ alias_method :create, :create_with_validations
+ end
+
+ if instance_methods.include?(:update)
+ alias_method :update_without_validations, :update
+ alias_method :update, :update_with_validations
+ end
+ end
+ end
+
+ def create_with_validations
+ begin
+ create_without_validations
+ rescue RestClient::UnprocessableEntity => e
+ errors.add_from_xml e.response
+ self
+ end
+ end
+
+ def update_with_validations(attrs={})
+ begin
+ update_without_validations attrs
+ rescue RestClient::UnprocessableEntity => e
+ errors.add_from_xml e.response
+ self
+ end
+ end
+
+ def errors
+ @errors ||= Errors.new
+ end
+ end
+end
View
180 pivotal-tracker.gemspec
@@ -1,103 +1,131 @@
# Generated by jeweler
# DO NOT EDIT THIS FILE DIRECTLY
-# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
+# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
# -*- encoding: utf-8 -*-
Gem::Specification.new do |s|
- s.name = %q{pivotal-tracker}
- s.version = "0.2.0"
+ s.name = "pivotal-tracker"
+ s.version = "0.5.10"
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["Justin Smestad", "Josh Nichols", "Terence Lee"]
- s.date = %q{2010-07-05}
- s.email = %q{justin.smestad@gmail.com}
+ s.date = "2012-11-25"
+ s.email = "justin.smestad@gmail.com"
s.extra_rdoc_files = [
"LICENSE",
- "README.rdoc"
+ "README.rdoc"
]
s.files = [
- ".gitignore",
- "Gemfile",
- "LICENSE",
- "README.rdoc",
- "Rakefile",
- "VERSION",
- "lib/pivotal-tracker.rb",
- "lib/pivotal-tracker/activity.rb",
- "lib/pivotal-tracker/client.rb",
- "lib/pivotal-tracker/extensions.rb",
- "lib/pivotal-tracker/iteration.rb",
- "lib/pivotal-tracker/membership.rb",
- "lib/pivotal-tracker/note.rb",
- "lib/pivotal-tracker/project.rb",
- "lib/pivotal-tracker/proxy.rb",
- "lib/pivotal-tracker/story.rb",
- "lib/pivotal-tracker/task.rb",
- "lib/pivotal_tracker.rb",
- "pivotal-tracker.gemspec",
- "spec/fixtures/activity.xml",
- "spec/fixtures/created_note.xml",
- "spec/fixtures/created_story.xml",
- "spec/fixtures/iterations_all.xml",
- "spec/fixtures/iterations_backlog.xml",
- "spec/fixtures/iterations_current.xml",
- "spec/fixtures/iterations_done.xml",
- "spec/fixtures/memberships.xml",
- "spec/fixtures/notes.xml",
- "spec/fixtures/project.xml",
- "spec/fixtures/project_activity.xml",
- "spec/fixtures/projects.xml",
- "spec/fixtures/stale_fish.yml",
- "spec/fixtures/stories.xml",
- "spec/fixtures/tasks.xml",
- "spec/spec.opts",
- "spec/spec_helper.rb",
- "spec/support/stale_fish_fixtures.rb",
- "spec/unit/pivotal-tracker/activity_spec.rb",
- "spec/unit/pivotal-tracker/iteration_spec.rb",
- "spec/unit/pivotal-tracker/membership_spec.rb",
- "spec/unit/pivotal-tracker/note_spec.rb",
- "spec/unit/pivotal-tracker/project_spec.rb",
- "spec/unit/pivotal-tracker/story_spec.rb",
- "spec/unit/pivotal-tracker/task_spec.rb"
- ]
- s.homepage = %q{http://github.com/jsmestad/pivotal-tracker}
- s.rdoc_options = ["--charset=UTF-8"]
- s.require_paths = ["lib"]
- s.rubygems_version = %q{1.3.6}
- s.summary = %q{Ruby wrapper for the Pivotal Tracker API}
- s.test_files = [
+ ".rspec",
+ ".travis.yml",
+ "Gemfile",
+ "Gemfile.lock",
+ "LICENSE",
+ "README.rdoc",
+ "Rakefile",
+ "VERSION",
+ "lib/pivotal-tracker.rb",
+ "lib/pivotal-tracker/activity.rb",
+ "lib/pivotal-tracker/attachment.rb",
+ "lib/pivotal-tracker/client.rb",
+ "lib/pivotal-tracker/extensions.rb",
+ "lib/pivotal-tracker/iteration.rb",
+ "lib/pivotal-tracker/membership.rb",
+ "lib/pivotal-tracker/note.rb",
+ "lib/pivotal-tracker/project.rb",
+ "lib/pivotal-tracker/proxy.rb",
+ "lib/pivotal-tracker/story.rb",
+ "lib/pivotal-tracker/task.rb",
+ "lib/pivotal-tracker/validation.rb",
+ "lib/pivotal_tracker.rb",
+ "pivotal-tracker.gemspec",
+ "spec/fixtures/activity.xml",
+ "spec/fixtures/bugs.xml",
+ "spec/fixtures/created_note.xml",
+ "spec/fixtures/created_story.xml",
+ "spec/fixtures/features.xml",
+ "spec/fixtures/iterations_all.xml",
+ "spec/fixtures/iterations_backlog.xml",
+ "spec/fixtures/iterations_current.xml",
+ "spec/fixtures/iterations_current_backlog.xml",
+ "spec/fixtures/iterations_done.xml",
+ "spec/fixtures/memberships.xml",
+ "spec/fixtures/notes.xml",
+ "spec/fixtures/project.xml",
+ "spec/fixtures/project_activity.xml",
+ "spec/fixtures/projects.xml",
+ "spec/fixtures/stale_fish.yml",
+ "spec/fixtures/stories.xml",
+ "spec/fixtures/story-4459994.xml",
+ "spec/fixtures/story-4460038.xml",
+ "spec/fixtures/story-4460598.xml",
+ "spec/fixtures/story-4473735.xml",
+ "spec/fixtures/tasks.xml",
+ "spec/fixtures/update_tasks.xml",
+ "spec/pivotal-tracker/activity_spec.rb",
+ "spec/pivotal-tracker/attachment_spec.rb",
+ "spec/pivotal-tracker/client_spec.rb",
+ "spec/pivotal-tracker/iteration_spec.rb",
+ "spec/pivotal-tracker/membership_spec.rb",
+ "spec/pivotal-tracker/note_spec.rb",
+ "spec/pivotal-tracker/project_spec.rb",
+ "spec/pivotal-tracker/story_spec.rb",
+ "spec/pivotal-tracker/task_spec.rb",
+ "spec/spec.opts",
"spec/spec_helper.rb",
- "spec/support/stale_fish_fixtures.rb",
- "spec/unit/pivotal-tracker/activity_spec.rb",
- "spec/unit/pivotal-tracker/iteration_spec.rb",
- "spec/unit/pivotal-tracker/membership_spec.rb",
- "spec/unit/pivotal-tracker/note_spec.rb",
- "spec/unit/pivotal-tracker/project_spec.rb",
- "spec/unit/pivotal-tracker/story_spec.rb",
- "spec/unit/pivotal-tracker/task_spec.rb"
+ "spec/support/stale_fish_fixtures.rb"
]
+ s.homepage = "http://github.com/jsmestad/pivotal-tracker"
+ s.require_paths = ["lib"]
+ s.rubygems_version = "1.8.24"
+ s.summary = "Ruby wrapper for the Pivotal Tracker API"
if s.respond_to? :specification_version then
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
s.specification_version = 3
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
- s.add_runtime_dependency(%q<rest-client>, ["~> 1.5.1"])
- s.add_runtime_dependency(%q<happymapper>, [">= 0.2.4"])
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
+ s.add_runtime_dependency(%q<rest-client>, ["~> 1.6.0"])
+ s.add_runtime_dependency(%q<nokogiri-happymapper>, [">= 0.5.4"])
s.add_runtime_dependency(%q<builder>, [">= 0"])
- s.add_runtime_dependency(%q<nokogiri>, ["~> 1.4.1"])
+ s.add_runtime_dependency(%q<nokogiri>, [">= 1.5.5"])
+ s.add_runtime_dependency(%q<crack>, [">= 0"])
+ s.add_runtime_dependency(%q<rest-client>, ["~> 1.6.0"])
+ s.add_runtime_dependency(%q<happymapper>, [">= 0.3.2"])
+ s.add_runtime_dependency(%q<builder>, [">= 0"])
+ s.add_runtime_dependency(%q<nokogiri>, [">= 1.4.3"])
+ s.add_development_dependency(%q<rspec>, [">= 0"])
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.12"])
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
+ s.add_development_dependency(%q<stale_fish>, ["~> 1.3.0"])
else
- s.add_dependency(%q<rest-client>, ["~> 1.5.1"])
- s.add_dependency(%q<happymapper>, [">= 0.2.4"])
+ s.add_dependency(%q<rest-client>, ["~> 1.6.0"])
+ s.add_dependency(%q<nokogiri-happymapper>, [">= 0.5.4"])
+ s.add_dependency(%q<builder>, [">= 0"])
+ s.add_dependency(%q<nokogiri>, [">= 1.5.5"])
+ s.add_dependency(%q<crack>, [">= 0"])
+ s.add_dependency(%q<rest-client>, ["~> 1.6.0"])
+ s.add_dependency(%q<happymapper>, [">= 0.3.2"])
s.add_dependency(%q<builder>, [">= 0"])
- s.add_dependency(%q<nokogiri>, ["~> 1.4.1"])
+ s.add_dependency(%q<nokogiri>, [">= 1.4.3"])
+ s.add_dependency(%q<rspec>, [">= 0"])
+ s.add_dependency(%q<bundler>, ["~> 1.0.12"])
+ s.add_dependency(%q<jeweler>, [">= 0"])
+ s.add_dependency(%q<stale_fish>, ["~> 1.3.0"])
end
else
- s.add_dependency(%q<rest-client>, ["~> 1.5.1"])
- s.add_dependency(%q<happymapper>, [">= 0.2.4"])
+ s.add_dependency(%q<rest-client>, ["~> 1.6.0"])
+ s.add_dependency(%q<nokogiri-happymapper>, [">= 0.5.4"])
+ s.add_dependency(%q<builder>, [">= 0"])
+ s.add_dependency(%q<nokogiri>, [">= 1.5.5"])
+ s.add_dependency(%q<crack>, [">= 0"])
+ s.add_dependency(%q<rest-client>, ["~> 1.6.0"])
+ s.add_dependency(%q<happymapper>, [">= 0.3.2"])
s.add_dependency(%q<builder>, [">= 0"])
- s.add_dependency(%q<nokogiri>, ["~> 1.4.1"])
+ s.add_dependency(%q<nokogiri>, [">= 1.4.3"])
+ s.add_dependency(%q<rspec>, [">= 0"])
+ s.add_dependency(%q<bundler>, ["~> 1.0.12"])
+ s.add_dependency(%q<jeweler>, [">= 0"])
+ s.add_dependency(%q<stale_fish>, ["~> 1.3.0"])
end
end
View
255 spec/fixtures/activity.xml
@@ -1,217 +1,176 @@
<?xml version="1.0" encoding="UTF-8"?>
<activities type="array">
<activity>
- <id type="integer">17645182</id>
- <version type="integer">18645</version>
+ <id type="integer">24492385</id>
+ <version type="integer">206</version>
<event_type>story_create</event_type>
- <occurred_at type="datetime">2010/04/28 13:11:38 MDT</occurred_at>
- <author>Sean Heckethorn</author>
- <project_id type="integer">4165</project_id>
- <description>Sean Heckethorn added &quot;Speedway Motors (4991426) :: Inventory not refreshing&quot;</description>
+ <occurred_at type="datetime">2010/07/29 19:13:04 UTC</occurred_at>
+ <author>Test Suite Access</author>
+ <project_id type="integer">102622</project_id>
+ <description>Test Suite Access added &quot;Create stuff&quot;</description>
<stories>
<story>
- <id type="integer">3328124</id>
- <url>http://www.pivotaltracker.com/services/v3/projects/4165/stories/3328124</url>
- <name>Speedway Motors (4991426) :: Inventory not refreshing</name>
+ <id type="integer">4492080</id>
+ <url>http://www.pivotaltracker.com/services/v3/projects/102622/stories/4492080</url>
+ <name>Create stuff</name>
<story_type>feature</story_type>
- <description>Speedway has shown 16 vehicles for the past several days, although the IL file shows 23 Audi made VINs.</description>
<current_state>unscheduled</current_state>
</story>
</stories>
</activity>
<activity>
- <id type="integer">17573139</id>
- <version type="integer">18644</version>
- <event_type>note_create</event_type>
- <occurred_at type="datetime">2010/04/27 17:09:00 MDT</occurred_at>
- <author>Sean Heckethorn</author>
- <project_id type="integer">4165</project_id>
- <description>Sean Heckethorn added comment: &quot;Sean - We have identified 2 items of interest in regards to the imagelist
-file delivered for Audi of Haw...&quot;</description>
+ <id type="integer">24492375</id>
+ <version type="integer">205</version>
+ <event_type>story_create</event_type>
+ <occurred_at type="datetime">2010/07/29 19:13:01 UTC</occurred_at>
+ <author>Test Suite Access</author>
+ <project_id type="integer">102622</project_id>
+ <description>Test Suite Access added &quot;Create stuff&quot;</description>
<stories>
<story>
- <id type="integer">3177657</id>
- <url>http://www.pivotaltracker.com/services/v3/projects/4165/stories/3177657</url>
- <notes>
- <note>
- <id type="integer">1539974</id>
- <text>Sean - We have identified 2 items of interest in regards to the imagelist
-file delivered for Audi of Hawaii - CC146936. Please note that the image
-sequence value in the 5th field appear to reflect a &quot;0&quot; value on many of the
-records (see attached file delivered today, 27th). We attempted to process
-the feed while ignoring the sequence value on the records, however we found
-many records returning 404 errors for the image URLs (most recent process
-details listed below).
-
-The sequence value is optional for the imagelist records, and you may choose
-to drop this from the feed. In the absence of this value we will process the
-images in the sequence they are presented in the file.
-
-We will continue to monitor the next file deliveries for continued URL
-errors. Please let us know if you need any further details.
-
-
-Thanks,
-Bryan Ward
-Operations Project Manager
-Cars.com Inventory support
-Product Inventory Team
-ProductInventoryTeam@cars.com
-support@cars.com</text>
- </note>
- </notes>
+ <id type="integer">4492078</id>
+ <url>http://www.pivotaltracker.com/services/v3/projects/102622/stories/4492078</url>
+ <name>Create stuff</name>
+ <story_type>feature</story_type>
+ <current_state>unscheduled</current_state>
</story>
</stories>
</activity>
<activity>
- <id type="integer">17573116</id>
- <version type="integer">18643</version>
- <event_type>note_create</event_type>
- <occurred_at type="datetime">2010/04/27 17:08:29 MDT</occurred_at>
- <author>Sean Heckethorn</author>
- <project_id type="integer">4165</project_id>
- <description>Sean Heckethorn added comment: &quot;Received the following from Cars.com:
-
-Hi Sean,
-
-My apologies that it&#8217;s taken a while to get back to ...&quot;</description>
+ <id type="integer">24492239</id>
+ <version type="integer">200</version>
+ <event_type>story_create</event_type>
+ <occurred_at type="datetime">2010/07/29 19:11:43 UTC</occurred_at>
+ <author>Test Suite Access</author>
+ <project_id type="integer">102622</project_id>
+ <description>Test Suite Access added &quot;Create stuff&quot;</description>
<stories>
<story>
- <id type="integer">3177657</id>
- <url>http://www.pivotaltracker.com/services/v3/projects/4165/stories/3177657</url>
- <notes>
- <note>
- <id type="integer">1539971</id>
- <text>Received the following from Cars.com:
-
-Hi Sean,
-
-My apologies that it&#8217;s taken a while to get back to you. Bryan Ward within our dealer inventory group, or a member of his team, should be reaching out to you shortly to discuss the issue. Apparently, we have been receiving 404 errors when attempting to pull images.
-
-If there&#8217;s anything else we can help with, don&#8217;t hesitate to let me know.
-
-Thank you,
-Emera</text>
- </note>
- </notes>
+ <id type="integer">4492060</id>
+ <url>http://www.pivotaltracker.com/services/v3/projects/102622/stories/4492060</url>
+ <name>Create stuff</name>
+ <story_type>feature</story_type>
+ <current_state>unscheduled</current_state>
</story>
</stories>
</activity>
<activity>
- <id type="integer">17570401</id>
- <version type="integer">18641</version>
- <event_type>story_update</event_type>
- <occurred_at type="datetime">2010/04/27 16:34:23 MDT</occurred_at>
- <author>Justin Smestad</author>
- <project_id type="integer">4165</project_id>
- <description>Justin Smestad delivered &quot;Event triggers should fire if animation is killed.&quot;</description>
+ <id type="integer">24492220</id>
+ <version type="integer">199</version>
+ <event_type>story_create</event_type>
+ <occurred_at type="datetime">2010/07/29 19:11:38 UTC</occurred_at>
+ <author>Test Suite Access</author>
+ <project_id type="integer">102622</project_id>
+ <description>Test Suite Access added &quot;Create stuff&quot;</description>
<stories>
<story>
- <id type="integer">3309084</id>
- <url>http://www.pivotaltracker.com/services/v3/projects/4165/stories/3309084</url>
- <current_state>delivered</current_state>
+ <id type="integer">4492059</id>
+ <url>http://www.pivotaltracker.com/services/v3/projects/102622/stories/4492059</url>
+ <name>Create stuff</name>
+ <story_type>feature</story_type>
+ <current_state>unscheduled</current_state>
</story>
</stories>
</activity>
<activity>
- <id type="integer">17570394</id>
- <version type="integer">18640</version>
- <event_type>story_update</event_type>
- <occurred_at type="datetime">2010/04/27 16:34:20 MDT</occurred_at>
- <author>Justin Smestad</author>
- <project_id type="integer">4165</project_id>
- <description>Justin Smestad finished &quot;Event triggers should fire if animation is killed.&quot;</description>
+ <id type="integer">24491968</id>
+ <version type="integer">194</version>
+ <event_type>story_create</event_type>
+ <occurred_at type="datetime">2010/07/29 19:09:26 UTC</occurred_at>
+ <author>Test Suite Access</author>
+ <project_id type="integer">102622</project_id>
+ <description>Test Suite Access added &quot;Create stuff&quot;</description>
<stories>
<story>
- <id type="integer">3309084</id>
- <url>http://www.pivotaltracker.com/services/v3/projects/4165/stories/3309084</url>
- <current_state>finished</current_state>
+ <id type="integer">4491973</id>
+ <url>http://www.pivotaltracker.com/services/v3/projects/102622/stories/4491973</url>
+ <name>Create stuff</name>
+ <story_type>feature</story_type>
+ <current_state>unscheduled</current_state>
</story>
</stories>
</activity>
<activity>
- <id type="integer">17569819</id>
- <version type="integer">18639</version>
+ <id type="integer">24491959</id>
+ <version type="integer">193</version>
<event_type>story_create</event_type>
- <occurred_at type="datetime">2010/04/27 16:27:24 MDT</occurred_at>
- <author>Mike Gehard</author>
- <project_id type="integer">4165</project_id>
- <description>Mike Gehard added &quot;Extract FTP server tests into an integration-style test&quot;</description>
+ <occurred_at type="datetime">2010/07/29 19:09:24 UTC</occurred_at>
+ <author>Test Suite Access</author>
+ <project_id type="integer">102622</project_id>
+ <description>Test Suite Access added &quot;Create stuff&quot;</description>
<stories>
<story>
- <id type="integer">3314530</id>
- <url>http://www.pivotaltracker.com/services/v3/projects/4165/stories/3314530</url>
- <name>Extract FTP server tests into an integration-style test</name>
- <story_type>chore</story_type>
- <description>Don't use transactions, instead clean DB before/after (maybe check out database_cleaner).</description>
+ <id type="integer">4491971</id>
+ <url>http://www.pivotaltracker.com/services/v3/projects/102622/stories/4491971</url>
+ <name>Create stuff</name>
+ <story_type>feature</story_type>
<current_state>unscheduled</current_state>
</story>
</stories>
</activity>
<activity>
- <id type="integer">17569612</id>
- <version type="integer">18638</version>
+ <id type="integer">24491880</id>
+ <version type="integer">192</version>
<event_type>story_update</event_type>
- <occurred_at type="datetime">2010/04/27 16:25:19 MDT</occurred_at>
- <author>Mike Gehard</author>
- <project_id type="integer">4165</project_id>
- <description>Mike Gehard edited &quot;Refactor tests to remove deprecation warning for &quot;should_have_named_scope is deprecated&quot;&quot;</description>
+ <occurred_at type="datetime">2010/07/29 19:08:43 UTC</occurred_at>
+ <author>Jon</author>
+ <project_id type="integer">102622</project_id>
+ <description>Jon edited &quot;Movable Story&quot;</description>
<stories>
<story>
- <id type="integer">3314496</id>
- <url>http://www.pivotaltracker.com/services/v3/projects/4165/stories/3314496</url>
- <story_type>chore</story_type>
+ <id type="integer">4490874</id>
+ <url>http://www.pivotaltracker.com/services/v3/projects/102622/stories/4490874</url>
+ <estimate type="integer">0</estimate>
</story>
</stories>
</activity>
<activity>
- <id type="integer">17569600</id>
- <version type="integer">18637</version>
- <event_type>story_create</event_type>
- <occurred_at type="datetime">2010/04/27 16:25:10 MDT</occurred_at>
- <author>Mike Gehard</author>
- <project_id type="integer">4165</project_id>
- <description>Mike Gehard added &quot;Refactor tests to remove deprecation warning for &quot;should_have_named_scope is deprecated&quot;&quot;</description>
+ <id type="integer">24491859</id>
+ <version type="integer">191</version>
+ <event_type>story_update</event_type>
+ <occurred_at type="datetime">2010/07/29 19:08:36 UTC</occurred_at>
+ <author>Jon</author>
+ <project_id type="integer">102622</project_id>
+ <description>Jon edited &quot;Movable Story&quot;</description>
<stories>
<story>
- <id type="integer">3314496</id>
- <url>http://www.pivotaltracker.com/services/v3/projects/4165/stories/3314496</url>
- <name>Refactor tests to remove deprecation warning for &quot;should_have_named_scope is deprecated&quot;</name>
- <story_type>feature</story_type>
- <description>Change these tests to test positive/negative cases where a method is called and the collection returned by that method is tested for existence or absences of an object based on the objects state.</description>
- <current_state>unscheduled</current_state>
+ <id type="integer">4490874</id>
+ <url>http://www.pivotaltracker.com/services/v3/projects/102622/stories/4490874</url>
+ <current_state>unstarted</current_state>
</story>
</stories>
</activity>
<activity>
- <id type="integer">17568659</id>
- <version type="integer">18636</version>
+ <id type="integer">24491236</id>
+ <version type="integer">158</version>
<event_type>story_update</event_type>
- <occurred_at type="datetime">2010/04/27 16:14:05 MDT</occurred_at>
- <author>Justin Smestad</author>
- <project_id type="integer">4165</project_id>
- <description>Justin Smestad started &quot;Event triggers should fire if animation is killed.&quot;</description>
+ <occurred_at type="datetime">2010/07/29 19:04:29 UTC</occurred_at>
+ <author>Jon</author>
+ <project_id type="integer">102622</project_id>
+ <description>Jon edited &quot;Movable Story&quot;</description>
<stories>
<story>
- <id type="integer">3309084</id>
- <url>http://www.pivotaltracker.com/services/v3/projects/4165/stories/3309084</url>
- <current_state>started</current_state>
+ <id type="integer">4490874</id>
+ <url>http://www.pivotaltracker.com/services/v3/projects/102622/stories/4490874</url>
+ <name>Movable Story</name>
</story>
</stories>
</activity>
<activity>
- <id type="integer">17568617</id>
- <version type="integer">18631</version>
- <event_type>story_update</event_type>
- <occurred_at type="datetime">2010/04/27 16:13:46 MDT</occurred_at>
- <author>Justin Smestad</author>
- <project_id type="integer">4165</project_id>
- <description>Justin Smestad delivered &quot;Learn More should only operate on unlocked items&quot;</description>
+ <id type="integer">24490623</id>
+ <version type="integer">153</version>
+ <event_type>story_create</event_type>
+ <occurred_at type="datetime">2010/07/29 18:58:45 UTC</occurred_at>
+ <author>Test Suite Access</author>
+ <project_id type="integer">102622</project_id>
+ <description>Test Suite Access added &quot;Create stuff&quot;</description>
<stories>
<story>
- <id type="integer">3309434</id>
- <url>http://www.pivotaltracker.com/services/v3/projects/4165/stories/3309434</url>
- <current_state>delivered</current_state>
+ <id type="integer">4491800</id>
+ <url>http://www.pivotaltracker.com/services/v3/projects/102622/stories/4491800</url>
+ <name>Create stuff</name>
+ <story_type>feature</story_type>
+ <current_state>unscheduled</current_state>
</story>
</stories>
</activity>
View
279 spec/fixtures/bugs.xml
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<stories type="array" count="13" limit="20" total="14">
+ <story>
+ <id type="integer">4459994</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>bug</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4459994</url>
+ <estimate type="integer">2</estimate>
+ <current_state>unstarted</current_state>
+ <description>Generic description</description>
+ <name>Tasks Test</name>
+ <requested_by>Jon Mischo</requested_by>
+ <created_at type="datetime">2010/07/27 21:51:01 UTC</created_at>
+ <updated_at type="datetime">2010/07/27 22:20:46 UTC</updated_at>
+ <tasks type="array">
+ <task>
+ <id type="integer">468113</id>
+ <description>Task number 1</description>
+ <position>1</position>
+ <complete>false</complete>
+ <created_at type="datetime">2010/07/27 21:51:28 UTC</created_at>
+ </task>
+ <task>
+ <id type="integer">468114</id>
+ <description>Number 2 Task</description>
+ <position>2</position>
+ <complete>false</complete>
+ <created_at type="datetime">2010/07/27 21:51:32 UTC</created_at>
+ </task>
+ <task>
+ <id type="integer">468117</id>
+ <description>3rd task is a charm</description>
+ <position>3</position>
+ <complete>true</complete>
+ <created_at type="datetime">2010/07/27 21:51:42 UTC</created_at>
+ </task>
+ </tasks>
+ </story>
+ <story>
+ <id type="integer">4460038</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>bug</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4460038</url>
+ <estimate type="integer">1</estimate>
+ <current_state>unstarted</current_state>
+ <description>This is a story that has comments.</description>
+ <name>This is for comments</name>
+ <requested_by>Jon Mischo</requested_by>
+ <created_at type="datetime">2010/07/27 21:53:16 UTC</created_at>
+ <updated_at type="datetime">2010/07/27 22:20:48 UTC</updated_at>
+ <notes type="array">
+ <note>
+ <id type="integer">2111593</id>
+ <text>This is a comment...whee!</text>
+ <author>Jon</author>
+ <noted_at type="datetime">2010/07/27 22:15:48 UTC</noted_at>
+ </note>
+ <note>
+ <id type="integer">2128955</id>
+ <text>Test note</text>
+ <author>Test Suite Access</author>
+ <noted_at type="datetime">2010/07/29 18:15:09 UTC</noted_at>
+ </note>
+ <note>
+ <id type="integer">2128959</id>
+ <text>Test note</text>
+ <author>Test Suite Access</author>
+ <noted_at type="datetime">2010/07/29 18:16:12 UTC</noted_at>
+ </note>
+ <note>
+ <id type="integer">2129077</id>
+ <text>Test note</text>
+ <author>Test Suite Access</author>
+ <noted_at type="datetime">2010/07/29 18:22:26 UTC</noted_at>
+ </note>
+ <note>
+ <id type="integer">2129374</id>
+ <text>Test note</text>
+ <author>Test Suite Access</author>
+ <noted_at type="datetime">2010/07/29 18:55:44 UTC</noted_at>
+ </note>
+ </notes>
+ </story>
+ <story>
+ <id type="integer">4460598</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>bug</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4460598</url>
+ <estimate type="integer">3</estimate>
+ <current_state>unstarted</current_state>
+ <description>This story has attachments.</description>
+ <name>Story with attachments</name>
+ <requested_by>Jon Mischo</requested_by>
+ <created_at type="datetime">2010/07/27 22:33:13 UTC</created_at>
+ <updated_at type="datetime">2010/07/27 22:33:28 UTC</updated_at>
+ <attachments type="array">
+ <attachment>
+ <id type="integer">491576</id>
+ <filename>LICENSE</filename>
+ <description></description>
+ <uploaded_by>Jon</uploaded_by>
+ <uploaded_at type="datetime">2010/07/27 22:34:23 UTC</uploaded_at>
+ <url>http://www.pivotaltracker.com/resource/download/491576</url>
+ </attachment>
+ <attachment>
+ <id type="integer">493019</id>
+ <filename>README.rdoc</filename>
+ <description>README file from api gem</description>
+ <uploaded_by>Jon</uploaded_by>
+ <uploaded_at type="datetime">2010/07/28 15:16:18 UTC</uploaded_at>
+ <url>http://www.pivotaltracker.com/resource/download/493019</url>
+ </attachment>
+ </attachments>
+ </story>
+ <story>
+ <id type="integer">4473735</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>bug</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4473735</url>
+ <estimate type="integer">1</estimate>
+ <current_state>unstarted</current_state>
+ <description></description>
+ <name>Attachment upload test story</name>
+ <requested_by>Jon</requested_by>
+ <created_at type="datetime">2010/07/28 18:17:33 UTC</created_at>
+ <updated_at type="datetime">2010/07/28 18:17:44 UTC</updated_at>
+ <attachments type="array">
+ <attachment>
+ <id type="integer">495851</id>
+ <filename>LICENSE</filename>
+ <description></description>
+ <uploaded_by>Test Suite Access</uploaded_by>
+ <uploaded_at type="datetime">2010/07/29 19:07:19 UTC</uploaded_at>
+ <url>http://www.pivotaltracker.com/resource/download/495851</url>
+ </attachment>
+ <attachment>
+ <id type="integer">495856</id>
+ <filename>LICENSE</filename>
+ <description></description>
+ <uploaded_by>Test Suite Access</uploaded_by>
+ <uploaded_at type="datetime">2010/07/29 19:09:27 UTC</uploaded_at>
+ <url>http://www.pivotaltracker.com/resource/download/495856</url>
+ </attachment>
+ <attachment>
+ <id type="integer">495858</id>
+ <filename>LICENSE</filename>
+ <description></description>
+ <uploaded_by>Test Suite Access</uploaded_by>
+ <uploaded_at type="datetime">2010/07/29 19:11:44 UTC</uploaded_at>
+ <url>http://www.pivotaltracker.com/resource/download/495858</url>
+ </attachment>
+ <attachment>
+ <id type="integer">495863</id>
+ <filename>LICENSE</filename>
+ <description></description>
+ <uploaded_by>Test Suite Access</uploaded_by>
+ <uploaded_at type="datetime">2010/07/29 19:13:06 UTC</uploaded_at>
+ <url>http://www.pivotaltracker.com/resource/download/495863</url>
+ </attachment>
+ </attachments>
+ </story>
+ <story>
+ <id type="integer">4490874</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>bug</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4490874</url>
+ <estimate type="integer">0</estimate>
+ <current_state>unstarted</current_state>
+ <description></description>
+ <name>Movable Story</name>
+ <requested_by>Test Suite Access</requested_by>
+ <created_at type="datetime">2010/07/29 18:12:31 UTC</created_at>
+ <updated_at type="datetime">2010/07/29 19:13:12 UTC</updated_at>
+ </story>
+ <story>
+ <id type="integer">4492080</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>bug</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4492080</url>
+ <estimate type="integer">-1</estimate>
+ <current_state>unscheduled</current_state>
+ <description></description>
+ <name>Create stuff</name>
+ <requested_by>Test Suite Access</requested_by>
+ <created_at type="datetime">2010/07/29 19:13:04 UTC</created_at>
+ <updated_at type="datetime">2010/07/29 19:13:04 UTC</updated_at>
+ </story>
+ <story>
+ <id type="integer">4492078</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>bug</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4492078</url>
+ <estimate type="integer">-1</estimate>
+ <current_state>unscheduled</current_state>
+ <description></description>
+ <name>Create stuff</name>
+ <requested_by>Test Suite Access</requested_by>
+ <created_at type="datetime">2010/07/29 19:13:01 UTC</created_at>
+ <updated_at type="datetime">2010/07/29 19:13:01 UTC</updated_at>
+ </story>
+ <story>
+ <id type="integer">4492060</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>bug</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4492060</url>
+ <estimate type="integer">-1</estimate>
+ <current_state>unscheduled</current_state>
+ <description></description>
+ <name>Create stuff</name>
+ <requested_by>Test Suite Access</requested_by>
+ <created_at type="datetime">2010/07/29 19:11:43 UTC</created_at>
+ <updated_at type="datetime">2010/07/29 19:11:43 UTC</updated_at>
+ </story>
+ <story>
+ <id type="integer">4492059</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>bug</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4492059</url>
+ <estimate type="integer">-1</estimate>
+ <current_state>unscheduled</current_state>
+ <description></description>
+ <name>Create stuff</name>
+ <requested_by>Test Suite Access</requested_by>
+ <created_at type="datetime">2010/07/29 19:11:38 UTC</created_at>
+ <updated_at type="datetime">2010/07/29 19:11:38 UTC</updated_at>
+ </story>
+ <story>
+ <id type="integer">4491973</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>bug</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4491973</url>
+ <estimate type="integer">-1</estimate>
+ <current_state>unscheduled</current_state>
+ <description></description>
+ <name>Create stuff</name>
+ <requested_by>Test Suite Access</requested_by>
+ <created_at type="datetime">2010/07/29 19:09:26 UTC</created_at>
+ <updated_at type="datetime">2010/07/29 19:09:26 UTC</updated_at>
+ </story>
+ <story>
+ <id type="integer">4491971</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>bug</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4491971</url>
+ <estimate type="integer">-1</estimate>
+ <current_state>unscheduled</current_state>
+ <description></description>
+ <name>Create stuff</name>
+ <requested_by>Test Suite Access</requested_by>
+ <created_at type="datetime">2010/07/29 19:09:24 UTC</created_at>
+ <updated_at type="datetime">2010/07/29 19:09:24 UTC</updated_at>
+ </story>
+ <story>
+ <id type="integer">4491741</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>bug</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4491741</url>
+ <estimate type="integer">-1</estimate>
+ <current_state>unscheduled</current_state>
+ <description></description>
+ <name>Create Stuff</name>
+ <requested_by>Test Suite Access</requested_by>
+ <created_at type="datetime">2010/07/29 18:56:02 UTC</created_at>
+ <updated_at type="datetime">2010/07/29 18:56:02 UTC</updated_at>
+ </story>
+ <story>
+ <id type="integer">4490944</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>bug</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4490944</url>
+ <estimate type="integer">-1</estimate>
+ <current_state>unscheduled</current_state>
+ <description></description>
+ <name>Create Stuff</name>
+ <requested_by>Test Suite Access</requested_by>
+ <created_at type="datetime">2010/07/29 18:17:23 UTC</created_at>
+ <updated_at type="datetime">2010/07/29 18:17:23 UTC</updated_at>
+ </story>
+</stories>
View
12 spec/fixtures/created_note.xml
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<story>
- <id type="integer">4097942</id>
- <project_id type="integer">59022</project_id>
+ <id type="integer">4492112</id>
+ <project_id type="integer">102622</project_id>
<story_type>feature</story_type>
- <url>http://www.pivotaltracker.com/story/show/4097942</url>
+ <url>http://www.pivotaltracker.com/story/show/4492112</url>
<estimate type="integer">-1</estimate>
<current_state>unscheduled</current_state>
<description></description>
<name>Create stuff</name>
- <requested_by>Leon Miller-Out</requested_by>
- <created_at type="datetime">2010/06/30 03:02:32 UTC</created_at>
- <updated_at type="datetime">2010/06/30 03:02:33 UTC</updated_at>
+ <requested_by>Test Suite Access</requested_by>
+ <created_at type="datetime">2010/07/29 19:15:16 UTC</created_at>
+ <updated_at type="datetime">2010/07/29 19:15:16 UTC</updated_at>
</story>
View
12 spec/fixtures/created_story.xml
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<story>
- <id type="integer">3330568</id>
- <project_id type="integer">59022</project_id>
+ <id type="integer">4492111</id>
+ <project_id type="integer">102622</project_id>
<story_type>feature</story_type>
- <url>http://www.pivotaltracker.com/story/show/3330568</url>
+ <url>http://www.pivotaltracker.com/story/show/4492111</url>
<estimate type="integer">-1</estimate>
<current_state>unscheduled</current_state>
<description></description>
<name>Create stuff</name>
- <requested_by>Justin Smestad</requested_by>
- <created_at type="datetime">2010/04/28 16:09:02 MDT</created_at>
- <updated_at type="datetime">2010/04/28 16:09:02 MDT</updated_at>
+ <requested_by>Test Suite Access</requested_by>
+ <created_at type="datetime">2010/07/29 19:15:13 UTC</created_at>
+ <updated_at type="datetime">2010/07/29 19:15:13 UTC</updated_at>
</story>
View
293 spec/fixtures/features.xml
@@ -0,0 +1,293 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<stories type="array" count="14" limit="20" total="14">
+ <story>
+ <id type="integer">4460116</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>feature</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4460116</url>
+ <estimate type="integer">0</estimate>
+ <current_state>accepted</current_state>
+ <description>This is a story that's finished.</description>
+ <name>Old, accepted story</name>
+ <requested_by>Jon Mischo</requested_by>
+ <created_at type="datetime">2010/07/27 21:58:28 UTC</created_at>
+ <updated_at type="datetime">2010/07/27 22:21:17 UTC</updated_at>
+ <accepted_at type="datetime">2010/07/18 17:00:00 UTC</accepted_at>
+ </story>
+ <story>
+ <id type="integer">4459994</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>feature</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4459994</url>
+ <estimate type="integer">2</estimate>
+ <current_state>unstarted</current_state>
+ <description>Generic description</description>
+ <name>Tasks Test</name>
+ <requested_by>Jon Mischo</requested_by>
+ <created_at type="datetime">2010/07/27 21:51:01 UTC</created_at>
+ <updated_at type="datetime">2010/07/27 22:20:46 UTC</updated_at>
+ <tasks type="array">
+ <task>
+ <id type="integer">468113</id>
+ <description>Task number 1</description>
+ <position>1</position>
+ <complete>false</complete>
+ <created_at type="datetime">2010/07/27 21:51:28 UTC</created_at>
+ </task>
+ <task>
+ <id type="integer">468114</id>
+ <description>Number 2 Task</description>
+ <position>2</position>
+ <complete>false</complete>
+ <created_at type="datetime">2010/07/27 21:51:32 UTC</created_at>
+ </task>
+ <task>
+ <id type="integer">468117</id>
+ <description>3rd task is a charm</description>
+ <position>3</position>
+ <complete>true</complete>
+ <created_at type="datetime">2010/07/27 21:51:42 UTC</created_at>
+ </task>
+ </tasks>
+ </story>
+ <story>
+ <id type="integer">4460038</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>feature</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4460038</url>
+ <estimate type="integer">1</estimate>
+ <current_state>unstarted</current_state>
+ <description>This is a story that has comments.</description>
+ <name>This is for comments</name>
+ <requested_by>Jon Mischo</requested_by>
+ <created_at type="datetime">2010/07/27 21:53:16 UTC</created_at>
+ <updated_at type="datetime">2010/07/27 22:20:48 UTC</updated_at>
+ <notes type="array">
+ <note>
+ <id type="integer">2111593</id>
+ <text>This is a comment...whee!</text>
+ <author>Jon</author>
+ <noted_at type="datetime">2010/07/27 22:15:48 UTC</noted_at>
+ </note>
+ <note>
+ <id type="integer">2128955</id>
+ <text>Test note</text>
+ <author>Test Suite Access</author>
+ <noted_at type="datetime">2010/07/29 18:15:09 UTC</noted_at>
+ </note>
+ <note>
+ <id type="integer">2128959</id>
+ <text>Test note</text>
+ <author>Test Suite Access</author>
+ <noted_at type="datetime">2010/07/29 18:16:12 UTC</noted_at>
+ </note>
+ <note>
+ <id type="integer">2129077</id>
+ <text>Test note</text>
+ <author>Test Suite Access</author>
+ <noted_at type="datetime">2010/07/29 18:22:26 UTC</noted_at>
+ </note>
+ <note>
+ <id type="integer">2129374</id>
+ <text>Test note</text>
+ <author>Test Suite Access</author>
+ <noted_at type="datetime">2010/07/29 18:55:44 UTC</noted_at>
+ </note>
+ </notes>
+ </story>
+ <story>
+ <id type="integer">4460598</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>feature</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4460598</url>
+ <estimate type="integer">3</estimate>
+ <current_state>unstarted</current_state>
+ <description>This story has attachments.</description>
+ <name>Story with attachments</name>
+ <requested_by>Jon Mischo</requested_by>
+ <created_at type="datetime">2010/07/27 22:33:13 UTC</created_at>
+ <updated_at type="datetime">2010/07/27 22:33:28 UTC</updated_at>
+ <attachments type="array">
+ <attachment>
+ <id type="integer">491576</id>
+ <filename>LICENSE</filename>
+ <description></description>
+ <uploaded_by>Jon</uploaded_by>
+ <uploaded_at type="datetime">2010/07/27 22:34:23 UTC</uploaded_at>
+ <url>http://www.pivotaltracker.com/resource/download/491576</url>
+ </attachment>
+ <attachment>
+ <id type="integer">493019</id>
+ <filename>README.rdoc</filename>
+ <description>README file from api gem</description>
+ <uploaded_by>Jon</uploaded_by>
+ <uploaded_at type="datetime">2010/07/28 15:16:18 UTC</uploaded_at>
+ <url>http://www.pivotaltracker.com/resource/download/493019</url>
+ </attachment>
+ </attachments>
+ </story>
+ <story>
+ <id type="integer">4473735</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>feature</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4473735</url>
+ <estimate type="integer">1</estimate>
+ <current_state>unstarted</current_state>
+ <description></description>
+ <name>Attachment upload test story</name>
+ <requested_by>Jon</requested_by>
+ <created_at type="datetime">2010/07/28 18:17:33 UTC</created_at>
+ <updated_at type="datetime">2010/07/28 18:17:44 UTC</updated_at>
+ <attachments type="array">
+ <attachment>
+ <id type="integer">495851</id>
+ <filename>LICENSE</filename>
+ <description></description>
+ <uploaded_by>Test Suite Access</uploaded_by>
+ <uploaded_at type="datetime">2010/07/29 19:07:19 UTC</uploaded_at>
+ <url>http://www.pivotaltracker.com/resource/download/495851</url>
+ </attachment>
+ <attachment>
+ <id type="integer">495856</id>
+ <filename>LICENSE</filename>
+ <description></description>
+ <uploaded_by>Test Suite Access</uploaded_by>
+ <uploaded_at type="datetime">2010/07/29 19:09:27 UTC</uploaded_at>
+ <url>http://www.pivotaltracker.com/resource/download/495856</url>
+ </attachment>
+ <attachment>
+ <id type="integer">495858</id>
+ <filename>LICENSE</filename>
+ <description></description>
+ <uploaded_by>Test Suite Access</uploaded_by>
+ <uploaded_at type="datetime">2010/07/29 19:11:44 UTC</uploaded_at>
+ <url>http://www.pivotaltracker.com/resource/download/495858</url>
+ </attachment>
+ <attachment>
+ <id type="integer">495863</id>
+ <filename>LICENSE</filename>
+ <description></description>
+ <uploaded_by>Test Suite Access</uploaded_by>
+ <uploaded_at type="datetime">2010/07/29 19:13:06 UTC</uploaded_at>
+ <url>http://www.pivotaltracker.com/resource/download/495863</url>
+ </attachment>
+ </attachments>
+ </story>
+ <story>
+ <id type="integer">4490874</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>feature</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4490874</url>
+ <estimate type="integer">0</estimate>
+ <current_state>unstarted</current_state>
+ <description></description>
+ <name>Movable Story</name>
+ <requested_by>Test Suite Access</requested_by>
+ <created_at type="datetime">2010/07/29 18:12:31 UTC</created_at>
+ <updated_at type="datetime">2010/07/29 19:13:12 UTC</updated_at>
+ </story>
+ <story>
+ <id type="integer">4492080</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>feature</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4492080</url>
+ <estimate type="integer">-1</estimate>
+ <current_state>unscheduled</current_state>
+ <description></description>
+ <name>Create stuff</name>
+ <requested_by>Test Suite Access</requested_by>
+ <created_at type="datetime">2010/07/29 19:13:04 UTC</created_at>
+ <updated_at type="datetime">2010/07/29 19:13:04 UTC</updated_at>
+ </story>
+ <story>
+ <id type="integer">4492078</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>feature</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4492078</url>
+ <estimate type="integer">-1</estimate>
+ <current_state>unscheduled</current_state>
+ <description></description>
+ <name>Create stuff</name>
+ <requested_by>Test Suite Access</requested_by>
+ <created_at type="datetime">2010/07/29 19:13:01 UTC</created_at>
+ <updated_at type="datetime">2010/07/29 19:13:01 UTC</updated_at>
+ </story>
+ <story>
+ <id type="integer">4492060</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>feature</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4492060</url>
+ <estimate type="integer">-1</estimate>
+ <current_state>unscheduled</current_state>
+ <description></description>
+ <name>Create stuff</name>
+ <requested_by>Test Suite Access</requested_by>
+ <created_at type="datetime">2010/07/29 19:11:43 UTC</created_at>
+ <updated_at type="datetime">2010/07/29 19:11:43 UTC</updated_at>
+ </story>
+ <story>
+ <id type="integer">4492059</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>feature</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4492059</url>
+ <estimate type="integer">-1</estimate>
+ <current_state>unscheduled</current_state>
+ <description></description>
+ <name>Create stuff</name>
+ <requested_by>Test Suite Access</requested_by>
+ <created_at type="datetime">2010/07/29 19:11:38 UTC</created_at>
+ <updated_at type="datetime">2010/07/29 19:11:38 UTC</updated_at>
+ </story>
+ <story>
+ <id type="integer">4491973</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>feature</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4491973</url>
+ <estimate type="integer">-1</estimate>
+ <current_state>unscheduled</current_state>
+ <description></description>
+ <name>Create stuff</name>
+ <requested_by>Test Suite Access</requested_by>
+ <created_at type="datetime">2010/07/29 19:09:26 UTC</created_at>
+ <updated_at type="datetime">2010/07/29 19:09:26 UTC</updated_at>
+ </story>
+ <story>
+ <id type="integer">4491971</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>feature</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4491971</url>
+ <estimate type="integer">-1</estimate>
+ <current_state>unscheduled</current_state>
+ <description></description>
+ <name>Create stuff</name>
+ <requested_by>Test Suite Access</requested_by>
+ <created_at type="datetime">2010/07/29 19:09:24 UTC</created_at>
+ <updated_at type="datetime">2010/07/29 19:09:24 UTC</updated_at>
+ </story>
+ <story>
+ <id type="integer">4491741</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>feature</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4491741</url>
+ <estimate type="integer">-1</estimate>
+ <current_state>unscheduled</current_state>
+ <description></description>
+ <name>Create Stuff</name>
+ <requested_by>Test Suite Access</requested_by>
+ <created_at type="datetime">2010/07/29 18:56:02 UTC</created_at>
+ <updated_at type="datetime">2010/07/29 18:56:02 UTC</updated_at>
+ </story>
+ <story>
+ <id type="integer">4490944</id>
+ <project_id type="integer">102622</project_id>
+ <story_type>feature</story_type>
+ <url>http://www.pivotaltracker.com/story/show/4490944</url>
+ <estimate type="integer">-1</estimate>
+ <current_state>unscheduled</current_state>
+ <description></description>
+ <name>Create Stuff</name>
+ <requested_by>Test Suite Access</requested_by>
+ <created_at type="datetime">2010/07/29 18:17:23 UTC</created_at>
+ <updated_at type="datetime">2010/07/29 18:17:23 UTC</updated_at>
+ </story>
+</stories>
View
243 spec/fixtures/iterations_all.xml
@@ -3,89 +3,240 @@
<iteration>
<id type="integer">1</id>
<number type="integer">1</number>
- <start type="datetime">2010/04/26 00:00:00 MDT</start>
- <finish type="datetime">2010/05/03 00:00:00 MDT</finish>
+ <start type="datetime">2010/07/12 05:00:00 UTC</start>
+ <finish type="datetime">2010/07/19 05:00:00 UTC</finish>
+ <team_strength type="float">1</team_strength>
<stories type="array">
<story>
- <id type="integer">2606200</id>
- <project_id type="integer">59022</project_id>
+ <id type="integer">4460116</id>
+ <project_id type="integer">102622</project_id>
<story_type>feature</story_type>
- <url>http://www.pivotaltracker.com/story/show/2606200</url>
+ <url>http://www.pivotaltracker.com/story/show/4460116</url>
+ <estimate type="integer">0</estimat