From 1edf8b0241029c510740005129b4fe6013087044 Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Tue, 4 Dec 2018 08:08:33 +0500 Subject: [PATCH] Add model UserOmniauth --- app/models/user.rb | 2 ++ app/models/user_omniauth.rb | 9 +++++++++ .../20181204030414_create_user_omniauths.rb | 16 ++++++++++++++++ db/schema.rb | 14 +++++++++++++- factories/user_omniauths.rb | 11 +++++++++++ spec/models/user_omniauth_spec.rb | 9 +++++++++ 6 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 app/models/user_omniauth.rb create mode 100644 db/migrate/20181204030414_create_user_omniauths.rb create mode 100644 factories/user_omniauths.rb create mode 100644 spec/models/user_omniauth_spec.rb diff --git a/app/models/user.rb b/app/models/user.rb index fd8d470..e7e3034 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -17,6 +17,8 @@ class User < ApplicationRecord belongs_to :account + has_many :user_omniauths, dependent: :restrict_with_exception + validates :account_id, uniqueness: true before_validation do diff --git a/app/models/user_omniauth.rb b/app/models/user_omniauth.rb new file mode 100644 index 0000000..d33f26a --- /dev/null +++ b/app/models/user_omniauth.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class UserOmniauth < ApplicationRecord + belongs_to :user + + validates :provider, presence: true, uniqueness: { scope: :remote_id } + validates :remote_id, presence: true + validates :email, presence: true +end diff --git a/db/migrate/20181204030414_create_user_omniauths.rb b/db/migrate/20181204030414_create_user_omniauths.rb new file mode 100644 index 0000000..779b5c4 --- /dev/null +++ b/db/migrate/20181204030414_create_user_omniauths.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class CreateUserOmniauths < ActiveRecord::Migration[5.2] + def change + create_table :user_omniauths do |t| + t.timestamps null: false + + t.references :user, foreign_key: true + t.string :provider, null: false + t.string :remote_id, null: false + t.string :email, null: false + + t.index %i[remote_id provider], unique: true + end + end +end diff --git a/db/schema.rb b/db/schema.rb index e6d029a..aaaea59 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2018_12_04_030126) do +ActiveRecord::Schema.define(version: 2018_12_04_030414) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -128,6 +128,17 @@ ActiveRecord::Schema.define(version: 2018_12_04_030126) do t.string "api_token", null: false end + create_table "user_omniauths", force: :cascade do |t| + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.bigint "user_id" + t.string "provider", null: false + t.string "remote_id", null: false + t.string "email", null: false + t.index ["remote_id", "provider"], name: "index_user_omniauths_on_remote_id_and_provider", unique: true + t.index ["user_id"], name: "index_user_omniauths_on_user_id" + end + create_table "users", force: :cascade do |t| t.datetime "created_at", null: false t.datetime "updated_at", null: false @@ -163,5 +174,6 @@ ActiveRecord::Schema.define(version: 2018_12_04_030126) do add_foreign_key "passport_confirmations", "accounts" add_foreign_key "passport_confirmations", "passports" add_foreign_key "passport_maps", "passports" + add_foreign_key "user_omniauths", "users" add_foreign_key "users", "accounts" end diff --git a/factories/user_omniauths.rb b/factories/user_omniauths.rb new file mode 100644 index 0000000..e04029c --- /dev/null +++ b/factories/user_omniauths.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +FactoryBot.define do + factory :user_omniauth do + association :user + + provider { 'github' } + remote_id { SecureRandom.hex } + email { Faker::Internet.email } + end +end diff --git a/spec/models/user_omniauth_spec.rb b/spec/models/user_omniauth_spec.rb new file mode 100644 index 0000000..4db8918 --- /dev/null +++ b/spec/models/user_omniauth_spec.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe UserOmniauth do + subject { create :user_omniauth } + + pending "add some examples to (or delete) #{__FILE__}" +end