Commit 1f75bc060aeedeaf60f75c65f4a5db1cc3a75fee
1 parent
3c48d74f
Exists in
master
and in
28 other branches
r226@sede: terceiro | 2007-07-28 16:54:22 -0300
ActionItem0: bringing box from old flexible_template git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@230 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
2 changed files
with
122 additions
and
0 deletions
Show diff stats
| ... | ... | @@ -0,0 +1,62 @@ |
| 1 | +module Design | |
| 2 | + | |
| 3 | + # A design is composed of one or more boxes. Each box defines an area in the | |
| 4 | + # screen identified by a number and possibly by a name. A box contains inside | |
| 5 | + # it several Block objects, and is owner by some other object, possibly one | |
| 6 | + # from the application model. | |
| 7 | + class Box < ActiveRecord::Base | |
| 8 | + | |
| 9 | + set_table_name 'design_boxes' | |
| 10 | + | |
| 11 | + has_many :blocks | |
| 12 | + belongs_to :owner, :polymorphic => true | |
| 13 | + | |
| 14 | + validates_presence_of :owner | |
| 15 | + validates_presence_of :name | |
| 16 | + | |
| 17 | + #we cannot have two boxs with the same number to the same owner | |
| 18 | + validates_uniqueness_of :number, :scope => [:owner_type, :owner_id] | |
| 19 | + | |
| 20 | + #<tt>number</tt> could not be nil and must be an integer | |
| 21 | + validates_numericality_of :number, :only_integer => true | |
| 22 | + #TODO see the internationalization questions | |
| 23 | + #, :message => _('%{fn} must be composed only of integers.') | |
| 24 | + | |
| 25 | + # Return all blocks of the current box object sorted by the position block | |
| 26 | + def blocks_sort_by_position | |
| 27 | + self.blocks.sort{|x,y| x.position <=> y.position} | |
| 28 | + end | |
| 29 | + | |
| 30 | + def save | |
| 31 | + self[:name] ||= "Box " + self.number.to_s | |
| 32 | + super | |
| 33 | + end | |
| 34 | + | |
| 35 | + def owner= owner | |
| 36 | + self[:owner_type] = owner.class.to_s | |
| 37 | + self[:owner_id] = owner.id | |
| 38 | + n_boxes = self.owner.boxes.count if self.owner | |
| 39 | + if !n_boxes.nil? | |
| 40 | + self[:number] ||= n_boxes == 0 ? 1 : n_boxes + 1 | |
| 41 | + else | |
| 42 | + self[:number] ||= nil | |
| 43 | + end | |
| 44 | + end | |
| 45 | + | |
| 46 | + def switch_number box | |
| 47 | + throw :cant_switch_without_save if self[:id].nil? and (box.nil? or box.id.nil?) | |
| 48 | + | |
| 49 | + max_box = box.owner.boxes.count | |
| 50 | + transaction do | |
| 51 | + n = self[:number] | |
| 52 | + self[:number] = box.number | |
| 53 | + box.number = max_box + 1 | |
| 54 | + box.save | |
| 55 | + self.save | |
| 56 | + box.number = n | |
| 57 | + box.save | |
| 58 | + end | |
| 59 | + end | |
| 60 | + | |
| 61 | + end | |
| 62 | +end | ... | ... |
| ... | ... | @@ -0,0 +1,60 @@ |
| 1 | +require File.dirname(__FILE__) + '/test_helper' | |
| 2 | + | |
| 3 | +class BoxTest < Test::Unit::TestCase | |
| 4 | + | |
| 5 | + include Design | |
| 6 | + | |
| 7 | + def setup | |
| 8 | + @owner = DesignTestUser.create!(:name => 'my test user') | |
| 9 | + end | |
| 10 | + | |
| 11 | + def teardown | |
| 12 | + Box.delete_all | |
| 13 | + DesignTestUser.delete_all | |
| 14 | + end | |
| 15 | + | |
| 16 | + def test_block_should_have_an_owner | |
| 17 | + count = Box.count | |
| 18 | + b = Box.new | |
| 19 | + b.owner = @owner | |
| 20 | + assert b.save | |
| 21 | + assert count + 1, Box.count | |
| 22 | + end | |
| 23 | + | |
| 24 | + def test_should_only_accept_integers_as_number | |
| 25 | + b = Box.new | |
| 26 | + b.number = "none" | |
| 27 | + assert !b.valid? | |
| 28 | + assert b.errors.invalid?(:number) | |
| 29 | + | |
| 30 | + b = Box.new | |
| 31 | + b.owner = @owner | |
| 32 | + b.number = 10.2 | |
| 33 | + assert !b.valid? | |
| 34 | + assert b.errors.invalid?(:number) | |
| 35 | + | |
| 36 | + b = Box.new | |
| 37 | + b.owner = @owner | |
| 38 | + b.number = 10 | |
| 39 | + assert b.save | |
| 40 | + end | |
| 41 | + | |
| 42 | + def test_should_require_unique_number | |
| 43 | + b1 = Box.new | |
| 44 | + b1.owner = @owner | |
| 45 | + assert b1.save | |
| 46 | + | |
| 47 | + b2 = Box.new | |
| 48 | + b2.owner = @owner | |
| 49 | + b2.number = b1.number | |
| 50 | + assert !b2.valid? | |
| 51 | + assert b2.errors.invalid?(:number) | |
| 52 | + end | |
| 53 | + | |
| 54 | + def test_should_require_presence_of_number | |
| 55 | + b = Box.new(:number => nil) | |
| 56 | + assert !b.valid? | |
| 57 | + assert b.errors.invalid?(:number) | |
| 58 | + end | |
| 59 | + | |
| 60 | +end | ... | ... |