|
4 | 4 | # |
5 | 5 | # id :integer not null, primary key |
6 | 6 | # name :string not null |
| 7 | +# region :string |
| 8 | +# skillsets :text |
7 | 9 | # telephone_number :string |
8 | 10 | # created_at :datetime not null |
9 | 11 | # updated_at :datetime not null |
|
18 | 20 | # hacker_id (hacker_id => hackers.id) |
19 | 21 | # |
20 | 22 | class Profile < ::ResourceRecord |
| 23 | + SKILLSETS = { |
| 24 | + "Frontend Developer" => "frontend", |
| 25 | + "Backend Developer" => "backend", |
| 26 | + "Mobile Engineer" => "mobile", |
| 27 | + "Full Stack Developer" => "fullstack", |
| 28 | + "UI/UX Designer" => "designer", |
| 29 | + "Product Manager" => "product", |
| 30 | + "Data Scientist" => "data_science", |
| 31 | + "DevOps Engineer" => "devops" |
| 32 | + }.freeze |
| 33 | + |
| 34 | + REGIONS = [ |
| 35 | + "Greater Accra", |
| 36 | + "Ashanti", |
| 37 | + "Western", |
| 38 | + "Western North", |
| 39 | + "Eastern", |
| 40 | + "Central", |
| 41 | + "Volta", |
| 42 | + "Oti", |
| 43 | + "Northern", |
| 44 | + "Savannah", |
| 45 | + "North East", |
| 46 | + "Upper East", |
| 47 | + "Upper West", |
| 48 | + "Bono", |
| 49 | + "Bono East", |
| 50 | + "Ahafo" |
| 51 | + ].freeze |
| 52 | + |
21 | 53 | belongs_to :hacker |
22 | 54 | has_one :team, through: :hacker |
23 | 55 | has_one :emergency_contact, through: :hacker |
24 | 56 |
|
| 57 | + serialize :skillsets, coder: JSON |
| 58 | + |
25 | 59 | validates :name, presence: true |
26 | | - validates :telephone_number, presence: true |
| 60 | + validates :telephone_number, presence: true, phone: {possible: true, types: :mobile} |
| 61 | + validates :skillsets, presence: true |
| 62 | + validates :region, presence: true, inclusion: {in: REGIONS} |
| 63 | + |
| 64 | + def telephone_number=(value) |
| 65 | + parsed = Phonelib.parse(value) |
| 66 | + super(parsed.valid? ? parsed.e164 : value) |
| 67 | + end |
| 68 | + |
| 69 | + def skillsets=(value) |
| 70 | + value = value.compact_blank if value.is_a?(Array) |
| 71 | + super |
| 72 | + end |
| 73 | + |
| 74 | + private |
| 75 | + |
| 76 | + def skillsets_must_be_valid |
| 77 | + return if skillsets.blank? |
| 78 | + |
| 79 | + invalid = skillsets - SKILLSETS.values |
| 80 | + errors.add(:skillsets, "contains invalid values: #{invalid.join(", ")}") if invalid.any? |
| 81 | + end |
27 | 82 | end |
0 commit comments