backlog 0.17.1 → 0.17.2
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/History.txt +14 -0
- data/Rakefile +9 -2
- data/app/controllers/backlogs_controller.rb +1 -1
- data/app/controllers/user_controller.rb +3 -1
- data/app/views/tasks/_fields_header.rhtml +10 -7
- data/app/views/tasks/_task.rhtml +12 -9
- data/app/views/user/welcome.rhtml +2 -4
- data/lang/en.yaml +1 -0
- data/lang/no.yaml +1 -0
- data/lib/class_table_inheritance.rb +1 -1
- data/public/stylesheets/backlog.css +10 -2
- data/test/functional/user_controller_test.rb +6 -3
- data/test/performance/common.rb +91 -0
- data/test/performance/jetty_test.rb +15 -0
- data/test/performance/server_test.rb +17 -0
- data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/base.rb +1 -1
- metadata +9 -9
- data/test/performance/test.rb +0 -6
- data/test/performance/test_threaded.rb +0 -65
data/History.txt
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
== 0.17.2 2008-01-07
|
2
|
+
|
3
|
+
=== Fixes
|
4
|
+
|
5
|
+
* Made task listing a bit prettier.
|
6
|
+
* Changed to redirect to start page after registering.
|
7
|
+
* Made welcome view slightly more welcoming :)
|
8
|
+
* Fixed workflow to return from detour after updating backlog properties.
|
9
|
+
|
10
|
+
=== Internal
|
11
|
+
|
12
|
+
* Updated gem dependencies.
|
13
|
+
* Added test of WAR file by running it with Jetty.
|
14
|
+
|
1
15
|
== 0.17.1 2008-01-04
|
2
16
|
|
3
17
|
=== Fixes
|
data/Rakefile
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
2
2
|
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
3
3
|
|
4
|
+
require 'erb'
|
5
|
+
|
4
6
|
require(File.join(File.dirname(__FILE__), 'config', 'boot'))
|
5
7
|
|
6
8
|
require 'rake'
|
@@ -30,7 +32,7 @@ Hoe.new("backlog", APP::VERSION) do |p|
|
|
30
32
|
}
|
31
33
|
p.need_zip = true
|
32
34
|
p.url = 'http://rubyforge.org/projects/backlog/'
|
33
|
-
p.extra_deps = [['rails', '>= 1.2.
|
35
|
+
p.extra_deps = [['rails', '>= 1.2.4'], ['gruff', '>= 0.2.9'], ['rmagick', '>= 1.15.12'], ['postgres', '>= 0.7.9']]
|
34
36
|
p.rsync_args = "-av --delete --exclude=wiki*"
|
35
37
|
end
|
36
38
|
|
@@ -45,8 +47,13 @@ end
|
|
45
47
|
|
46
48
|
desc 'Release the application as a Java EE WAR file to RubyForge'
|
47
49
|
task :release_war do
|
50
|
+
FileUtils.rm_rf 'WEB-INF' if File.exists? 'WEB-INF'
|
48
51
|
Dir.mkdir 'WEB-INF' unless File.exists? 'WEB-INF'
|
49
|
-
|
52
|
+
unless File.exists? 'WEB-INF/web.xml.erb'
|
53
|
+
File.open('WEB-INF/web.xml.erb', 'w') do |f|
|
54
|
+
f << ERB.new(File.read('vendor/plugins/goldspike/generators/goldspike/templates/web.xml.erb')).result
|
55
|
+
end
|
56
|
+
end
|
50
57
|
Rake::Task['war:standalone:create'].invoke
|
51
58
|
war_pkg_file = "pkg/backlog-#{APP::VERSION}.war"
|
52
59
|
if File.exists? 'backlog.war'
|
@@ -71,7 +71,7 @@ class BacklogsController < ApplicationController
|
|
71
71
|
@backlog = Backlog.find(params[:id])
|
72
72
|
if @backlog.update_attributes(params[:backlog])
|
73
73
|
flash[:notice] = 'Backlog was successfully updated.'
|
74
|
-
|
74
|
+
back_or_redirect_to :action => :show, :id => @backlog
|
75
75
|
else
|
76
76
|
render :action => 'edit'
|
77
77
|
end
|
@@ -134,12 +134,14 @@ class UserController < ApplicationController
|
|
134
134
|
@user.update_attribute( :deleted, true )
|
135
135
|
logout
|
136
136
|
rescue Exception => ex
|
137
|
-
flash.now[:notice] = "Error: #{
|
137
|
+
flash.now[:notice] = "Error: #{ex}."
|
138
138
|
redirect_back_or_default :action => 'welcome'
|
139
139
|
end
|
140
140
|
end
|
141
141
|
|
142
142
|
def welcome
|
143
|
+
flash.keep
|
144
|
+
back_or_redirect_to :controller => 'welcome'
|
143
145
|
end
|
144
146
|
|
145
147
|
def set_group
|
@@ -1,12 +1,15 @@
|
|
1
1
|
<li>
|
2
2
|
<div style="font-weight: bold">
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
3
|
+
<div style="float: left" />
|
4
|
+
<div class="task_id"><%=active ? 'ID' : l(:resolution_abr)%></div>
|
5
|
+
<div class="task_description"><%=l :task %></div>
|
6
|
+
<div style="float: right">
|
7
|
+
<div class="task_start"><%=l :start if active && backlog.track_times? %></div>
|
8
|
+
<div class="task_end_work"> </div>
|
9
|
+
<div class="task_done"><%=l :done if (active && backlog.track_done?) || work_done %></div>
|
10
|
+
<div class="task_todo"><%=l :todo if active && backlog.track_todo? %></div>
|
11
|
+
<div class="task_buttons"></div>
|
12
|
+
</div>
|
10
13
|
</div>
|
11
14
|
<br clear="all"/>
|
12
15
|
</li>
|
data/app/views/tasks/_task.rhtml
CHANGED
@@ -7,22 +7,22 @@
|
|
7
7
|
<% end %>
|
8
8
|
<% end %>
|
9
9
|
</div>
|
10
|
-
<div style="float: left" style="border:
|
10
|
+
<div style="float: left" style="border: 3px solid red">
|
11
11
|
<%=(" " * @task.depth * 4) if @task.depth > 0 %>
|
12
12
|
<%=resolution_image(@task.resolution) if @task.finished_at %>
|
13
13
|
<%="-" if @task.children.size > 0 %>
|
14
14
|
</div>
|
15
|
-
<div id="task_<%=@task.id%>_id"
|
15
|
+
<div id="task_<%=@task.id%>_id" class="task_id">
|
16
16
|
<%=detour_to "##{@task.id}", :controller => 'tasks', :action => :edit, :id => @task.id, :style => 'border: 0px; margin: 0px; padding: 0px' if @task.position || @task.depth == 0 %>
|
17
17
|
</div>
|
18
|
-
<div id="task_<%=@task.id%>_description"
|
18
|
+
<div id="task_<%=@task.id%>_description" class="task_description">
|
19
19
|
<%=h(@task.description) %>
|
20
20
|
</div>
|
21
21
|
|
22
22
|
|
23
23
|
|
24
24
|
<div style="float: right" style="border: 1px solid black">
|
25
|
-
<div
|
25
|
+
<div class="task_start">
|
26
26
|
<% if active && @task.loggable? -%>
|
27
27
|
<% if @task.work_started? -%>
|
28
28
|
<% remote_form_for(:work, :url => {:controller => 'works', :action => 'update_time', :id => @task.started_work}) do |f| %>
|
@@ -35,15 +35,18 @@
|
|
35
35
|
<% end -%>
|
36
36
|
<% end -%>
|
37
37
|
</div>
|
38
|
-
<div
|
38
|
+
<div class="task_end_work">
|
39
39
|
<% if active && @task.loggable? && @task.work_started? -%>
|
40
40
|
<% form_tag({:controller => 'works', :action => 'update', :id => @task.started_work}) do %>
|
41
41
|
<%= image_detour_to('ernes_stop.png', l(:end_work), {:controller => 'tasks', :action => :end_work, :id => @task.id}, nil, true) %>
|
42
42
|
<% end -%>
|
43
|
+
<% else %>
|
44
|
+
|
43
45
|
<% end -%>
|
44
46
|
</div>
|
45
|
-
<div
|
46
|
-
|
47
|
+
<div class="task_done" align="<%=active && @task.loggable? && @task.track_done? ? 'left' : 'right'%>">
|
48
|
+
|
49
|
+
<% if @task.track_done? || @task.total_done != 0 %>
|
47
50
|
<% if @task.loggable? || @task.finished_at -%>
|
48
51
|
<% unless !@task.track_done? || @task.track_times? || @task.work_started? || @task.finished_at -%>
|
49
52
|
<% form_tag({:controller => 'works', :action => (@task.work_started? ? :edit : :create), :id => @task.started_work}) do %>
|
@@ -58,7 +61,7 @@
|
|
58
61
|
<% end -%>
|
59
62
|
<% end -%>
|
60
63
|
</div>
|
61
|
-
<div
|
64
|
+
<div class="task_todo">
|
62
65
|
<% if active && @task.loggable? -%>
|
63
66
|
<% if @task.track_todo? -%>
|
64
67
|
<% if @task.period.nil? || @task.period.active_or_future? -%>
|
@@ -74,7 +77,7 @@
|
|
74
77
|
<% end -%>
|
75
78
|
<% end -%>
|
76
79
|
</div>
|
77
|
-
<div
|
80
|
+
<div class="task_buttons">
|
78
81
|
<% if @task.active? -%>
|
79
82
|
<% if @task.loggable? -%>
|
80
83
|
<% unless @task.work_started? -%>
|
@@ -2,9 +2,7 @@
|
|
2
2
|
<%= head_helper 'Welcome', :notice => false, :message => false %>
|
3
3
|
<p>You are now logged into the system...</p>
|
4
4
|
<p>
|
5
|
-
|
6
|
-
called store_location, otherwise you would have been redirected
|
7
|
-
somewhere else after a successful login.
|
5
|
+
Welcome to Backlog!
|
8
6
|
</p>
|
9
|
-
<%=
|
7
|
+
<%=link_to l(:welcome_link), :controller => 'welcome' %>
|
10
8
|
</div>
|
data/lang/en.yaml
CHANGED
data/lang/no.yaml
CHANGED
@@ -53,7 +53,7 @@ class ActiveRecord::Base
|
|
53
53
|
proxy_class.class_eval(&block) if block_given?
|
54
54
|
end
|
55
55
|
|
56
|
-
has_one_without_cti proxy_symbol, :class_name => proxy_class.name, :foreign_key => primary_key_name, :dependent =>
|
56
|
+
has_one_without_cti proxy_symbol, :class_name => proxy_class.name, :foreign_key => primary_key_name, :dependent => :destroy
|
57
57
|
|
58
58
|
if options[:save_before_superclass_callbacks] || true
|
59
59
|
# We need the after_save filter for this association to run /before/ any other after_save's already registered on a superclass,
|
@@ -13,8 +13,16 @@ table.input td {vertical-align: top; margin: 0; border: 0; padding: 0 1px;}
|
|
13
13
|
#maincontent div.btitle img.image-submit {float: right;}
|
14
14
|
#maincontent div.btitle h4 {margin-top: 6px;}
|
15
15
|
.highlight {background: yellow;}
|
16
|
-
.task_list {width: 95%; text-align: left; list-style-type: none}
|
17
|
-
.
|
16
|
+
.task_list {width: 95%; text-align: left; list-style-type: none; padding-left: 0}
|
17
|
+
.task_list li {margin-left: 0}
|
18
|
+
.tasks {cursor: move}
|
19
|
+
.task_id {float: left; padding-left: 2px; width: 3em; text-align: center}
|
20
|
+
.task_description {float: left; padding: 1px; width: auto}
|
21
|
+
.task_start {float: left; width: 4em; text-align: center}
|
22
|
+
.task_end_work {float: left; width: 2em}
|
23
|
+
.task_done {float: left; width: 3em}
|
24
|
+
.task_todo {float: left; width: 3em; padding: 1px}
|
25
|
+
.task_buttons {float: left; width: 5em}
|
18
26
|
.dragable-hover {background: yellow; border: 1px solid black;}
|
19
27
|
.dropzone-hover {background: yellow; border: 1px solid black;}
|
20
28
|
th.hours {text-align: right;}
|
@@ -231,7 +231,8 @@ class UserControllerTest < Test::Unit::TestCase
|
|
231
231
|
@request.cookies['autologin'] = CGI::Cookie.new('autologin', {:value => ['no_password_user'], :expires =>30.days.from_now})
|
232
232
|
get :welcome
|
233
233
|
assert_logged_in users(:no_password_user)
|
234
|
-
assert_response :
|
234
|
+
assert_response :redirect
|
235
|
+
assert_redirected_to :controller => 'welcome'
|
235
236
|
end
|
236
237
|
|
237
238
|
def test_autologin_with_token
|
@@ -239,7 +240,8 @@ class UserControllerTest < Test::Unit::TestCase
|
|
239
240
|
@request.cookies['token'] = CGI::Cookie.new('autologin', {:value => ['random_token_string'], :expires =>30.days.from_now})
|
240
241
|
get :welcome
|
241
242
|
assert_logged_in users(:no_password_user)
|
242
|
-
assert_response :
|
243
|
+
assert_response :redirect
|
244
|
+
assert_redirected_to :controller => 'welcome'
|
243
245
|
end
|
244
246
|
|
245
247
|
def test_autologin_unverified_user_with_token
|
@@ -248,7 +250,8 @@ class UserControllerTest < Test::Unit::TestCase
|
|
248
250
|
get :welcome
|
249
251
|
assert_logged_in users(:no_password_user)
|
250
252
|
assert current_user.verified?
|
251
|
-
assert_response :
|
253
|
+
assert_response :redirect
|
254
|
+
assert_redirected_to :controller => 'welcome'
|
252
255
|
end
|
253
256
|
|
254
257
|
private
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
|
3
|
+
module Backlog
|
4
|
+
module Performance
|
5
|
+
module Tests
|
6
|
+
def start_server
|
7
|
+
@port = 4000
|
8
|
+
@factor = 1.0
|
9
|
+
@server_thread = IO.popen("script/server -e test -p #{@port}")
|
10
|
+
Thread.start do
|
11
|
+
loop do
|
12
|
+
lines = @server_thread.readline
|
13
|
+
#puts lines
|
14
|
+
end
|
15
|
+
end
|
16
|
+
sleep 4
|
17
|
+
end
|
18
|
+
|
19
|
+
def stop_server
|
20
|
+
if @server_thread
|
21
|
+
Process.kill("TERM", @server_thread.pid)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def start_jetty
|
26
|
+
@port = 8080
|
27
|
+
@context = '/backlog'
|
28
|
+
@factor = 2.0
|
29
|
+
ENV['RAILS_ENV'] = 'test'
|
30
|
+
@jetty_thread = IO.popen("rake war:standalone:run")
|
31
|
+
Thread.start do
|
32
|
+
loop do
|
33
|
+
lines = @jetty_thread.readline
|
34
|
+
puts lines
|
35
|
+
end
|
36
|
+
end
|
37
|
+
sleep 20
|
38
|
+
end
|
39
|
+
|
40
|
+
def stop_jetty
|
41
|
+
if @jetty_thread
|
42
|
+
Process.kill("TERM", @jetty_thread.pid)
|
43
|
+
Process.kill("KILL", @jetty_thread.pid)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_lots_of_requests
|
48
|
+
runs = 3
|
49
|
+
no_of_threads = 2
|
50
|
+
hits_per_thread = 5
|
51
|
+
|
52
|
+
duration = with_timing("First") {get_burn_down_chart}
|
53
|
+
first_hit_limit = 12 * @factor
|
54
|
+
assert duration <= first_hit_limit, "Request took #{duration} seconds. Should be less than #{first_hit_limit} seconds."
|
55
|
+
|
56
|
+
runs.times do |run_no|
|
57
|
+
duration = with_timing((run_no+1)*no_of_threads*hits_per_thread, no_of_threads*hits_per_thread) do
|
58
|
+
threads = (1..no_of_threads).map do |i|
|
59
|
+
Thread.new do
|
60
|
+
hits_per_thread.times {get_burn_down_chart}
|
61
|
+
end
|
62
|
+
end
|
63
|
+
threads.each {|thread| thread.join}
|
64
|
+
end
|
65
|
+
maximum_duration = 6.0 * no_of_threads * hits_per_thread * @factor
|
66
|
+
assert duration <= maximum_duration, "Performance to low. Expected #{maximum_duration} or less, took #{duration}."
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def with_timing title = "Time", count = 1
|
73
|
+
start = Time.now
|
74
|
+
yield
|
75
|
+
stop = Time.now
|
76
|
+
duration = stop-start
|
77
|
+
puts "#{title}: #{'%.1f' % duration}s, #{(count/duration).to_i if count}/s"
|
78
|
+
duration
|
79
|
+
end
|
80
|
+
|
81
|
+
def get_burn_down_chart
|
82
|
+
path = "#{@context}/parties/burn_down_chart/1"
|
83
|
+
Net::HTTP::start('localhost', @port) do |http|
|
84
|
+
response = http.get path
|
85
|
+
assert response.body =~ /^.PNG/, response.body
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
require File.dirname(__FILE__) + '/common'
|
3
|
+
|
4
|
+
class JettyTest < Test::Unit::TestCase
|
5
|
+
include Backlog::Performance::Tests
|
6
|
+
|
7
|
+
def setup
|
8
|
+
start_jetty
|
9
|
+
end
|
10
|
+
|
11
|
+
def teardown
|
12
|
+
stop_jetty
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
require File.dirname(__FILE__) + '/common'
|
3
|
+
|
4
|
+
class ServerTest < Test::Unit::TestCase
|
5
|
+
include Backlog::Performance::Tests
|
6
|
+
|
7
|
+
PORT = 4000
|
8
|
+
|
9
|
+
def setup
|
10
|
+
start_server
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
stop_server
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: backlog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.17.
|
4
|
+
version: 0.17.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Uwe Kubosch
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-01-
|
12
|
+
date: 2008-01-07 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.2.
|
22
|
+
version: 1.2.4
|
23
23
|
version:
|
24
24
|
- !ruby/object:Gem::Dependency
|
25
25
|
name: gruff
|
@@ -28,7 +28,7 @@ dependencies:
|
|
28
28
|
requirements:
|
29
29
|
- - ">="
|
30
30
|
- !ruby/object:Gem::Version
|
31
|
-
version: 0.2.
|
31
|
+
version: 0.2.9
|
32
32
|
version:
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: rmagick
|
@@ -37,7 +37,7 @@ dependencies:
|
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.15.
|
40
|
+
version: 1.15.12
|
41
41
|
version:
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: postgres
|
@@ -46,7 +46,7 @@ dependencies:
|
|
46
46
|
requirements:
|
47
47
|
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: 0.7.
|
49
|
+
version: 0.7.9
|
50
50
|
version:
|
51
51
|
- !ruby/object:Gem::Dependency
|
52
52
|
name: hoe
|
@@ -283,8 +283,9 @@ files:
|
|
283
283
|
- test/fixtures/customers.yml
|
284
284
|
- test/fixtures/tasks.yml
|
285
285
|
- test/performance
|
286
|
-
- test/performance/
|
287
|
-
- test/performance/
|
286
|
+
- test/performance/server_test.rb
|
287
|
+
- test/performance/common.rb
|
288
|
+
- test/performance/jetty_test.rb
|
288
289
|
- LICENSE_LOCALIZATION
|
289
290
|
- README_LOCALIZATION
|
290
291
|
- History.txt
|
@@ -627,4 +628,3 @@ specification_version: 2
|
|
627
628
|
summary: Application to aid collecting, processing, organizing, reviewing and doing tasks.
|
628
629
|
test_files:
|
629
630
|
- test/test_helper.rb
|
630
|
-
- test/performance/test_threaded.rb
|
data/test/performance/test.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
-
|
3
|
-
class BacklogsControllerTest < Test::Unit::TestCase
|
4
|
-
PORT = 4000
|
5
|
-
|
6
|
-
def setup
|
7
|
-
@server_thread = IO.popen("script/server -e test -p #{PORT}")
|
8
|
-
Thread.start do
|
9
|
-
loop do
|
10
|
-
lines = @server_thread.readline
|
11
|
-
#puts lines
|
12
|
-
end
|
13
|
-
end
|
14
|
-
sleep 4
|
15
|
-
end
|
16
|
-
|
17
|
-
def teardown
|
18
|
-
if @server_thread
|
19
|
-
Process.kill("TERM", @server_thread.pid)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_lots_of_requests
|
24
|
-
runs = 3
|
25
|
-
no_of_threads = 2
|
26
|
-
hits_per_thread = 5
|
27
|
-
|
28
|
-
duration = with_timing("First") {get_burn_down_chart}
|
29
|
-
first_hit_limit = 12
|
30
|
-
assert duration <= first_hit_limit, "Request took #{duration} seconds. Should be less than #{first_hit_limit} seconds."
|
31
|
-
|
32
|
-
runs.times do |run_no|
|
33
|
-
duration = with_timing((run_no+1)*no_of_threads*hits_per_thread, no_of_threads*hits_per_thread) do
|
34
|
-
threads = (1..no_of_threads).map do |i|
|
35
|
-
Thread.new do
|
36
|
-
hits_per_thread.times {get_burn_down_chart}
|
37
|
-
end
|
38
|
-
end
|
39
|
-
threads.each {|thread| thread.join}
|
40
|
-
end
|
41
|
-
maximum_duration = 6.0 * no_of_threads * hits_per_thread
|
42
|
-
assert duration <= maximum_duration, "Performance to low. Expected #{maximum_duration} or less, took #{duration}."
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
|
48
|
-
def with_timing title = "Time", count = 1
|
49
|
-
start = Time.now
|
50
|
-
yield
|
51
|
-
stop = Time.now
|
52
|
-
duration = stop-start
|
53
|
-
puts "#{title}: #{'%.1f' % duration}s, #{(count/duration).to_i if count}/s"
|
54
|
-
duration
|
55
|
-
end
|
56
|
-
|
57
|
-
def get_burn_down_chart
|
58
|
-
path = '/parties/burn_down_chart/1'
|
59
|
-
Net::HTTP::start('localhost', port = PORT) do |http|
|
60
|
-
response = http.get path
|
61
|
-
assert response.body =~ /^.PNG/
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|