Update remaining references to profile fields
This commit is contained in:
parent
ab720f3f55
commit
00496a1596
|
@ -14,11 +14,11 @@ module ApplicationHelper::GraphMethods
|
|||
# @param user [User]
|
||||
def user_opengraph(user)
|
||||
opengraph_meta_tags({
|
||||
'og:title': user.safe_name,
|
||||
'og:title': user.profile.safe_name,
|
||||
'og:type': 'profile',
|
||||
'og:image': full_profile_picture_url(user),
|
||||
'og:url': show_user_profile_url(user.screen_name),
|
||||
'og:description': user.bio,
|
||||
'og:description': user.profile.description,
|
||||
'og:site_name': APP_CONFIG['site_name'],
|
||||
'profile:username': user.screen_name
|
||||
})
|
||||
|
@ -29,8 +29,8 @@ module ApplicationHelper::GraphMethods
|
|||
meta_tags({
|
||||
'twitter:card': 'summary',
|
||||
'twitter:site': '@retrospring',
|
||||
'twitter:title': user.motivation_header.presence || "Ask me anything!",
|
||||
'twitter:description': "Ask #{user.safe_name} anything on Retrospring",
|
||||
'twitter:title': user.profile.motivation_header.presence || "Ask me anything!",
|
||||
'twitter:description': "Ask #{user.profile.safe_name} anything on Retrospring",
|
||||
'twitter:image': full_profile_picture_url(user)
|
||||
})
|
||||
end
|
||||
|
@ -38,7 +38,7 @@ module ApplicationHelper::GraphMethods
|
|||
# @param answer [Answer]
|
||||
def answer_opengraph(answer)
|
||||
opengraph_meta_tags({
|
||||
'og:title': "#{answer.user.safe_name} answered: #{answer.question.content}",
|
||||
'og:title': "#{answer.user.profile.safe_name} answered: #{answer.question.content}",
|
||||
'og:type': 'article',
|
||||
'og:image': full_profile_picture_url(answer.user),
|
||||
'og:url': show_user_answer_url(answer.user.screen_name, answer.id),
|
||||
|
|
|
@ -3,9 +3,9 @@ class Profile < ApplicationRecord
|
|||
|
||||
attr_readonly :user_id
|
||||
|
||||
validates :display_name, length: { maximum: 32 }
|
||||
validates :display_name, length: { maximum: 50 }
|
||||
validates :location, length: { maximum: 72 }
|
||||
validates :description, length: { maximum: 256 }
|
||||
validates :description, length: { maximum: 200 }
|
||||
|
||||
before_save do
|
||||
unless website.blank?
|
||||
|
@ -24,6 +24,6 @@ class Profile < ApplicationRecord
|
|||
end
|
||||
|
||||
def safe_name
|
||||
self.display_name.presence || self.screen_name
|
||||
display_name.presence || user.screen_name
|
||||
end
|
||||
end
|
||||
|
|
|
@ -58,9 +58,6 @@ class User < ApplicationRecord
|
|||
validates :email, fake_email: true
|
||||
validates :screen_name, presence: true, format: { with: SCREEN_NAME_REGEX }, uniqueness: { case_sensitive: false }, screen_name: true
|
||||
|
||||
validates :display_name, length: { maximum: 50 }
|
||||
validates :bio, length: { maximum: 200 }
|
||||
|
||||
mount_uploader :profile_picture, ProfilePictureUploader, mount_on: :profile_picture_file_name
|
||||
process_in_background :profile_picture
|
||||
mount_uploader :profile_header, ProfileHeaderUploader, mount_on: :profile_header_file_name
|
||||
|
@ -77,6 +74,10 @@ class User < ApplicationRecord
|
|||
end
|
||||
end
|
||||
|
||||
after_create do
|
||||
Profile.create(user_id: id) if Profile.where(user_id: id).count.zero?
|
||||
end
|
||||
|
||||
def login=(login)
|
||||
@login = login
|
||||
end
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
.card
|
||||
.card-header
|
||||
- if user.motivation_header.blank?
|
||||
- if user.profile.motivation_header.blank?
|
||||
= t 'views.questionbox.title'
|
||||
- else
|
||||
= user.motivation_header
|
||||
= user.profile.motivation_header
|
||||
.card-body
|
||||
- if user.banned?
|
||||
.text-center
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
.card-body
|
||||
= bootstrap_form_for(current_user, url: { action: :edit }, html: { multipart: true }, method: :patch) do |f|
|
||||
|
||||
= f.text_field :display_name, label: t('views.settings.profile.displayname')
|
||||
|
||||
.media#profile-picture-media
|
||||
.pull-left
|
||||
%img.avatar-lg.mr-3{ src: current_user.profile_picture.url(:medium) }
|
||||
|
@ -38,14 +36,6 @@
|
|||
%button.btn.btn-inverse#cropper-header-zoom-in{ type: :button }
|
||||
%i.fa.fa-search-plus
|
||||
|
||||
= f.text_field :motivation_header, label: t('views.settings.profile.motivation'), placeholder: t('views.settings.profile.placeholder.motivation')
|
||||
|
||||
= f.text_field :website, label: t('views.settings.profile.website'), placeholder: 'https://example.com'
|
||||
|
||||
= f.text_field :location, label: t('views.settings.profile.location'), placeholder: t('views.settings.profile.placeholder.location')
|
||||
|
||||
= f.text_area :bio, label: t('views.settings.profile.bio'), placeholder: t('views.settings.profile.placeholder.bio')
|
||||
|
||||
= f.check_box :show_foreign_themes, label: 'Render other user themes when visiting their profile'
|
||||
|
||||
- %i[profile_picture_x profile_picture_y profile_picture_w profile_picture_h].each do |attrib|
|
||||
|
@ -55,3 +45,19 @@
|
|||
= f.hidden_field attrib, id: attrib
|
||||
|
||||
= f.submit t('views.actions.save'), class: 'btn btn-primary'
|
||||
|
||||
.card
|
||||
.card-body
|
||||
= bootstrap_form_for(current_user.profile, url: { action: :edit }, html: { multipart: true }, method: :patch) do |f|
|
||||
|
||||
= f.text_field :display_name, label: t('views.settings.profile.displayname')
|
||||
|
||||
= f.text_field :motivation_header, label: t('views.settings.profile.motivation'), placeholder: t('views.settings.profile.placeholder.motivation')
|
||||
|
||||
= f.text_field :website, label: t('views.settings.profile.website'), placeholder: 'https://example.com'
|
||||
|
||||
= f.text_field :location, label: t('views.settings.profile.location'), placeholder: t('views.settings.profile.placeholder.location')
|
||||
|
||||
= f.text_area :description, label: t('views.settings.profile.bio'), placeholder: t('views.settings.profile.placeholder.bio')
|
||||
|
||||
= f.submit t('views.actions.save'), class: 'btn btn-primary'
|
||||
|
|
|
@ -2,10 +2,11 @@ class CreateProfiles < ActiveRecord::Migration[5.2]
|
|||
def change
|
||||
create_table :profiles do |t|
|
||||
t.references :user, index: true, foreign_key: true
|
||||
t.string :display_name, length: 32
|
||||
t.string :description, length: 256
|
||||
t.string :location, length: 72
|
||||
t.string :website
|
||||
t.string :display_name, length: 50
|
||||
t.string :description, length: 200, null: false, default: ''
|
||||
t.string :location, length: 72, null: false, default: ''
|
||||
t.string :website, null: false, default: ''
|
||||
t.string :motivation_header, null: false, default: ''
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
|
|
|
@ -119,9 +119,10 @@ ActiveRecord::Schema.define(version: 2021_12_19_153054) do
|
|||
create_table "profiles", force: :cascade do |t|
|
||||
t.bigint "user_id"
|
||||
t.string "display_name"
|
||||
t.string "description"
|
||||
t.string "location"
|
||||
t.string "website"
|
||||
t.string "description", default: "", null: false
|
||||
t.string "location", default: "", null: false
|
||||
t.string "website", default: "", null: false
|
||||
t.string "motivation_header", default: "", null: false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.index ["user_id"], name: "index_profiles_on_user_id"
|
||||
|
@ -136,7 +137,9 @@ ActiveRecord::Schema.define(version: 2021_12_19_153054) do
|
|||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.integer "answer_count", default: 0, null: false
|
||||
t.datetime "discarded_at"
|
||||
t.boolean "direct", default: false, null: false
|
||||
t.index ["discarded_at"], name: "index_questions_on_discarded_at"
|
||||
t.index ["user_id", "created_at"], name: "index_questions_on_user_id_and_created_at"
|
||||
end
|
||||
|
||||
|
|
|
@ -6,16 +6,20 @@ FactoryBot.define do
|
|||
sequence(:email) { |i| "#{i}#{Faker::Internet.email}" }
|
||||
password { 'P4s5w0rD' }
|
||||
confirmed_at { Time.now.utc }
|
||||
display_name { Faker::Name.name }
|
||||
|
||||
transient do
|
||||
roles { [] }
|
||||
profile { { display_name: Faker::Name.name } }
|
||||
end
|
||||
|
||||
after(:create) do |user, evaluator|
|
||||
evaluator.roles.each do |role|
|
||||
user.add_role role
|
||||
end
|
||||
|
||||
evaluator.profile.each do |key, value|
|
||||
user.profile.public_send(:"#{key}=", value)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -55,8 +55,8 @@ describe ApplicationHelper, :type => :helper do
|
|||
describe "#user_opengraph" do
|
||||
context "sample user" do
|
||||
let(:user) { FactoryBot.create(:user,
|
||||
display_name: 'Cunes',
|
||||
bio: 'A bunch of raccoons in a trenchcoat.',
|
||||
profile: { display_name: 'Cunes',
|
||||
description: 'A bunch of raccoons in a trenchcoat.' },
|
||||
screen_name: 'raccoons') }
|
||||
|
||||
subject { user_opengraph(user) }
|
||||
|
@ -79,12 +79,12 @@ EOS
|
|||
describe "#user_twitter_card" do
|
||||
context "sample user" do
|
||||
let(:user) { FactoryBot.create(:user,
|
||||
display_name: '',
|
||||
bio: 'A bunch of raccoons in a trenchcoat.',
|
||||
profile: {
|
||||
display_name: '',
|
||||
description: 'A bunch of raccoons in a trenchcoat.'},
|
||||
screen_name: 'raccoons') }
|
||||
|
||||
subject { user_twitter_card(user) }
|
||||
|
||||
it 'should generate a matching OpenGraph structure for a user' do
|
||||
expect(subject).to eq(<<-EOS.chomp)
|
||||
<meta name="twitter:card" content="summary" />
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "factory_bot_rails"
|
||||
|
|
Loading…
Reference in New Issue