Commit 1f75bc060aeedeaf60f75c65f4a5db1cc3a75fee

Authored by AntonioTerceiro
1 parent 3c48d74f

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
vendor/plugins/design/lib/design/box.rb 0 → 100644
... ... @@ -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
... ...
vendor/plugins/design/test/box_test.rb 0 → 100644
... ... @@ -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
... ...