json_resume_ouput #1

Merged
rodo merged 2 commits from json_resume_ouput into main 2 weeks ago
  1. 10
      app/admin/users_admin.rb
  2. 129
      app/views/users/show.json.jbuilder

10
app/admin/users_admin.rb

@ -44,10 +44,12 @@ Trestle.resource(:users) do
end
def generate_json
user = admin.find_instance(params)
ac = ActionController::Base.new()
json = ac.render_to_string(layout: false, template: "users/show", locals: { "@user": user } )
render json: json, layout: false
generate_json_resume
end
def generate_json_resume
@user = admin.find_instance(params)
render template: "users/show", formats: [:json], layout: false
end
def generate_tex(template: "resume")

129
app/views/users/show.json.jbuilder

@ -1,37 +1,118 @@
json.user do
json.id @user.id
json.name @user.name
json.title @user.title
user = @user
split_list = lambda do |value|
value.to_s.split(/[;,]/).map { |item| item.strip }.reject(&:blank?)
end
parse_period = lambda do |period|
years = period.to_s.scan(/\b(19\d{2}|20\d{2})\b/).flatten
return [nil, nil] if years.empty?
[years[0], years[1]]
end
json.work_experiences @user.work_experiences.active do |work|
# json.id work.id
json.title work.title
normalize_url = lambda do |value|
return nil if value.blank?
value.match?(/\Ahttps?:\/\//) ? value : "https://#{value}"
end
json.organization work.employer
profile_from = lambda do |value, network, base_url|
return nil if value.blank?
if work.technologies.present?
json.technologies work.technologies
if value.include?("/") || value.include?(".")
url = normalize_url.call(value)
username = url.to_s.split("/").last&.delete_prefix("@")
else
username = value.delete_prefix("@")
url = base_url.present? ? "#{base_url}/#{username}" : nil
end
json.period work.period
json.responsibilities do
json.array! work.items_csv&.split(";")
profile = { "network" => network }
profile["username"] = username if username.present?
profile["url"] = url if url.present?
profile
end
json.basics do
json.name user.name if user.name.present?
json.label user.title if user.title.present?
json.email user.email if user.email.present?
json.phone user.phone if user.phone.present?
json.summary user.objective if user.objective.present?
if user.address.present?
json.location do
json.address user.address
end
end
json.skills @user.skills.active do |skill|
# json.id skill.id
json.title skill.title
json.detail skill.detail
primary_url = user.other_page_url.presence || user.linkedin.presence || user.github.presence
url = normalize_url.call(primary_url)
json.url url if url.present?
profiles = []
profiles << profile_from.call(user.linkedin, "LinkedIn", "https://www.linkedin.com/in")
profiles << profile_from.call(user.github, "GitHub", "https://github.com")
profiles << profile_from.call(user.other_page_url, "Website", nil)
profiles.compact!
json.profiles profiles if profiles.any?
end
if user.work_experiences.active.any?
json.work user.work_experiences.active do |work_entry|
start_date, end_date = parse_period.call(work_entry.period)
highlights = split_list.call(work_entry.items_csv)
technologies = split_list.call(work_entry.technologies)
highlights << "Technologies: #{technologies.join(', ')}" if technologies.any?
summary = work_entry.achivements.presence
summary = work_entry.period.presence if summary.blank? && start_date.blank? && end_date.blank?
json.name work_entry.employer if work_entry.employer.present?
json.position work_entry.title if work_entry.title.present?
json.summary summary if summary.present?
json.highlights highlights if highlights.any?
json.startDate start_date if start_date.present?
json.endDate end_date if end_date.present?
if start_date.blank? && end_date.blank? && work_entry.reference_date.present?
json.endDate work_entry.reference_date.iso8601
end
end
end
if user.education_entries.active.any?
json.education user.education_entries.active do |education_entry|
start_date, end_date = parse_period.call(education_entry.period)
study_type = education_entry.title
area = nil
if study_type.present? && study_type.match?(/\s+in\s+/i)
study_type, area = study_type.split(/\s+in\s+/i, 2)
end
courses = split_list.call(education_entry.items_csv)
json.institution education_entry.institution if education_entry.institution.present?
json.studyType study_type if study_type.present?
json.area area if area.present?
json.courses courses if courses.any?
json.startDate start_date if start_date.present?
json.endDate end_date if end_date.present?
if start_date.blank? && end_date.blank? && education_entry.reference_date.present?
json.endDate education_entry.reference_date.iso8601
end
end
end
if user.skills.active.any?
json.skills user.skills.active do |skill|
keywords = split_list.call(skill.detail)
json.education_entries @user.education_entries.active do |edu|
json.institution edu.institution
json.title edu.title
json.location edu.location
json.period edu.period
json.items do
json.array! edu.items_csv&.split(";")
json.name skill.title if skill.title.present?
if keywords.any?
json.keywords keywords
elsif skill.detail.present?
json.level skill.detail
end
end
end

Loading…
Cancel
Save