Skip to content

Commit

Permalink
fix: add resume presenter, skills_description validation
Browse files Browse the repository at this point in the history
  • Loading branch information
eiKulshan committed May 28, 2024
1 parent 7fe539e commit 70930d2
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 4 deletions.
9 changes: 8 additions & 1 deletion app/models/resume.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ class Resume < ApplicationRecord
include StateConcern
extend Enumerize
extend TagResumePresenter
include ResumePresenter

mark_as_outdated :hexlet_url, :awards_description

Expand All @@ -60,10 +61,10 @@ class Resume < ApplicationRecord
validates :github_url, presence: true, unless: :draft?
validates :summary, length: { minimum: 200 }, presence: true, unless: :draft?
validates :skills_description, length: { maximum: 250 }, presence: true, unless: :draft?
validates :skills_description, presence: true, unless: :draft?
validates :contact_email, presence: true, unless: :draft?
validates :contact_email, 'valid_email_2/email': true
validates :contact_phone, phone: true
validate :skills_description_valid_format, unless: :draft?

belongs_to :user
has_many :answers, inverse_of: :resume, dependent: :destroy
Expand Down Expand Up @@ -130,6 +131,12 @@ def initialize(attribute = nil)
super(attrs_with_defaults)
end

def skills_description_valid_format
return unless skills.size > 10 || skills.any? { |element| element.size > 25 }

errors.add(:skills_description)
end

def to_s
name
end
Expand Down
7 changes: 7 additions & 0 deletions app/presenters/resume_presenter.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# frozen_string_literal: true

module ResumePresenter
def skills
skills_description&.split("\n") || []
end
end
2 changes: 1 addition & 1 deletion app/views/web/resumes/_information.html.slim
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ hr.my-auto
== markdown2html @resume.skills_description_old
- else
.row
- @resume.skills_description.split("\n")[0..9].each_slice(5) do |skills_slice|
- @resume.skills.each_slice(5) do |skills_slice|
.col-6
- skills_slice.each do |skill|
li = skill[0..24]
Expand Down
2 changes: 2 additions & 0 deletions config/locales/en.activerecord.yml
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,8 @@ en:
models:
resume:
attributes:
skills_description:
invalid: is not in the correct format
contact_email:
invalid: is not in the correct format
contact_phone:
Expand Down
4 changes: 3 additions & 1 deletion config/locales/ru.activerecord.yml
Original file line number Diff line number Diff line change
Expand Up @@ -161,10 +161,12 @@ ru:
models:
resume:
attributes:
skills_description:
invalid: имеют не верный формат
contact_email:
invalid: имеет не верный формат
contact_phone:
invalid: имеет неверное формат
invalid: имеет не верный формат
resume/answer/like:
attributes:
user:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
class UpdateResumeSkillDescription < ActiveRecord::Migration[7.0]
def change
rename_column :resumes, :skills_description, :skills_description_old
add_column :resumes, :skills_description, :text, limit: 250
add_column :resumes, :skills_description, :text
end
end
24 changes: 24 additions & 0 deletions test/controllers/web/account/resumes_controller_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -190,4 +190,28 @@ class Web::Account::ResumesControllerTest < ActionDispatch::IntegrationTest
resume = Resume.find_by(name: attrs[:name])
assert { !resume }
end

test '#create fail with invalid skills_description format' do
attrs = FactoryBot.attributes_for :resume
attrs[:skills_description] = "Too_many_skills\n" * 15

params = {
publish: true,
resume: attrs
}

post(account_resumes_path, params:)
assert_response :unprocessable_entity

resume = Resume.find_by(name: attrs[:name])
assert { !resume }

attrs[:skills_description] = 'Invalid_skill_lenght' * 2

post(account_resumes_path, params:)
assert_response :unprocessable_entity

resume = Resume.find_by(name: attrs[:name])
assert { !resume }
end
end

0 comments on commit 70930d2

Please sign in to comment.