json_resume 0.3.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +23 -3
- data/bin/json_resume +33 -9
- data/examples/prateek_cv.json +1 -1
- data/extras/resume_html/core-page.html +18 -0
- data/extras/resume_html/index.html +33 -0
- data/extras/resume_html/public/css/book.png +0 -0
- data/extras/resume_html/public/css/bookmark.png +0 -0
- data/extras/resume_html/public/css/bootstrap.min.css +7 -0
- data/extras/resume_html/public/css/briefcase.png +0 -0
- data/extras/resume_html/public/css/edit.png +0 -0
- data/extras/resume_html/public/css/envelope.png +0 -0
- data/extras/resume_html/public/css/file.png +0 -0
- data/extras/resume_html/public/css/gear.png +0 -0
- data/extras/resume_html/public/css/github.png +0 -0
- data/extras/resume_html/public/css/globe.png +0 -0
- data/extras/resume_html/public/css/icons.data.png.css +96 -0
- data/extras/resume_html/public/css/icons.data.svg.css +95 -0
- data/extras/resume_html/public/css/icons.fallback.css +96 -0
- data/extras/resume_html/public/css/institution.png +0 -0
- data/extras/resume_html/public/css/mobile.css +27 -0
- data/extras/resume_html/public/css/mortar-board.png +0 -0
- data/extras/resume_html/public/css/music.png +0 -0
- data/extras/resume_html/public/css/phone.png +0 -0
- data/extras/resume_html/public/css/screen.css +527 -0
- data/extras/resume_html/public/css/star-o.png +0 -0
- data/extras/resume_html/public/css/th-list.png +0 -0
- data/extras/resume_html/public/css/user.png +0 -0
- data/extras/resume_html/public/images/resume.png +0 -0
- data/extras/resume_html/public/js/grunticon.js +2 -0
- data/json_resume.gemspec +5 -4
- data/lib/json_resume/formatter.rb +92 -92
- data/lib/json_resume/formatter_html.rb +1 -1
- data/lib/json_resume/formatter_latex.rb +12 -1
- data/lib/json_resume/json_resume.rb +2 -2
- data/lib/json_resume/version.rb +1 -1
- data/locale/en.yml +45 -0
- data/locale/es.yml +45 -0
- data/locale/pt.yml +45 -0
- data/templates/classic_tex.mustache +209 -0
- data/templates/default_html.mustache +80 -48
- data/templates/default_md.mustache +20 -20
- data/templates/default_tex.mustache +20 -21
- metadata +70 -27
- data/extras/resume_html.tar.gz +0 -0
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,2 @@
|
|
1
|
+
window.grunticon=function(e){if(e&&3===e.length){var t=window,n=!!t.document.createElementNS&&!!t.document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect&&!!document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Image","1.1"),A=function(A){var o=t.document.createElement("link"),r=t.document.getElementsByTagName("script")[0];o.rel="stylesheet",o.href=e[A&&n?0:A?1:2],r.parentNode.insertBefore(o,r)},o=new t.Image;o.onerror=function(){A(!1)},o.onload=function(){A(1===o.width&&1===o.height)},o.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=="}};
|
2
|
+
grunticon( [ "public/css/icons.data.svg.css", "public/css/icons.data.png.css", "public/css/icons.fallback.css" ] );
|
data/json_resume.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = JsonResume::VERSION
|
9
9
|
spec.authors = ["Prateek Agarwal"]
|
10
10
|
spec.email = ["prat0318@gmail.com"]
|
11
|
-
spec.description = %q{json_resume creates pretty resume formats from a .json input file. Currently, it can
|
11
|
+
spec.description = %q{json_resume creates pretty resume formats from a .json input file. Currently, it can convert to html, tex, markdown and pdf. Customizing the templates to your own needs is also super easy.}
|
12
12
|
spec.summary = %q{Generates pretty resume formats out of json input file}
|
13
13
|
spec.homepage = "http://github.com/prat0318/json_resume"
|
14
14
|
spec.license = "MIT"
|
@@ -21,10 +21,11 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
22
|
spec.add_development_dependency "rake"
|
23
23
|
|
24
|
-
spec.add_dependency "
|
25
|
-
spec.add_dependency "thor"
|
24
|
+
spec.add_dependency "i18n"
|
26
25
|
spec.add_dependency "mustache"
|
27
|
-
spec.add_dependency "
|
26
|
+
spec.add_dependency "pdfkit"
|
28
27
|
spec.add_dependency "rest-client"
|
28
|
+
spec.add_dependency "thor"
|
29
|
+
spec.add_dependency "wkhtmltopdf-binary"
|
29
30
|
|
30
31
|
end
|
@@ -8,121 +8,121 @@ end
|
|
8
8
|
|
9
9
|
module JsonResume
|
10
10
|
class Formatter
|
11
|
-
|
12
|
-
|
11
|
+
attr_reader :hash
|
12
|
+
|
13
13
|
def initialize(hash)
|
14
|
-
|
14
|
+
@hash = hash
|
15
15
|
|
16
|
-
|
16
|
+
#recursively defined proc
|
17
17
|
@hash_proc = Proc.new do |k,v|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
v = k if v.nil? #hack to make it common for hash and array
|
19
|
+
v.delete_if(&@hash_proc) if [Hash,Array].any? { |x| v.instance_of? x }
|
20
|
+
v.empty?
|
21
|
+
end
|
22
22
|
end
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
24
|
+
def add_linkedin_github_url
|
25
|
+
@hash["raw_website"] = @hash["bio_data"]["website"].sub(/^https?:\/\//,'') if @hash["bio_data"] && @hash["bio_data"]["website"]
|
26
|
+
@hash["linkedin_url"] = "http://linkedin.com/in/" + @hash["linkedin_id"] if @hash["linkedin_id"]
|
27
|
+
@hash["github_url"] = "http://github.com/" + @hash["github_id"] if @hash["github_id"]
|
28
|
+
end
|
29
29
|
|
30
|
-
|
31
|
-
|
30
|
+
def add_last_marker_on_stars
|
31
|
+
return if @hash['bio_data']['stars'].nil?
|
32
32
|
@hash["bio_data"]["stars"] = {
|
33
|
-
|
34
|
-
|
33
|
+
"items" => @hash["bio_data"]["stars"].map{ |i| { "name" => i } }
|
34
|
+
}
|
35
35
|
@hash["bio_data"]["stars"]["items"][-1]["last"] = true
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
36
|
+
end
|
37
|
+
|
38
|
+
def add_last_marker_on_skills
|
39
|
+
return if @hash['bio_data']['skills'].nil?
|
40
|
+
@hash['bio_data']['skills']['details'].each do |item|
|
41
|
+
item['items'].map!{|x| {'name'=>x} }
|
42
|
+
item['items'][-1]['last'] = true
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def add_last_marker_on_tools
|
47
|
+
return if @hash['bio_data']['other_projects'].nil?
|
48
|
+
@hash['bio_data']['other_projects']['items'].each do |item|
|
49
|
+
next if item['technology_used'].nil?
|
50
|
+
item['technology_used']['tools'].map!{|x| {'name' => x} }
|
51
|
+
item['technology_used']['tools'][-1]['last'] = true
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def add_last_marker_on_field field_name
|
56
|
+
return if @hash['bio_data'][field_name].nil?
|
57
|
+
@hash['bio_data'][field_name]['items'].each do |item|
|
58
|
+
next if item['technology_used'].nil?
|
59
|
+
item['technology_used']['tools'].map!{|x| {'name' => x} }
|
60
|
+
item['technology_used']['tools'][-1]['last'] = true
|
61
|
+
end
|
62
|
+
end
|
63
63
|
|
64
64
|
def cleanse
|
65
65
|
@hash.delete_if &@hash_proc
|
66
|
-
|
67
|
-
|
66
|
+
self
|
67
|
+
end
|
68
68
|
|
69
|
-
|
69
|
+
def format_to_output_type
|
70
70
|
format_proc = Proc.new do |k,v|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
end
|
78
|
-
|
79
|
-
def format_string str
|
80
|
-
raise NotImplementedError.new("format_string not impl in formatter")
|
81
|
-
end
|
82
|
-
|
83
|
-
def is_false? item
|
84
|
-
item == false || item == 'false'
|
85
|
-
end
|
86
|
-
|
87
|
-
def purge_gpa
|
88
|
-
return if @hash['bio_data']['education'].nil?
|
89
|
-
@hash["bio_data"]["education"].delete("show_gpa") if is_false?(@hash["bio_data"]["education"]["show_gpa"]) || @hash["bio_data"]["education"]["schools"].all? {|sch| sch["gpa"].nil? || sch["gpa"].empty?}
|
90
|
-
end
|
91
|
-
|
92
|
-
def add_padding(course)
|
93
|
-
unless @hash["bio_data"].nil? || @hash["bio_data"][course].nil?
|
94
|
-
course_hash = @hash["bio_data"][course]
|
95
|
-
course_hash << {} if course_hash.size % 2 == 1
|
96
|
-
@hash["bio_data"][course] = {
|
97
|
-
"rows" => course_hash.each_slice(2).to_a.map{ |i| { "columns" => i } }
|
98
|
-
}
|
99
|
-
end
|
71
|
+
v = k if v.nil?
|
72
|
+
v.each{|x| format_proc.call(x)} if [Hash,Array].any? {|x| v.instance_of? x}
|
73
|
+
format_string v if v.instance_of? String
|
74
|
+
end
|
75
|
+
@hash.each{|x| format_proc.call(x)}
|
76
|
+
self
|
100
77
|
end
|
101
|
-
|
78
|
+
|
79
|
+
def format_string str
|
80
|
+
raise NotImplementedError.new("format_string not impl in formatter")
|
81
|
+
end
|
82
|
+
|
83
|
+
def is_false? item
|
84
|
+
item == false || item == 'false'
|
85
|
+
end
|
86
|
+
|
87
|
+
def purge_gpa
|
88
|
+
return if @hash['bio_data']['education'].nil?
|
89
|
+
@hash["bio_data"]["education"].delete("show_gpa") if is_false?(@hash["bio_data"]["education"]["show_gpa"]) || @hash["bio_data"]["education"]["schools"].all? {|sch| sch["gpa"].nil? || sch["gpa"].empty?}
|
90
|
+
end
|
91
|
+
|
92
|
+
def add_padding(course)
|
93
|
+
unless @hash["bio_data"].nil? || @hash["bio_data"][course].nil?
|
94
|
+
course_hash = @hash["bio_data"][course]
|
95
|
+
course_hash << {} if course_hash.size % 2 == 1
|
96
|
+
@hash["bio_data"][course] = {
|
97
|
+
"rows" => course_hash.each_slice(2).to_a.map{ |i| { "columns" => i } }
|
98
|
+
}
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
102
|
def format
|
103
|
-
|
104
|
-
|
105
|
-
|
103
|
+
return if @hash["bio_data"].nil?
|
104
|
+
|
105
|
+
cleanse
|
106
|
+
|
107
|
+
format_to_output_type
|
106
108
|
|
107
|
-
|
109
|
+
add_last_marker_on_stars
|
108
110
|
|
109
|
-
|
111
|
+
add_last_marker_on_skills
|
110
112
|
|
111
|
-
|
113
|
+
add_last_marker_on_field 'experience'
|
114
|
+
add_last_marker_on_field 'other_projects'
|
112
115
|
|
113
|
-
|
114
|
-
add_last_marker_on_field 'other_projects'
|
115
|
-
|
116
|
-
purge_gpa
|
116
|
+
purge_gpa
|
117
117
|
|
118
|
-
|
118
|
+
add_linkedin_github_url
|
119
119
|
|
120
|
-
|
120
|
+
#make odd listed courses to even
|
121
121
|
["grad_courses", "undergrad_courses"].each do |course|
|
122
|
-
|
123
|
-
|
122
|
+
add_padding(course)
|
123
|
+
end
|
124
124
|
|
125
|
-
|
125
|
+
return self
|
126
126
|
end
|
127
127
|
|
128
128
|
|
@@ -3,6 +3,12 @@ require_relative 'formatter'
|
|
3
3
|
module JsonResume
|
4
4
|
class FormatterLatex < Formatter
|
5
5
|
|
6
|
+
def format_slashes str
|
7
|
+
str.gsub!(/\\/, '\textbackslash')
|
8
|
+
str.gsub!(/\{/, '\{')
|
9
|
+
str.gsub!(/\}/, '\}')
|
10
|
+
end
|
11
|
+
|
6
12
|
def format_link str
|
7
13
|
str.gsub! /\[(.*?)\]\((.*?)\)/, '{\color{see} \href{\2}{\1}}'
|
8
14
|
end
|
@@ -12,7 +18,7 @@ module JsonResume
|
|
12
18
|
end
|
13
19
|
|
14
20
|
def format_emphasis str
|
15
|
-
str.gsub!
|
21
|
+
str.gsub! /\b_(.+?)_\b/, '\textit{\1}'
|
16
22
|
str.gsub! /\*\*(.+?)\*\*/, '\textbf{\1}'
|
17
23
|
end
|
18
24
|
|
@@ -22,11 +28,16 @@ module JsonResume
|
|
22
28
|
end
|
23
29
|
|
24
30
|
def format_symbols str
|
31
|
+
str.gsub! /#/, '\#'
|
32
|
+
str.gsub! /\$/, '\$'
|
33
|
+
str.gsub! /&/, '\\\\&'
|
34
|
+
str.gsub! /\|/, '\textbar'
|
25
35
|
str.gsub! /%/, '\%'
|
26
36
|
str.gsub! /_/, '\_'
|
27
37
|
end
|
28
38
|
|
29
39
|
def format_string str
|
40
|
+
format_slashes str
|
30
41
|
format_link str
|
31
42
|
format_autolink str
|
32
43
|
format_emphasis str
|
@@ -3,14 +3,14 @@ require_relative 'reader'
|
|
3
3
|
module JsonResume
|
4
4
|
class << self
|
5
5
|
def new(json_input, options = {})
|
6
|
-
|
6
|
+
options = options.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
|
7
7
|
JsonResume::Core.new(json_input, options)
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
11
|
class Core
|
12
12
|
attr_accessor :reader
|
13
|
-
|
13
|
+
|
14
14
|
def initialize(json_input, options)
|
15
15
|
@reader = Reader.new(json_input, options)
|
16
16
|
@reader.format!
|
data/lib/json_resume/version.rb
CHANGED
data/locale/en.yml
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
---
|
2
|
+
en:
|
3
|
+
headings:
|
4
|
+
# "Academic Achievements"
|
5
|
+
acad_achievements: "Academic Achievements"
|
6
|
+
# "Degree"
|
7
|
+
degree: "Degree"
|
8
|
+
# "Education"
|
9
|
+
education: "Education"
|
10
|
+
# "Professional Experience"
|
11
|
+
experience: "Professional Experience"
|
12
|
+
# "Extra Curricular Awards"
|
13
|
+
extra_curricular: "Extra Curricular Awards"
|
14
|
+
# "GitHub Projects"
|
15
|
+
github_projects: "GitHub Projects"
|
16
|
+
# GPA
|
17
|
+
gpa: "GPA"
|
18
|
+
# "Graduate Courses Taken"
|
19
|
+
grad_courses: "Graduate Courses Taken"
|
20
|
+
# "Graduation Year"
|
21
|
+
graduation_year: "Graduation Year"
|
22
|
+
# "Institution"
|
23
|
+
institution: "Institution"
|
24
|
+
# "issued on"
|
25
|
+
issuance: "issued on"
|
26
|
+
# "Major"
|
27
|
+
major: "Major"
|
28
|
+
# "Memberships"
|
29
|
+
memberships: "Memberships"
|
30
|
+
# "Other Personal Projects"
|
31
|
+
other_projects: "Other Personal Projects"
|
32
|
+
# "Publications"
|
33
|
+
papers: "Publications"
|
34
|
+
# "Patents"
|
35
|
+
patents: "Patents"
|
36
|
+
# "Research Experience"
|
37
|
+
research_experience: "Research Experience"
|
38
|
+
# "Technical Skills"
|
39
|
+
skills: "Technical Skills"
|
40
|
+
# "Qualifications summary"
|
41
|
+
summary: "Qualifications summary"
|
42
|
+
# "Technologies got to work on"
|
43
|
+
technology_used: "Technologies got to work on"
|
44
|
+
# "Undergraduate Courses Taken"
|
45
|
+
undergrad_courses: "Undergraduate Courses Taken"
|
data/locale/es.yml
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
---
|
2
|
+
es:
|
3
|
+
headings:
|
4
|
+
# "Academic Achievements"
|
5
|
+
acad_achievements: "Logros Académicos"
|
6
|
+
# "Degree"
|
7
|
+
degree: "Grado"
|
8
|
+
# "Education"
|
9
|
+
education: "Educación"
|
10
|
+
# "Professional Experience"
|
11
|
+
experience: "Experiencia Profesional"
|
12
|
+
# "Extra Curricular Awards"
|
13
|
+
extra_curricular: "Premios Extracurriculares"
|
14
|
+
# "GitHub Projects"
|
15
|
+
github_projects: "Proyectos en GitHub"
|
16
|
+
# GPA - Grade point average
|
17
|
+
gpa: "GPA"
|
18
|
+
# "Graduate Courses Taken"
|
19
|
+
grad_courses: "Cursos de Postgrado realizados"
|
20
|
+
# "Graduation Year"
|
21
|
+
graduation_year: "Año de Graduación"
|
22
|
+
# "Institution"
|
23
|
+
institution: "Institución"
|
24
|
+
# "issued on"
|
25
|
+
issuance: "emitido el"
|
26
|
+
# "Major"
|
27
|
+
major: "Major"
|
28
|
+
# "Memberships"
|
29
|
+
memberships: "Membresías"
|
30
|
+
# "Other Personal Projects"
|
31
|
+
other_projects: "Otros Proyectos Personales"
|
32
|
+
# "Publications"
|
33
|
+
papers: "Publicaciones"
|
34
|
+
# "Patents"
|
35
|
+
patents: "Patentes"
|
36
|
+
# "Research Experience"
|
37
|
+
research_experience: "Experiencia en Investigación"
|
38
|
+
# "Technical Skills"
|
39
|
+
skills: "Habilidades Técnicas"
|
40
|
+
# "Qualifications summary"
|
41
|
+
summary: "Resumen de Cualificaciones"
|
42
|
+
# "Technologies got to work on"
|
43
|
+
technology_used: "Tecnologías en las que trabajó"
|
44
|
+
# "Undergraduate Courses Taken"
|
45
|
+
undergrad_courses: "Pregrado recibido"
|
data/locale/pt.yml
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
---
|
2
|
+
pt:
|
3
|
+
headings:
|
4
|
+
# "Academic Achievements"
|
5
|
+
acad_achievements: "Conquistas acadêmicas"
|
6
|
+
# "Degree"
|
7
|
+
degree: "Grau"
|
8
|
+
# "Education"
|
9
|
+
education: "Educação"
|
10
|
+
# "Professional Experience"
|
11
|
+
experience: "Experiência Profissional"
|
12
|
+
# "Extra Curricular Awards"
|
13
|
+
extra_curricular: "Prêmios extra-curriculares"
|
14
|
+
# "GitHub Projects"
|
15
|
+
github_projects: "Projetos GitHub"
|
16
|
+
# GPA
|
17
|
+
gpa: "GPA"
|
18
|
+
# "Graduate Courses Taken"
|
19
|
+
grad_courses: "Cursos de pós-graduação Taken"
|
20
|
+
# "Graduation Year"
|
21
|
+
graduation_year: "Ano de Graduação"
|
22
|
+
# "Institution"
|
23
|
+
institution: "Instituição"
|
24
|
+
# "issued on"
|
25
|
+
issuance: "emitida em"
|
26
|
+
# "Major"
|
27
|
+
major: "Curso"
|
28
|
+
# "Memberships"
|
29
|
+
memberships: "Associações"
|
30
|
+
# "Other Personal Projects"
|
31
|
+
other_projects: "Outros Projetos Pessoais"
|
32
|
+
# "Publications"
|
33
|
+
papers: "Publicações"
|
34
|
+
# "Patents"
|
35
|
+
patents: "Patentes"
|
36
|
+
# "Research Experience"
|
37
|
+
research_experience: "Experiência de Pesquisa"
|
38
|
+
# "Technical Skills"
|
39
|
+
skills: "Habilidades Técnicas"
|
40
|
+
# "Qualifications summary"
|
41
|
+
summary: "Qualificações resumo"
|
42
|
+
# "Technologies got to work on"
|
43
|
+
technology_used: "Técnologias usadas"
|
44
|
+
# "Undergraduate Courses Taken"
|
45
|
+
undergrad_courses: "Cursos de graduação Taken"
|