danmayer-resume 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gems +5 -0
- data/.gitignore +6 -0
- data/README.md +77 -0
- data/Rakefile +104 -0
- data/VERSION +1 -0
- data/config.ru +5 -0
- data/data/resume.md +80 -0
- data/data/resume.yml +3 -0
- data/index.html +104 -0
- data/lib/resume_gem.rb +65 -0
- data/resume.rb +34 -0
- data/style.css +35 -0
- data/test/rack/resume_test.rb +45 -0
- data/test/unit/gem_test.rb +37 -0
- data/views/index.erubis +16 -0
- data/views/style.less +68 -0
- metadata +78 -0
data/.gems
ADDED
data/README.md
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
# Resume
|
2
|
+
|
3
|
+
This started as just a simple place to store a markdown format of my resume,
|
4
|
+
and now it's turned into an easy way to host your resume using sinatra and
|
5
|
+
Heroku.
|
6
|
+
|
7
|
+
It was then extended as a way to server your resume in multiple formats (LaTex, MarkDown, HTML, and soon PDF).
|
8
|
+
It also became a way to easily update and manager your github user page (user.github.com). Since this is powered by
|
9
|
+
MarkDown it also integrates well with GitHubs jobs search (http://github.com/blog/553-looking-for-a-job-let-github-help).
|
10
|
+
|
11
|
+
Lastly, it packages up your resume and info into an installable Rubygem. This was just a clever idea I saw suggested by
|
12
|
+
Eric Davis and figured it would be cool to implement (http://groups.google.com/group/rails-business/msg/68cf8a890c0d4fc8?pli=1).
|
13
|
+
This focuses on making it as simple and easy to update and publish your resume as possible, while offering it in a variety of formats.
|
14
|
+
|
15
|
+
Currently it is best to fork the project and override a few of the data files to customize the project for yourself.
|
16
|
+
At the moment you need to override resume.yml and resume.md in the root directory with your own info.
|
17
|
+
|
18
|
+
Contributions and ideas for the resume app are welcome, anything that makes the process simpler would be encouraged.
|
19
|
+
|
20
|
+
# Authors
|
21
|
+
|
22
|
+
* Nathaniel "Nat" Welch (icco)
|
23
|
+
* Dan Mayer (danmayer)
|
24
|
+
|
25
|
+
## Installation
|
26
|
+
|
27
|
+
Basic resume in multiple formats on Heroku
|
28
|
+
|
29
|
+
1. Fork this project
|
30
|
+
2. Install the gems (see the .gems file)
|
31
|
+
3. To deploy to Heroku, also install the heroku gem, and intialize a heroku project
|
32
|
+
* Run ` rake heroku:create name=batman-resume`
|
33
|
+
4. type `rake run` or `ruby ./resume.rb` to run sinatra locally (http://localhost:4567).
|
34
|
+
5. Edit views/style.less to make your resume look pretty.
|
35
|
+
6. Edit everything until it looks exactly how you like it. I suggest using Dingus for testing your Markdown (http://daringfireball.net/projects/markdown/dingus)
|
36
|
+
7. `rake deploy:heroku` to push your resume to the internet on heroku (http://batman-resume.heroku.com).
|
37
|
+
|
38
|
+
OPTIONAL (GitHub Personal Page Deploy)
|
39
|
+
|
40
|
+
* Deploy to github personal page (http://username.github.com)
|
41
|
+
1. Add the github remote repo for your pages (like so `git remote add github git@github.com:user/user.github.com.git`)
|
42
|
+
2. run `rake render_for_github`, which will render a index.html and style.css to your root directory
|
43
|
+
3. run `git add index.html` and `git add style.css` and `git commit -a -m "adding github pages files"
|
44
|
+
4. `rake deploy:github`
|
45
|
+
5. Visit http://user.github.com
|
46
|
+
|
47
|
+
OPTIONAL (Publish personal resume gem)
|
48
|
+
|
49
|
+
1. Edit resume.yml to include your information.
|
50
|
+
2. Wait cause this is currently in progress.
|
51
|
+
|
52
|
+
## TODOs
|
53
|
+
|
54
|
+
* Make tests generic from resume
|
55
|
+
* Make the resume file not included in the git repo
|
56
|
+
* update readme to reflect changes, updates, and new goals of the project (and likely update rake task names etc)
|
57
|
+
* fork me on github corner banner, can be displayed on html, but not rendered to other formats
|
58
|
+
* automatic conversion to various formats HTML, LaTeX, PDF, and allow downloading in any of the formats
|
59
|
+
* http://github.com/rtomayko/rdiscount (current)
|
60
|
+
* http://kramdown.rubyforge.org/
|
61
|
+
* http://maruku.rubyforge.org/ (pdf support)
|
62
|
+
* http://github.com/alphabetum/pandoc-ruby (many formats RTF docbook man ODF slides etc)
|
63
|
+
* http://railsforum.com/viewtopic.php?id=35844
|
64
|
+
* http://rtomayko.github.com/ronn/ (markdown to man page)
|
65
|
+
* possibly merge with a resume generator which after filling out some info via forms or yaml can generate varios resumes in all formats
|
66
|
+
* Users could submit templates / stylesheets allowing for differently formatted resumes
|
67
|
+
* rake task that generates proper single use gemfile and executable
|
68
|
+
* make sinatra app depend on the gem
|
69
|
+
* better filenames for the downloaded resume in various formats (currently saves as latex and markdown)
|
70
|
+
|
71
|
+
|
72
|
+
## License
|
73
|
+
|
74
|
+
resume.md is property of Nathaniel "Nat" Welch. You are welcome to use it as a
|
75
|
+
base structure for your resume, but don't forget, you are not him.
|
76
|
+
|
77
|
+
The rest of the code is licensed CC-GPL. Remember sharing is caring.
|
data/Rakefile
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
require 'rake/testtask'
|
2
|
+
|
3
|
+
task :default => ['test']
|
4
|
+
|
5
|
+
GEM_NAME = "danmayer-resume"
|
6
|
+
|
7
|
+
desc "run sintra server locally"
|
8
|
+
task :run do
|
9
|
+
exec "ruby resume.rb"
|
10
|
+
end
|
11
|
+
|
12
|
+
begin
|
13
|
+
require 'jeweler'
|
14
|
+
Jeweler::Tasks.new do |gemspec|
|
15
|
+
gemspec.name = GEM_NAME
|
16
|
+
gemspec.summary = "Resume gem"
|
17
|
+
gemspec.description = "A gem for Dan Mayer's resume"
|
18
|
+
gemspec.email = "dan@mayerdan.com"
|
19
|
+
gemspec.homepage = "http://github.com/danmayer/Resume"
|
20
|
+
gemspec.authors = ["Dan Mayer"]
|
21
|
+
gemspec.executables = [GEM_NAME]
|
22
|
+
end
|
23
|
+
Jeweler::GemcutterTasks.new
|
24
|
+
rescue LoadError
|
25
|
+
puts "Jeweler not available. Install it with: gem install jeweler"
|
26
|
+
end
|
27
|
+
|
28
|
+
task :build => [:generate_exe]
|
29
|
+
|
30
|
+
desc "generate the gem executable"
|
31
|
+
task :generate_exe do
|
32
|
+
puts "copying executable from template"
|
33
|
+
`cp lib/resume_exe bin/#{GEM_NAME}`
|
34
|
+
puts "giving new file chmod +x"
|
35
|
+
`chmod o+x bin/#{GEM_NAME}`
|
36
|
+
end
|
37
|
+
|
38
|
+
desc "run all tests"
|
39
|
+
task :test do
|
40
|
+
Rake::Task['test:rack'].invoke
|
41
|
+
Rake::Task['test:unit'].invoke
|
42
|
+
end
|
43
|
+
|
44
|
+
namespace :test do
|
45
|
+
desc "run rack tests"
|
46
|
+
Rake::TestTask.new(:rack) do |t|
|
47
|
+
t.libs << "test"
|
48
|
+
t.pattern = "test/rack/**/*_test.rb"
|
49
|
+
t.verbose = true
|
50
|
+
end
|
51
|
+
|
52
|
+
desc "run unit tests"
|
53
|
+
Rake::TestTask.new(:unit) do |t|
|
54
|
+
t.libs << "test"
|
55
|
+
t.pattern = "test/unit/**/*_test.rb"
|
56
|
+
t.verbose = true
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
desc "render github index page, which can be displayed at user.github.com"
|
61
|
+
task :render_for_github do
|
62
|
+
require File.join(File.dirname(__FILE__), 'resume_gem')
|
63
|
+
resume = Resume.new('resume.yml')
|
64
|
+
resume.write_html_and_css_to_disk('./')
|
65
|
+
end
|
66
|
+
|
67
|
+
namespace :heroku do
|
68
|
+
|
69
|
+
desc "create a heroku project for your resume"
|
70
|
+
task :create do
|
71
|
+
unless ENV.include?("name")
|
72
|
+
raise "usage: rake heroku:create name=PROJECT_NAME # example danmayer-resume\n"
|
73
|
+
end
|
74
|
+
project_name = ENV['name']
|
75
|
+
puts "creating heroku project #{project_name}"
|
76
|
+
puts `heroku create #{project_name}`
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
namespace :deploy do
|
82
|
+
desc "Deploy to Heroku."
|
83
|
+
task :heroku do
|
84
|
+
`git push heroku master`
|
85
|
+
end
|
86
|
+
|
87
|
+
desc "Deploy to Github pages."
|
88
|
+
task :github => [:render_for_github] do
|
89
|
+
# this assumes you have made a remote called github
|
90
|
+
# `git remote add github git@github.com:username/username.github.com.git`
|
91
|
+
# this should push your resume to http://username.github.com
|
92
|
+
`git push github master`
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
namespace :github do
|
97
|
+
desc "render github index page, which can be displayed at user.github.com"
|
98
|
+
task :render_pages do
|
99
|
+
require File.join(File.dirname(__FILE__), 'resume_gem')
|
100
|
+
resume = Resume.new('resume.yml')
|
101
|
+
puts "writing resume github index files to disk"
|
102
|
+
resume.write_html_and_css_to_disk('./')
|
103
|
+
end
|
104
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.1
|
data/config.ru
ADDED
data/data/resume.md
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
Daniel Mayer
|
2
|
+
dan@mayerdan.com
|
3
|
+
503-819-3246
|
4
|
+
821 Maryland Ave NE #305
|
5
|
+
Washington, DC 20002
|
6
|
+
|
7
|
+
[GitHub](http://github.com/danmayer)
|
8
|
+
[Blog](http://mayerdan.com)
|
9
|
+
|
10
|
+
Skills
|
11
|
+
----------------
|
12
|
+
|
13
|
+
* Ruby
|
14
|
+
* Rails
|
15
|
+
* Sinatra
|
16
|
+
* Merb
|
17
|
+
* EventMachine
|
18
|
+
* DataMapper
|
19
|
+
* Custom EventMachine-based protocols
|
20
|
+
|
21
|
+
* Tools
|
22
|
+
* Linux
|
23
|
+
* OS X
|
24
|
+
* Javascript (JQuery/Prototype)
|
25
|
+
* HTML
|
26
|
+
* Amazon Web Services (Ec2, SimpleDB, S3, SQS)
|
27
|
+
* Distributed Computing
|
28
|
+
* Apache
|
29
|
+
* MySQL
|
30
|
+
* PostgreSQL
|
31
|
+
* Schemaless DBs (NoSql)
|
32
|
+
* RESTul webservice API's
|
33
|
+
|
34
|
+
* Style
|
35
|
+
* Pair Programming
|
36
|
+
* Test-Focused Development
|
37
|
+
* Distributed Teams
|
38
|
+
* Agile team management
|
39
|
+
* Contributor to Ruby OSS software
|
40
|
+
* Active on Github
|
41
|
+
|
42
|
+
Work Experience
|
43
|
+
---------------
|
44
|
+
__Devver__
|
45
|
+
Founder / CTO / Ruby Software Developer
|
46
|
+
April 2008 - April 2010
|
47
|
+
Software startup to make the lives of developers easier. Originally developed accelerated testing for Ruby developers. More recently, launched getcaliper.com, which builds code analytics for all Rubygems and builds metrics for public and private git-based Ruby projects.
|
48
|
+
|
49
|
+
* Built accelerated testing tool, using distributed computing services to run developer tests
|
50
|
+
* Developed a cloud-based continuous integration server and notification services
|
51
|
+
* Developed cloud-based code metrics and analytics project analyzer, which integrated with Rubygems.org to provide analytics on all public Rubygems and many OSS git-based projects (7000+ projects)
|
52
|
+
* Member of a distributed agile team -- practiced daily standups, remote pair programming, and continious integration
|
53
|
+
* Worked extensively with cloud based services and distributed computing techniques. (EC2, Beanstalkd queues, Schemaless SimpleDB, S3)
|
54
|
+
* Developed and deployed EventMachine, Merb, Rails, and Sinatra in production environments.
|
55
|
+
|
56
|
+
__Pretheory__
|
57
|
+
Founder
|
58
|
+
May 2007 - April 2008
|
59
|
+
Small Denver-based consumer web startup. Built [Seekler.com](http://seekler.com) to help people find the best of everything online by user generated social, community-based top 10 lists on consumer-driven topics or products.
|
60
|
+
|
61
|
+
__Indigio__
|
62
|
+
Java Lead Engineer
|
63
|
+
August 2006 - May 2007
|
64
|
+
Developed web sites for Fortune 500 companies. Managed a small Java team with local and international remote employees.
|
65
|
+
|
66
|
+
|
67
|
+
__Impact Science & Technology (IST)__
|
68
|
+
Java Software Engineer
|
69
|
+
December 2005 - June 2006
|
70
|
+
Developed full lifecycle of a DOD distributed synchronous infrastructure in Java.
|
71
|
+
|
72
|
+
|
73
|
+
Education
|
74
|
+
---------------
|
75
|
+
University of Colorado
|
76
|
+
Boulder, CO
|
77
|
+
B.S., Computer Science
|
78
|
+
GPA: 3.185
|
79
|
+
|
80
|
+
_References available on request_
|
data/data/resume.yml
ADDED
@@ -0,0 +1,3 @@
|
|
1
|
+
mission_statement: "I am looking for an exciting Ruby position where I can make a difference. I am looking to learn and be challenge while continuing to improve my development skills. Personally, I enjoy getting projects out to production for real world use. I work best with small focused teams who release early and often. I enjoy working with clients, customers, and/or users to drive the needs of a product and am increasingly interested in applying lean principles to development. I am currently searching to work with an intelligent team where we can all learn from each other and improve how projects are made."
|
2
|
+
contact_information: "phone: 503-819-3246\nemail:dan@mayerdan.com"
|
3
|
+
resume_url: "http://resume.mayerdan.com"
|
data/index.html
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>Dan Mayer's Resume</title>
|
4
|
+
<link href="style.css" media="screen" rel="stylesheet" type="text/css" />
|
5
|
+
</head>
|
6
|
+
<body>
|
7
|
+
<div id="resume">
|
8
|
+
<p>Daniel Mayer<br/>
|
9
|
+
dan@mayerdan.com<br/>
|
10
|
+
503-819-3246<br/>
|
11
|
+
821 Maryland Ave NE #305<br/>
|
12
|
+
Washington, DC 20002</p>
|
13
|
+
|
14
|
+
<p><a href="http://github.com/danmayer">GitHub</a><br/>
|
15
|
+
<a href="http://mayerdan.com">Blog</a></p>
|
16
|
+
|
17
|
+
<h2>Skills</h2>
|
18
|
+
|
19
|
+
<ul>
|
20
|
+
<li><p>Ruby</p>
|
21
|
+
|
22
|
+
<ul>
|
23
|
+
<li>Rails</li>
|
24
|
+
<li>Sinatra</li>
|
25
|
+
<li>Merb</li>
|
26
|
+
<li>EventMachine</li>
|
27
|
+
<li>DataMapper</li>
|
28
|
+
<li>Custom EventMachine-based protocols</li>
|
29
|
+
</ul>
|
30
|
+
</li>
|
31
|
+
<li><p>Tools</p>
|
32
|
+
|
33
|
+
<ul>
|
34
|
+
<li>Linux</li>
|
35
|
+
<li>OS X</li>
|
36
|
+
<li>Javascript (JQuery/Prototype)</li>
|
37
|
+
<li>HTML</li>
|
38
|
+
<li>Amazon Web Services (Ec2, SimpleDB, S3, SQS)</li>
|
39
|
+
<li>Distributed Computing</li>
|
40
|
+
<li>Apache</li>
|
41
|
+
<li>MySQL</li>
|
42
|
+
<li>PostgreSQL</li>
|
43
|
+
<li>Schemaless DBs (NoSql)</li>
|
44
|
+
<li>RESTul webservice API’s</li>
|
45
|
+
</ul>
|
46
|
+
</li>
|
47
|
+
<li><p>Style</p>
|
48
|
+
|
49
|
+
<ul>
|
50
|
+
<li>Pair Programming</li>
|
51
|
+
<li>Test-Focused Development</li>
|
52
|
+
<li>Distributed Teams</li>
|
53
|
+
<li>Agile team management</li>
|
54
|
+
<li>Contributor to Ruby OSS software</li>
|
55
|
+
<li>Active on Github</li>
|
56
|
+
</ul>
|
57
|
+
</li>
|
58
|
+
</ul>
|
59
|
+
|
60
|
+
|
61
|
+
<h2>Work Experience</h2>
|
62
|
+
|
63
|
+
<p><strong>Devver</strong><br/>
|
64
|
+
Founder / CTO / Ruby Software Developer<br/>
|
65
|
+
April 2008 – April 2010<br/>
|
66
|
+
Software startup to make the lives of developers easier. Originally developed accelerated testing for Ruby developers. More recently, launched getcaliper.com, which builds code analytics for all Rubygems and builds metrics for public and private git-based Ruby projects.</p>
|
67
|
+
|
68
|
+
<ul>
|
69
|
+
<li>Built accelerated testing tool, using distributed computing services to run developer tests</li>
|
70
|
+
<li>Developed a cloud-based continuous integration server and notification services</li>
|
71
|
+
<li>Developed cloud-based code metrics and analytics project analyzer, which integrated with Rubygems.org to provide analytics on all public Rubygems and many OSS git-based projects (7000+ projects)</li>
|
72
|
+
<li>Member of a distributed agile team — practiced daily standups, remote pair programming, and continious integration</li>
|
73
|
+
<li>Worked extensively with cloud based services and distributed computing techniques. (EC2, Beanstalkd queues, Schemaless SimpleDB, S3)</li>
|
74
|
+
<li>Developed and deployed EventMachine, Merb, Rails, and Sinatra in production environments.</li>
|
75
|
+
</ul>
|
76
|
+
|
77
|
+
|
78
|
+
<p><strong>Pretheory</strong><br/>
|
79
|
+
Founder<br/>
|
80
|
+
May 2007 – April 2008<br/>
|
81
|
+
Small Denver-based consumer web startup. Built <a href="http://seekler.com">Seekler.com</a> to help people find the best of everything online by user generated social, community-based top 10 lists on consumer-driven topics or products.</p>
|
82
|
+
|
83
|
+
<p><strong>Indigio</strong><br/>
|
84
|
+
Java Lead Engineer<br/>
|
85
|
+
August 2006 – May 2007<br/>
|
86
|
+
Developed web sites for Fortune 500 companies. Managed a small Java team with local and international remote employees.</p>
|
87
|
+
|
88
|
+
<p><strong>Impact Science & Technology (IST)</strong><br/>
|
89
|
+
Java Software Engineer<br/>
|
90
|
+
December 2005 – June 2006<br/>
|
91
|
+
Developed full lifecycle of a DOD distributed synchronous infrastructure in Java.</p>
|
92
|
+
|
93
|
+
<h2>Education</h2>
|
94
|
+
|
95
|
+
<p>University of Colorado<br/>
|
96
|
+
Boulder, CO<br/>
|
97
|
+
B.S., Computer Science<br/>
|
98
|
+
GPA: 3.185</p>
|
99
|
+
|
100
|
+
<p><em>References available on request</em></p>
|
101
|
+
|
102
|
+
</div>
|
103
|
+
</body>
|
104
|
+
</html>
|
data/lib/resume_gem.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'maruku'
|
3
|
+
require 'rdiscount'
|
4
|
+
require 'launchy'
|
5
|
+
require 'fileutils'
|
6
|
+
require 'less'
|
7
|
+
require 'erubis'
|
8
|
+
|
9
|
+
class Resume
|
10
|
+
|
11
|
+
def initialize(resume_data = 'resume.yml', resume_content = 'resume.md')
|
12
|
+
base = File.join(File.dirname(__FILE__),'..','data')
|
13
|
+
@resume = resume_data.is_a?(String) ? YAML::load_file(File.join(base,resume_data)) : resume_data
|
14
|
+
@resume_content = resume_content.is_a?(String) ? File.read(File.join(base,resume_content)) : resume_content
|
15
|
+
end
|
16
|
+
|
17
|
+
def mission_statement
|
18
|
+
@resume['mission_statement']
|
19
|
+
end
|
20
|
+
|
21
|
+
def contact_information
|
22
|
+
contact_info = @resume['contact_information']
|
23
|
+
contact_info += "\nresume url: #{@resume['resume_url']}" if @resume['resume_url']
|
24
|
+
contact_info
|
25
|
+
end
|
26
|
+
|
27
|
+
def open_resume_site
|
28
|
+
url = @resume['resume_url']
|
29
|
+
Launchy::Browser.new.visit(url)
|
30
|
+
end
|
31
|
+
|
32
|
+
def text
|
33
|
+
@resume_content
|
34
|
+
end
|
35
|
+
|
36
|
+
def latex
|
37
|
+
doc = Maruku.new(@resume_content)
|
38
|
+
doc.to_latex_document
|
39
|
+
end
|
40
|
+
|
41
|
+
def html
|
42
|
+
title = "Dan Mayer's Resume"
|
43
|
+
resume = RDiscount.new(@resume_content, :smart).to_html
|
44
|
+
eruby = Erubis::Eruby.new(File.read('./views/index.erubis'))
|
45
|
+
eruby.result(binding())
|
46
|
+
end
|
47
|
+
|
48
|
+
def write_html_and_css_to_disk(root_path = './tmp')
|
49
|
+
FileUtils.mkdir_p root_path unless File.exists?(root_path)
|
50
|
+
|
51
|
+
css = Less::Engine.new(File.new("views/style.less")).to_css
|
52
|
+
tmp_css = File.join(root_path,'style.css')
|
53
|
+
File.open(tmp_css, 'w') {|f| f.write(css) }
|
54
|
+
|
55
|
+
tmp_file = File.join(root_path,'index.html')
|
56
|
+
File.open(tmp_file, 'w') {|f| f.write(self.html) }
|
57
|
+
tmp_file
|
58
|
+
end
|
59
|
+
|
60
|
+
def open_html
|
61
|
+
tmp_file = write_html_and_css_to_disk()
|
62
|
+
Launchy::Browser.new.visit("file://"+File.expand_path(tmp_file))
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
data/resume.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
#!/usr/bin/ruby1.8
|
2
|
+
# A Sinatra app for displaying one's resume in multiple formats
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'sinatra'
|
6
|
+
require 'less'
|
7
|
+
require 'rdiscount'
|
8
|
+
require 'maruku'
|
9
|
+
|
10
|
+
get '/' do
|
11
|
+
title = "Dan Mayer's Resume"
|
12
|
+
resume = RDiscount.new(resume_data, :smart).to_html
|
13
|
+
erubis :index, :locals => { :title => title, :resume => resume, :formats => true }
|
14
|
+
end
|
15
|
+
|
16
|
+
get '/style.css' do
|
17
|
+
content_type 'text/css', :charset => 'utf-8'
|
18
|
+
less :style
|
19
|
+
end
|
20
|
+
|
21
|
+
get '/latex' do
|
22
|
+
content_type 'application/x-latex'
|
23
|
+
doc = Maruku.new(resume_data)
|
24
|
+
doc.to_latex_document
|
25
|
+
end
|
26
|
+
|
27
|
+
get '/markdown' do
|
28
|
+
content_type 'application/markdown'
|
29
|
+
resume_data
|
30
|
+
end
|
31
|
+
|
32
|
+
def resume_data
|
33
|
+
File.read("data/resume.md")
|
34
|
+
end
|
data/style.css
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
body { color: #000000; }
|
2
|
+
.clearfix:after {
|
3
|
+
content: ".";
|
4
|
+
display: block;
|
5
|
+
height: 0;
|
6
|
+
clear: both;
|
7
|
+
visibility: hidden;
|
8
|
+
}
|
9
|
+
#formats {
|
10
|
+
width: 800px;
|
11
|
+
margin-left: auto;
|
12
|
+
margin-right: auto;
|
13
|
+
font-family: serif;
|
14
|
+
background-color: #f2f2f2;
|
15
|
+
}
|
16
|
+
#resume {
|
17
|
+
width: 700px;
|
18
|
+
margin-left: auto;
|
19
|
+
margin-right: auto;
|
20
|
+
font-family: serif;
|
21
|
+
}
|
22
|
+
#resume blockquote {
|
23
|
+
border-left: 5px solid #dddddd;
|
24
|
+
margin: 1em 0;
|
25
|
+
padding-left: 0.6em;
|
26
|
+
}
|
27
|
+
#resume a {
|
28
|
+
color: #4183c4;
|
29
|
+
text-decoration: none;
|
30
|
+
}
|
31
|
+
#resume a:visited {
|
32
|
+
color: #4183c4;
|
33
|
+
text-decoration: none;
|
34
|
+
}
|
35
|
+
#resume a:hover { text-decoration: underline; }
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'resume'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'rack/test'
|
4
|
+
|
5
|
+
set :environment, :test
|
6
|
+
|
7
|
+
class ResumeTest < Test::Unit::TestCase
|
8
|
+
include Rack::Test::Methods
|
9
|
+
|
10
|
+
def app
|
11
|
+
Sinatra::Application
|
12
|
+
end
|
13
|
+
|
14
|
+
#todo make tests user independant
|
15
|
+
def test_title_matches_user
|
16
|
+
get '/'
|
17
|
+
assert last_response.ok?
|
18
|
+
assert_match "<title>Dan Mayer's Resume</title>", last_response.body
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_it_includes_a_email
|
22
|
+
get '/'
|
23
|
+
assert last_response.body.match(/dan@mayerdan\.com/)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_it_can_convert_to_latex
|
27
|
+
get '/latex'
|
28
|
+
assert last_response.ok?
|
29
|
+
assert_match "begin{document}", last_response.body
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_it_can_display_markdown
|
33
|
+
get '/markdown'
|
34
|
+
assert last_response.ok?
|
35
|
+
assert_match "Daniel Mayer", last_response.body
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_it_supports_linked_formats
|
39
|
+
get '/'
|
40
|
+
assert_match "HTML", last_response.body
|
41
|
+
assert_match "LaTeX", last_response.body
|
42
|
+
assert_match "Markdown", last_response.body
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'lib/resume_gem'
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
class ResumeGemTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_mission_statement
|
7
|
+
resume = Resume.new({'mission_statement' => 'mission'})
|
8
|
+
assert_equal "mission", resume.mission_statement
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_contact_information
|
12
|
+
resume = Resume.new({'contact_information' => "phone: 511-2305\nemail:test@test.com"})
|
13
|
+
assert_equal "phone: 511-2305\nemail:test@test.com", resume.contact_information
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_contact_information_includes_resume_url
|
17
|
+
resume = Resume.new({'contact_information' => "phone: 511-2305\nemail:test@test.com",
|
18
|
+
'resume_url' => 'http://resume.com'})
|
19
|
+
assert_match "http://resume.com", resume.contact_information
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_text
|
23
|
+
resume = Resume.new({})
|
24
|
+
assert_match "Daniel Mayer", resume.text
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_latex
|
28
|
+
resume = Resume.new({})
|
29
|
+
assert_match "begin{document}", resume.latex
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_html
|
33
|
+
resume = Resume.new({})
|
34
|
+
assert_match "<p>", resume.html
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
data/views/index.erubis
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title><%= title %></title>
|
4
|
+
<link href="style.css" media="screen" rel="stylesheet" type="text/css" />
|
5
|
+
</head>
|
6
|
+
<body>
|
7
|
+
<% if defined? formats && formats %>
|
8
|
+
<div id='formats'>
|
9
|
+
Formats: <a href="/">HTML</a> | <a href='latex'>LaTeX</a> | <a href='markdown'>Markdown</a>
|
10
|
+
</div>
|
11
|
+
<% end %>
|
12
|
+
<div id="resume">
|
13
|
+
<%= resume %>
|
14
|
+
</div>
|
15
|
+
</body>
|
16
|
+
</html>
|
data/views/style.less
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
/**
|
2
|
+
* Less based style sheet.
|
3
|
+
*/
|
4
|
+
|
5
|
+
body {
|
6
|
+
color: #000;
|
7
|
+
}
|
8
|
+
|
9
|
+
/**
|
10
|
+
* Fix float problem.
|
11
|
+
* http://www.positioniseverything.net/easyclearing.html
|
12
|
+
*/
|
13
|
+
.clearfix:after {
|
14
|
+
content: ".";
|
15
|
+
display: block;
|
16
|
+
height: 0;
|
17
|
+
clear: both;
|
18
|
+
visibility: hidden;
|
19
|
+
}
|
20
|
+
|
21
|
+
#formats {
|
22
|
+
width: 800px;
|
23
|
+
margin-left: auto;
|
24
|
+
margin-right: auto;
|
25
|
+
font-family: serif;
|
26
|
+
background-color: #F2F2F2;
|
27
|
+
}
|
28
|
+
|
29
|
+
#resume {
|
30
|
+
width: 700px;
|
31
|
+
margin-left: auto;
|
32
|
+
margin-right: auto;
|
33
|
+
font-family: serif;
|
34
|
+
|
35
|
+
h1 {
|
36
|
+
|
37
|
+
}
|
38
|
+
|
39
|
+
h2, h3, h4, h5, h6 {
|
40
|
+
|
41
|
+
}
|
42
|
+
|
43
|
+
p {
|
44
|
+
|
45
|
+
}
|
46
|
+
|
47
|
+
ul {
|
48
|
+
li {
|
49
|
+
|
50
|
+
}
|
51
|
+
}
|
52
|
+
|
53
|
+
blockquote {
|
54
|
+
border-left: 5px solid #DDDDDD;
|
55
|
+
margin: 1em 0;
|
56
|
+
padding-left: 0.6em;
|
57
|
+
}
|
58
|
+
|
59
|
+
a, a:visited {
|
60
|
+
color: #4183C4;
|
61
|
+
text-decoration: none;
|
62
|
+
}
|
63
|
+
|
64
|
+
a:hover {
|
65
|
+
text-decoration: underline;
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
metadata
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: danmayer-resume
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Dan Mayer
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-05-10 00:00:00 -04:00
|
18
|
+
default_executable: danmayer-resume
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: A gem for Dan Mayer's resume
|
22
|
+
email: dan@mayerdan.com
|
23
|
+
executables:
|
24
|
+
- danmayer-resume
|
25
|
+
extensions: []
|
26
|
+
|
27
|
+
extra_rdoc_files:
|
28
|
+
- README.md
|
29
|
+
files:
|
30
|
+
- .gems
|
31
|
+
- .gitignore
|
32
|
+
- README.md
|
33
|
+
- Rakefile
|
34
|
+
- VERSION
|
35
|
+
- config.ru
|
36
|
+
- data/resume.md
|
37
|
+
- data/resume.yml
|
38
|
+
- index.html
|
39
|
+
- lib/resume_gem.rb
|
40
|
+
- resume.rb
|
41
|
+
- style.css
|
42
|
+
- test/rack/resume_test.rb
|
43
|
+
- test/unit/gem_test.rb
|
44
|
+
- views/index.erubis
|
45
|
+
- views/style.less
|
46
|
+
has_rdoc: true
|
47
|
+
homepage: http://github.com/danmayer/Resume
|
48
|
+
licenses: []
|
49
|
+
|
50
|
+
post_install_message:
|
51
|
+
rdoc_options:
|
52
|
+
- --charset=UTF-8
|
53
|
+
require_paths:
|
54
|
+
- lib
|
55
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
segments:
|
60
|
+
- 0
|
61
|
+
version: "0"
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
segments:
|
67
|
+
- 0
|
68
|
+
version: "0"
|
69
|
+
requirements: []
|
70
|
+
|
71
|
+
rubyforge_project:
|
72
|
+
rubygems_version: 1.3.6
|
73
|
+
signing_key:
|
74
|
+
specification_version: 3
|
75
|
+
summary: Resume gem
|
76
|
+
test_files:
|
77
|
+
- test/rack/resume_test.rb
|
78
|
+
- test/unit/gem_test.rb
|