Commit c0e020285f7d9e547feb1e4876acfa977ac1a5fb
1 parent
7ab8c9ac
Exists in
master
and in
29 other branches
container_block: avoid cyclical reference
(ActionItem2943)
Showing
2 changed files
with
23 additions
and
0 deletions
Show diff stats
plugins/container_block/lib/container_block_plugin/container_block.rb
@@ -7,6 +7,16 @@ class ContainerBlockPlugin::ContainerBlock < Block | @@ -7,6 +7,16 @@ class ContainerBlockPlugin::ContainerBlock < Block | ||
7 | settings_items :container_box_id, :type => Integer, :default => nil | 7 | settings_items :container_box_id, :type => Integer, :default => nil |
8 | settings_items :children_settings, :type => Hash, :default => {} | 8 | settings_items :children_settings, :type => Hash, :default => {} |
9 | 9 | ||
10 | + validate :no_cyclical_reference, :if => 'container_box_id.present?' | ||
11 | + | ||
12 | + def no_cyclical_reference | ||
13 | + errors.add(:box_id, _('cyclical reference is not allowed.')) if box_id == container_box_id | ||
14 | + end | ||
15 | + | ||
16 | + before_save do |b| | ||
17 | + raise "cyclical reference is not allowed" if b.box_id == b.container_box_id && !b.container_box_id.blank? | ||
18 | + end | ||
19 | + | ||
10 | def self.description | 20 | def self.description |
11 | _('Container') | 21 | _('Container') |
12 | end | 22 | end |
plugins/container_block/test/unit/container_block_plugin/container_block_test.rb
@@ -104,4 +104,17 @@ class ContainerBlockPlugin::ContainerBlockTest < ActiveSupport::TestCase | @@ -104,4 +104,17 @@ class ContainerBlockPlugin::ContainerBlockTest < ActiveSupport::TestCase | ||
104 | assert_equal [1, 2, 3], [box1.reload.position, box2.reload.position, box3.reload.position] | 104 | assert_equal [1, 2, 3], [box1.reload.position, box2.reload.position, box3.reload.position] |
105 | end | 105 | end |
106 | 106 | ||
107 | + should 'be able to change box' do | ||
108 | + @block.save! | ||
109 | + @block.box = Box.new(:owner => Environment.default) | ||
110 | + @block.save! | ||
111 | + end | ||
112 | + | ||
113 | + should 'not able to change box to be the same as container_box' do | ||
114 | + @block.save! | ||
115 | + @block.box = @block.container_box | ||
116 | + @block.save | ||
117 | + assert @block.errors.invalid?(:box_id) | ||
118 | + end | ||
119 | + | ||
107 | end | 120 | end |