tsenart-pivotal-tracker 0.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.
- data/Gemfile +16 -0
- data/Gemfile.lock +48 -0
- data/LICENSE +20 -0
- data/README.rdoc +77 -0
- data/Rakefile +50 -0
- data/VERSION +1 -0
- data/lib/pivotal-tracker/activity.rb +46 -0
- data/lib/pivotal-tracker/attachment.rb +16 -0
- data/lib/pivotal-tracker/client.rb +41 -0
- data/lib/pivotal-tracker/extensions.rb +11 -0
- data/lib/pivotal-tracker/iteration.rb +34 -0
- data/lib/pivotal-tracker/membership.rb +20 -0
- data/lib/pivotal-tracker/note.rb +58 -0
- data/lib/pivotal-tracker/project.rb +58 -0
- data/lib/pivotal-tracker/proxy.rb +66 -0
- data/lib/pivotal-tracker/story.rb +148 -0
- data/lib/pivotal-tracker/task.rb +53 -0
- data/lib/pivotal-tracker/validation.rb +68 -0
- data/lib/pivotal-tracker.rb +40 -0
- data/lib/pivotal_tracker.rb +2 -0
- data/pivotal-tracker.gemspec +121 -0
- data/spec/fixtures/activity.xml +177 -0
- data/spec/fixtures/created_note.xml +14 -0
- data/spec/fixtures/created_story.xml +14 -0
- data/spec/fixtures/iterations_all.xml +237 -0
- data/spec/fixtures/iterations_backlog.xml +163 -0
- data/spec/fixtures/iterations_current.xml +47 -0
- data/spec/fixtures/iterations_done.xml +33 -0
- data/spec/fixtures/memberships.xml +42 -0
- data/spec/fixtures/notes.xml +33 -0
- data/spec/fixtures/project.xml +51 -0
- data/spec/fixtures/project_activity.xml +177 -0
- data/spec/fixtures/projects.xml +103 -0
- data/spec/fixtures/stale_fish.yml +100 -0
- data/spec/fixtures/stories.xml +293 -0
- data/spec/fixtures/tasks.xml +24 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +31 -0
- data/spec/support/stale_fish_fixtures.rb +67 -0
- data/spec/unit/pivotal-tracker/activity_spec.rb +32 -0
- data/spec/unit/pivotal-tracker/attachment_spec.rb +62 -0
- data/spec/unit/pivotal-tracker/client_spec.rb +87 -0
- data/spec/unit/pivotal-tracker/iteration_spec.rb +52 -0
- data/spec/unit/pivotal-tracker/membership_spec.rb +20 -0
- data/spec/unit/pivotal-tracker/note_spec.rb +61 -0
- data/spec/unit/pivotal-tracker/project_spec.rb +55 -0
- data/spec/unit/pivotal-tracker/story_spec.rb +185 -0
- data/spec/unit/pivotal-tracker/task_spec.rb +21 -0
- metadata +236 -0
@@ -0,0 +1,148 @@
|
|
1
|
+
module PivotalTracker
|
2
|
+
class Story
|
3
|
+
include HappyMapper
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def all(project, options={})
|
7
|
+
params = PivotalTracker.encode_options(options)
|
8
|
+
stories = parse(Client.connection["/projects/#{project.id}/stories#{params}"].get)
|
9
|
+
stories.each { |s| s.project_id = project.id }
|
10
|
+
return stories
|
11
|
+
end
|
12
|
+
|
13
|
+
def find(param, project_id)
|
14
|
+
begin
|
15
|
+
story = parse(Client.connection["/projects/#{project_id}/stories/#{param}"].get)
|
16
|
+
story.project_id = project_id
|
17
|
+
rescue RestClient::ExceptionWithResponse
|
18
|
+
story = nil
|
19
|
+
end
|
20
|
+
return story
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
tag "story"
|
25
|
+
|
26
|
+
element :id, Integer
|
27
|
+
element :url, String
|
28
|
+
element :created_at, DateTime
|
29
|
+
element :accepted_at, DateTime
|
30
|
+
element :project_id, Integer
|
31
|
+
|
32
|
+
element :name, String
|
33
|
+
element :description, String
|
34
|
+
element :story_type, String
|
35
|
+
element :estimate, Integer
|
36
|
+
element :current_state, String
|
37
|
+
element :requested_by, String
|
38
|
+
element :owned_by, String
|
39
|
+
element :labels, String
|
40
|
+
element :jira_id, Integer
|
41
|
+
element :jira_url, String
|
42
|
+
element :other_id, Integer
|
43
|
+
element :integration_id, Integer
|
44
|
+
element :deadline, DateTime # Only available for Release stories
|
45
|
+
|
46
|
+
has_many :attachments, Attachment, :tag => 'attachments'
|
47
|
+
|
48
|
+
def initialize(attributes={})
|
49
|
+
if attributes[:owner]
|
50
|
+
self.project_id = attributes.delete(:owner).id
|
51
|
+
end
|
52
|
+
update_attributes(attributes)
|
53
|
+
end
|
54
|
+
|
55
|
+
def create
|
56
|
+
return self if project_id.nil?
|
57
|
+
response = Client.connection["/projects/#{project_id}/stories"].post(self.to_xml, :content_type => 'application/xml')
|
58
|
+
new_story = Story.parse(response)
|
59
|
+
new_story.project_id = project_id
|
60
|
+
return new_story
|
61
|
+
end
|
62
|
+
|
63
|
+
def update(attrs={})
|
64
|
+
update_attributes(attrs)
|
65
|
+
response = Client.connection["/projects/#{project_id}/stories/#{id}"].put(self.to_xml, :content_type => 'application/xml')
|
66
|
+
return Story.parse(response)
|
67
|
+
end
|
68
|
+
|
69
|
+
def delete
|
70
|
+
Client.connection["/projects/#{project_id}/stories/#{id}"].delete
|
71
|
+
end
|
72
|
+
|
73
|
+
def notes
|
74
|
+
@notes ||= Proxy.new(self, Note)
|
75
|
+
end
|
76
|
+
|
77
|
+
def tasks
|
78
|
+
@tasks ||= Proxy.new(self, Task)
|
79
|
+
end
|
80
|
+
|
81
|
+
def upload_attachment(filename)
|
82
|
+
Attachment.parse(Client.connection["/projects/#{project_id}/stories/#{id}/attachments"].post(:Filedata => File.new(filename)))
|
83
|
+
end
|
84
|
+
|
85
|
+
def move_to_project(new_project)
|
86
|
+
move = true
|
87
|
+
old_project_id = self.project_id
|
88
|
+
target_project = -1
|
89
|
+
case new_project.class.to_s
|
90
|
+
when 'PivotalTracker::Story'
|
91
|
+
target_project = new_project.project_id
|
92
|
+
when 'PivotalTracker::Project'
|
93
|
+
target_project = new_project.id
|
94
|
+
when 'String'
|
95
|
+
target_project = new_project.to_i
|
96
|
+
when 'Fixnum', 'Integer'
|
97
|
+
target_project = new_project
|
98
|
+
else
|
99
|
+
move = false
|
100
|
+
end
|
101
|
+
if move
|
102
|
+
move_builder = Nokogiri::XML::Builder.new do |story|
|
103
|
+
story.story {
|
104
|
+
story.project_id "#{target_project}"
|
105
|
+
}
|
106
|
+
end
|
107
|
+
Story.parse(Client.connection["/projects/#{old_project_id}/stories/#{id}"].put(move_builder.to_xml, :content_type => 'application/xml'))
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
protected
|
112
|
+
|
113
|
+
def to_xml
|
114
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
115
|
+
xml.story {
|
116
|
+
xml.name "#{name}"
|
117
|
+
xml.description "#{description}"
|
118
|
+
xml.story_type "#{story_type}"
|
119
|
+
xml.estimate "#{estimate}"
|
120
|
+
xml.current_state "#{current_state}"
|
121
|
+
xml.requested_by "#{requested_by}"
|
122
|
+
xml.owned_by "#{owned_by}"
|
123
|
+
xml.labels "#{labels}"
|
124
|
+
xml.project_id "#{project_id}"
|
125
|
+
# See spec
|
126
|
+
# xml.jira_id "#{jira_id}"
|
127
|
+
# xml.jira_url "#{jira_url}"
|
128
|
+
xml.other_id "#{other_id}"
|
129
|
+
xml.integration_id "#{integration_id}"
|
130
|
+
xml.created_at DateTime.parse(created_at.to_s).to_s if created_at
|
131
|
+
xml.accepted_at DateTime.parse(accepted_at.to_s).to_s if accepted_at
|
132
|
+
xml.deadline DateTime.parse(deadline.to_s).to_s if deadline
|
133
|
+
}
|
134
|
+
end
|
135
|
+
return builder.to_xml
|
136
|
+
end
|
137
|
+
|
138
|
+
def update_attributes(attrs)
|
139
|
+
attrs.each do |key, value|
|
140
|
+
self.send("#{key}=", value.is_a?(Array) ? value.join(',') : value )
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
class Story
|
146
|
+
include Validation
|
147
|
+
end
|
148
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module PivotalTracker
|
2
|
+
class Task
|
3
|
+
include HappyMapper
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def all(story, options={})
|
7
|
+
tasks = parse(Client.connection["/projects/#{story.project_id}/stories/#{story.id}/tasks"].get)
|
8
|
+
tasks.each { |t| t.project_id, t.story_id = story.project_id, story.id }
|
9
|
+
return tasks
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
attr_accessor :project_id, :story_id
|
14
|
+
|
15
|
+
element :id, Integer
|
16
|
+
element :description, String
|
17
|
+
element :position, Integer
|
18
|
+
element :complete, Boolean
|
19
|
+
element :created_at, DateTime
|
20
|
+
|
21
|
+
def create
|
22
|
+
response = Client.connection["/projects/#{project_id}/stories/#{story_id}/tasks"].post(self.to_xml, :content_type => 'application/xml')
|
23
|
+
return Task.parse(response)
|
24
|
+
end
|
25
|
+
|
26
|
+
def update
|
27
|
+
response = Client.connection["/projects/#{project_id}/stories/#{story_id}/tasks/#{id}"].put(self.to_xml, :content_type => 'application/xml')
|
28
|
+
return Task.parse(response)
|
29
|
+
end
|
30
|
+
|
31
|
+
def delete
|
32
|
+
Client.connection["/projects/#{project_id}/stories/#{story_id}/tasks/#{id}"].delete
|
33
|
+
end
|
34
|
+
|
35
|
+
protected
|
36
|
+
|
37
|
+
def to_xml
|
38
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
39
|
+
xml.task {
|
40
|
+
xml.description "#{description}"
|
41
|
+
# xml.position "#{position}"
|
42
|
+
xml.complete "#{complete}"
|
43
|
+
}
|
44
|
+
end
|
45
|
+
return builder.to_xml
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
class Task
|
51
|
+
include Validation
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module PivotalTracker
|
2
|
+
|
3
|
+
class Errors
|
4
|
+
include Enumerable
|
5
|
+
attr_reader :errors
|
6
|
+
|
7
|
+
alias :messages :errors
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@errors = []
|
11
|
+
end
|
12
|
+
|
13
|
+
def each
|
14
|
+
@errors.each do |error|
|
15
|
+
yield error
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def empty?
|
20
|
+
@errors.empty?
|
21
|
+
end
|
22
|
+
|
23
|
+
def add_from_xml(xml)
|
24
|
+
Nokogiri::XML(xml).xpath("/errors/error").each do |error|
|
25
|
+
@errors << error.text
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
module Validation
|
31
|
+
|
32
|
+
def self.included(klass)
|
33
|
+
klass.class_eval do
|
34
|
+
if klass.instance_methods.include?(:create)
|
35
|
+
alias_method :create_without_validations, :create
|
36
|
+
alias_method :create, :create_with_validations
|
37
|
+
end
|
38
|
+
|
39
|
+
if klass.instance_methods.include?(:update)
|
40
|
+
alias_method :update_without_validations, :update
|
41
|
+
alias_method :update, :update_with_validations
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def create_with_validations
|
47
|
+
begin
|
48
|
+
create_without_validations
|
49
|
+
rescue RestClient::UnprocessableEntity => e
|
50
|
+
errors.add_from_xml e.response
|
51
|
+
self
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def update_with_validations(attrs={})
|
56
|
+
begin
|
57
|
+
update_without_validations attrs
|
58
|
+
rescue RestClient::UnprocessableEntity => e
|
59
|
+
errors.add_from_xml e.response
|
60
|
+
self
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def errors
|
65
|
+
@errors ||= Errors.new
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
require 'rest_client'
|
3
|
+
require 'happymapper'
|
4
|
+
require 'nokogiri'
|
5
|
+
|
6
|
+
|
7
|
+
require File.join(File.dirname(__FILE__), 'pivotal-tracker', 'validation')
|
8
|
+
require File.join(File.dirname(__FILE__), 'pivotal-tracker', 'extensions')
|
9
|
+
require File.join(File.dirname(__FILE__), 'pivotal-tracker', 'proxy')
|
10
|
+
require File.join(File.dirname(__FILE__), 'pivotal-tracker', 'client')
|
11
|
+
require File.join(File.dirname(__FILE__), 'pivotal-tracker', 'project')
|
12
|
+
require File.join(File.dirname(__FILE__), 'pivotal-tracker', 'attachment')
|
13
|
+
require File.join(File.dirname(__FILE__), 'pivotal-tracker', 'story')
|
14
|
+
require File.join(File.dirname(__FILE__), 'pivotal-tracker', 'task')
|
15
|
+
require File.join(File.dirname(__FILE__), 'pivotal-tracker', 'membership')
|
16
|
+
require File.join(File.dirname(__FILE__), 'pivotal-tracker', 'activity')
|
17
|
+
require File.join(File.dirname(__FILE__), 'pivotal-tracker', 'iteration')
|
18
|
+
require File.join(File.dirname(__FILE__), 'pivotal-tracker', 'note')
|
19
|
+
|
20
|
+
module PivotalTracker
|
21
|
+
|
22
|
+
# define error types
|
23
|
+
class ProjectNotSpecified < StandardError; end
|
24
|
+
|
25
|
+
def self.encode_options(options)
|
26
|
+
options_strings = options.inject({}) do |m, (k,v)|
|
27
|
+
if [:limit, :offset].include?(k.to_sym)
|
28
|
+
m.update k => v
|
29
|
+
elsif k.to_sym == :search
|
30
|
+
m.update :filter => v
|
31
|
+
else
|
32
|
+
filter_query = %{#{k}:#{[v].flatten.join(",")}}
|
33
|
+
m.update :filter => (m[:filter] ? "#{m[:filter]} #{filter_query}" : filter_query)
|
34
|
+
end
|
35
|
+
end.map {|k,v| "#{k}=#{CGI.escape(v.to_s)}"}
|
36
|
+
|
37
|
+
%{?#{options_strings.join("&")}} unless options_strings.empty?
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{pivotal-tracker}
|
8
|
+
s.version = "0.4.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = [%q{Justin Smestad}, %q{Josh Nichols}, %q{Terence Lee}]
|
12
|
+
s.date = %q{2011-07-07}
|
13
|
+
s.email = %q{justin.smestad@gmail.com}
|
14
|
+
s.extra_rdoc_files = [
|
15
|
+
"LICENSE",
|
16
|
+
"README.rdoc"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".gitignore",
|
20
|
+
"Gemfile",
|
21
|
+
"Gemfile.lock",
|
22
|
+
"LICENSE",
|
23
|
+
"README.rdoc",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"lib/pivotal-tracker.rb",
|
27
|
+
"lib/pivotal-tracker/activity.rb",
|
28
|
+
"lib/pivotal-tracker/attachment.rb",
|
29
|
+
"lib/pivotal-tracker/client.rb",
|
30
|
+
"lib/pivotal-tracker/extensions.rb",
|
31
|
+
"lib/pivotal-tracker/iteration.rb",
|
32
|
+
"lib/pivotal-tracker/membership.rb",
|
33
|
+
"lib/pivotal-tracker/note.rb",
|
34
|
+
"lib/pivotal-tracker/project.rb",
|
35
|
+
"lib/pivotal-tracker/proxy.rb",
|
36
|
+
"lib/pivotal-tracker/story.rb",
|
37
|
+
"lib/pivotal-tracker/task.rb",
|
38
|
+
"lib/pivotal-tracker/validation.rb",
|
39
|
+
"lib/pivotal_tracker.rb",
|
40
|
+
"pivotal-tracker.gemspec",
|
41
|
+
"spec/fixtures/activity.xml",
|
42
|
+
"spec/fixtures/created_note.xml",
|
43
|
+
"spec/fixtures/created_story.xml",
|
44
|
+
"spec/fixtures/iterations_all.xml",
|
45
|
+
"spec/fixtures/iterations_backlog.xml",
|
46
|
+
"spec/fixtures/iterations_current.xml",
|
47
|
+
"spec/fixtures/iterations_done.xml",
|
48
|
+
"spec/fixtures/memberships.xml",
|
49
|
+
"spec/fixtures/notes.xml",
|
50
|
+
"spec/fixtures/project.xml",
|
51
|
+
"spec/fixtures/project_activity.xml",
|
52
|
+
"spec/fixtures/projects.xml",
|
53
|
+
"spec/fixtures/stale_fish.yml",
|
54
|
+
"spec/fixtures/stories.xml",
|
55
|
+
"spec/fixtures/tasks.xml",
|
56
|
+
"spec/spec.opts",
|
57
|
+
"spec/spec_helper.rb",
|
58
|
+
"spec/support/stale_fish_fixtures.rb",
|
59
|
+
"spec/unit/pivotal-tracker/activity_spec.rb",
|
60
|
+
"spec/unit/pivotal-tracker/attachment_spec.rb",
|
61
|
+
"spec/unit/pivotal-tracker/client_spec.rb",
|
62
|
+
"spec/unit/pivotal-tracker/iteration_spec.rb",
|
63
|
+
"spec/unit/pivotal-tracker/membership_spec.rb",
|
64
|
+
"spec/unit/pivotal-tracker/note_spec.rb",
|
65
|
+
"spec/unit/pivotal-tracker/project_spec.rb",
|
66
|
+
"spec/unit/pivotal-tracker/story_spec.rb",
|
67
|
+
"spec/unit/pivotal-tracker/task_spec.rb"
|
68
|
+
]
|
69
|
+
s.homepage = %q{http://github.com/jsmestad/pivotal-tracker}
|
70
|
+
s.rdoc_options = [%q{--charset=UTF-8}]
|
71
|
+
s.require_paths = [%q{lib}]
|
72
|
+
s.rubygems_version = %q{1.8.5}
|
73
|
+
s.summary = %q{Ruby wrapper for the Pivotal Tracker API}
|
74
|
+
s.test_files = [
|
75
|
+
"spec/spec_helper.rb",
|
76
|
+
"spec/support/stale_fish_fixtures.rb",
|
77
|
+
"spec/unit/pivotal-tracker/activity_spec.rb",
|
78
|
+
"spec/unit/pivotal-tracker/attachment_spec.rb",
|
79
|
+
"spec/unit/pivotal-tracker/client_spec.rb",
|
80
|
+
"spec/unit/pivotal-tracker/iteration_spec.rb",
|
81
|
+
"spec/unit/pivotal-tracker/membership_spec.rb",
|
82
|
+
"spec/unit/pivotal-tracker/note_spec.rb",
|
83
|
+
"spec/unit/pivotal-tracker/project_spec.rb",
|
84
|
+
"spec/unit/pivotal-tracker/story_spec.rb",
|
85
|
+
"spec/unit/pivotal-tracker/task_spec.rb"
|
86
|
+
]
|
87
|
+
|
88
|
+
if s.respond_to? :specification_version then
|
89
|
+
s.specification_version = 3
|
90
|
+
|
91
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
92
|
+
s.add_runtime_dependency(%q<rest-client>, ["~> 1.6.0"])
|
93
|
+
s.add_runtime_dependency(%q<happymapper>, [">= 0.3.2"])
|
94
|
+
s.add_runtime_dependency(%q<builder>, [">= 0"])
|
95
|
+
s.add_runtime_dependency(%q<nokogiri>, ["~> 1.4.3.1"])
|
96
|
+
s.add_development_dependency(%q<rspec>, [">= 0"])
|
97
|
+
s.add_development_dependency(%q<bundler>, [">= 0.9.26"])
|
98
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
99
|
+
s.add_development_dependency(%q<stale_fish>, ["~> 1.3.0"])
|
100
|
+
else
|
101
|
+
s.add_dependency(%q<rest-client>, ["~> 1.6.0"])
|
102
|
+
s.add_dependency(%q<happymapper>, [">= 0.3.2"])
|
103
|
+
s.add_dependency(%q<builder>, [">= 0"])
|
104
|
+
s.add_dependency(%q<nokogiri>, ["~> 1.4.3.1"])
|
105
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
106
|
+
s.add_dependency(%q<bundler>, [">= 0.9.26"])
|
107
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
108
|
+
s.add_dependency(%q<stale_fish>, ["~> 1.3.0"])
|
109
|
+
end
|
110
|
+
else
|
111
|
+
s.add_dependency(%q<rest-client>, ["~> 1.6.0"])
|
112
|
+
s.add_dependency(%q<happymapper>, [">= 0.3.2"])
|
113
|
+
s.add_dependency(%q<builder>, [">= 0"])
|
114
|
+
s.add_dependency(%q<nokogiri>, ["~> 1.4.3.1"])
|
115
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
116
|
+
s.add_dependency(%q<bundler>, [">= 0.9.26"])
|
117
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
118
|
+
s.add_dependency(%q<stale_fish>, ["~> 1.3.0"])
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
@@ -0,0 +1,177 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<activities type="array">
|
3
|
+
<activity>
|
4
|
+
<id type="integer">24492385</id>
|
5
|
+
<version type="integer">206</version>
|
6
|
+
<event_type>story_create</event_type>
|
7
|
+
<occurred_at type="datetime">2010/07/29 19:13:04 UTC</occurred_at>
|
8
|
+
<author>Test Suite Access</author>
|
9
|
+
<project_id type="integer">102622</project_id>
|
10
|
+
<description>Test Suite Access added "Create stuff"</description>
|
11
|
+
<stories>
|
12
|
+
<story>
|
13
|
+
<id type="integer">4492080</id>
|
14
|
+
<url>http://www.pivotaltracker.com/services/v3/projects/102622/stories/4492080</url>
|
15
|
+
<name>Create stuff</name>
|
16
|
+
<story_type>feature</story_type>
|
17
|
+
<current_state>unscheduled</current_state>
|
18
|
+
</story>
|
19
|
+
</stories>
|
20
|
+
</activity>
|
21
|
+
<activity>
|
22
|
+
<id type="integer">24492375</id>
|
23
|
+
<version type="integer">205</version>
|
24
|
+
<event_type>story_create</event_type>
|
25
|
+
<occurred_at type="datetime">2010/07/29 19:13:01 UTC</occurred_at>
|
26
|
+
<author>Test Suite Access</author>
|
27
|
+
<project_id type="integer">102622</project_id>
|
28
|
+
<description>Test Suite Access added "Create stuff"</description>
|
29
|
+
<stories>
|
30
|
+
<story>
|
31
|
+
<id type="integer">4492078</id>
|
32
|
+
<url>http://www.pivotaltracker.com/services/v3/projects/102622/stories/4492078</url>
|
33
|
+
<name>Create stuff</name>
|
34
|
+
<story_type>feature</story_type>
|
35
|
+
<current_state>unscheduled</current_state>
|
36
|
+
</story>
|
37
|
+
</stories>
|
38
|
+
</activity>
|
39
|
+
<activity>
|
40
|
+
<id type="integer">24492239</id>
|
41
|
+
<version type="integer">200</version>
|
42
|
+
<event_type>story_create</event_type>
|
43
|
+
<occurred_at type="datetime">2010/07/29 19:11:43 UTC</occurred_at>
|
44
|
+
<author>Test Suite Access</author>
|
45
|
+
<project_id type="integer">102622</project_id>
|
46
|
+
<description>Test Suite Access added "Create stuff"</description>
|
47
|
+
<stories>
|
48
|
+
<story>
|
49
|
+
<id type="integer">4492060</id>
|
50
|
+
<url>http://www.pivotaltracker.com/services/v3/projects/102622/stories/4492060</url>
|
51
|
+
<name>Create stuff</name>
|
52
|
+
<story_type>feature</story_type>
|
53
|
+
<current_state>unscheduled</current_state>
|
54
|
+
</story>
|
55
|
+
</stories>
|
56
|
+
</activity>
|
57
|
+
<activity>
|
58
|
+
<id type="integer">24492220</id>
|
59
|
+
<version type="integer">199</version>
|
60
|
+
<event_type>story_create</event_type>
|
61
|
+
<occurred_at type="datetime">2010/07/29 19:11:38 UTC</occurred_at>
|
62
|
+
<author>Test Suite Access</author>
|
63
|
+
<project_id type="integer">102622</project_id>
|
64
|
+
<description>Test Suite Access added "Create stuff"</description>
|
65
|
+
<stories>
|
66
|
+
<story>
|
67
|
+
<id type="integer">4492059</id>
|
68
|
+
<url>http://www.pivotaltracker.com/services/v3/projects/102622/stories/4492059</url>
|
69
|
+
<name>Create stuff</name>
|
70
|
+
<story_type>feature</story_type>
|
71
|
+
<current_state>unscheduled</current_state>
|
72
|
+
</story>
|
73
|
+
</stories>
|
74
|
+
</activity>
|
75
|
+
<activity>
|
76
|
+
<id type="integer">24491968</id>
|
77
|
+
<version type="integer">194</version>
|
78
|
+
<event_type>story_create</event_type>
|
79
|
+
<occurred_at type="datetime">2010/07/29 19:09:26 UTC</occurred_at>
|
80
|
+
<author>Test Suite Access</author>
|
81
|
+
<project_id type="integer">102622</project_id>
|
82
|
+
<description>Test Suite Access added "Create stuff"</description>
|
83
|
+
<stories>
|
84
|
+
<story>
|
85
|
+
<id type="integer">4491973</id>
|
86
|
+
<url>http://www.pivotaltracker.com/services/v3/projects/102622/stories/4491973</url>
|
87
|
+
<name>Create stuff</name>
|
88
|
+
<story_type>feature</story_type>
|
89
|
+
<current_state>unscheduled</current_state>
|
90
|
+
</story>
|
91
|
+
</stories>
|
92
|
+
</activity>
|
93
|
+
<activity>
|
94
|
+
<id type="integer">24491959</id>
|
95
|
+
<version type="integer">193</version>
|
96
|
+
<event_type>story_create</event_type>
|
97
|
+
<occurred_at type="datetime">2010/07/29 19:09:24 UTC</occurred_at>
|
98
|
+
<author>Test Suite Access</author>
|
99
|
+
<project_id type="integer">102622</project_id>
|
100
|
+
<description>Test Suite Access added "Create stuff"</description>
|
101
|
+
<stories>
|
102
|
+
<story>
|
103
|
+
<id type="integer">4491971</id>
|
104
|
+
<url>http://www.pivotaltracker.com/services/v3/projects/102622/stories/4491971</url>
|
105
|
+
<name>Create stuff</name>
|
106
|
+
<story_type>feature</story_type>
|
107
|
+
<current_state>unscheduled</current_state>
|
108
|
+
</story>
|
109
|
+
</stories>
|
110
|
+
</activity>
|
111
|
+
<activity>
|
112
|
+
<id type="integer">24491880</id>
|
113
|
+
<version type="integer">192</version>
|
114
|
+
<event_type>story_update</event_type>
|
115
|
+
<occurred_at type="datetime">2010/07/29 19:08:43 UTC</occurred_at>
|
116
|
+
<author>Jon</author>
|
117
|
+
<project_id type="integer">102622</project_id>
|
118
|
+
<description>Jon edited "Movable Story"</description>
|
119
|
+
<stories>
|
120
|
+
<story>
|
121
|
+
<id type="integer">4490874</id>
|
122
|
+
<url>http://www.pivotaltracker.com/services/v3/projects/102622/stories/4490874</url>
|
123
|
+
<estimate type="integer">0</estimate>
|
124
|
+
</story>
|
125
|
+
</stories>
|
126
|
+
</activity>
|
127
|
+
<activity>
|
128
|
+
<id type="integer">24491859</id>
|
129
|
+
<version type="integer">191</version>
|
130
|
+
<event_type>story_update</event_type>
|
131
|
+
<occurred_at type="datetime">2010/07/29 19:08:36 UTC</occurred_at>
|
132
|
+
<author>Jon</author>
|
133
|
+
<project_id type="integer">102622</project_id>
|
134
|
+
<description>Jon edited "Movable Story"</description>
|
135
|
+
<stories>
|
136
|
+
<story>
|
137
|
+
<id type="integer">4490874</id>
|
138
|
+
<url>http://www.pivotaltracker.com/services/v3/projects/102622/stories/4490874</url>
|
139
|
+
<current_state>unstarted</current_state>
|
140
|
+
</story>
|
141
|
+
</stories>
|
142
|
+
</activity>
|
143
|
+
<activity>
|
144
|
+
<id type="integer">24491236</id>
|
145
|
+
<version type="integer">158</version>
|
146
|
+
<event_type>story_update</event_type>
|
147
|
+
<occurred_at type="datetime">2010/07/29 19:04:29 UTC</occurred_at>
|
148
|
+
<author>Jon</author>
|
149
|
+
<project_id type="integer">102622</project_id>
|
150
|
+
<description>Jon edited "Movable Story"</description>
|
151
|
+
<stories>
|
152
|
+
<story>
|
153
|
+
<id type="integer">4490874</id>
|
154
|
+
<url>http://www.pivotaltracker.com/services/v3/projects/102622/stories/4490874</url>
|
155
|
+
<name>Movable Story</name>
|
156
|
+
</story>
|
157
|
+
</stories>
|
158
|
+
</activity>
|
159
|
+
<activity>
|
160
|
+
<id type="integer">24490623</id>
|
161
|
+
<version type="integer">153</version>
|
162
|
+
<event_type>story_create</event_type>
|
163
|
+
<occurred_at type="datetime">2010/07/29 18:58:45 UTC</occurred_at>
|
164
|
+
<author>Test Suite Access</author>
|
165
|
+
<project_id type="integer">102622</project_id>
|
166
|
+
<description>Test Suite Access added "Create stuff"</description>
|
167
|
+
<stories>
|
168
|
+
<story>
|
169
|
+
<id type="integer">4491800</id>
|
170
|
+
<url>http://www.pivotaltracker.com/services/v3/projects/102622/stories/4491800</url>
|
171
|
+
<name>Create stuff</name>
|
172
|
+
<story_type>feature</story_type>
|
173
|
+
<current_state>unscheduled</current_state>
|
174
|
+
</story>
|
175
|
+
</stories>
|
176
|
+
</activity>
|
177
|
+
</activities>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<story>
|
3
|
+
<id type="integer">4492112</id>
|
4
|
+
<project_id type="integer">102622</project_id>
|
5
|
+
<story_type>feature</story_type>
|
6
|
+
<url>http://www.pivotaltracker.com/story/show/4492112</url>
|
7
|
+
<estimate type="integer">-1</estimate>
|
8
|
+
<current_state>unscheduled</current_state>
|
9
|
+
<description></description>
|
10
|
+
<name>Create stuff</name>
|
11
|
+
<requested_by>Test Suite Access</requested_by>
|
12
|
+
<created_at type="datetime">2010/07/29 19:15:16 UTC</created_at>
|
13
|
+
<updated_at type="datetime">2010/07/29 19:15:16 UTC</updated_at>
|
14
|
+
</story>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<story>
|
3
|
+
<id type="integer">4492111</id>
|
4
|
+
<project_id type="integer">102622</project_id>
|
5
|
+
<story_type>feature</story_type>
|
6
|
+
<url>http://www.pivotaltracker.com/story/show/4492111</url>
|
7
|
+
<estimate type="integer">-1</estimate>
|
8
|
+
<current_state>unscheduled</current_state>
|
9
|
+
<description></description>
|
10
|
+
<name>Create stuff</name>
|
11
|
+
<requested_by>Test Suite Access</requested_by>
|
12
|
+
<created_at type="datetime">2010/07/29 19:15:13 UTC</created_at>
|
13
|
+
<updated_at type="datetime">2010/07/29 19:15:13 UTC</updated_at>
|
14
|
+
</story>
|