virgild-resumetools 0.2.4.1 → 0.2.5.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.
@@ -33,3 +33,4 @@ require "resumetools/resume/resume"
33
33
  require "resumetools/resume/text_reader"
34
34
  require "resumetools/resume/pdf"
35
35
  require "resumetools/resume/plain_text"
36
+ require "resumetools/resume/json"
@@ -0,0 +1,79 @@
1
+ require 'json/pure'
2
+
3
+ module ResumeTools
4
+ module Renderer
5
+ class JSON
6
+ def initialize(resume)
7
+ @resume = resume
8
+ end
9
+
10
+ def render(opts={})
11
+ frame = {
12
+ :full_name => @resume.full_name,
13
+ :url => @resume.url,
14
+ :email => @resume.email,
15
+ :telephone => @resume.telephone,
16
+ :address1 => @resume.address1,
17
+ :address2 => @resume.address2,
18
+ :sections => @resume.sections.map { |section| section.json_frame }
19
+ }
20
+ ::JSON.generate(frame)
21
+ end
22
+ end
23
+
24
+ module JSONHelpers
25
+ module SectionMethods
26
+ def json_frame
27
+ frame = {
28
+ :title => self.title,
29
+ :para => self.para,
30
+ :items => self.items.map { |item| item.json_frame },
31
+ :periods => self.periods.map { |period| period.json_frame }
32
+ }
33
+ end
34
+ end
35
+
36
+ module ItemMethods
37
+ def json_frame
38
+ frame = { :text => self.text }
39
+ end
40
+ end
41
+
42
+ module PeriodMethods
43
+ def json_frame
44
+ frame = {
45
+ :title => self.title,
46
+ :location => self.location,
47
+ :organization => self.organization,
48
+ :dtstart => self.dtstart,
49
+ :dtend => self.dtend,
50
+ :items => self.items.map { |item| item.json_frame }
51
+ }
52
+ end
53
+ end
54
+ end
55
+
56
+ module JSONMethods
57
+ def render_json(opts={})
58
+ renderer = JSON.new(self)
59
+ renderer.render(opts)
60
+ end
61
+ end
62
+ end
63
+
64
+ Section.class_eval do
65
+ include Renderer::JSONHelpers::SectionMethods
66
+ end
67
+
68
+ Period.class_eval do
69
+ include Renderer::JSONHelpers::PeriodMethods
70
+ end
71
+
72
+ Item.class_eval do
73
+ include Renderer::JSONHelpers::ItemMethods
74
+ end
75
+
76
+ Resume.class_eval do
77
+ include Renderer::JSONMethods
78
+ end
79
+ end
@@ -23,14 +23,15 @@
23
23
  # OTHER DEALINGS IN THE SOFTWARE.
24
24
  #++
25
25
 
26
+ require "prawn"
27
+ require "prawn/format"
28
+ require "prawn/layout"
29
+ require "prawn/measurement_extensions"
30
+
26
31
  module ResumeTools
27
32
  module Renderer
28
33
  module PDF
29
- require "prawn"
30
- require "prawn/format"
31
- require "prawn/layout"
32
- require "prawn/measurement_extensions"
33
-
34
+
34
35
  FONT_DIR = File.join(File.dirname(__FILE__), '..', '..', 'fonts')
35
36
  MARGINS = [1.0, 1.0, 1.0, 1.0]
36
37
  FONT_SIZES = {
@@ -70,9 +71,9 @@ module ResumeTools
70
71
  pdf.text self.full_name, :style => :bold, :size => FONT_SIZES[:header], :align => :center
71
72
 
72
73
  # Contact info
73
- pdf.text [self.address1, self.address2].join(", "), :align => :center
74
- pdf.text [telephone, email].join(" • "), :align => :center
75
- pdf.text url, :align => :center
74
+ self.header_lines.each do |line|
75
+ pdf.text line, :align => :center
76
+ end
76
77
 
77
78
  pdf.pad_bottom 20 do
78
79
  end
@@ -110,14 +111,8 @@ module ResumeTools
110
111
  pdf.pad_top(5) { pdf.text period.title, :style => :bold, :size => FONT_SIZES[:period] }
111
112
 
112
113
  # Period details
113
- detail_line = []
114
- dates = print_date(period.dtstart, period.dtend)
115
- detail_line << period.organization unless period.organization.blank?
116
- detail_line << period.location unless period.location.blank?
117
- detail_line << dates unless dates.blank?
118
-
119
114
  pdf.span(pdf.bounds.width - 10, :position => 10) do
120
- pdf.text(detail_line.join(" • "), :size => FONT_SIZES[:default])
115
+ pdf.text(period.line, :size => FONT_SIZES[:default])
121
116
  end
122
117
 
123
118
  # Period items
@@ -139,21 +134,11 @@ module ResumeTools
139
134
 
140
135
  pdf.render
141
136
  end
142
-
143
- private
144
- def print_date(dtstart, dtend)
145
- if dtstart && dtend
146
- dtstart + " - " + dtend
147
- elsif dtstart && dtend.nil?
148
- dtstart.strftime(DATE_FORMAT)
149
- else
150
- ""
151
- end
152
- end
153
- end
154
- end
137
+
138
+ end #module PDF
139
+ end #module Renderer
155
140
 
156
141
  Resume.class_eval do
157
142
  include Renderer::PDF
158
143
  end
159
- end
144
+ end #module ResumeTools
@@ -8,21 +8,27 @@ module ResumeTools
8
8
  end
9
9
 
10
10
  def render(opts={})
11
- @item_bullet = "-"
12
- @header_filler = "-"
13
- @newline = "\n"
11
+ @opts = {
12
+ :item_bullet => '-',
13
+ :header_filler => '-',
14
+ :newline => "\n",
15
+ :first_indent => 0,
16
+ :columns => 80,
17
+ :indent => 2,
18
+ :centered_top => true,
19
+ :lined_headers => true
20
+ }
21
+ @opts.merge!(opts)
14
22
  @format = Text::Format.new
15
- @format.first_indent = 0
16
- @format.columns = 80
17
- @indent = 2
18
- @lined_headers = true
23
+ @format.first_indent = @opts[:first_indent]
24
+ @format.columns = @opts[:columns]
19
25
 
20
- center @resume.full_name
21
- center @resume.address1
22
- center @resume.address2
23
- center @resume.telephone
24
- center @resume.email
25
- center @resume.url
26
+ top_line @resume.full_name unless @resume.full_name.blank?
27
+ top_line @resume.address1 if @resume.has_address1?
28
+ top_line @resume.address2 if @resume.has_address2?
29
+ top_line @resume.telephone if @resume.has_telephone?
30
+ top_line @resume.email if @resume.has_email?
31
+ top_line @resume.url if @resume.has_url?
26
32
  blank_line
27
33
 
28
34
  @resume.sections.each_with_index do |section, n|
@@ -53,6 +59,14 @@ module ResumeTools
53
59
  end
54
60
  end
55
61
 
62
+ def top_line(text)
63
+ if @opts[:centered_top]
64
+ center text
65
+ else
66
+ add_line text
67
+ end
68
+ end
69
+
56
70
  def render_period(period)
57
71
  add_line(period.title) if period.title
58
72
  add_line period.line
@@ -69,7 +83,7 @@ module ResumeTools
69
83
  end
70
84
 
71
85
  def render_item(item)
72
- add_line "#{@item_bullet} " + item.text
86
+ add_line "#{@opts[:item_bullet]} " + item.text
73
87
  end
74
88
 
75
89
  def render_paragraph(para)
@@ -85,21 +99,21 @@ module ResumeTools
85
99
  end
86
100
 
87
101
  def center(line)
88
- line = @newline if line.nil?
89
- content << @format.center(line)
102
+ line = @opts[:newline] if line.nil?
103
+ content << @format.center(line)
90
104
  end
91
105
 
92
106
  def add_line(line="")
93
- line = @newline if line.nil?
107
+ line = @opts[:newline] if line.nil?
94
108
  content << @format.format(line)
95
109
  end
96
110
 
97
111
  def blank_line
98
- content << @newline
112
+ content << @opts[:newline]
99
113
  end
100
114
 
101
115
  def push_margin(cols=0, &block)
102
- cols = @indent if (cols == 0)
116
+ cols = @opts[:indent] if (cols == 0)
103
117
  previous_margin = @format.left_margin
104
118
  @format.left_margin = @format.left_margin + cols
105
119
  block.call
@@ -108,7 +122,8 @@ module ResumeTools
108
122
 
109
123
  def header(text)
110
124
  add_line(text)
111
- add_line(@header_filler * text.length) if @lined_headers
125
+ add_line(@opts[:header_filler] * text.length) if @opts[:lined_headers]
126
+ blank_line
112
127
  end
113
128
  end #class PlainText
114
129
 
@@ -77,7 +77,7 @@ module ResumeTools
77
77
  # Create new section and add to sections
78
78
  def create_section(props={}, &block)
79
79
  section = Section.new(props)
80
- yield section if block_given?
80
+ block.call(section) if block
81
81
  self.add_section(section)
82
82
  self
83
83
  end
@@ -112,6 +112,17 @@ module ResumeTools
112
112
  !self.sections.empty?
113
113
  end
114
114
 
115
+ # Returns an array of lines that has the contact info
116
+ def header_lines
117
+ elements = []
118
+ [:address1, :address2, :telephone, :email, :url].each do |element|
119
+ elements << self.send(element) unless self.send(element).blank?
120
+ end
121
+ lines = []
122
+ elements.each_slice(2) { |pair| lines << pair.join(" • ") }
123
+ lines
124
+ end
125
+
115
126
  end #class Resume
116
127
 
117
128
 
@@ -166,7 +177,7 @@ module ResumeTools
166
177
  # Creates a period and adds it to the list
167
178
  def create_period(props={}, &block)
168
179
  period = Period.new(props)
169
- yield period if block_given?
180
+ block.call(period) if block
170
181
  self.add_period(period)
171
182
  self
172
183
  end
@@ -184,7 +195,7 @@ module ResumeTools
184
195
  # Creates an item and adds it to the list
185
196
  def create_item(props={}, &block)
186
197
  item = Item.new(props)
187
- yield item if block_given?
198
+ block.call(item) if block
188
199
  self.add_item(item)
189
200
  self
190
201
  end
@@ -255,18 +266,18 @@ module ResumeTools
255
266
  # Creates an item and adds it to the list
256
267
  def create_item(props={}, &block)
257
268
  item = Item.new(props)
258
- yield item if block_given?
269
+ block.call(item) if block
259
270
  self.add_item(item)
260
271
  item
261
272
  end
262
273
 
263
274
  # The period details in a single line
264
275
  def line
265
- elements = Array.new
276
+ elements = []
266
277
  elements << self.organization if self.has_organization?
267
278
  elements << self.location if self.has_location?
268
279
  if self.has_dtstart? && self.has_dtend?
269
- date = " (#{self.dtstart}) - #{self.dtend})"
280
+ date = " (#{self.dtstart} - #{self.dtend})"
270
281
  elsif self.has_dtstart? || self.has_dtend?
271
282
  value = self.has_dtstart? ? self.dtstart : self.dtend
272
283
  date = " (#{value})"
@@ -28,8 +28,8 @@ unless defined? ResumeTools::VERSION
28
28
  module VERSION
29
29
  MAJOR = 0
30
30
  MINOR = 2
31
- TINY = 4
32
- BITSY = 1
31
+ TINY = 5
32
+ BITSY = 0
33
33
  STRING = [MAJOR, MINOR, TINY, BITSY].join('.')
34
34
  end
35
35
  end
@@ -24,7 +24,8 @@ namespace :gem do
24
24
  s.add_runtime_dependency("extlib")
25
25
  s.add_runtime_dependency("prawn", ">= 0.5.0")
26
26
  s.add_runtime_dependency("treetop", ">= 1.3.0")
27
- s.add_runtime_dependency("text-format", "1.0.0")
27
+ s.add_runtime_dependency("text-format", ">=1.0.0")
28
+ s.add_runtime_dependency("json", ">=1.1.9")
28
29
 
29
30
  s.require_path = "lib"
30
31
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: virgild-resumetools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4.1
4
+ version: 0.2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Virgil Dimaguila
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-09-17 00:00:00 -07:00
12
+ date: 2009-09-22 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -68,10 +68,20 @@ dependencies:
68
68
  version_requirement:
69
69
  version_requirements: !ruby/object:Gem::Requirement
70
70
  requirements:
71
- - - "="
71
+ - - ">="
72
72
  - !ruby/object:Gem::Version
73
73
  version: 1.0.0
74
74
  version:
75
+ - !ruby/object:Gem::Dependency
76
+ name: json
77
+ type: :runtime
78
+ version_requirement:
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: 1.1.9
84
+ version:
75
85
  description: Resume generation and writing tools
76
86
  email: virgil@roundysoft.com
77
87
  executables: []
@@ -92,6 +102,7 @@ files:
92
102
  - lib/resumetools/grammars
93
103
  - lib/resumetools/grammars/resume.treetop
94
104
  - lib/resumetools/resume
105
+ - lib/resumetools/resume/json.rb
95
106
  - lib/resumetools/resume/pdf.rb
96
107
  - lib/resumetools/resume/plain_text.rb
97
108
  - lib/resumetools/resume/resume.rb