Commit f4395fae01a6b86eb06123e8317e5cba95312f8c
1 parent
34043d4f
Exists in
master
and in
28 other branches
ActionItem78: generating unique codes for tasks
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@636 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
3 changed files
with
40 additions
and
3 deletions
Show diff stats
app/models/task.rb
... | ... | @@ -24,11 +24,23 @@ class Task < ActiveRecord::Base |
24 | 24 | belongs_to :requestor, :class_name => 'Person', :foreign_key => :requestor_id |
25 | 25 | belongs_to :target, :class_name => 'Profile', :foreign_key => :target_id |
26 | 26 | |
27 | + validates_uniqueness_of :code | |
28 | + validates_presence_of :code | |
29 | + | |
27 | 30 | def initialize(*args) |
28 | 31 | super |
29 | 32 | self.status ||= Task::Status::ACTIVE |
30 | 33 | end |
31 | 34 | |
35 | + before_validation_on_create do |task| | |
36 | + if task.code.nil? | |
37 | + task.code = Task.generate_code | |
38 | + while (Task.find_by_code(task.code)) | |
39 | + task.code = Task.generate_code | |
40 | + end | |
41 | + end | |
42 | + end | |
43 | + | |
32 | 44 | after_create do |task| |
33 | 45 | TaskMailer.deliver_task_created(task) |
34 | 46 | end |
... | ... | @@ -95,4 +107,15 @@ class Task < ActiveRecord::Base |
95 | 107 | def perform |
96 | 108 | end |
97 | 109 | |
110 | + class << self | |
111 | + def generate_code | |
112 | + chars = ('a'..'z').to_a + ('0'..'9').to_a | |
113 | + code = "" | |
114 | + chars.size.times do |n| | |
115 | + code << chars[rand(chars.size)] | |
116 | + end | |
117 | + code | |
118 | + end | |
119 | + end | |
120 | + | |
98 | 121 | end | ... | ... |
db/migrate/017_create_tasks.rb
test/unit/task_test.rb
... | ... | @@ -88,9 +88,23 @@ class TaskTest < Test::Unit::TestCase |
88 | 88 | task.save! |
89 | 89 | end |
90 | 90 | |
91 | - should 'generate a random hash when creating' do | |
92 | - flunk 'not implemented yet' | |
91 | + should 'generate a random code before validation' do | |
92 | + Task.expects(:generate_code) | |
93 | + Task.new.valid? | |
93 | 94 | end |
94 | 95 | |
96 | + should 'make sure that codes are unique' do | |
97 | + task1 = Task.create! | |
98 | + task2 = Task.new(:code => task1.code) | |
99 | + | |
100 | + assert !task2.valid? | |
101 | + assert task2.errors.invalid?(:code) | |
102 | + end | |
103 | + | |
104 | + should 'generate a code with chars from a-z and 0-9' do | |
105 | + code = Task.generate_code | |
106 | + assert(code =~ /^[a-z0-9]+$/) | |
107 | + assert_equal 36, code.size | |
108 | + end | |
95 | 109 | |
96 | 110 | end | ... | ... |