Skip to content

Commit d676613

Browse files
author
Raven
committed
Enhanced User model
1 parent 309820f commit d676613

File tree

4 files changed

+65
-3
lines changed

4 files changed

+65
-3
lines changed

Gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ gem 'rails'
66
group :development do
77
gem 'rspec-rails'
88
gem 'sqlite3'
9+
gem 'annotate-models'
910
end
1011

1112
group :test do

Gemfile.lock

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ GEM
2828
activemodel (= 3.0.7)
2929
activesupport (= 3.0.7)
3030
activesupport (3.0.7)
31+
annotate-models (1.0.4)
3132
arel (2.0.9)
3233
builder (2.1.2)
3334
diff-lcs (1.1.2)
@@ -89,6 +90,7 @@ PLATFORMS
8990
x86-mingw32
9091

9192
DEPENDENCIES
93+
annotate-models
9294
rails
9395
rspec
9496
rspec-rails

app/models/user.rb

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,22 @@
1-
class User < ActiveRecord::Base
2-
end
1+
# == Schema Information
2+
# Schema version: 20110424142757
3+
#
4+
# Table name: users
5+
#
6+
# id :integer not null, primary key
7+
# name :string(255)
8+
# email :string(255)
9+
# created_at :datetime
10+
# updated_at :datetime
11+
#
12+
13+
class User < ActiveRecord::Base
14+
attr_accessible :name, :email
15+
16+
validates :name, :presence => true,
17+
:length => { :maximum => 50 }
18+
validates :email, :presence => true,
19+
:format => { :with => email_regex }
20+
21+
email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
22+
end

spec/models/user_spec.rb

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,44 @@
11
require 'spec_helper'
22

33
describe User do
4-
pending "add some examples to (or delete) #{__FILE__}"
4+
5+
before(:each) do
6+
@attr = { :name => "Example User", :email => "user@example.com" }
7+
end
8+
9+
it "should create a new instance given valid attributes" do
10+
User.create!(@attr)
11+
end
12+
13+
#Test for no blank email address
14+
it "should require an email address" do
15+
no_email_user = User.new(@attr.merge(:email => ""))
16+
no_email_user.should_not be_valid
17+
end
18+
19+
20+
#Test for maximum length
21+
it "should reject names that are too long" do
22+
long_name = "a" * 51
23+
long_name_user = User.new(@attr.merge(:name => long_name))
24+
long_name_user.should_not be_valid
25+
end
26+
27+
#Test for proper email
28+
it "should accept valid email addresses" do
29+
addresses = %w[user@foo.com THE_USER@foo.bar.org first.last@foo.jp]
30+
addresses.each do |address|
31+
valid_email_user = User.new(@attr.merge(:email => address))
32+
valid_email_user.should be_valid
33+
end
34+
end
35+
36+
it "should reject invalid email addresses" do
37+
addresses = %w[user@foo,com user_at_foo.org example.user@foo.]
38+
addresses.each do |address|
39+
invalid_email_user = User.new(@attr.merge(:email => address))
40+
invalid_email_user.should_not be_valid
41+
end
42+
end
43+
544
end

0 commit comments

Comments
 (0)