Introduce SpeakerProfile
All the personal data of the user that is not used for system tasks (such as login) is held here.
This commit is contained in:
parent
fc1605e4a0
commit
02059ad2a8
|
@ -0,0 +1,9 @@
|
|||
class SpeakerProfile < ActiveRecord::Base
|
||||
belongs_to :user
|
||||
|
||||
validates :first_name, presence: true
|
||||
validates :last_name, presence: true
|
||||
validates :photo_url, presence: true
|
||||
validates :mobile_phone, presence: true
|
||||
validates :biography, presence: true
|
||||
end
|
|
@ -3,4 +3,5 @@ class User < ActiveRecord::Base
|
|||
# :lockable, :timeoutable and :omniauthable
|
||||
devise :database_authenticatable, :registerable, :confirmable,
|
||||
:recoverable, :rememberable, :trackable, :validatable
|
||||
has_one :speaker_profile
|
||||
end
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
class CreateSpeakerProfiles < ActiveRecord::Migration
|
||||
def change
|
||||
create_table :speaker_profiles do |t|
|
||||
t.string :first_name, null: false
|
||||
t.string :last_name, null: false
|
||||
t.string :organisation
|
||||
t.string :public_email
|
||||
t.string :photo_url, null: false
|
||||
t.string :mobile_phone, null: false
|
||||
t.text :biography, null: false
|
||||
t.string :github, null: false
|
||||
t.string :twitter, null: false
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,13 @@
|
|||
class RemoveSpeakerProfileColumnsFromUsers < ActiveRecord::Migration
|
||||
def change
|
||||
remove_column :users, :first_name, :string
|
||||
remove_column :users, :last_name, :string
|
||||
remove_column :users, :organisation, :string
|
||||
remove_column :users, :hide_email, :boolean
|
||||
remove_column :users, :photo_url, :string
|
||||
remove_column :users, :mobile_phone, :string
|
||||
remove_column :users, :biography, :text
|
||||
remove_column :users, :github, :string
|
||||
remove_column :users, :twitter, :string
|
||||
end
|
||||
end
|
|
@ -0,0 +1,5 @@
|
|||
class AddUserReferenceToSpeakerProfiles < ActiveRecord::Migration
|
||||
def change
|
||||
add_reference :speaker_profiles, :user, index: true
|
||||
end
|
||||
end
|
|
@ -0,0 +1,16 @@
|
|||
# Read about factories at https://github.com/thoughtbot/factory_girl
|
||||
|
||||
FactoryGirl.define do
|
||||
factory :speaker_profile do
|
||||
first_name "John"
|
||||
last_name "Doe"
|
||||
organisation "Example Org"
|
||||
public_email "a@b.com"
|
||||
photo_url "http://placehold.it/50x50"
|
||||
mobile_phone "0883444555"
|
||||
biography "Lorem ipsum"
|
||||
github "octocat"
|
||||
twitter "handle"
|
||||
user
|
||||
end
|
||||
end
|
|
@ -4,11 +4,8 @@ FactoryGirl.define do
|
|||
sequence(:email) { |n| "user-#{n}@example.org" }
|
||||
|
||||
factory :user do
|
||||
first_name 'John'
|
||||
last_name 'Doe'
|
||||
password 'password'
|
||||
password_confirmation 'password'
|
||||
mobile_phone '0883444555'
|
||||
email
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
require 'rails_helper'
|
||||
|
||||
RSpec.describe SpeakerProfile, :type => :model do
|
||||
it 'is invalid without a first name' do
|
||||
expect(build(:speaker_profile, first_name: nil)).to have_error_on :first_name
|
||||
end
|
||||
|
||||
it 'is invalid without a last name' do
|
||||
expect(build(:speaker_profile, last_name: nil)).to have_error_on :last_name
|
||||
end
|
||||
|
||||
it 'is invalid without a photo' do
|
||||
expect(build(:speaker_profile, photo_url: nil)).to have_error_on :photo_url
|
||||
end
|
||||
|
||||
it 'is invalid without a mobile phone' do
|
||||
expect(build(:speaker_profile, mobile_phone: nil)).to have_error_on :mobile_phone
|
||||
end
|
||||
|
||||
it 'is invalid without a bio' do
|
||||
expect(build(:speaker_profile, biography: nil)).to have_error_on :biography
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue