peaty 0.3.0 → 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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.4.0
data/lib/peaty/base.rb CHANGED
@@ -21,8 +21,21 @@ module Peaty
21
21
  end
22
22
  end
23
23
 
24
+ def self.build(attrs = {})
25
+ new(attrs)
26
+ end
27
+
24
28
  def method_missing(method, *args)
25
- return self.attributes[method.to_s] if respond_to?(method)
29
+ method.to_s =~ /^([^\?\=]+)(\?|\=)?$/
30
+ method_name, predicate = $1, $2
31
+
32
+ case predicate
33
+ when '?'; return self.attributes[method_name].present?
34
+ when '='; return self.attributes[method_name] = args.first
35
+ else
36
+ return self.attributes[method_name] if respond_to?(method_name)
37
+ end
38
+
26
39
  super
27
40
  end
28
41
  def respond_to?(method)
@@ -33,6 +46,15 @@ module Peaty
33
46
  self.attributes["id"]
34
47
  end
35
48
 
49
+ def new_record?
50
+ id.nil? or id.to_i.zero?
51
+ end
52
+
53
+ def save
54
+ query_string = @attributes.map{ |k,v| "#{CGI.escape("%s[%s]" % [self.class.element, k.to_s])}=#{CGI.escape(v.to_s)}" }.join('&')
55
+ @attributes.replace self.class.parse(self.connection["%s?%s" % [self.class.collection_path(@attributes), query_string]].post(:params => @attributes).body, self.class.element).first.attributes
56
+ end
57
+
36
58
  class << self
37
59
  attr_accessor :connection
38
60
 
data/lib/peaty/proxy.rb CHANGED
@@ -4,7 +4,7 @@ module Peaty
4
4
  attr_accessor :target, :connection, :options
5
5
 
6
6
  def initialize(target, connection, options = {})
7
- @target, @connection, @options = target, connection, options
7
+ @target, @connection, @options = target, connection, options.with_indifferent_access
8
8
  end
9
9
 
10
10
  def method_missing(method, *args)
@@ -24,6 +24,10 @@ module Peaty
24
24
 
25
25
  self
26
26
  end
27
+
28
+ def self.build(attrs = {})
29
+ @target.build(@options.merge(attrs.with_indifferent_access))
30
+ end
27
31
  end
28
32
 
29
33
  end
data/lib/peaty/story.rb CHANGED
@@ -3,7 +3,7 @@ module Peaty
3
3
  class Story < Base
4
4
 
5
5
  def story_type
6
- self.attributes["story_type"].to_sym
6
+ self.attributes["story_type"].to_sym if story_type?
7
7
  end
8
8
  alias type story_type
9
9
 
data/lib/peaty.rb CHANGED
@@ -7,6 +7,7 @@ require 'active_support/core_ext/array/extract_options'
7
7
  require 'active_support/core_ext/array/wrap'
8
8
  require 'active_support/core_ext/hash/indifferent_access'
9
9
  require 'active_support/core_ext/hash/reverse_merge'
10
+ require 'active_support/core_ext/object/blank'
10
11
 
11
12
  require 'rest-client'
12
13
  require 'nokogiri'
@@ -24,7 +25,7 @@ require 'peaty/user'
24
25
 
25
26
  module Peaty
26
27
 
27
- VERSION = "0.0.0"
28
+ VERSION = "0.4.0"
28
29
 
29
30
  def self.root
30
31
  @root ||= Pathname.new(__FILE__).dirname.parent
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.3.0"
8
+ s.version = "0.4.0"
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{2010-12-01}
12
+ s.date = %q{2011-03-01}
13
13
  s.description = %q{Just another Pivotal Tracker API Implementation}
14
14
  s.email = %q{chiology@gmail.com}
15
15
  s.files = [
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
30
30
  "test/.gitignore",
31
31
  "test/fixtures/bugs.xml",
32
32
  "test/fixtures/chores.xml",
33
+ "test/fixtures/create_story.xml",
33
34
  "test/fixtures/features.xml",
34
35
  "test/fixtures/iterations.xml",
35
36
  "test/fixtures/iterations_done.xml",
@@ -46,7 +47,7 @@ Gem::Specification.new do |s|
46
47
  s.homepage = %q{http://github.com/mtodd/peaty}
47
48
  s.licenses = ["MIT"]
48
49
  s.require_paths = ["lib"]
49
- s.rubygems_version = %q{1.3.7}
50
+ s.rubygems_version = %q{1.5.2}
50
51
  s.summary = %q{Pivotal Tracker API Implementation}
51
52
  s.test_files = [
52
53
  "test/peaty_test.rb",
@@ -54,7 +55,6 @@ Gem::Specification.new do |s|
54
55
  ]
55
56
 
56
57
  if s.respond_to? :specification_version then
57
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
58
58
  s.specification_version = 3
59
59
 
60
60
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <story>
3
+ <id type="integer">10564869</id>
4
+ <project_id type="integer">153937</project_id>
5
+ <story_type>feature</story_type>
6
+ <url>http://www.pivotaltracker.com/story/show/10564869</url>
7
+ <estimate type="integer">-1</estimate>
8
+ <current_state>unscheduled</current_state>
9
+ <description></description>
10
+ <name>Test</name>
11
+ <requested_by>Matt Todd</requested_by>
12
+ <created_at type="datetime">2011/03/01 00:40:04 EST</created_at>
13
+ <updated_at type="datetime">2011/03/01 00:40:04 EST</updated_at>
14
+ </story>
data/test/peaty_test.rb CHANGED
@@ -78,6 +78,18 @@ class PeatyTest < Test::Unit::TestCase
78
78
  assert_equal :chore, @user.pivotal_tracker_projects.find(PROJECT_ID).chores.first.story_type
79
79
  end
80
80
 
81
+ def test_user_can_create_a_new_story_for_a_project
82
+ story = @user.pivotal_tracker_projects.find(PROJECT_ID).stories.build(:name => name = "Test")
83
+ assert story.is_a?(Peaty::Story)
84
+ assert story.new_record?
85
+ assert_equal PROJECT_ID, story.project_id
86
+ assert_equal name, story.name
87
+
88
+ story.estimate = 3
89
+ assert story.save
90
+ assert !story.new_record?
91
+ end
92
+
81
93
  # Tests for Iterations
82
94
  def test_user_can_fetch_a_projects_iterations
83
95
  project = @user.pivotal_tracker_projects.find(PROJECT_ID)
data/test/test_helper.rb CHANGED
@@ -33,6 +33,10 @@ uri = "http://www.pivotaltracker.com/services/v3"
33
33
  FakeWeb.register_uri(:get, uri + path, :body => File.read(File.join(File.dirname(__FILE__), "fixtures", "%s.xml" % fixture)))
34
34
  end
35
35
 
36
+ FakeWeb.register_uri(:post, Regexp.new(uri + "/projects/#{PROJECT_ID}/stories"),
37
+ :body => File.read(File.join(File.dirname(__FILE__), "fixtures", "create_story.xml")))
38
+ # http://www.pivotaltracker.com/services/v3/projects/153937/stories?story%5Bname%5D=Test&story%5Bproject_id%5D=153937&story%5Bestimate%5D=3
39
+
36
40
  class User < Struct.new(:pivotal_tracker_api_key)
37
41
  pivotal_tracker_for :pivotal_tracker_api_key
38
42
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: peaty
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
5
- prerelease: false
4
+ hash: 15
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
- - 3
8
+ - 4
9
9
  - 0
10
- version: 0.3.0
10
+ version: 0.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Matt Todd
@@ -15,12 +15,11 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-12-01 00:00:00 -05:00
18
+ date: 2011-03-01 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: activesupport
23
- prerelease: false
22
+ type: :runtime
24
23
  requirement: &id001 !ruby/object:Gem::Requirement
25
24
  none: false
26
25
  requirements:
@@ -32,11 +31,11 @@ dependencies:
32
31
  - 0
33
32
  - 1
34
33
  version: 3.0.1
35
- type: :runtime
34
+ name: activesupport
36
35
  version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: nokogiri
39
36
  prerelease: false
37
+ - !ruby/object:Gem::Dependency
38
+ type: :runtime
40
39
  requirement: &id002 !ruby/object:Gem::Requirement
41
40
  none: false
42
41
  requirements:
@@ -46,11 +45,11 @@ dependencies:
46
45
  segments:
47
46
  - 0
48
47
  version: "0"
49
- type: :runtime
48
+ name: nokogiri
50
49
  version_requirements: *id002
51
- - !ruby/object:Gem::Dependency
52
- name: nokogiri-happymapper
53
50
  prerelease: false
51
+ - !ruby/object:Gem::Dependency
52
+ type: :runtime
54
53
  requirement: &id003 !ruby/object:Gem::Requirement
55
54
  none: false
56
55
  requirements:
@@ -60,11 +59,11 @@ dependencies:
60
59
  segments:
61
60
  - 0
62
61
  version: "0"
63
- type: :runtime
62
+ name: nokogiri-happymapper
64
63
  version_requirements: *id003
65
- - !ruby/object:Gem::Dependency
66
- name: rest-client
67
64
  prerelease: false
65
+ - !ruby/object:Gem::Dependency
66
+ type: :runtime
68
67
  requirement: &id004 !ruby/object:Gem::Requirement
69
68
  none: false
70
69
  requirements:
@@ -74,11 +73,11 @@ dependencies:
74
73
  segments:
75
74
  - 0
76
75
  version: "0"
77
- type: :runtime
76
+ name: rest-client
78
77
  version_requirements: *id004
79
- - !ruby/object:Gem::Dependency
80
- name: xml_to_json
81
78
  prerelease: false
79
+ - !ruby/object:Gem::Dependency
80
+ type: :runtime
82
81
  requirement: &id005 !ruby/object:Gem::Requirement
83
82
  none: false
84
83
  requirements:
@@ -90,11 +89,11 @@ dependencies:
90
89
  - 0
91
90
  - 1
92
91
  version: 0.0.1
93
- type: :runtime
92
+ name: xml_to_json
94
93
  version_requirements: *id005
95
- - !ruby/object:Gem::Dependency
96
- name: yajl-ruby
97
94
  prerelease: false
95
+ - !ruby/object:Gem::Dependency
96
+ type: :runtime
98
97
  requirement: &id006 !ruby/object:Gem::Requirement
99
98
  none: false
100
99
  requirements:
@@ -104,11 +103,11 @@ dependencies:
104
103
  segments:
105
104
  - 0
106
105
  version: "0"
107
- type: :runtime
108
- version_requirements: *id006
109
- - !ruby/object:Gem::Dependency
110
106
  name: yajl-ruby
107
+ version_requirements: *id006
111
108
  prerelease: false
109
+ - !ruby/object:Gem::Dependency
110
+ type: :development
112
111
  requirement: &id007 !ruby/object:Gem::Requirement
113
112
  none: false
114
113
  requirements:
@@ -118,11 +117,11 @@ dependencies:
118
117
  segments:
119
118
  - 0
120
119
  version: "0"
121
- type: :development
120
+ name: yajl-ruby
122
121
  version_requirements: *id007
123
- - !ruby/object:Gem::Dependency
124
- name: builder
125
122
  prerelease: false
123
+ - !ruby/object:Gem::Dependency
124
+ type: :development
126
125
  requirement: &id008 !ruby/object:Gem::Requirement
127
126
  none: false
128
127
  requirements:
@@ -132,11 +131,11 @@ dependencies:
132
131
  segments:
133
132
  - 0
134
133
  version: "0"
135
- type: :development
134
+ name: builder
136
135
  version_requirements: *id008
137
- - !ruby/object:Gem::Dependency
138
- name: rspec
139
136
  prerelease: false
137
+ - !ruby/object:Gem::Dependency
138
+ type: :development
140
139
  requirement: &id009 !ruby/object:Gem::Requirement
141
140
  none: false
142
141
  requirements:
@@ -148,11 +147,11 @@ dependencies:
148
147
  - 1
149
148
  - 0
150
149
  version: 2.1.0
151
- type: :development
150
+ name: rspec
152
151
  version_requirements: *id009
153
- - !ruby/object:Gem::Dependency
154
- name: bundler
155
152
  prerelease: false
153
+ - !ruby/object:Gem::Dependency
154
+ type: :development
156
155
  requirement: &id010 !ruby/object:Gem::Requirement
157
156
  none: false
158
157
  requirements:
@@ -164,28 +163,29 @@ dependencies:
164
163
  - 0
165
164
  - 0
166
165
  version: 1.0.0
167
- type: :development
166
+ name: bundler
168
167
  version_requirements: *id010
169
- - !ruby/object:Gem::Dependency
170
- name: jeweler
171
168
  prerelease: false
169
+ - !ruby/object:Gem::Dependency
170
+ type: :development
172
171
  requirement: &id011 !ruby/object:Gem::Requirement
173
172
  none: false
174
173
  requirements:
175
174
  - - ~>
176
175
  - !ruby/object:Gem::Version
177
- hash: -1876988219
176
+ hash: 1923832021
178
177
  segments:
179
178
  - 1
180
179
  - 5
181
180
  - 0
182
- - pre6
181
+ - pre
182
+ - 6
183
183
  version: 1.5.0.pre6
184
- type: :development
184
+ name: jeweler
185
185
  version_requirements: *id011
186
- - !ruby/object:Gem::Dependency
187
- name: rails_code_qa
188
186
  prerelease: false
187
+ - !ruby/object:Gem::Dependency
188
+ type: :development
189
189
  requirement: &id012 !ruby/object:Gem::Requirement
190
190
  none: false
191
191
  requirements:
@@ -195,11 +195,11 @@ dependencies:
195
195
  segments:
196
196
  - 0
197
197
  version: "0"
198
- type: :development
198
+ name: rails_code_qa
199
199
  version_requirements: *id012
200
- - !ruby/object:Gem::Dependency
201
- name: nokogiri
202
200
  prerelease: false
201
+ - !ruby/object:Gem::Dependency
202
+ type: :runtime
203
203
  requirement: &id013 !ruby/object:Gem::Requirement
204
204
  none: false
205
205
  requirements:
@@ -212,11 +212,11 @@ dependencies:
212
212
  - 3
213
213
  - 1
214
214
  version: 1.4.3.1
215
- type: :runtime
215
+ name: nokogiri
216
216
  version_requirements: *id013
217
- - !ruby/object:Gem::Dependency
218
- name: yajl-ruby
219
217
  prerelease: false
218
+ - !ruby/object:Gem::Dependency
219
+ type: :development
220
220
  requirement: &id014 !ruby/object:Gem::Requirement
221
221
  none: false
222
222
  requirements:
@@ -228,11 +228,11 @@ dependencies:
228
228
  - 7
229
229
  - 8
230
230
  version: 0.7.8
231
- type: :development
231
+ name: yajl-ruby
232
232
  version_requirements: *id014
233
- - !ruby/object:Gem::Dependency
234
- name: activesupport
235
233
  prerelease: false
234
+ - !ruby/object:Gem::Dependency
235
+ type: :development
236
236
  requirement: &id015 !ruby/object:Gem::Requirement
237
237
  none: false
238
238
  requirements:
@@ -244,11 +244,11 @@ dependencies:
244
244
  - 0
245
245
  - 1
246
246
  version: 3.0.1
247
- type: :development
247
+ name: activesupport
248
248
  version_requirements: *id015
249
- - !ruby/object:Gem::Dependency
250
- name: builder
251
249
  prerelease: false
250
+ - !ruby/object:Gem::Dependency
251
+ type: :development
252
252
  requirement: &id016 !ruby/object:Gem::Requirement
253
253
  none: false
254
254
  requirements:
@@ -260,11 +260,11 @@ dependencies:
260
260
  - 1
261
261
  - 2
262
262
  version: 2.1.2
263
- type: :development
263
+ name: builder
264
264
  version_requirements: *id016
265
- - !ruby/object:Gem::Dependency
266
- name: rspec
267
265
  prerelease: false
266
+ - !ruby/object:Gem::Dependency
267
+ type: :development
268
268
  requirement: &id017 !ruby/object:Gem::Requirement
269
269
  none: false
270
270
  requirements:
@@ -276,11 +276,11 @@ dependencies:
276
276
  - 1
277
277
  - 0
278
278
  version: 2.1.0
279
- type: :development
279
+ name: rspec
280
280
  version_requirements: *id017
281
- - !ruby/object:Gem::Dependency
282
- name: bundler
283
281
  prerelease: false
282
+ - !ruby/object:Gem::Dependency
283
+ type: :development
284
284
  requirement: &id018 !ruby/object:Gem::Requirement
285
285
  none: false
286
286
  requirements:
@@ -292,28 +292,29 @@ dependencies:
292
292
  - 0
293
293
  - 0
294
294
  version: 1.0.0
295
- type: :development
295
+ name: bundler
296
296
  version_requirements: *id018
297
- - !ruby/object:Gem::Dependency
298
- name: jeweler
299
297
  prerelease: false
298
+ - !ruby/object:Gem::Dependency
299
+ type: :development
300
300
  requirement: &id019 !ruby/object:Gem::Requirement
301
301
  none: false
302
302
  requirements:
303
303
  - - ~>
304
304
  - !ruby/object:Gem::Version
305
- hash: -1876988219
305
+ hash: 1923832021
306
306
  segments:
307
307
  - 1
308
308
  - 5
309
309
  - 0
310
- - pre6
310
+ - pre
311
+ - 6
311
312
  version: 1.5.0.pre6
312
- type: :development
313
+ name: jeweler
313
314
  version_requirements: *id019
314
- - !ruby/object:Gem::Dependency
315
- name: rails_code_qa
316
315
  prerelease: false
316
+ - !ruby/object:Gem::Dependency
317
+ type: :development
317
318
  requirement: &id020 !ruby/object:Gem::Requirement
318
319
  none: false
319
320
  requirements:
@@ -323,8 +324,9 @@ dependencies:
323
324
  segments:
324
325
  - 0
325
326
  version: "0"
326
- type: :development
327
+ name: rails_code_qa
327
328
  version_requirements: *id020
329
+ prerelease: false
328
330
  description: Just another Pivotal Tracker API Implementation
329
331
  email: chiology@gmail.com
330
332
  executables: []
@@ -351,6 +353,7 @@ files:
351
353
  - test/.gitignore
352
354
  - test/fixtures/bugs.xml
353
355
  - test/fixtures/chores.xml
356
+ - test/fixtures/create_story.xml
354
357
  - test/fixtures/features.xml
355
358
  - test/fixtures/iterations.xml
356
359
  - test/fixtures/iterations_done.xml
@@ -393,7 +396,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
393
396
  requirements: []
394
397
 
395
398
  rubyforge_project:
396
- rubygems_version: 1.3.7
399
+ rubygems_version: 1.5.2
397
400
  signing_key:
398
401
  specification_version: 3
399
402
  summary: Pivotal Tracker API Implementation