From 28d99528de7e076fb4caa3e8e46e3867887ccb4a Mon Sep 17 00:00:00 2001 From: Petko Bordjukov Date: Mon, 28 Jul 2014 14:15:08 +0300 Subject: [PATCH] Generate an initial User model --- app/models/user.rb | 6 +++ config/routes.rb | 1 + .../20140728105159_devise_create_users.rb | 51 +++++++++++++++++++ spec/factories/users.rb | 14 +++++ spec/models/user_spec.rb | 7 +++ 5 files changed, 79 insertions(+) create mode 100644 app/models/user.rb create mode 100644 db/migrate/20140728105159_devise_create_users.rb create mode 100644 spec/factories/users.rb create mode 100644 spec/models/user_spec.rb diff --git a/app/models/user.rb b/app/models/user.rb new file mode 100644 index 0000000..99b38f5 --- /dev/null +++ b/app/models/user.rb @@ -0,0 +1,6 @@ +class User < ActiveRecord::Base + # Include default devise modules. Others available are: + # :lockable, :timeoutable and :omniauthable + devise :database_authenticatable, :registerable, :confirmable, + :recoverable, :rememberable, :trackable, :validatable +end diff --git a/config/routes.rb b/config/routes.rb index 3f66539..fc2791d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,4 +1,5 @@ Rails.application.routes.draw do + devise_for :users # The priority is based upon order of creation: first created -> highest priority. # See how all your routes lay out with "rake routes". diff --git a/db/migrate/20140728105159_devise_create_users.rb b/db/migrate/20140728105159_devise_create_users.rb new file mode 100644 index 0000000..2ed6814 --- /dev/null +++ b/db/migrate/20140728105159_devise_create_users.rb @@ -0,0 +1,51 @@ +class DeviseCreateUsers < ActiveRecord::Migration + def change + create_table(:users) do |t| + ## Database authenticatable + t.string :email, null: false, default: "" + t.string :encrypted_password, null: false, default: "" + + ## Recoverable + t.string :reset_password_token + t.datetime :reset_password_sent_at + + ## Rememberable + t.datetime :remember_created_at + + ## Trackable + t.integer :sign_in_count, default: 0, null: false + t.datetime :current_sign_in_at + t.datetime :last_sign_in_at + t.string :current_sign_in_ip + t.string :last_sign_in_ip + + ## Confirmable + t.string :confirmation_token + t.datetime :confirmed_at + t.datetime :confirmation_sent_at + t.string :unconfirmed_email # Only if using reconfirmable + + ## Lockable + # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts + # t.string :unlock_token # Only if unlock strategy is :email or :both + # t.datetime :locked_at + + t.string :first_name, null: false + t.string :last_name, null: false + t.string :organisation + t.boolean :hide_email, null: false, default: true + t.string :photo_url + t.string :mobile_phone, null: false + t.text :biography + t.string :github + t.string :twitter + + t.timestamps + end + + add_index :users, :email, unique: true + add_index :users, :reset_password_token, unique: true + add_index :users, :confirmation_token, unique: true + # add_index :users, :unlock_token, unique: true + end +end diff --git a/spec/factories/users.rb b/spec/factories/users.rb new file mode 100644 index 0000000..0fd5854 --- /dev/null +++ b/spec/factories/users.rb @@ -0,0 +1,14 @@ +# Read about factories at https://github.com/thoughtbot/factory_girl + +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 diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb new file mode 100644 index 0000000..155b44a --- /dev/null +++ b/spec/models/user_spec.rb @@ -0,0 +1,7 @@ +require 'rails_helper' + +RSpec.describe User do + it 'lets Devise handle email and password validations' do + expect(build(:user)).to be_a Devise::Models::Validatable + end +end