peaty 0.4.7 → 0.4.8

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/Readme.textile CHANGED
@@ -31,6 +31,20 @@ end
31
31
 
32
32
  See how current API works for selecting types of stories (chores, bugs, releases, and features)
33
33
 
34
+ h3. Moving Stories
35
+
36
+ <pre>
37
+ project = u.pt_projects.first
38
+ stories = project.stories.all
39
+ story1, story2 = stories[0], stories[1]
40
+
41
+ # moves story1 before story2
42
+ story1.move(:before => story2)
43
+
44
+ # moves story2 after story 1
45
+ story2.move(:after => story1)
46
+ </pre>
47
+
34
48
  h2. Contributing
35
49
 
36
50
  Step 1: Submit a failing test.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.7
1
+ 0.4.8
data/lib/peaty/story.rb CHANGED
@@ -15,6 +15,30 @@ module Peaty
15
15
  def project
16
16
  Project.with_connection(self.class.connection).find(self.project_id)
17
17
  end
18
+
19
+ # Moves a story before or after another story
20
+ #
21
+ # story1.move(:before => story2)
22
+ # story2.move(:after => story1)
23
+ def move(options)
24
+ @error = nil
25
+
26
+ move_options = { :project_id => project_id }
27
+ if options[:before]
28
+ move_options.merge!({ :type => :before, :target_id => options[:before].id })
29
+ elsif options[:after]
30
+ move_options.merge!({ :type => :after, :target_id => options[:after].id })
31
+ else
32
+ raise ArgumentError, "Must specify :before => story or :after => story"
33
+ end
34
+
35
+ self.connection[self.class.move_path(id, move_options)].post("").body
36
+
37
+ self
38
+ rescue RestClient::UnprocessableEntity => e
39
+ @error = JSON.parse(XmlToJson.transform(e.response.body))["message"]
40
+ false
41
+ end
18
42
 
19
43
  class << self
20
44
  def element
@@ -26,6 +50,9 @@ module Peaty
26
50
  def member_path(id, options = {})
27
51
  "/projects/%i/stories/%i" % [options[:project_id].to_i, id]
28
52
  end
53
+ def move_path(id, options = {})
54
+ "/projects/%i/stories/%i/moves?move[move]=%s&move[target]=%i" % [options[:project_id].to_i, id, options[:type], options[:target_id].to_i]
55
+ end
29
56
 
30
57
  ### Filters
31
58
 
data/peaty.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{peaty}
8
- s.version = "0.4.7"
8
+ s.version = "0.4.8"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Matt Todd"]
12
- s.date = %q{2011-04-08}
12
+ s.date = %q{2011-06-01}
13
13
  s.description = %q{Just another Pivotal Tracker API Implementation}
14
14
  s.email = %q{chiology@gmail.com}
15
15
  s.files = [
@@ -35,6 +35,8 @@ Gem::Specification.new do |s|
35
35
  "test/fixtures/features.xml",
36
36
  "test/fixtures/iterations.xml",
37
37
  "test/fixtures/iterations_done.xml",
38
+ "test/fixtures/move_after.xml",
39
+ "test/fixtures/move_before.xml",
38
40
  "test/fixtures/project.xml",
39
41
  "test/fixtures/projects.xml",
40
42
  "test/fixtures/release.xml",
@@ -48,7 +50,7 @@ Gem::Specification.new do |s|
48
50
  s.homepage = %q{http://github.com/mtodd/peaty}
49
51
  s.licenses = ["MIT"]
50
52
  s.require_paths = ["lib"]
51
- s.rubygems_version = %q{1.4.2}
53
+ s.rubygems_version = %q{1.6.2}
52
54
  s.summary = %q{Pivotal Tracker API Implementation}
53
55
  s.test_files = [
54
56
  "test/peaty_test.rb",
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <story>
3
+ <id type="integer">6822209</id>
4
+ <project_id type="integer">153937</project_id>
5
+ <story_type>chore</story_type>
6
+ <url>http://www.pivotaltracker.com/story/show/6822209</url>
7
+ <current_state>unstarted</current_state>
8
+ <description></description>
9
+ <name>Stuff needs to be defined</name>
10
+ <requested_by>Matt Todd</requested_by>
11
+ <created_at type="datetime">2010/11/29 01:39:41 EST</created_at>
12
+ <updated_at type="datetime">2010/11/29 01:39:45 EST</updated_at>
13
+ </story>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <story>
3
+ <id type="integer">6821125</id>
4
+ <project_id type="integer">153937</project_id>
5
+ <story_type>feature</story_type>
6
+ <url>http://www.pivotaltracker.com/story/show/6821125</url>
7
+ <estimate type="integer">0</estimate>
8
+ <current_state>unstarted</current_state>
9
+ <description></description>
10
+ <name>Stuff can be done</name>
11
+ <requested_by>Matt Todd</requested_by>
12
+ <created_at type="datetime">2010/11/29 00:30:39 EST</created_at>
13
+ <updated_at type="datetime">2010/11/29 00:31:12 EST</updated_at>
14
+ </story>
data/test/peaty_test.rb CHANGED
@@ -62,6 +62,40 @@ class PeatyTest < Test::Unit::TestCase
62
62
  done = project.iterations.find(:done)
63
63
  assert done.stories.any?{ |s| s.id == story.id }
64
64
  end
65
+
66
+ def test_user_can_move_stories_after_other_stories
67
+ project = @user.pivotal_tracker_projects.find(PROJECT_ID)
68
+ stories = project.stories.all
69
+
70
+ story1, story2 = stories[0], stories[1]
71
+
72
+ moves_path = "/projects/#{PROJECT_ID}/stories/#{story1.id}/moves?move\[move\]=after&move\[target\]=#{story2.id}"
73
+ FakeWeb.register_uri(:post,
74
+ PT_BASE_URI + moves_path,
75
+ :body => File.read(File.join(File.dirname(__FILE__), "fixtures", "move_after.xml")))
76
+
77
+ story1.move(:after => story2)
78
+
79
+ assert_equal 'POST', FakeWeb.last_request.method
80
+ assert_equal PT_BASE_PATH + moves_path, FakeWeb.last_request.path
81
+ end
82
+
83
+ def test_user_can_move_stories_before_other_stories
84
+ project = @user.pivotal_tracker_projects.find(PROJECT_ID)
85
+ stories = project.stories.all
86
+
87
+ story1, story2 = stories[0], stories[1]
88
+
89
+ moves_path = "/projects/#{PROJECT_ID}/stories/#{story2.id}/moves?move\[move\]=before&move\[target\]=#{story1.id}"
90
+ FakeWeb.register_uri(:post,
91
+ PT_BASE_URI + moves_path,
92
+ :body => File.read(File.join(File.dirname(__FILE__), "fixtures", "move_before.xml")))
93
+
94
+ story2.move(:before => story1)
95
+
96
+ assert_equal 'POST', FakeWeb.last_request.method
97
+ assert_equal PT_BASE_PATH + moves_path, FakeWeb.last_request.path
98
+ end
65
99
 
66
100
  def test_user_can_fetch_all_releases_for_a_project_via_stories
67
101
  assert !@user.pivotal_tracker_projects.find(PROJECT_ID).stories(:type => :release).all.empty?
data/test/test_helper.rb CHANGED
@@ -16,7 +16,8 @@ PROJECT_ID = 153937
16
16
  STORY_ID = 6821071
17
17
  RELEASE_ID = 6821121
18
18
 
19
- PT_BASE_URI = "https://www.pivotaltracker.com/services/v3"
19
+ PT_BASE_PATH = "/services/v3"
20
+ PT_BASE_URI = "https://www.pivotaltracker.com" + PT_BASE_PATH
20
21
  { "/projects" => "projects",
21
22
  "/projects/#{PROJECT_ID}" => "project",
22
23
  "/projects/#{PROJECT_ID}/stories" => "stories",
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: peaty
3
3
  version: !ruby/object:Gem::Version
4
- hash: 1
5
4
  prerelease:
6
- segments:
7
- - 0
8
- - 4
9
- - 7
10
- version: 0.4.7
5
+ version: 0.4.8
11
6
  platform: ruby
12
7
  authors:
13
8
  - Matt Todd
@@ -15,191 +10,141 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-04-08 00:00:00 -04:00
13
+ date: 2011-06-01 00:00:00 -04:00
19
14
  default_executable:
20
15
  dependencies:
21
16
  - !ruby/object:Gem::Dependency
22
- prerelease: false
23
17
  name: activesupport
24
- type: :runtime
25
- version_requirements: &id001 !ruby/object:Gem::Requirement
18
+ requirement: &id001 !ruby/object:Gem::Requirement
26
19
  none: false
27
20
  requirements:
28
21
  - - ~>
29
22
  - !ruby/object:Gem::Version
30
- hash: 15
31
- segments:
32
- - 3
33
- - 0
34
- - 4
35
23
  version: 3.0.4
36
- requirement: *id001
37
- - !ruby/object:Gem::Dependency
24
+ type: :runtime
38
25
  prerelease: false
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
39
28
  name: i18n
40
- type: :runtime
41
- version_requirements: &id002 !ruby/object:Gem::Requirement
29
+ requirement: &id002 !ruby/object:Gem::Requirement
42
30
  none: false
43
31
  requirements:
44
32
  - - ~>
45
33
  - !ruby/object:Gem::Version
46
- hash: 13
47
- segments:
48
- - 0
49
- - 4
50
- - 1
51
34
  version: 0.4.1
52
- requirement: *id002
53
- - !ruby/object:Gem::Dependency
35
+ type: :runtime
54
36
  prerelease: false
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
55
39
  name: nokogiri
56
- type: :runtime
57
- version_requirements: &id003 !ruby/object:Gem::Requirement
40
+ requirement: &id003 !ruby/object:Gem::Requirement
58
41
  none: false
59
42
  requirements:
60
43
  - - ">="
61
44
  - !ruby/object:Gem::Version
62
- hash: 3
63
- segments:
64
- - 0
65
45
  version: "0"
66
- requirement: *id003
67
- - !ruby/object:Gem::Dependency
46
+ type: :runtime
68
47
  prerelease: false
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
69
50
  name: nokogiri-happymapper
70
- type: :runtime
71
- version_requirements: &id004 !ruby/object:Gem::Requirement
51
+ requirement: &id004 !ruby/object:Gem::Requirement
72
52
  none: false
73
53
  requirements:
74
54
  - - ">="
75
55
  - !ruby/object:Gem::Version
76
- hash: 3
77
- segments:
78
- - 0
79
56
  version: "0"
80
- requirement: *id004
81
- - !ruby/object:Gem::Dependency
57
+ type: :runtime
82
58
  prerelease: false
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
83
61
  name: rest-client
84
- type: :runtime
85
- version_requirements: &id005 !ruby/object:Gem::Requirement
62
+ requirement: &id005 !ruby/object:Gem::Requirement
86
63
  none: false
87
64
  requirements:
88
65
  - - ">="
89
66
  - !ruby/object:Gem::Version
90
- hash: 3
91
- segments:
92
- - 0
93
67
  version: "0"
94
- requirement: *id005
95
- - !ruby/object:Gem::Dependency
68
+ type: :runtime
96
69
  prerelease: false
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
97
72
  name: xml_to_json
98
- type: :runtime
99
- version_requirements: &id006 !ruby/object:Gem::Requirement
73
+ requirement: &id006 !ruby/object:Gem::Requirement
100
74
  none: false
101
75
  requirements:
102
76
  - - ~>
103
77
  - !ruby/object:Gem::Version
104
- hash: 27
105
- segments:
106
- - 0
107
- - 0
108
- - 2
109
78
  version: 0.0.2
110
- requirement: *id006
111
- - !ruby/object:Gem::Dependency
79
+ type: :runtime
112
80
  prerelease: false
81
+ version_requirements: *id006
82
+ - !ruby/object:Gem::Dependency
113
83
  name: yajl-ruby
114
- type: :runtime
115
- version_requirements: &id007 !ruby/object:Gem::Requirement
84
+ requirement: &id007 !ruby/object:Gem::Requirement
116
85
  none: false
117
86
  requirements:
118
87
  - - ">="
119
88
  - !ruby/object:Gem::Version
120
- hash: 3
121
- segments:
122
- - 0
123
89
  version: "0"
124
- requirement: *id007
125
- - !ruby/object:Gem::Dependency
90
+ type: :runtime
126
91
  prerelease: false
92
+ version_requirements: *id007
93
+ - !ruby/object:Gem::Dependency
127
94
  name: builder
128
- type: :development
129
- version_requirements: &id008 !ruby/object:Gem::Requirement
95
+ requirement: &id008 !ruby/object:Gem::Requirement
130
96
  none: false
131
97
  requirements:
132
98
  - - ">="
133
99
  - !ruby/object:Gem::Version
134
- hash: 3
135
- segments:
136
- - 0
137
100
  version: "0"
138
- requirement: *id008
139
- - !ruby/object:Gem::Dependency
101
+ type: :development
140
102
  prerelease: false
103
+ version_requirements: *id008
104
+ - !ruby/object:Gem::Dependency
141
105
  name: rspec
142
- type: :development
143
- version_requirements: &id009 !ruby/object:Gem::Requirement
106
+ requirement: &id009 !ruby/object:Gem::Requirement
144
107
  none: false
145
108
  requirements:
146
109
  - - "="
147
110
  - !ruby/object:Gem::Version
148
- hash: 11
149
- segments:
150
- - 2
151
- - 1
152
- - 0
153
111
  version: 2.1.0
154
- requirement: *id009
155
- - !ruby/object:Gem::Dependency
112
+ type: :development
156
113
  prerelease: false
114
+ version_requirements: *id009
115
+ - !ruby/object:Gem::Dependency
157
116
  name: bundler
158
- type: :development
159
- version_requirements: &id010 !ruby/object:Gem::Requirement
117
+ requirement: &id010 !ruby/object:Gem::Requirement
160
118
  none: false
161
119
  requirements:
162
120
  - - ~>
163
121
  - !ruby/object:Gem::Version
164
- hash: 23
165
- segments:
166
- - 1
167
- - 0
168
- - 0
169
122
  version: 1.0.0
170
- requirement: *id010
171
- - !ruby/object:Gem::Dependency
123
+ type: :development
172
124
  prerelease: false
125
+ version_requirements: *id010
126
+ - !ruby/object:Gem::Dependency
173
127
  name: jeweler
174
- type: :development
175
- version_requirements: &id011 !ruby/object:Gem::Requirement
128
+ requirement: &id011 !ruby/object:Gem::Requirement
176
129
  none: false
177
130
  requirements:
178
131
  - - ~>
179
132
  - !ruby/object:Gem::Version
180
- hash: 1923832021
181
- segments:
182
- - 1
183
- - 5
184
- - 0
185
- - pre
186
- - 6
187
133
  version: 1.5.0.pre6
188
- requirement: *id011
189
- - !ruby/object:Gem::Dependency
134
+ type: :development
190
135
  prerelease: false
136
+ version_requirements: *id011
137
+ - !ruby/object:Gem::Dependency
191
138
  name: rails_code_qa
192
- type: :development
193
- version_requirements: &id012 !ruby/object:Gem::Requirement
139
+ requirement: &id012 !ruby/object:Gem::Requirement
194
140
  none: false
195
141
  requirements:
196
142
  - - ">="
197
143
  - !ruby/object:Gem::Version
198
- hash: 3
199
- segments:
200
- - 0
201
144
  version: "0"
202
- requirement: *id012
145
+ type: :development
146
+ prerelease: false
147
+ version_requirements: *id012
203
148
  description: Just another Pivotal Tracker API Implementation
204
149
  email: chiology@gmail.com
205
150
  executables: []
@@ -231,6 +176,8 @@ files:
231
176
  - test/fixtures/features.xml
232
177
  - test/fixtures/iterations.xml
233
178
  - test/fixtures/iterations_done.xml
179
+ - test/fixtures/move_after.xml
180
+ - test/fixtures/move_before.xml
234
181
  - test/fixtures/project.xml
235
182
  - test/fixtures/projects.xml
236
183
  - test/fixtures/release.xml
@@ -254,7 +201,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
254
201
  requirements:
255
202
  - - ">="
256
203
  - !ruby/object:Gem::Version
257
- hash: 3
204
+ hash: -2397564694147189909
258
205
  segments:
259
206
  - 0
260
207
  version: "0"
@@ -263,14 +210,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
263
210
  requirements:
264
211
  - - ">="
265
212
  - !ruby/object:Gem::Version
266
- hash: 3
267
- segments:
268
- - 0
269
213
  version: "0"
270
214
  requirements: []
271
215
 
272
216
  rubyforge_project:
273
- rubygems_version: 1.4.2
217
+ rubygems_version: 1.6.2
274
218
  signing_key:
275
219
  specification_version: 3
276
220
  summary: Pivotal Tracker API Implementation