scrumninja 0.1.2 → 0.1.3

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/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: []