cajun-resume 0.1.1

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.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.sw?
2
+ .DS_Store
3
+ coverage
4
+ rdoc
5
+ pkg
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 cajun
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,49 @@
1
+ == The Ruby Based Ruby Resume' Generator
2
+ This is a fun little project for defining your resume in Ruby. You say your a Rubyist, but is your resume written in a DSL? I didn't think so! Using the Ruby Resume' Generator, you too can be a total geek!
3
+
4
+ == Example
5
+ # ruby_coder.rb
6
+ class RubyCoder
7
+ include Resume
8
+ contact :email => %w(ruby coder net), :phone => %w(800 444 3333)
9
+ attended "XYZU", :in => "Gemology", :with => "PHD", :graduated => "1999"
10
+ worked :at => "Gem Cutting, Inc.", :description => "cut all kinds of rubies", :position => "cuter", :tenure => 2008
11
+ built %w(ruby-cuts.tv)
12
+ using %w(ruby haml datamapper)
13
+ practicing %w(agile bdd juggling)
14
+ story %w(I'm a ruby coder of some skill and whatnot. You should hire be because I'm cool.)
15
+ end
16
+
17
+ Then, with this gem installed you can pop out a slick little resume'
18
+
19
+ > resume ruby_coder.rb
20
+
21
+ Ruby Coder
22
+ ruby@coder.net 800.444.3333
23
+ --------------------------------------------------------------------------------
24
+ Attended XYZU Gemology for PHD
25
+ --------------------------------------------------------------------------------
26
+ Worked at Gem Cutting, Inc. as a cuter 2008
27
+ cut all kinds of rubies
28
+ --------------------------------------------------------------------------------
29
+ Sites
30
+ ruby-cuts.tv
31
+ --------------------------------------------------------------------------------
32
+ Technologies
33
+ ruby - haml - datamapper
34
+ --------------------------------------------------------------------------------
35
+ Practices
36
+ agile - bdd - juggling
37
+ --------------------------------------------------------------------------------
38
+ I'm a ruby coder of some skill and whatnot. You should hire be because I'm cool.
39
+
40
+ You can also write a PDF file by supplying the -pdf parameter
41
+
42
+ > resume examples/ruby_coder.rb -pdf
43
+ Printing PDF to RubyCoder.pdf
44
+
45
+ == Notes
46
+ Feel free to leave any and all of the various sections out. You can call most methods multiple times and the data
47
+ will simply get added to the list of items.
48
+
49
+ If you want a different format, feel free to hack away. If you can't you probably shouldn't be using this anyway.
data/Rakefile ADDED
@@ -0,0 +1,47 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "resume"
8
+ gem.summary = %Q{cool resume}
9
+ gem.email = "zac@kleinpeter.org"
10
+ gem.homepage = "http://github.com/cajun/resume"
11
+ gem.authors = ["cajun"]
12
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
13
+ end
14
+
15
+ rescue LoadError
16
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
17
+ end
18
+
19
+ require 'spec/rake/spectask'
20
+ Spec::Rake::SpecTask.new(:spec) do |spec|
21
+ spec.libs << 'lib' << 'spec'
22
+ spec.spec_files = FileList['spec/**/*_spec.rb']
23
+ end
24
+
25
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
26
+ spec.libs << 'lib' << 'spec'
27
+ spec.pattern = 'spec/**/*_spec.rb'
28
+ spec.rcov = true
29
+ end
30
+
31
+
32
+ task :default => :spec
33
+
34
+ require 'rake/rdoctask'
35
+ Rake::RDocTask.new do |rdoc|
36
+ if File.exist?('VERSION.yml')
37
+ config = YAML.load(File.read('VERSION.yml'))
38
+ version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
39
+ else
40
+ version = ""
41
+ end
42
+
43
+ rdoc.rdoc_dir = 'rdoc'
44
+ rdoc.title = "foo #{version}"
45
+ rdoc.rdoc_files.include('README*')
46
+ rdoc.rdoc_files.include('lib/**/*.rb')
47
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.1
data/bin/resume ADDED
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- mode: ruby -*-
3
+
4
+ require 'optparse'
5
+ require 'open-uri'
6
+ require File.join(File.dirname(__FILE__), '../lib/resume')
7
+ require File.join(File.dirname(__FILE__), '../lib/pdf_printer')
8
+
9
+ options = {}
10
+ opts = OptionParser.new do |opts|
11
+ opts.banner = "Usage: resume [options] <resume location>"
12
+
13
+ opts.on("-pdf", "Create a PDF") do |pdf|
14
+ options[:pdf] = pdf
15
+ end
16
+
17
+ opts.on("-ruby", "Shows the Ruby code to create this resume") do |ruby|
18
+ options[:ruby] = ruby
19
+ end
20
+
21
+ opts.on_tail("-h", "--help", "Show this message") do
22
+ puts opts
23
+ exit
24
+ end
25
+ opts.parse!
26
+ opts
27
+ end
28
+
29
+ if(ARGV.last =~ /^-/ or ARGV.empty?)
30
+ puts opts
31
+ puts "Resume to print must be supplied."
32
+ exit
33
+ end
34
+
35
+ resume_class_string = open(ARGV.last).read
36
+ eval(resume_class_string)
37
+ resume_class_name = resume_class_string.match(/class\s(.*)/)[1]
38
+ resume_class = eval("#{resume_class_name}.new.class")
39
+
40
+ if(options[:ruby])
41
+ puts resume_class_string
42
+ end
43
+
44
+ if(options[:pdf])
45
+ printer = PDFPrinter.new(resume_class)
46
+ puts "Printing PDF to #{printer.filename}"
47
+ printer.print
48
+ else
49
+ resume_class.pretty_print
50
+ end
51
+
@@ -0,0 +1,10 @@
1
+ class RubyCoder
2
+ include Resume
3
+ contact :email => %w(ruby coder net), :phone => %w(800 444 3333)
4
+ attended "XYZU", :in => "Gemology", :with => "PHD", :graduated => "1999"
5
+ worked :at => "Gem Cutting, Inc.", :description => "cut all kinds of rubies", :position => "cuter", :tenure => 2008
6
+ built %w(ruby-cuts.tv)
7
+ using %w(ruby haml datamapper)
8
+ practicing %w(agile bdd juggling)
9
+ story %w(I'm a ruby coder of some skill and whatnot. You should hire be because I'm cool.)
10
+ end
@@ -0,0 +1,67 @@
1
+ require 'rubygems'
2
+ require 'prawn'
3
+ require 'prawn/layout'
4
+
5
+ class PDFPrinter
6
+ attr_accessor :resume
7
+
8
+ def initialize(resume)
9
+ self.resume = resume
10
+ end
11
+
12
+ def filename
13
+ "#{self.resume.name}.pdf"
14
+ end
15
+
16
+ def print
17
+ resume = self.resume
18
+ Prawn::Document.generate filename do
19
+ font "Helvetica"
20
+ header margin_box.top_left do
21
+ text resume.my_name, :align => :center, :size => 32
22
+ text resume.print_contact, :align => :center
23
+ stroke_horizontal_rule
24
+ end
25
+ move_down(50)
26
+ if(resume.has_schools?)
27
+ text "Education", :align => :right, :style => :bold_italic
28
+ text resume.print_schools, :align => :left
29
+ stroke_horizontal_rule
30
+ end
31
+ if(resume.has_jobs?)
32
+ text "Employment", :align => :right, :style => :bold_italic
33
+ text resume.print_jobs, :align => :left
34
+ stroke_horizontal_rule
35
+ end
36
+
37
+ if(resume.has_applications?)
38
+ text "Sites", :align => :right, :style => :bold_italic
39
+ text resume.print_array(resume.applications), :align => :center
40
+ stroke_horizontal_rule
41
+ end
42
+
43
+ if(resume.has_technologies?)
44
+ text "Technologies", :align => :right, :style => :bold_italic
45
+ text resume.print_array(resume.technologies), :align => :center
46
+ stroke_horizontal_rule
47
+ end
48
+
49
+ if(resume.has_practices?)
50
+ text "Practices", :align => :right, :style => :bold_italic
51
+ text resume.print_array(resume.practices), :align => :center
52
+ stroke_horizontal_rule
53
+ end
54
+
55
+ if(resume.has_story?)
56
+ text resume.story_text
57
+ end
58
+
59
+ footer margin_box.bottom_left do
60
+ font "Courier"
61
+ fill_color "999999"
62
+
63
+ text "gem install cajun-resume; resume #{$*}", :align => :center, :size => 8
64
+ end
65
+ end
66
+ end
67
+ end
data/lib/resume.rb ADDED
@@ -0,0 +1,157 @@
1
+ require 'rubygems'
2
+ require 'facets/ansicode'
3
+ module Resume
4
+
5
+ def self.included(base)
6
+ base.extend(ANSICode)
7
+ base.extend(ClassMethods)
8
+ (base.methods - Object.methods).each do |method|
9
+ base.send(method, Array.new) if method =~ /=$/
10
+ end
11
+ base.contact_info = Hash.new
12
+ base.width = 80 # default width
13
+ end
14
+
15
+ module ClassMethods
16
+ attr_accessor :contact_info, :schools, :jobs, :applications, :technologies, :practices, :width, :story_text
17
+
18
+ def my_name
19
+ self.to_s.gsub(/([A-Z]+)([A-Z][a-z])/,'\1 \2').gsub(/([a-z\d])([A-Z])/,'\1 \2')
20
+ end
21
+
22
+ def contact(opts = {})
23
+ if(email = opts[:email])
24
+ self.contact_info[:email] = email.is_a?(Array) ? email.to_email : (raise Exception.new('Please use an array to define your email address'))
25
+ end
26
+
27
+ if(phone = opts[:phone])
28
+ self.contact_info[:phone] = phone.is_a?(Array) ? phone.to_phone : (raise Exception.new('Please use an array to define your phone number'))
29
+ end
30
+
31
+ end
32
+
33
+ def story(story)
34
+ self.story_text = story.join(" ")
35
+ end
36
+
37
+ # attended "XYZU", :in => "Basket Weaving", :with => "PHD", :graduated => "1999"
38
+ def attended(school, opts = {})
39
+ self.schools << {:name => school, :curriculum => opts[:in], :degree => opts[:with], :graduated => opts[:graduated]}
40
+ end
41
+
42
+ # worked :at => "Acme, Inc.", :description => "bored out of skull", :position => "Monkey", :tenure => 2008
43
+ def worked(opts = {})
44
+ self.jobs << {:company => opts[:at], :project => opts[:project], :description => opts[:description], :position => opts[:position], :tenure => opts[:tenure]}
45
+ end
46
+
47
+ {"built" => "applications", "using" => "technologies", "practicing" => "practices"}.each do |name, accessor|
48
+ class_eval <<-EOV
49
+ def #{name}(args)
50
+ self.#{accessor} = self.#{accessor} + (args.is_a?(Array) ? args : [args])
51
+ end
52
+ EOV
53
+ end
54
+
55
+ def line(width = @width)
56
+ "-".center(width, "-")
57
+ end
58
+
59
+ def pretty_print(out = $>, width = @width)
60
+ print(my_name, out, width, :center)
61
+ print_contact(out, width)
62
+ print(line, out, width)
63
+ print(line, out, width) if print_schools(out, width)
64
+ print(line, out, width) if print_jobs(out, width)
65
+ print(line, out, width) if print_array(applications, "Sites", out, width)
66
+ print(line, out, width) if print_array(technologies, "Technologies", out, width)
67
+ print(line, out, width) if print_array(practices, "Practices", out, width)
68
+ print(story_text, out, width)
69
+ out << "\n"
70
+ end
71
+
72
+ def has_contact_info?
73
+ !contact_info[:email].nil? or !contact_info[:phone].nil?
74
+ end
75
+
76
+ def has_story?
77
+ self.story_text and !self.story_text.empty?
78
+ end
79
+
80
+ %w(schools jobs applications technologies practices story_).each do |name|
81
+ class_eval <<-EOV
82
+ def has_#{name}?
83
+ self.#{name} and !self.#{name}.empty?
84
+ end
85
+ EOV
86
+ end
87
+
88
+ def print_contact(out = "", width = @width)
89
+ row = ""
90
+ row << contact_info[:email] if contact_info[:email]
91
+ row << " " if contact_info[:email] and contact_info[:phone]
92
+ row << contact_info[:phone] if contact_info[:phone]
93
+ print(row, out, width, :center)
94
+ end
95
+
96
+ def print_schools(out = "", width = @width)
97
+ schools.collect { |s|
98
+ row = ""
99
+ row << "Attended #{s[:name]}" if s[:name]
100
+ row << " #{s[:curriculum]}" if s[:curriculum]
101
+ row << " for #{s[:degree]}" if s[:degree]
102
+ row << "; Graduated #{s[:graduated]}" if s[:graduated]
103
+ print(row, out, width, :right)
104
+ }.join("\n")
105
+ end
106
+
107
+ def print_jobs(out = "", width = @width)
108
+ jobs.collect { |j|
109
+ row = ""
110
+ row << "Worked at #{j[:company]}" if j[:company]
111
+ row << " as a #{j[:position]}" if j[:position]
112
+ row << " (#{j[:tenure]})" if j[:tenure]
113
+ row << "\n On #{j[:project]}" if j[:project]
114
+ result = print(row, out, width, :right)
115
+ result += "\n " + print(j[:description], out, width) if j[:description]
116
+ }.join("\n\n")
117
+ end
118
+
119
+ def print_array(array, title = "", out = "", width = @width)
120
+ unless(array.empty?)
121
+ print(title, out, width, :right)
122
+ print(array.join(" - "), out, width)
123
+ end
124
+ end
125
+
126
+ def print(str, out, width, justify = :left)
127
+ if(str.length > width)
128
+ i = str.rindex(' ', width)
129
+ print(str[0, i], out, width, justify) + ' ' +print(str[i+1, str.length], out, width, justify)
130
+ elsif(!str.empty?)
131
+ line = str.justify(width, justify)
132
+ out << "\n#{line}"
133
+ line.strip
134
+ end
135
+ end
136
+ end
137
+ end
138
+
139
+ class String
140
+ def justify(width, justify)
141
+ case justify
142
+ when :center: center(width)
143
+ when :left: ljust(width)
144
+ when :right: rjust(width)
145
+ end
146
+ end
147
+ end
148
+
149
+ class Array
150
+ def to_email
151
+ "#{self.first}@#{self[1,size].join('.')}"
152
+ end
153
+
154
+ def to_phone(delimiter = ".")
155
+ self.join(delimiter)
156
+ end
157
+ end
data/resume.gemspec ADDED
@@ -0,0 +1,50 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{resume}
5
+ s.version = "0.1.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["cajun"]
9
+ s.date = %q{2009-09-22}
10
+ s.default_executable = %q{resume}
11
+ s.email = %q{zac@kleinpeter.org}
12
+ s.executables = ["resume"]
13
+ s.extra_rdoc_files = [
14
+ "LICENSE",
15
+ "README.rdoc"
16
+ ]
17
+ s.files = [
18
+ ".document",
19
+ ".gitignore",
20
+ "LICENSE",
21
+ "README.rdoc",
22
+ "Rakefile",
23
+ "VERSION",
24
+ "bin/resume",
25
+ "examples/ruby_coder.rb",
26
+ "lib/pdf_printer.rb",
27
+ "lib/resume.rb",
28
+ "resume.gemspec",
29
+ "spec/resume_spec.rb"
30
+ ]
31
+ s.homepage = %q{http://github.com/cajun/resume}
32
+ s.rdoc_options = ["--charset=UTF-8"]
33
+ s.require_paths = ["lib"]
34
+ s.rubygems_version = %q{1.3.5}
35
+ s.summary = %q{cool resume}
36
+ s.test_files = [
37
+ "spec/resume_spec.rb",
38
+ "examples/ruby_coder.rb"
39
+ ]
40
+
41
+ if s.respond_to? :specification_version then
42
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
43
+ s.specification_version = 3
44
+
45
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
46
+ else
47
+ end
48
+ else
49
+ end
50
+ end
@@ -0,0 +1,270 @@
1
+ require File.join(File.dirname(__FILE__), '../lib/resume')
2
+
3
+ describe Resume do
4
+ before(:each) do
5
+ @empty = EmptyResume
6
+ @resume = DummyResume
7
+ @alternate = AlternateDummyResume
8
+ end
9
+
10
+ it "should do the simplest thing possible" do
11
+ @resume.should_not be_nil
12
+ end
13
+
14
+ it "should have a name based on the class its included in" do
15
+ @resume.my_name.should == "Dummy Resume"
16
+ end
17
+
18
+ it "should even do middle names and more" do
19
+ @alternate.my_name.should == "Alternate Dummy Resume"
20
+ end
21
+
22
+ describe "schools" do
23
+ it "should have no schools if there are none" do
24
+ @empty.schools.should be_empty
25
+ end
26
+
27
+ it "should say its got no schools if there are none" do
28
+ @empty.has_schools?.should be_false
29
+ end
30
+
31
+ it "should include a school if there is one" do
32
+ @resume.schools.first[:name].should == "XYZU"
33
+ end
34
+
35
+ it "should say it has schools if it does" do
36
+ @resume.has_schools?.should be_true
37
+ end
38
+
39
+ it "should include year if supplied" do
40
+ @resume.schools.first[:graduated].should == "1999"
41
+ end
42
+
43
+ it "should include degree if supplied" do
44
+ @resume.schools.first[:degree].should == "PHD"
45
+ end
46
+
47
+ it "should include curriculum if supplied" do
48
+ @resume.schools.first[:curriculum].should == "Basket Weaving"
49
+ end
50
+
51
+ it "should have 1 school if said school is supplied" do
52
+ @resume.schools.size == 1
53
+ end
54
+
55
+ it "should have 2 schools if said schools are supplied" do
56
+ @alternate.schools.size == 2
57
+ end
58
+ end
59
+
60
+ describe "jobs" do
61
+ it "should have no jobs if there are none" do
62
+ @empty.jobs.should be_empty
63
+ end
64
+
65
+ it "should say it has not jobs if there are none" do
66
+ @empty.has_jobs?.should be_false
67
+ end
68
+
69
+ it "should include a job if there is one" do
70
+ @resume.jobs.first[:company].should == "Acme, Inc."
71
+ end
72
+
73
+ it "should say it has jobs if there are some" do
74
+ @resume.has_jobs?.should be_true
75
+ end
76
+
77
+ it "should include a description if there is one" do
78
+ @resume.jobs.first[:description].should == "bored out of skull"
79
+ end
80
+
81
+ it "should include a position if there is one" do
82
+ @resume.jobs.first[:position].should == "Monkey"
83
+ end
84
+
85
+ it "should include a tenure if there is one" do
86
+ @resume.jobs.first[:tenure].should == 2008
87
+ end
88
+ end
89
+
90
+ describe "applications" do
91
+ it "should have no applications if there are none" do
92
+ @empty.applications.should be_empty
93
+ end
94
+
95
+ it "should say it has not apps if there are none" do
96
+ @empty.has_applications?.should be_false
97
+ end
98
+
99
+ it "should have applications if there are some" do
100
+ @resume.applications.should == ["foo.com", "bar.net", "baz.org"]
101
+ end
102
+
103
+ it "should say it has apps if there are some" do
104
+ @resume.has_applications?.should be_true
105
+ end
106
+
107
+ it "should also add applications if there are multiples" do
108
+ @alternate.applications.should == ["biz.gov", "buzz.biz"]
109
+ end
110
+ end
111
+
112
+ describe "technologies" do
113
+ it "should have no technologies if there are none" do
114
+ @empty.technologies.should be_empty
115
+ end
116
+
117
+ it "should say it has no tech if there is none" do
118
+ @empty.has_technologies?.should be_false
119
+ end
120
+
121
+ it "should have technologies if there are some" do
122
+ @resume.technologies.should == ["countin", "readin", "spellin", "typin"]
123
+ end
124
+
125
+ it "should say it has tech if there is some" do
126
+ @resume.has_technologies?.should be_true
127
+ end
128
+
129
+
130
+ it "should also add technologies if there are multiples" do
131
+ @alternate.technologies.should == ["countin", "readin"]
132
+ end
133
+ end
134
+
135
+ describe "practices" do
136
+ it "should have no practices if there are none" do
137
+ @empty.practices.should be_empty
138
+ end
139
+
140
+ it "should say it has no practices if there is none" do
141
+ @empty.has_practices?.should be_false
142
+ end
143
+
144
+ it "should have practices if there are some" do
145
+ @resume.practices.should == ["law", "surgery", "juggling", "golf"]
146
+ end
147
+
148
+ it "should say it has practices if there are some" do
149
+ @resume.has_practices?.should be_true
150
+ end
151
+
152
+ it "should also add practices if there are multiples" do
153
+ @alternate.practices.should == ["law", "surgery"]
154
+ end
155
+ end
156
+
157
+ describe "contact" do
158
+ it "should include email" do
159
+ @resume.contact_info[:email].should == "foo@bar.com"
160
+ end
161
+
162
+ it "should say it has contact_info if there are some" do
163
+ @resume.has_contact_info?.should be_true
164
+ end
165
+
166
+ it "should include phone" do
167
+ @resume.contact_info[:phone].should == "800.444.3333"
168
+ end
169
+ end
170
+
171
+ describe "story" do
172
+ it "should include a story" do
173
+ @resume.story_text.should == "some story that this resume has and it does too"
174
+ end
175
+
176
+ it "should say there is a story" do
177
+ @resume.has_story?.should be_true
178
+ end
179
+
180
+ it "should not include a story if there isn't one" do
181
+ @empty.story_text.should be_empty
182
+ end
183
+
184
+ it "should not say there is a story" do
185
+ @empty.has_story?.should be_false
186
+ end
187
+ end
188
+
189
+ describe "pretty_print" do
190
+ before(:each) do
191
+ @print = ""
192
+ @resume.pretty_print(@print)
193
+ @alt_print = ""
194
+ @alternate.pretty_print(@alt_print)
195
+ end
196
+
197
+ it "should have a line" do
198
+ @resume.line.length.should == @resume.width
199
+ end
200
+
201
+ it "should use the name" do
202
+ @print.should match(/Dummy Resume/)
203
+ end
204
+
205
+ it "should use with a line" do
206
+ @print.should be_include(@resume.line)
207
+ end
208
+
209
+ it "should use the email" do
210
+ @print.should match(/foo@bar.com/)
211
+ end
212
+
213
+ it "should use the phone" do
214
+ @print.should match(/800.444.3333/)
215
+ end
216
+
217
+ it "should print schools out" do
218
+ @alt_print.should match(/Bachelor's/)
219
+ @alt_print.should match(/PHD/)
220
+ end
221
+
222
+ it "should print jobs" do
223
+ @print.should match(/Acme, Inc./)
224
+ @print.should match(/bored out of skull/)
225
+ @print.should match(/Monkey/)
226
+ @print.should match(/2008/)
227
+ end
228
+
229
+ it "should print websites" do
230
+ @print.should match(/foo.com/)
231
+ @print.should match(/bar.net/)
232
+ @print.should match(/baz.org/)
233
+ end
234
+
235
+ it "should print the story" do
236
+ @print.should match(/some story that this resume has and it does too/)
237
+ end
238
+ end
239
+ end
240
+
241
+ class EmptyResume
242
+ include Resume
243
+ end
244
+
245
+ class DummyResume
246
+ include Resume
247
+ contact :email => %w(foo bar com), :phone => %w(800 444 3333)
248
+ attended "XYZU", :in => "Basket Weaving", :with => "PHD", :graduated => "1999"
249
+ worked :at => "Acme, Inc.", :description => "bored out of skull", :position => "Monkey", :tenure => 2008
250
+ built %w(foo.com bar.net baz.org)
251
+ using %w(countin readin spellin typin)
252
+ practicing %w(law surgery juggling golf)
253
+ story %w(some story that this resume has and it does too)
254
+ end
255
+
256
+ class AlternateDummyResume
257
+ include Resume
258
+ attended "XYZU", :in => "Basket Weaving", :with => "Bachelor's", :graduated => "1908"
259
+ attended "XYZU", :in => "Basket Weaving", :with => "PHD", :graduated => "1999"
260
+ worked :at => "Acme, Inc.", :description => "bored out of skull", :position => "Monkey", :tenure => 2008
261
+ worked :at => "Backnecorp", :description => "bored out of back", :position => "Picker", :tenure => 2004
262
+
263
+ built "biz.gov"
264
+ built "buzz.biz"
265
+ using "countin"
266
+ using "readin"
267
+ practicing "law"
268
+ practicing "surgery"
269
+ end
270
+
metadata ADDED
@@ -0,0 +1,67 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cajun-resume
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - cajun
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-09-22 00:00:00 -07:00
13
+ default_executable: resume
14
+ dependencies: []
15
+
16
+ description:
17
+ email: zac@kleinpeter.org
18
+ executables:
19
+ - resume
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - LICENSE
24
+ - README.rdoc
25
+ files:
26
+ - .document
27
+ - .gitignore
28
+ - LICENSE
29
+ - README.rdoc
30
+ - Rakefile
31
+ - VERSION
32
+ - bin/resume
33
+ - examples/ruby_coder.rb
34
+ - lib/pdf_printer.rb
35
+ - lib/resume.rb
36
+ - resume.gemspec
37
+ - spec/resume_spec.rb
38
+ has_rdoc: false
39
+ homepage: http://github.com/cajun/resume
40
+ licenses:
41
+ post_install_message:
42
+ rdoc_options:
43
+ - --charset=UTF-8
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: "0"
51
+ version:
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ version:
58
+ requirements: []
59
+
60
+ rubyforge_project:
61
+ rubygems_version: 1.3.5
62
+ signing_key:
63
+ specification_version: 3
64
+ summary: cool resume
65
+ test_files:
66
+ - spec/resume_spec.rb
67
+ - examples/ruby_coder.rb