backlog 0.10.8 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. data/History.txt +14 -0
  2. data/app/controllers/backlogs_controller.rb +2 -0
  3. data/app/controllers/work_accounts_controller.rb +51 -0
  4. data/app/controllers/works_controller.rb +72 -29
  5. data/app/helpers/application_helper.rb +1 -2
  6. data/app/helpers/work_accounts_helper.rb +2 -0
  7. data/app/models/backlog.rb +10 -3
  8. data/app/models/configuration.rb +2 -0
  9. data/app/models/customer.rb +2 -0
  10. data/app/models/task.rb +26 -5
  11. data/app/models/work.rb +18 -13
  12. data/app/models/work_account.rb +12 -0
  13. data/app/views/backlogs/_form.rhtml +5 -4
  14. data/app/views/layouts/_left_top.rhtml +1 -8
  15. data/app/views/layouts/_notice.rhtml +15 -0
  16. data/app/views/layouts/wide.rhtml +4 -10
  17. data/app/views/tasks/_fields_header.rhtml +1 -1
  18. data/app/views/work_accounts/_form.rhtml +10 -0
  19. data/app/views/work_accounts/_name_list.rhtml +5 -0
  20. data/app/views/work_accounts/edit.rhtml +9 -0
  21. data/app/views/work_accounts/list.rhtml +27 -0
  22. data/app/views/work_accounts/new.rhtml +8 -0
  23. data/app/views/work_accounts/show.rhtml +8 -0
  24. data/app/views/works/_description_list.rhtml +5 -0
  25. data/app/views/works/_form.rhtml +8 -2
  26. data/app/views/works/_row.rhtml +32 -0
  27. data/app/views/works/_row_field.rhtml +3 -0
  28. data/app/views/works/daily_work_sheet.rhtml +35 -59
  29. data/app/views/works/edit.rhtml +1 -1
  30. data/app/views/works/list.rhtml +1 -1
  31. data/app/views/works/timeliste.rhtml +3 -3
  32. data/app/views/works/update_row.rjs +6 -0
  33. data/app/views/works/weekly_work_sheet.rhtml +5 -5
  34. data/bin/backlog +4 -1
  35. data/bin/backlog_init.d +13 -0
  36. data/config/database.yml +0 -4
  37. data/config/environment.rb +1 -1
  38. data/db/backup/backlogs.yml +118 -0
  39. data/db/backup/estimates.yml +7371 -0
  40. data/db/backup/groups.yml +37 -0
  41. data/db/backup/parties.yml +2 -0
  42. data/db/backup/periods.yml +386 -0
  43. data/db/backup/task_files.yml +2 -0
  44. data/db/backup/tasks.yml +15770 -0
  45. data/db/backup/users.yml +209 -0
  46. data/db/backup/works.yml +6203 -0
  47. data/db/migrate/018_create_groups.rb +0 -1
  48. data/db/migrate/021_create_work_accounts.rb +113 -0
  49. data/db/schema.rb +35 -10
  50. data/lang/en.yaml +3 -0
  51. data/lang/no.yaml +3 -0
  52. data/lib/change_column_null_migration_fix.rb +13 -0
  53. data/nbproject/private/config.properties +0 -0
  54. data/nbproject/private/private.properties +1 -0
  55. data/nbproject/private/private.xml +4 -0
  56. data/nbproject/private/rake-t.txt +95 -0
  57. data/nbproject/project.properties +4 -0
  58. data/nbproject/project.xml +9 -0
  59. data/public/Frav/303/246rsskjema.xls +0 -0
  60. data/public/stylesheets/scaffold.css +74 -0
  61. data/test/fixtures/backlogs.yml +2 -0
  62. data/test/fixtures/configurations.yml +5 -0
  63. data/test/fixtures/customers.yml +7 -0
  64. data/test/fixtures/tasks.yml +1 -0
  65. data/test/fixtures/users.yml +3 -5
  66. data/test/fixtures/work_accounts.yml +7 -0
  67. data/test/fixtures/works.yml +11 -0
  68. data/test/functional/backlogs_controller_test.rb +1 -1
  69. data/test/functional/work_accounts_controller_test.rb +93 -0
  70. data/test/functional/works_controller_test.rb +6 -2
  71. data/test/integration/user_system_test.rb +1 -1
  72. data/test/performance/test.rb +4 -1
  73. data/test/unit/configuration_test.rb +10 -0
  74. data/test/unit/customer_test.rb +10 -0
  75. data/test/unit/estimate_test.rb +1 -1
  76. data/test/unit/group_test.rb +1 -1
  77. data/test/unit/period_test.rb +1 -1
  78. data/test/unit/task_file_test.rb +1 -1
  79. data/test/unit/task_test.rb +1 -1
  80. data/test/unit/work_account_test.rb +10 -0
  81. data/test/unit/work_test.rb +1 -1
  82. data/vendor/plugins/goldspike/lib/java_library.rb +5 -11
  83. data/vendor/plugins/goldspike/lib/run.rb +1 -2
  84. data/vendor/plugins/goldspike/lib/war_config.rb +7 -10
  85. metadata +50 -3
  86. data/app/views/tasks/_description_list.rhtml +0 -5
@@ -2,6 +2,8 @@
2
2
  first:
3
3
  id: 1
4
4
  name: My backlog
5
+ work_account_id: 1
5
6
  another:
6
7
  id: 2
7
8
  name: Your backlog
9
+ work_account_id: 2
@@ -0,0 +1,5 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+ one:
3
+ id: 1
4
+ two:
5
+ id: 2
@@ -0,0 +1,7 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+ one:
3
+ id: 1
4
+ name: Mesta
5
+ two:
6
+ id: 2
7
+ name: Statens Veivesen
@@ -19,6 +19,7 @@
19
19
  backlog_id: 1
20
20
  period_id: 3
21
21
  description: postponed task
22
+ position: NULL
22
23
  finished_at: 2007-08-02 14:15:42
23
24
  resolution: POSTPONED
24
25
  - started:
@@ -1,5 +1,3 @@
1
- # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
-
3
1
  tesla:
4
2
  party_id: 1000001
5
3
  login: tesla
@@ -8,7 +6,7 @@ tesla:
8
6
  email: tesla@example.com
9
7
  verified: true
10
8
  security_token: random_token_string
11
- token_expiry: <%= (Clock.now - 1.day) %> # expired
9
+ token_expiry: <%= (Clock.now - 1.day).strftime("%Y-%m-%d %H:%M:%S") %> # expired
12
10
  deleted: false
13
11
 
14
12
  long_user:
@@ -46,7 +44,7 @@ unverified_user:
46
44
  email: unverified_user@example.com
47
45
  verified: false
48
46
  security_token: random_token_string
49
- token_expiry: <%= (Clock.now + User.token_lifetime) %> # for mysql, add .strftime("%y-%m-%d %H:%M:%S")
47
+ token_expiry: <%= (Clock.now + User.token_lifetime).strftime("%Y-%m-%d %H:%M:%S") %> # for mysql, add .strftime("%y-%m-%d %H:%M:%S")
50
48
  deleted: false
51
49
 
52
50
  no_password_user:
@@ -57,5 +55,5 @@ no_password_user:
57
55
  email: no_password_user@example.com
58
56
  verified: true
59
57
  security_token: random_token_string
60
- token_expiry: <%= (Clock.now + 1.day) %> # for mysql, add .strftime("%y-%m-%d %H:%M:%S")
58
+ token_expiry: <%= (Clock.now + 1.day).strftime("%Y-%m-%d %H:%M:%S") %> # for mysql, add .strftime("%y-%m-%d %H:%M:%S")
61
59
  deleted: false
@@ -0,0 +1,7 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+ one:
3
+ id: 1
4
+ name: LightControl
5
+ two:
6
+ id: 2
7
+ name: M2M Server
@@ -5,10 +5,12 @@ first:
5
5
  started_at: 2007-06-12T13:35:00
6
6
  completed_at: 2007-06-12T14:35:00
7
7
  hours: 40.0
8
+ work_account_id: 1
8
9
  started:
9
10
  id: 2
10
11
  task_id: 4
11
12
  started_at: 2007-06-12T13:35:00
13
+ work_account_id: 1
12
14
  personal:
13
15
  id: 3
14
16
  task_id: 1
@@ -16,8 +18,17 @@ personal:
16
18
  completed_at: 2007-06-12T14:35:00
17
19
  user_id: 1000001
18
20
  hours: 40.0
21
+ work_account_id: 1
19
22
  brother_of_started:
20
23
  id: 5
21
24
  task_id: 4
22
25
  started_at: 2007-06-12T13:35:00
23
26
  completed_at: 2007-06-12T14:35:00
27
+ work_account_id: 1
28
+ without_task:
29
+ id: 6
30
+ work_account_id: 1
31
+ started_at: 2007-06-13T13:35:00
32
+ completed_at: 2007-06-13T14:35:00
33
+ hours: 8.0
34
+ user_id: 1000001
@@ -5,7 +5,7 @@ require 'backlogs_controller'
5
5
  class BacklogsController; def rescue_action(e) raise e end; end
6
6
 
7
7
  class BacklogsControllerTest < Test::Unit::TestCase
8
- fixtures :parties, :users, :groups, :groups_users, :backlogs, :periods, :tasks, :task_files, :works, :estimates
8
+ fixtures :parties, :users, :groups, :groups_users, :work_accounts, :backlogs, :periods, :tasks, :task_files, :works, :estimates
9
9
 
10
10
  def setup
11
11
  @user_controller = UserController.new
@@ -0,0 +1,93 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+ require 'work_accounts_controller'
3
+
4
+ # Re-raise errors caught by the controller.
5
+ class WorkAccountsController; def rescue_action(e) raise e end; end
6
+
7
+ class WorkAccountsControllerTest < Test::Unit::TestCase
8
+ fixtures :work_accounts, :backlogs, :tasks, :estimates, :works, :task_files
9
+
10
+ def setup
11
+ @controller = WorkAccountsController.new
12
+ @request = ActionController::TestRequest.new
13
+ @response = ActionController::TestResponse.new
14
+ @request.session[:user_id] = 1000001
15
+
16
+ @first_id = work_accounts(:one).id
17
+ end
18
+
19
+ def test_index
20
+ get :index
21
+ assert_response :success
22
+ assert_template 'list'
23
+ end
24
+
25
+ def test_list
26
+ get :list
27
+
28
+ assert_response :success
29
+ assert_template 'list'
30
+
31
+ assert_not_nil assigns(:work_accounts)
32
+ end
33
+
34
+ def test_show
35
+ get :show, :id => @first_id
36
+
37
+ assert_response :success
38
+ assert_template 'show'
39
+
40
+ assert_not_nil assigns(:work_account)
41
+ assert assigns(:work_account).valid?
42
+ end
43
+
44
+ def test_new
45
+ get :new
46
+
47
+ assert_response :success
48
+ assert_template 'new'
49
+
50
+ assert_not_nil assigns(:work_account)
51
+ end
52
+
53
+ def test_create
54
+ num_work_accounts = WorkAccount.count
55
+
56
+ post :create, :work_account => {:name => 'TimeKeeper'}
57
+
58
+ assert_response :redirect
59
+ assert_redirected_to :action => 'list'
60
+
61
+ assert_equal num_work_accounts + 1, WorkAccount.count
62
+ end
63
+
64
+ def test_edit
65
+ get :edit, :id => @first_id
66
+
67
+ assert_response :success
68
+ assert_template 'edit'
69
+
70
+ assert_not_nil assigns(:work_account)
71
+ assert assigns(:work_account).valid?
72
+ end
73
+
74
+ def test_update
75
+ post :update, :id => @first_id
76
+ assert_response :redirect
77
+ assert_redirected_to :action => 'show', :id => @first_id
78
+ end
79
+
80
+ def test_destroy
81
+ assert_nothing_raised {
82
+ WorkAccount.find(@first_id)
83
+ }
84
+
85
+ post :destroy, :id => @first_id
86
+ assert_response :redirect
87
+ assert_redirected_to :action => 'list'
88
+
89
+ assert_raise(ActiveRecord::RecordNotFound) {
90
+ WorkAccount.find(@first_id)
91
+ }
92
+ end
93
+ end
@@ -5,7 +5,7 @@ require 'works_controller'
5
5
  class WorksController; def rescue_action(e) raise e end; end
6
6
 
7
7
  class WorksControllerTest < Test::Unit::TestCase
8
- fixtures :parties, :users, :groups, :groups_users, :backlogs, :periods, :tasks, :task_files, :works, :estimates
8
+ fixtures :parties, :users, :groups, :groups_users, :work_accounts, :backlogs, :periods, :tasks, :task_files, :works, :estimates
9
9
 
10
10
  def setup
11
11
  @controller = WorksController.new
@@ -56,7 +56,7 @@ class WorksControllerTest < Test::Unit::TestCase
56
56
  def test_create
57
57
  num_works = Work.count
58
58
 
59
- post :create, :work => {:task_id => 1, :started_at => Time.now.iso8601}
59
+ post :create, :work => {:task_id => 1, :started_at => Time.now.iso8601, :work_account_id => '1'}
60
60
 
61
61
  assert_response :redirect
62
62
  assert_redirected_to :controller => 'periods', :action => 'show', :id => periods(:past).id, :task_id => 1
@@ -106,5 +106,9 @@ class WorksControllerTest < Test::Unit::TestCase
106
106
  assert_equal num_tasks, Task.count
107
107
  assert_equal num_open_tasks - 1, Task.find_open.size
108
108
  end
109
+
110
+ def test_weekly_work_sheet
111
+ get :weekly_work_sheet, :id => 24
112
+ end
109
113
 
110
114
  end
@@ -4,7 +4,7 @@ require 'user_notify'
4
4
 
5
5
  class UserSystemTest < ActionController::IntegrationTest
6
6
  self.use_transactional_fixtures = false
7
- fixtures :users, :groups_users, :works
7
+ fixtures :parties, :users, :groups, :groups_users, :work_accounts, :backlogs, :periods, :tasks, :estimates, :works, :task_files
8
8
 
9
9
  def setup
10
10
  ActionMailer::Base.inject_one_error = false
@@ -1,3 +1,6 @@
1
- 100.times do
1
+ count = 100
2
+ puts "Running #{count} times"
3
+ count.times do
2
4
  `GET http://localhost:3000/parties/burn_down_chart/1 >/dev/null`
3
5
  end
6
+ puts "Finished."
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class ConfigurationTest < Test::Unit::TestCase
4
+ fixtures :configurations
5
+
6
+ # Replace this with your real tests.
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class CustomerTest < Test::Unit::TestCase
4
+ fixtures :customers
5
+
6
+ # Replace this with your real tests.
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
@@ -1,7 +1,7 @@
1
1
  require File.dirname(__FILE__) + '/../test_helper'
2
2
 
3
3
  class EstimateTest < Test::Unit::TestCase
4
- fixtures :parties, :users, :groups, :groups_users, :backlogs, :periods, :tasks, :task_files, :works, :estimates
4
+ fixtures :parties, :users, :groups, :groups_users, :work_accounts, :backlogs, :periods, :tasks, :task_files, :works, :estimates
5
5
 
6
6
  # Replace this with your real tests.
7
7
  def test_truth
@@ -1,7 +1,7 @@
1
1
  require File.dirname(__FILE__) + '/../test_helper'
2
2
 
3
3
  class GroupTest < Test::Unit::TestCase
4
- fixtures :groups, :groups_users
4
+ fixtures :parties, :users, :groups, :groups_users, :periods, :tasks, :works, :periods, :estimates, :task_files
5
5
 
6
6
  # Replace this with your real tests.
7
7
  def test_truth
@@ -1,7 +1,7 @@
1
1
  require File.dirname(__FILE__) + '/../test_helper'
2
2
 
3
3
  class PeriodTest < Test::Unit::TestCase
4
- fixtures :periods, :tasks, :task_files, :estimates, :works
4
+ fixtures :parties, :users, :groups, :groups_users, :periods, :tasks, :task_files, :estimates, :works
5
5
 
6
6
  def test_burn_down_graph
7
7
  image = periods(:past).burn_down_graph(Chart::THUMBNAIL)
@@ -1,7 +1,7 @@
1
1
  require File.dirname(__FILE__) + '/../test_helper'
2
2
 
3
3
  class TaskFileTest < Test::Unit::TestCase
4
- fixtures :task_files
4
+ fixtures :tasks, :task_files, :estimates, :works
5
5
 
6
6
  # Replace this with your real tests.
7
7
  def test_truth
@@ -1,7 +1,7 @@
1
1
  require File.dirname(__FILE__) + '/../test_helper'
2
2
 
3
3
  class TaskTest < Test::Unit::TestCase
4
- fixtures :parties, :users, :groups, :groups_users, :backlogs, :periods, :tasks, :task_files, :estimates, :works
4
+ fixtures :parties, :users, :groups, :groups_users, :work_accounts, :backlogs, :periods, :tasks, :task_files, :estimates, :works
5
5
 
6
6
  # Replace this with your real tests.
7
7
  def test_truth
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class WorkAccountTest < Test::Unit::TestCase
4
+ fixtures :work_accounts, :backlogs, :tasks, :estimates, :works, :task_files
5
+
6
+ # Replace this with your real tests.
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
@@ -4,7 +4,7 @@ require 'user_system'
4
4
  class WorkTest < Test::Unit::TestCase
5
5
  include UserSystem
6
6
 
7
- fixtures :users, :groups_users, :works
7
+ fixtures :parties, :users, :groups, :groups_users, :work_accounts, :backlogs, :periods, :tasks, :estimates, :works, :task_files
8
8
 
9
9
  def test_work_totals_for_week
10
10
  work_totals = Work.work_totals_for_week(24, 1000001)
@@ -15,13 +15,7 @@ module War
15
15
  @config = config
16
16
  @name = name
17
17
  @version = version
18
- check_locations = local_locations(name, version)
19
-
20
- if locations.is_a?(String)
21
- locations = [ locations ]
22
- end
23
- check_locations += locations
24
- @locations = check_locations
18
+ @locations = local_locations(name, version)
25
19
  end
26
20
 
27
21
  def file
@@ -91,12 +85,12 @@ module War
91
85
  WLog.debug("locations for " + name + " " + version);
92
86
  paths = []
93
87
  if config.local_java_lib
94
- paths << File.join(local_java_lib, "#{name}-#{version}.#{type}")
95
- paths << File.join(local_java_lib, "#{name}.#{type}")
88
+ paths << File.join(config.local_java_lib, "#{name}-#{version}.#{type}")
89
+ paths << File.join(config.local_java_lib, "#{name}.#{type}")
96
90
  end
97
91
  if config.jruby_home
98
- paths << File.join(jruby_home, 'lib', "#{name}-#{version}.#{type}")
99
- paths << File.join(jruby_home, 'lib', "#{name}.#{type}")
92
+ paths << File.join(config.jruby_home, 'lib', "#{name}-#{version}.#{type}")
93
+ paths << File.join(config.jruby_home, 'lib', "#{name}.#{type}")
100
94
  end
101
95
  WLog.debug("paths: " + paths.join("\n"))
102
96
  return paths
@@ -12,7 +12,6 @@ module War
12
12
  attr_accessor :classpath
13
13
 
14
14
  def initialize(config = Configuration.instance)
15
- puts config.jetty_java_opts
16
15
  @config = config
17
16
  @jetty_main = 'org.mortbay.start.Main'
18
17
  @jetty_tmp = File.join('tmp', 'jetty')
@@ -158,4 +157,4 @@ END_OF_JETTY_XML
158
157
  end
159
158
 
160
159
  end #class
161
- end #module
160
+ end #module
@@ -96,7 +96,7 @@ module War
96
96
  add_library(maven_library('org.jruby.extras', 'goldspike', '1.3'))
97
97
  add_library(maven_library('javax.activation', 'activation', '1.1'))
98
98
  add_library(maven_library('commons-pool', 'commons-pool', '1.3'))
99
- #add_library(maven_library('bouncycastle', 'bcprov-jdk14', '124'))
99
+ add_library(maven_library('bouncycastle', 'bcprov-jdk14', '124'))
100
100
 
101
101
  # default gems
102
102
  @gem_libraries = {}
@@ -115,8 +115,7 @@ module War
115
115
  # default jetty settings
116
116
  @jetty_port = 8080
117
117
  @jetty_java_opts = ENV['JAVA_OPTS'] || ''
118
- puts ENV['JAVA_OPTS']
119
- puts @jetty_java_opts
118
+
120
119
  # separators
121
120
  if RUBY_PLATFORM =~ /(mswin)|(cygwin)/i # watch out for darwin
122
121
  @os_separator = '\\'
@@ -280,15 +279,12 @@ puts @jetty_java_opts
280
279
  end
281
280
 
282
281
  # method hook for library property
283
- def include_library(name, properties)
284
- if properties == nil or properties[:version] == nil or properties[:locations] == nil
285
- WLog.warn "in include_library #{name}, 'version' and 'locations' specifications are mandatory"
286
- return
287
- end
282
+ def include_library(name, version)
288
283
  begin
289
- @result.add_java_library(@result.java_library(name, properties[:version], properties[:locations]))
284
+ @result.add_library(@result.java_library(name, version))
290
285
  rescue
291
- WLog.warn "couldn't load library #{name}, check library definition in the config file"
286
+ WLog.warn "couldn't load library #{name}-#{version}.jar, check library definition in the config file"
287
+ WLog.debug $!
292
288
  end
293
289
  end
294
290
 
@@ -298,6 +294,7 @@ puts @jetty_java_opts
298
294
  @result.add_library(@result.maven_library(group, name, version))
299
295
  rescue
300
296
  WLog.warn "couldn't load maven library #{name}, check library definition in the config file"
297
+ WLog.debug $!
301
298
  end
302
299
  end
303
300