scrumninja 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/lib/scrumninja.rb CHANGED
@@ -2,9 +2,9 @@ require 'scrumninja/client'
2
2
  require 'scrumninja/version'
3
3
 
4
4
  module ScrumNinja
5
- # Alias for FccReboot::Client.new
5
+ # Alias for ScrumNinja::Client.new
6
6
  #
7
- # @return [FccReboot::Client]
7
+ # @return [ScrumNinja::Client]
8
8
  def self.client(options={})
9
9
  ScrumNinja::Client.new(options)
10
10
  end
@@ -46,6 +46,10 @@ module ScrumNinja
46
46
  end
47
47
 
48
48
  def self.story_tasks(api_key,story_id)
49
- client(api_key).story_tasks story_id
49
+ client(api_key).story_tasks story_id
50
+ end
51
+
52
+ def self.project_burndown(api_key,project_id)
53
+ client(api_key).project_burndown project_id
50
54
  end
51
55
  end
@@ -56,6 +56,49 @@ module ScrumNinja
56
56
  response.tasks
57
57
  end
58
58
 
59
+ def project_burndown(project_id,options={})
60
+ burndown = Hashie::Mash.new
61
+ card_wall = project_card_wall project_id, options
62
+ sprints = project_sprints project_id, options
63
+
64
+ card_wall = [] if card_wall.nil?
65
+ sprints = [] if sprints.nil?
66
+
67
+ start_date = sprints[0].starts_on.to_date
68
+ end_date = sprints[0].ends_on.to_date
69
+
70
+ burndown.start = start_date.to_time.to_i * 1000
71
+ burndown.length = (end_date - start_date).to_i + 1
72
+ days_passed = (Date.today - start_date).to_i + 1
73
+ # for each day in the sprint
74
+ burndown.estimates = []
75
+ days_passed.times do |i|
76
+ start_time = (start_date + i).to_time
77
+ end_time = (start_date + i + 1).to_time
78
+ total_hours = 0
79
+ card_wall.each do |task|
80
+ if task.created_at < end_time
81
+ if task.done_at.nil? or task.done_at > end_time
82
+ # we have a task that counts towards today, dig into estimates
83
+ if task.estimates.estimate.is_a? Array then
84
+ estimate_hours = 0
85
+ task.estimates.estimate.each do |estimate|
86
+ estimate_day = estimate.date.to_date
87
+ break if(estimate_day.to_time > end_time)
88
+ estimate_hours = task.estimates.estimate[0].hours.to_f
89
+ end
90
+ total_hours += estimate_hours
91
+ else
92
+ total_hours += task.estimates.estimate.hours.to_f
93
+ end
94
+ end
95
+ end
96
+ end
97
+ burndown.estimates << total_hours
98
+ end
99
+ burndown
100
+ end
101
+
59
102
  private
60
103
 
61
104
  def connection
@@ -1,3 +1,3 @@
1
1
  module ScrumNinja
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -213,6 +213,39 @@ describe ScrumNinja, ".project_story" do
213
213
  end
214
214
  end
215
215
 
216
+ # The project_burndown method
217
+ describe ScrumNinja, ".project_burndown" do
218
+ before do
219
+ # project_burndown uses the cardwall
220
+ stub_request(:get, "http://scrumninja.com/projects/#{PROJECT_ID}/card_wall.xml").
221
+ with(:query => {:api_key => API_KEY}).
222
+ to_return(:body => fixture('card_wall.xml'), :headers => {'Content-Type' => 'application/xml; charset=utf-8'})
223
+
224
+ # project_backlog also uses the sprints
225
+ stub_request(:get, "http://scrumninja.com/projects/#{PROJECT_ID}/sprints.xml").
226
+ with(:query => {:api_key => API_KEY}).
227
+ to_return(:body => fixture('sprints.xml'), :headers => {'Content-Type' => 'application/xml; charset=utf-8'})
228
+ end
229
+
230
+ it "should request the correct resource" do
231
+ ScrumNinja.project_burndown(API_KEY,PROJECT_ID)
232
+ a_request(:get, "http://scrumninja.com/projects/#{PROJECT_ID}/card_wall.xml").
233
+ with(:query => {:api_key => API_KEY}).
234
+ should have_been_made
235
+
236
+ a_request(:get, "http://scrumninja.com/projects/#{PROJECT_ID}/sprints.xml").
237
+ with(:query => {:api_key => API_KEY}).
238
+ should have_been_made
239
+ end
240
+
241
+ it "should return the correct results" do
242
+ burndown = ScrumNinja.project_burndown(API_KEY,PROJECT_ID)
243
+ burndown.should be_an Hash
244
+ burndown.start.should == 1307602800000
245
+ burndown.estimates[0].should == 2.5
246
+ end
247
+ end
248
+
216
249
  # The story_tasks method
217
250
  describe ScrumNinja, ".story_tasks" do
218
251
  before do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scrumninja
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-06-14 00:00:00.000000000Z
12
+ date: 2011-06-17 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &2152497940 !ruby/object:Gem::Requirement
16
+ requirement: &2152749960 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '2.6'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *2152497940
24
+ version_requirements: *2152749960
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: webmock
27
- requirement: &2152497440 !ruby/object:Gem::Requirement
27
+ requirement: &2152749460 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '1.5'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *2152497440
35
+ version_requirements: *2152749460
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: hashie
38
- requirement: &2152496980 !ruby/object:Gem::Requirement
38
+ requirement: &2152749000 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.0.0
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2152496980
46
+ version_requirements: *2152749000
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: multi_xml
49
- requirement: &2152496520 !ruby/object:Gem::Requirement
49
+ requirement: &2152748540 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 0.2.0
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2152496520
57
+ version_requirements: *2152748540
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: faraday_middleware
60
- requirement: &2152496060 !ruby/object:Gem::Requirement
60
+ requirement: &2152748080 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 0.6.0
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *2152496060
68
+ version_requirements: *2152748080
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: hashie
71
- requirement: &2152495600 !ruby/object:Gem::Requirement
71
+ requirement: &2152747620 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 1.0.0
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *2152495600
79
+ version_requirements: *2152747620
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: multi_xml
82
- requirement: &2152495140 !ruby/object:Gem::Requirement
82
+ requirement: &2152747160 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: 0.2.0
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *2152495140
90
+ version_requirements: *2152747160
91
91
  description: Wrapper for the Scrumninja backlog/sprint management tool.
92
92
  email: javier@granicus.com
93
93
  executables: []