branston 0.6.1 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +1 -1
- data/lib/branston/Gemfile +25 -0
- data/lib/branston/Gemfile.lock +76 -0
- data/lib/branston/app/controllers/application_controller.rb +1 -1
- data/lib/branston/app/controllers/outcomes_controller.rb +2 -0
- data/lib/branston/app/controllers/stories_controller.rb +82 -86
- data/lib/branston/app/controllers/users_controller.rb +69 -11
- data/lib/branston/app/helpers/iterations_helper.rb +13 -13
- data/lib/branston/app/models/iteration.rb +3 -1
- data/lib/branston/app/models/release.rb +0 -1
- data/lib/branston/app/models/story.rb +30 -28
- data/lib/branston/app/models/user.rb +46 -1
- data/lib/branston/app/views/layouts/_header.html.erb +8 -3
- data/lib/branston/app/views/layouts/user_roles.html.erb +5 -5
- data/lib/branston/app/views/sessions/new.html.erb +8 -14
- data/lib/branston/app/views/users/_admin_controls.html.erb +14 -0
- data/lib/branston/app/views/users/_form.html.erb +27 -0
- data/lib/branston/app/views/users/edit.html.erb +9 -0
- data/lib/branston/app/views/users/index.html.erb +14 -0
- data/lib/branston/app/views/users/new.html.erb +3 -22
- data/lib/branston/config/boot.rb +20 -0
- data/lib/branston/config/environment.rb +2 -7
- data/lib/branston/config/environments/test.rb +0 -8
- data/lib/branston/config/preinitializer.rb +21 -0
- data/lib/branston/config/routes.rb +15 -10
- data/lib/branston/db/development.sqlite3 +0 -0
- data/lib/branston/db/development_structure.sql +21 -8
- data/lib/branston/db/migrate/20100723161424_add_state_to_user.rb +12 -0
- data/lib/branston/db/migrate/20100726150322_add_activation_fields_to_user.rb +12 -0
- data/lib/branston/db/migrate/20100729125551_set_default_user_state_to_pending.rb +10 -0
- data/lib/branston/db/migrate/20100812133837_add_is_admin_property_to_user.rb +10 -0
- data/lib/branston/db/migrate/20100812140532_set_default_user_state_to_active.rb +10 -0
- data/lib/branston/db/migrate/20100812143455_add_default_admin_user.rb +17 -0
- data/lib/branston/db/migrate/20110408162438_remove_is_admin_property_and_add_role_instead.rb +12 -0
- data/lib/branston/db/pristine.sqlite3 +0 -0
- data/lib/branston/db/schema.rb +6 -8
- data/lib/branston/db/test.sqlite3 +0 -0
- data/lib/branston/log/development.log +1181 -433
- data/lib/branston/log/test.log +145306 -52026
- data/lib/branston/test/blueprints.rb +22 -28
- data/lib/branston/test/functional/iterations_controller_test.rb +149 -113
- data/lib/branston/test/functional/outcomes_controller_test.rb +94 -60
- data/lib/branston/test/functional/preconditions_controller_test.rb +101 -67
- data/lib/branston/test/functional/releases_controller_test.rb +85 -49
- data/lib/branston/test/functional/scenarios_controller_test.rb +104 -70
- data/lib/branston/test/functional/stories_controller_test.rb +41 -12
- data/lib/branston/test/functional/users_controller_test.rb +364 -43
- data/lib/branston/test/unit/iteration_test.rb +37 -6
- data/lib/branston/test/unit/outcome_test.rb +2 -2
- data/lib/branston/test/unit/participation_test.rb +2 -2
- data/lib/branston/test/unit/precondition_test.rb +3 -3
- data/lib/branston/test/unit/release_test.rb +4 -0
- data/lib/branston/test/unit/scenario_test.rb +4 -4
- data/lib/branston/test/unit/story_test.rb +62 -40
- data/lib/branston/test/unit/user_test.rb +195 -5
- metadata +136 -156
- data/lib/branston/app/controllers/user_roles_controller.rb +0 -105
- data/lib/branston/app/helpers/user_roles_helper.rb +0 -2
- data/lib/branston/app/models/user_role.rb +0 -21
- data/lib/branston/app/views/layouts/outcomes.html.erb +0 -17
- data/lib/branston/app/views/layouts/preconditions.html.erb +0 -17
- data/lib/branston/app/views/layouts/releases.html.erb +0 -17
- data/lib/branston/app/views/user_roles/edit.html.erb +0 -16
- data/lib/branston/app/views/user_roles/index.html.erb +0 -20
- data/lib/branston/app/views/user_roles/new.html.erb +0 -15
- data/lib/branston/app/views/user_roles/show.html.erb +0 -8
- data/lib/branston/coverage/app-controllers-application_controller_rb.html +0 -231
- data/lib/branston/coverage/app-controllers-iterations_controller_rb.html +0 -801
- data/lib/branston/coverage/app-controllers-outcomes_controller_rb.html +0 -759
- data/lib/branston/coverage/app-controllers-preconditions_controller_rb.html +0 -783
- data/lib/branston/coverage/app-controllers-releases_controller_rb.html +0 -705
- data/lib/branston/coverage/app-controllers-scenarios_controller_rb.html +0 -777
- data/lib/branston/coverage/app-controllers-sessions_controller_rb.html +0 -411
- data/lib/branston/coverage/app-controllers-stories_controller_rb.html +0 -1071
- data/lib/branston/coverage/app-controllers-user_roles_controller_rb.html +0 -693
- data/lib/branston/coverage/app-controllers-users_controller_rb.html +0 -315
- data/lib/branston/coverage/app-helpers-application_helper_rb.html +0 -327
- data/lib/branston/coverage/app-helpers-iterations_helper_rb.html +0 -363
- data/lib/branston/coverage/app-helpers-outcomes_helper_rb.html +0 -75
- data/lib/branston/coverage/app-helpers-preconditions_helper_rb.html +0 -75
- data/lib/branston/coverage/app-helpers-releases_helper_rb.html +0 -75
- data/lib/branston/coverage/app-helpers-sessions_helper_rb.html +0 -75
- data/lib/branston/coverage/app-helpers-stories_helper_rb.html +0 -75
- data/lib/branston/coverage/app-helpers-user_roles_helper_rb.html +0 -75
- data/lib/branston/coverage/app-models-iteration_rb.html +0 -321
- data/lib/branston/coverage/app-models-outcome_rb.html +0 -243
- data/lib/branston/coverage/app-models-participation_rb.html +0 -189
- data/lib/branston/coverage/app-models-precondition_rb.html +0 -243
- data/lib/branston/coverage/app-models-release_rb.html +0 -195
- data/lib/branston/coverage/app-models-scenario_rb.html +0 -231
- data/lib/branston/coverage/app-models-story_rb.html +0 -621
- data/lib/branston/coverage/app-models-user_rb.html +0 -513
- data/lib/branston/coverage/app-models-user_role_rb.html +0 -189
- data/lib/branston/coverage/index.html +0 -570
- data/lib/branston/coverage/jquery-1.3.2.min.js +0 -19
- data/lib/branston/coverage/jquery.tablesorter.min.js +0 -15
- data/lib/branston/coverage/lib-client_rb.html +0 -537
- data/lib/branston/coverage/lib-faker_extras_rb.html +0 -207
- data/lib/branston/coverage/lib-story_generator_rb.html +0 -873
- data/lib/branston/coverage/print.css +0 -12
- data/lib/branston/coverage/rcov.js +0 -42
- data/lib/branston/coverage/screen.css +0 -270
- data/lib/branston/db/migrate/20091127131037_create_user_roles.rb +0 -13
- data/lib/branston/db/migrate/20091127172950_add_story_id_to_user_role.rb +0 -10
- data/lib/branston/test/functional/user_roles_controller_test.rb +0 -71
- data/lib/branston/test/unit/helpers/user_roles_helper_test.rb +0 -4
- data/lib/branston/test/unit/user_role_test.rb +0 -9
- data/lib/branston/tmp/performance/BrowsingTest#test_homepage_process_time_flat.txt +0 -8
- data/lib/branston/tmp/performance/BrowsingTest#test_homepage_process_time_graph.html +0 -6718
- data/lib/branston/tmp/performance/BrowsingTest#test_homepage_process_time_tree.txt +0 -9942
- data/lib/branston/vendor/plugins/state_machine/CHANGELOG.rdoc +0 -298
- data/lib/branston/vendor/plugins/state_machine/LICENSE +0 -20
- data/lib/branston/vendor/plugins/state_machine/README.rdoc +0 -466
- data/lib/branston/vendor/plugins/state_machine/Rakefile +0 -98
- data/lib/branston/vendor/plugins/state_machine/examples/AutoShop_state.png +0 -0
- data/lib/branston/vendor/plugins/state_machine/examples/Car_state.png +0 -0
- data/lib/branston/vendor/plugins/state_machine/examples/TrafficLight_state.png +0 -0
- data/lib/branston/vendor/plugins/state_machine/examples/Vehicle_state.png +0 -0
- data/lib/branston/vendor/plugins/state_machine/examples/auto_shop.rb +0 -11
- data/lib/branston/vendor/plugins/state_machine/examples/car.rb +0 -19
- data/lib/branston/vendor/plugins/state_machine/examples/merb-rest/controller.rb +0 -51
- data/lib/branston/vendor/plugins/state_machine/examples/merb-rest/model.rb +0 -28
- data/lib/branston/vendor/plugins/state_machine/examples/merb-rest/view_edit.html.erb +0 -24
- data/lib/branston/vendor/plugins/state_machine/examples/merb-rest/view_index.html.erb +0 -23
- data/lib/branston/vendor/plugins/state_machine/examples/merb-rest/view_new.html.erb +0 -13
- data/lib/branston/vendor/plugins/state_machine/examples/merb-rest/view_show.html.erb +0 -17
- data/lib/branston/vendor/plugins/state_machine/examples/rails-rest/controller.rb +0 -43
- data/lib/branston/vendor/plugins/state_machine/examples/rails-rest/migration.rb +0 -11
- data/lib/branston/vendor/plugins/state_machine/examples/rails-rest/model.rb +0 -23
- data/lib/branston/vendor/plugins/state_machine/examples/rails-rest/view_edit.html.erb +0 -25
- data/lib/branston/vendor/plugins/state_machine/examples/rails-rest/view_index.html.erb +0 -23
- data/lib/branston/vendor/plugins/state_machine/examples/rails-rest/view_new.html.erb +0 -14
- data/lib/branston/vendor/plugins/state_machine/examples/rails-rest/view_show.html.erb +0 -17
- data/lib/branston/vendor/plugins/state_machine/examples/traffic_light.rb +0 -7
- data/lib/branston/vendor/plugins/state_machine/examples/vehicle.rb +0 -31
- data/lib/branston/vendor/plugins/state_machine/init.rb +0 -1
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine.rb +0 -388
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/assertions.rb +0 -36
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/callback.rb +0 -189
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/condition_proxy.rb +0 -94
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/eval_helpers.rb +0 -67
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/event.rb +0 -252
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/event_collection.rb +0 -122
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/extensions.rb +0 -149
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/guard.rb +0 -230
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/integrations.rb +0 -68
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/integrations/active_record.rb +0 -492
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/integrations/active_record/locale.rb +0 -11
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/integrations/active_record/observer.rb +0 -41
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/integrations/data_mapper.rb +0 -351
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/integrations/data_mapper/observer.rb +0 -139
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/integrations/sequel.rb +0 -322
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/machine.rb +0 -1467
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/machine_collection.rb +0 -155
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/matcher.rb +0 -123
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/matcher_helpers.rb +0 -54
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/node_collection.rb +0 -152
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/state.rb +0 -249
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/state_collection.rb +0 -112
- data/lib/branston/vendor/plugins/state_machine/lib/state_machine/transition.rb +0 -394
- data/lib/branston/vendor/plugins/state_machine/state_machine.gemspec +0 -30
- data/lib/branston/vendor/plugins/state_machine/tasks/state_machine.rake +0 -1
- data/lib/branston/vendor/plugins/state_machine/tasks/state_machine.rb +0 -30
- data/lib/branston/vendor/plugins/state_machine/test/classes/switch.rb +0 -11
- data/lib/branston/vendor/plugins/state_machine/test/functional/state_machine_test.rb +0 -941
- data/lib/branston/vendor/plugins/state_machine/test/test_helper.rb +0 -4
- data/lib/branston/vendor/plugins/state_machine/test/unit/assertions_test.rb +0 -40
- data/lib/branston/vendor/plugins/state_machine/test/unit/callback_test.rb +0 -455
- data/lib/branston/vendor/plugins/state_machine/test/unit/condition_proxy_test.rb +0 -328
- data/lib/branston/vendor/plugins/state_machine/test/unit/eval_helpers_test.rb +0 -120
- data/lib/branston/vendor/plugins/state_machine/test/unit/event_collection_test.rb +0 -326
- data/lib/branston/vendor/plugins/state_machine/test/unit/event_test.rb +0 -743
- data/lib/branston/vendor/plugins/state_machine/test/unit/guard_test.rb +0 -908
- data/lib/branston/vendor/plugins/state_machine/test/unit/integrations/active_record_test.rb +0 -1367
- data/lib/branston/vendor/plugins/state_machine/test/unit/integrations/data_mapper_test.rb +0 -962
- data/lib/branston/vendor/plugins/state_machine/test/unit/integrations/sequel_test.rb +0 -859
- data/lib/branston/vendor/plugins/state_machine/test/unit/integrations_test.rb +0 -42
- data/lib/branston/vendor/plugins/state_machine/test/unit/invalid_event_test.rb +0 -7
- data/lib/branston/vendor/plugins/state_machine/test/unit/invalid_transition_test.rb +0 -7
- data/lib/branston/vendor/plugins/state_machine/test/unit/machine_collection_test.rb +0 -938
- data/lib/branston/vendor/plugins/state_machine/test/unit/machine_test.rb +0 -2004
- data/lib/branston/vendor/plugins/state_machine/test/unit/matcher_helpers_test.rb +0 -37
- data/lib/branston/vendor/plugins/state_machine/test/unit/matcher_test.rb +0 -155
- data/lib/branston/vendor/plugins/state_machine/test/unit/node_collection_test.rb +0 -207
- data/lib/branston/vendor/plugins/state_machine/test/unit/state_collection_test.rb +0 -280
- data/lib/branston/vendor/plugins/state_machine/test/unit/state_machine_test.rb +0 -31
- data/lib/branston/vendor/plugins/state_machine/test/unit/state_test.rb +0 -795
- data/lib/branston/vendor/plugins/state_machine/test/unit/transition_test.rb +0 -1212
@@ -1,50 +1,50 @@
|
|
1
1
|
module IterationsHelper
|
2
|
-
|
2
|
+
|
3
3
|
# TODO: Untested!
|
4
4
|
#
|
5
5
|
def burndown_chart(iteration, data)
|
6
|
-
|
6
|
+
|
7
7
|
total_points = iteration.velocity
|
8
8
|
running_total = 0
|
9
|
-
|
9
|
+
|
10
10
|
unless data.nil? or data.empty?
|
11
11
|
points_data = data.map { |d|
|
12
12
|
running_total += d.points.to_i
|
13
13
|
total_points - running_total
|
14
14
|
}
|
15
|
-
|
16
|
-
|
15
|
+
|
16
|
+
|
17
17
|
points_data = [total_points] + points_data unless points_data.nil?
|
18
|
-
|
18
|
+
|
19
19
|
work_days = [nil]
|
20
20
|
(iteration.start_date.to_date..iteration.end_date.to_date).to_a.each do |date|
|
21
21
|
work_days.push date.strftime('%d/%m') unless is_weekend(date)
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
# Keep adding the last value to flatline the chart
|
25
25
|
while work_days.length > points_data.length
|
26
26
|
points_data.push points_data.last
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
# Make some gradations for the y axis labels
|
30
30
|
y_scale = [0]
|
31
31
|
[4, 2, 1.5, 1.25, 1].each do |n|
|
32
32
|
unit = (total_points / n).floor
|
33
33
|
y_scale.push unit if unit > 0
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
image_tag Gchart.line(:size => '800x360',
|
37
37
|
:title => "Iteration #{iteration.name} burndown",
|
38
38
|
:data => points_data, :axis_with_labels => 'x,y',
|
39
39
|
:axis_labels => [work_days, y_scale])
|
40
|
-
|
40
|
+
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
45
|
def is_weekend(date)
|
46
46
|
date.wday == 0 or date.wday == 5 or date.wday == 6
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
end
|
50
50
|
|
@@ -19,6 +19,7 @@ class Iteration < ActiveRecord::Base
|
|
19
19
|
# Validations
|
20
20
|
#
|
21
21
|
validates_presence_of :name, :velocity
|
22
|
+
validates_numericality_of :velocity
|
22
23
|
|
23
24
|
# Associations
|
24
25
|
#
|
@@ -34,8 +35,9 @@ class Iteration < ActiveRecord::Base
|
|
34
35
|
FROM stories
|
35
36
|
WHERE iteration_id = ?
|
36
37
|
AND status = 'completed'
|
38
|
+
OR status = 'quality_assurance'
|
37
39
|
GROUP BY completed_date
|
38
|
-
ORDER
|
40
|
+
ORDER BY completed_date", id
|
39
41
|
]
|
40
42
|
end
|
41
43
|
|
@@ -26,7 +26,6 @@ class Story < ActiveRecord::Base
|
|
26
26
|
belongs_to :iteration
|
27
27
|
belongs_to :author, :class_name => "User", :foreign_key => "author_id"
|
28
28
|
has_many :scenarios, :dependent => :destroy
|
29
|
-
has_one :user_role
|
30
29
|
|
31
30
|
# Named scopes
|
32
31
|
#
|
@@ -34,8 +33,8 @@ class Story < ActiveRecord::Base
|
|
34
33
|
named_scope :in_progress, :conditions => 'status = "in_progress"'
|
35
34
|
named_scope :in_quality_assurance, :conditions => 'status = "quality_assurance"'
|
36
35
|
named_scope :completed, :conditions => 'status = "completed"'
|
37
|
-
named_scope :for_iteration, lambda { |id| {
|
38
|
-
|
36
|
+
named_scope :for_iteration, lambda { |id| {
|
37
|
+
:conditions => ['iteration_id = ?', id] } }
|
39
38
|
|
40
39
|
before_save :set_slug
|
41
40
|
|
@@ -51,33 +50,36 @@ class Story < ActiveRecord::Base
|
|
51
50
|
# Completed - A story that has been implemented and tested by the development
|
52
51
|
# team
|
53
52
|
#
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
end
|
67
|
-
|
68
|
-
event :finish do
|
69
|
-
transition [:in_progress, :quality_assurance] => :completed
|
70
|
-
end
|
71
|
-
|
72
|
-
event :back_to_new do
|
73
|
-
transition :in_progress => :new
|
74
|
-
end
|
75
|
-
|
76
|
-
after_transition any => :completed do |story, transition|
|
77
|
-
story.completed_date = Date.today
|
78
|
-
end
|
53
|
+
include AASM
|
54
|
+
aasm_column :status
|
55
|
+
aasm_initial_state :new
|
56
|
+
aasm_state :new
|
57
|
+
aasm_state :in_progress
|
58
|
+
aasm_state :quality_assurance
|
59
|
+
aasm_state :completed, :enter => Proc.new { |story, transition|
|
60
|
+
story.completed_date = Date.today
|
61
|
+
}
|
62
|
+
|
63
|
+
aasm_event :assign do
|
64
|
+
transitions :from => [:new, :quality_assurance, :completed], :to => :in_progress
|
79
65
|
end
|
80
66
|
|
67
|
+
aasm_event :check_quality do
|
68
|
+
transitions :from => [:in_progress, :quality_assurance, :completed], :to => :quality_assurance
|
69
|
+
end
|
70
|
+
|
71
|
+
aasm_event :finish do
|
72
|
+
transitions :from => [:in_progress, :quality_assurance], :to => :completed
|
73
|
+
end
|
74
|
+
|
75
|
+
aasm_event :back_to_new do
|
76
|
+
transitions :from => :in_progress, :to => :new
|
77
|
+
end
|
78
|
+
|
79
|
+
# after_transition any => :completed do |story, transition|
|
80
|
+
# story.completed_date = Date.today
|
81
|
+
# end
|
82
|
+
|
81
83
|
attr_protected :status
|
82
84
|
|
83
85
|
def to_param
|
@@ -15,6 +15,9 @@
|
|
15
15
|
require 'digest/sha1'
|
16
16
|
|
17
17
|
class User < ActiveRecord::Base
|
18
|
+
|
19
|
+
ROLES = ["admin", "developer", "customer"]
|
20
|
+
|
18
21
|
include Authentication
|
19
22
|
include Authentication::ByPassword
|
20
23
|
include Authentication::ByCookieToken
|
@@ -32,6 +35,8 @@ class User < ActiveRecord::Base
|
|
32
35
|
validates_uniqueness_of :email
|
33
36
|
validates_format_of :email, :with => Authentication.email_regex, :message => Authentication.bad_email_message
|
34
37
|
|
38
|
+
validates_inclusion_of :role, :in => ROLES
|
39
|
+
|
35
40
|
has_many :participations
|
36
41
|
has_many :iterations, :through => :participations
|
37
42
|
has_many :stories, :foreign_key => 'author_id'
|
@@ -41,7 +46,34 @@ class User < ActiveRecord::Base
|
|
41
46
|
# anything else you want your user to change should be added here.
|
42
47
|
attr_accessible :login, :email, :name, :password, :password_confirmation
|
43
48
|
|
49
|
+
include AASM
|
50
|
+
aasm_column :state
|
51
|
+
aasm_initial_state :pending
|
52
|
+
aasm_state :pending
|
53
|
+
aasm_state :active, :enter => :do_activate
|
54
|
+
aasm_state :suspended
|
55
|
+
aasm_state :deleted, :enter => :do_delete
|
44
56
|
|
57
|
+
aasm_event :register do
|
58
|
+
transitions :from => :passive, :to => :pending, :guard => Proc.new {|u| !(u.crypted_password.blank? && u.password.blank?) }
|
59
|
+
end
|
60
|
+
|
61
|
+
aasm_event :activate do
|
62
|
+
transitions :from => [:pending, :suspended], :to => :active
|
63
|
+
end
|
64
|
+
|
65
|
+
aasm_event :suspend do
|
66
|
+
transitions :from => [:pending, :active], :to => :suspended
|
67
|
+
end
|
68
|
+
|
69
|
+
aasm_event :delete do
|
70
|
+
transitions :from => [:pending, :active, :suspended], :to => :deleted
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
def has_role?(role_name)
|
75
|
+
self.role == role_name
|
76
|
+
end
|
45
77
|
|
46
78
|
# Authenticates a user by their login name and unencrypted password. Returns the user or nil.
|
47
79
|
#
|
@@ -51,7 +83,7 @@ class User < ActiveRecord::Base
|
|
51
83
|
#
|
52
84
|
def self.authenticate(login, password)
|
53
85
|
return nil if login.blank? || password.blank?
|
54
|
-
u =
|
86
|
+
u = find_in_state :first, :active, :conditions => {:login => login.downcase}
|
55
87
|
u && u.authenticated?(password) ? u : nil
|
56
88
|
end
|
57
89
|
|
@@ -69,7 +101,20 @@ class User < ActiveRecord::Base
|
|
69
101
|
|
70
102
|
protected
|
71
103
|
|
104
|
+
# Returns true if the user has just been activated.
|
105
|
+
def recently_activated?
|
106
|
+
@activated
|
107
|
+
end
|
108
|
+
|
109
|
+
def do_delete
|
110
|
+
self.deleted_at = Time.now.utc
|
111
|
+
end
|
72
112
|
|
113
|
+
def do_activate
|
114
|
+
@activated = true
|
115
|
+
self.activated_at = Time.now.utc
|
116
|
+
self.deleted_at = self.activation_code = nil
|
117
|
+
end
|
73
118
|
|
74
119
|
end
|
75
120
|
|
@@ -8,9 +8,14 @@
|
|
8
8
|
<div id="header">
|
9
9
|
<div id="menu">
|
10
10
|
<ul>
|
11
|
-
|
12
|
-
<li <%= tab_on("
|
13
|
-
<li <%= tab_on("
|
11
|
+
<% if logged_in? -%>
|
12
|
+
<li <%= tab_on("iterations") %>><%= link_to 'Iterations', iterations_path %></li>
|
13
|
+
<li <%= tab_on("releases") %>><%= link_to 'Releases', releases_path %></li>
|
14
|
+
<li <%= tab_on("users") %>><%= link_to 'Users', users_path %></li>
|
15
|
+
<li <%= tab_on("logout") %>><%= link_to 'Log Out', logout_path %></li>
|
16
|
+
<% else -%>
|
17
|
+
<li <%= tab_on("login") %>><%= link_to 'Log In', login_path %></li>
|
18
|
+
<% end -%>
|
14
19
|
</ul>
|
15
20
|
</div>
|
16
21
|
<!-- end #menu -->
|
@@ -9,17 +9,17 @@
|
|
9
9
|
<%= stylesheet_link_tag 'style' %>
|
10
10
|
<%= stylesheet_link_tag 'ui-lightness/jquery-ui-1.7.2.custom' %>
|
11
11
|
<%= stylesheet_link_tag 'scaffold' %>
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
<%= javascript_include_tag 'jquery-1.3.2.min' %>
|
13
|
+
<%= javascript_include_tag 'jquery-ui-1.7.2.custom.min' %>
|
14
|
+
<%= javascript_include_tag 'jquery.jeditable.mini' %>
|
15
|
+
<%= javascript_include_tag 'jquery-multiselect-drag-n-drop' %>
|
16
16
|
</head>
|
17
17
|
<body>
|
18
18
|
<%= render :partial => "layouts/header" %>
|
19
19
|
|
20
20
|
<p style="color: green"><%= flash[:notice] %></p>
|
21
21
|
|
22
|
-
<div id="page">
|
22
|
+
<div id="page">
|
23
23
|
<div id="content">
|
24
24
|
<%= yield %>
|
25
25
|
</div>
|
@@ -1,33 +1,27 @@
|
|
1
1
|
<h1>Log In</h1>
|
2
2
|
|
3
3
|
<div id="login">
|
4
|
-
|
4
|
+
|
5
5
|
<% form_tag session_path do -%>
|
6
|
-
|
6
|
+
|
7
7
|
<p class="form-fields">
|
8
8
|
<%= label_tag 'login' %>
|
9
9
|
<%= text_field_tag 'login', @login %>
|
10
10
|
</p>
|
11
|
-
|
11
|
+
|
12
12
|
<p class="form-fields">
|
13
13
|
<%= label_tag 'password' %>
|
14
14
|
<%= password_field_tag 'password', nil %>
|
15
15
|
</p>
|
16
|
-
|
16
|
+
|
17
17
|
<p class="form-fields">
|
18
18
|
<%= label_tag 'remember_me', 'Remember me' %>
|
19
19
|
<%= check_box_tag 'remember_me', '1', @remember_me %>
|
20
20
|
</p>
|
21
|
-
|
22
|
-
|
21
|
+
|
22
|
+
|
23
23
|
<p id="login-button" class="form-navigtion"><%= submit_tag 'Log in' %></p>
|
24
24
|
<% end -%>
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
<div style="clear:both">
|
29
|
-
<p>If you are lacking a Branston account,
|
30
|
-
<%=link_to 'click here to register!', signup_path %>
|
31
|
-
</p>
|
32
|
-
</div>
|
25
|
+
|
33
26
|
</div>
|
27
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<%= link_to user.login, edit_user_path(user) %> -
|
2
|
+
|
3
|
+
<% if user.state == "active" -%>
|
4
|
+
activate
|
5
|
+
<% else %>
|
6
|
+
<%= link_to 'activate', activate_user_path(user) %>
|
7
|
+
<% end -%> |
|
8
|
+
|
9
|
+
<% if user.state == "pending" || user.state == "suspended" -%>
|
10
|
+
suspend
|
11
|
+
<% else -%>
|
12
|
+
<%= link_to 'suspend', suspend_user_path(user) %>
|
13
|
+
<% end -%>
|
14
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<p class="form-fields">
|
2
|
+
<%= label_tag 'login' %>
|
3
|
+
<%= f.text_field :login %>
|
4
|
+
</p>
|
5
|
+
|
6
|
+
<p class="form-fields">
|
7
|
+
<%= label_tag 'email' %>
|
8
|
+
<%= f.text_field :email %>
|
9
|
+
</p>
|
10
|
+
|
11
|
+
<p class="form-fields">
|
12
|
+
<%= label_tag 'password' %>
|
13
|
+
<%= f.password_field :password %>
|
14
|
+
</p>
|
15
|
+
|
16
|
+
<p class="form-fields">
|
17
|
+
<%= label_tag 'password_confirmation', 'Confirm Password' %>
|
18
|
+
<%= f.password_field :password_confirmation %>
|
19
|
+
</p>
|
20
|
+
|
21
|
+
<% if current_user.has_role?("admin") -%>
|
22
|
+
<p class="form-fields">
|
23
|
+
<%= label_tag 'role' %>
|
24
|
+
<%= f.select :role, ["admin", "client", "developer"] %>
|
25
|
+
</p>
|
26
|
+
<% end -%>
|
27
|
+
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<h1>Edit user</h1>
|
2
|
+
<% @user.password = @user.password_confirmation = nil %>
|
3
|
+
|
4
|
+
<%= error_messages_for :user %>
|
5
|
+
<% form_for(@user) do |f| -%>
|
6
|
+
<%= render :partial => 'form', :locals => { :f => f } %>
|
7
|
+
<p class="form-navigation"><%= submit_tag 'Update user' %></p>
|
8
|
+
<% end -%>
|
9
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<div class="index-head">
|
2
|
+
<h2>Users</h2>
|
3
|
+
<%= link_to 'New user', new_user_path, :class => "add" %>
|
4
|
+
</div>
|
5
|
+
<% unless @users.blank? -%>
|
6
|
+
<ul>
|
7
|
+
<% @users.each do |user| -%>
|
8
|
+
<li>
|
9
|
+
<%= render :partial => "users/admin_controls", :locals => {:user => user } %>
|
10
|
+
</li>
|
11
|
+
<% end -%>
|
12
|
+
</ul>
|
13
|
+
<% end -%>
|
14
|
+
|
@@ -1,28 +1,9 @@
|
|
1
|
-
<h1>
|
1
|
+
<h1>Create a new user</h1>
|
2
2
|
<% @user.password = @user.password_confirmation = nil %>
|
3
3
|
|
4
4
|
<%= error_messages_for :user %>
|
5
5
|
<% form_for :user, :url => users_path do |f| -%>
|
6
|
-
|
7
|
-
|
8
|
-
<%= f.text_field :login %>
|
9
|
-
</p>
|
10
|
-
|
11
|
-
<p class="form-fields">
|
12
|
-
<%= label_tag 'email' %>
|
13
|
-
<%= f.text_field :email %>
|
14
|
-
</p>
|
15
|
-
|
16
|
-
<p class="form-fields">
|
17
|
-
<%= label_tag 'password' %>
|
18
|
-
<%= f.password_field :password %>
|
19
|
-
</p>
|
20
|
-
|
21
|
-
<p class="form-fields">
|
22
|
-
<%= label_tag 'password_confirmation', 'Confirm Password' %>
|
23
|
-
<%= f.password_field :password_confirmation %>
|
24
|
-
</p>
|
25
|
-
|
26
|
-
<p class="form-navigation"><%= submit_tag 'Sign up' %></p>
|
6
|
+
<%= render :partial => 'form', :locals => { :f => f } %>
|
7
|
+
<p class="form-navigation"><%= submit_tag 'Create user' %></p>
|
27
8
|
<% end -%>
|
28
9
|
|