summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/models/node.rb25
-rw-r--r--app/views/nodes/index.html.erb2
-rw-r--r--db/migrate/20090321150359_add_locking_user_id_to_nodes.rb9
-rw-r--r--test/unit/node_test.rb5
4 files changed, 30 insertions, 11 deletions
diff --git a/app/models/node.rb b/app/models/node.rb
index da26164..0f34b73 100644
--- a/app/models/node.rb
+++ b/app/models/node.rb
@@ -8,6 +8,7 @@ class Node < ActiveRecord::Base
8 belongs_to :draft, :class_name => "Page", :foreign_key => :draft_id 8 belongs_to :draft, :class_name => "Page", :foreign_key => :draft_id
9 has_many :permissions 9 has_many :permissions
10 has_one :event 10 has_one :event
11 belongs_to :user, :foreign_key => :locking_user_id
11 12
12 # Callbacks 13 # Callbacks
13 after_create :initialize_empty_page 14 after_create :initialize_empty_page
@@ -43,17 +44,17 @@ class Node < ActiveRecord::Base
43 44
44 # Instance Methods 45 # Instance Methods
45 46
46 def find_or_create_draft user 47 def find_or_create_draft current_user
47 if draft && draft.user == user 48 if draft && self.user == current_user
48 draft 49 draft
49 elsif draft && draft.user.nil? 50 elsif draft && self.user.nil?
50 draft.user = user 51 lock_for! current_user
51 draft.save
52 draft 52 draft
53 elsif draft && draft.user != user 53 elsif draft && self.user != current_user
54 raise "Page is locked" 54 raise "Page is locked"
55 else 55 else
56 create_new_draft user 56 lock_for! current_user
57 create_new_draft current_user
57 end 58 end
58 end 59 end
59 60
@@ -73,6 +74,7 @@ class Node < ActiveRecord::Base
73 self.head.save! 74 self.head.save!
74 self.draft = nil 75 self.draft = nil
75 self.save! 76 self.save!
77 self.unlock!
76 else 78 else
77 nil 79 nil
78 end 80 end
@@ -95,6 +97,15 @@ class Node < ActiveRecord::Base
95 end 97 end
96 98
97 protected 99 protected
100 def lock_for! current_user
101 self.user = current_user
102 self.save
103 end
104
105 def unlock!
106 self.user = nil
107 self.save
108 end
98 109
99 # Creates an empty page and associates it to the given node. This means 110 # Creates an empty page and associates it to the given node. This means
100 # freshly created node has an empty draft. A user can create nodes as he 111 # freshly created node has an empty draft. A user can create nodes as he
diff --git a/app/views/nodes/index.html.erb b/app/views/nodes/index.html.erb
index 103617c..53ddb5b 100644
--- a/app/views/nodes/index.html.erb
+++ b/app/views/nodes/index.html.erb
@@ -28,7 +28,7 @@
28 <%= link_to 'Unlock', unlock_node_path(node), :method => :put, :confirm => "Are you sure you want to unlock?" %> 28 <%= link_to 'Unlock', unlock_node_path(node), :method => :put, :confirm => "Are you sure you want to unlock?" %>
29 </td> 29 </td>
30 <td> 30 <td>
31 <%= "#{node.draft.user.login}" if node.draft && node.draft.user %> 31 <%= node.user.login if node.user %>
32 </td> 32 </td>
33 <td> 33 <td>
34 <%= node.draft ? node.draft.revision : node.head.revision %> 34 <%= node.draft ? node.draft.revision : node.head.revision %>
diff --git a/db/migrate/20090321150359_add_locking_user_id_to_nodes.rb b/db/migrate/20090321150359_add_locking_user_id_to_nodes.rb
new file mode 100644
index 0000000..b40dd71
--- /dev/null
+++ b/db/migrate/20090321150359_add_locking_user_id_to_nodes.rb
@@ -0,0 +1,9 @@
1class AddLockingUserIdToNodes < ActiveRecord::Migration
2 def self.up
3 add_column :nodes, :locking_user_id, :integer
4 end
5
6 def self.down
7 remove_column :nodes, :locking_user_id
8 end
9end
diff --git a/test/unit/node_test.rb b/test/unit/node_test.rb
index 2558ca3..a7405f0 100644
--- a/test/unit/node_test.rb
+++ b/test/unit/node_test.rb
@@ -30,7 +30,7 @@ class NodeTest < ActiveSupport::TestCase
30 assert_not_nil @first_child.draft 30 assert_not_nil @first_child.draft
31 assert_nil @first_child.draft.user 31 assert_nil @first_child.draft.user
32 @first_child.find_or_create_draft @user1 32 @first_child.find_or_create_draft @user1
33 assert_equal @user1, @first_child.draft.user 33 assert_equal @user1, @first_child.user
34 end 34 end
35 35
36 def test_unique_path_returns_an_array 36 def test_unique_path_returns_an_array
@@ -121,9 +121,8 @@ class NodeTest < ActiveSupport::TestCase
121 node = Node.create :slug => "third_child" 121 node = Node.create :slug => "third_child"
122 node.move_to_child_of @root 122 node.move_to_child_of @root
123 node.publish_draft! 123 node.publish_draft!
124
125 node.find_or_create_draft @user1 124 node.find_or_create_draft @user1
126 125 assert_equal @user1, node.user
127 assert_raise(RuntimeError) do 126 assert_raise(RuntimeError) do
128 node.find_or_create_draft @user2 127 node.find_or_create_draft @user2
129 end 128 end