rresume 0.1.0 → 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.
@@ -3,7 +3,7 @@ class Person
3
3
 
4
4
  attr_reader :firstname, :lastname
5
5
  attr_accessor :adresse, :plz, :ort, :telefon, :mobil, :email, :education_list,
6
- :weiterbildungen, :fremdsprachen
6
+ :weiterbildungen, :fremdsprachen, :sonstiges
7
7
 
8
8
  def initialize(firstname="",lastname="")
9
9
  @firstname = firstname
@@ -21,24 +21,78 @@ class Person
21
21
  end
22
22
  end
23
23
 
24
+ ### def output_category_links(mode)
25
+ ### if mode == :text
26
+ ### # Links in Text-Ausgabe nicht sinnfoll
27
+ ### return
28
+ ### end
29
+ ### puts "<ol>" if mode == :html
30
+ ### @categories.each {|category|
31
+ ### name = category[0]
32
+ ### puts "<li><a href=\"#anchor_#{name}\">#{name}</a></li>" if mode == :html
33
+ ### }
34
+ ### puts "<li><a href=\"#anchor_Sonstige_Kenntnisse\">Sonstige Kenntnisse</a></li>" if mode == :html
35
+ ### puts "<li><a href=\"#anchor_Projekte\">Projekte</a></li>" if mode == :html
36
+ ### puts "</ol>" if mode == :html
37
+ ### end
38
+
39
+ def links_as_string
40
+ str=""
41
+ str = str+"<ol>"
42
+ @categories.each {|category|
43
+ name = category[0].gsub(/ /,'_')
44
+ str = str+"<li><a href=\"#anchor_#{name}\">#{name}</a></li>"
45
+ }
46
+ str = str+"<li><a href=\"#anchor_Sonstige_Kenntnisse\">Sonstige Kenntnisse</a></li>"
47
+ str = str+"<li><a href=\"#anchor_Projekte\">Projekte</a></li>"
48
+ str = str+"</ol>"
49
+ str
50
+ end
24
51
 
25
52
  def write(mode=:html, order=:newest_first, verfuegbarkeit=nil)
53
+ output_oben if mode==:html
54
+ ### output_category_links(mode)
26
55
  output_personal(mode,verfuegbarkeit)
27
56
  output_projects(mode, order)
28
57
  @categories.each {|output_category|
29
58
  output_category(output_category, mode)
30
59
  }
31
- output_werbung(:html)
60
+ output_sonstiges(mode)
61
+ output_werbung(mode)
32
62
  end
33
63
 
64
+ ###TODO: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
65
+
66
+ def output_oben
67
+ puts <<END
68
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
69
+ <html>
70
+ <head>
71
+ <title>Profil #{@firstname} #{@lastname}</title>
72
+ </head>
73
+
74
+ <body background="" bgcolor="#ffffff" text="#000000" link="#0000ff" vlink="#800080" alink="#ff0000">
75
+ END
76
+ end # output_oben
77
+
78
+ #TODO: <http://validator.w3.org/check?uri=http%3A%2F%2Fwww.thopre.de%2Fprofil.html>
79
+ # http://validator.w3.org/check/referer
80
+ # http://www.w3.org/Icons/valid-xhtml10
81
+ # valid-xhtml10.png
82
+ # valid-html401.png
83
+
84
+ # <br><a href="http://validator.w3.org/check/referer">
85
+ # <img src="valid-html401.png" alt="valid html 4.01 logo">
86
+ # </a>
87
+
34
88
  def output_werbung(mode)
35
89
  if mode == :html
36
90
  puts <<END
37
- <br>generated with <a href="http://www.thopre.de/rresume/">rresume</a>
91
+ <br>created with <a href="http://www.thopre.de/rresume/">rresume</a>
38
92
  END
39
93
  else
40
94
  puts <<END
41
- \ngenerated with Ruby rresume (see: http://www.thopre.de/rresume/)
95
+ \ncreated with rresume (see: http://www.thopre.de/rresume/)
42
96
  END
43
97
  end
44
98
  end
@@ -118,13 +172,6 @@ __END__
118
172
 
119
173
  tmpl = TemplateText.new <<END
120
174
 
121
- <HTML>
122
-
123
- <HEAD>
124
- <TITLE>Profil #{@firstname} #{@lastname}</TITLE>
125
- </HEAD>
126
-
127
- <BODY BACKGROUND="" BGCOLOR="#ffffff" TEXT="#000000" LINK="#0000ff" VLINK="#800080" ALINK="#ff0000">
128
175
 
129
176
  #{dokument_source}
130
177
 
@@ -149,15 +196,7 @@ email: <a href="mailto:#{@email}">#{@email}</a><BR>
149
196
  </TR>
150
197
  </TABLE>
151
198
 
152
-
153
- <ol>
154
- <li><a href="#hw">Hardware</a>
155
- <li><a href="#bs">Betriebssysteme</a>
156
- <li><a href="#db">Datenbanken</a>
157
- <li><a href="#to">Tools / Sonstiges</a>
158
- <li><a href="#la">Programmiersprachen</a>
159
- <li><a href="#pr">Projekte</a>
160
- </ol>
199
+ #{links_as_string}
161
200
  <hr>
162
201
 
163
202
  <H1>Aktuelles</H1>
@@ -192,7 +231,7 @@ Stundensatz:
192
231
  </TR>
193
232
  </TABLE>
194
233
 
195
- <A NAME="link"><H1>Pers&ouml;nliche Daten</H1></A>
234
+ <h1><a name="link">Pers&ouml;nliche Daten</a></h1>
196
235
  <TABLE width="95%" border="0" cellspacing="0" cellpadding="4">
197
236
  <TR>
198
237
  <!-- Row 1 Column 1 -->
@@ -241,7 +280,7 @@ Stundensatz:
241
280
  </TABLE>
242
281
 
243
282
  END
244
- puts "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">"
283
+ #TODO: puts "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">"
245
284
  array1 = @education_list
246
285
  array2 = @weiterbildungen
247
286
  array3 = @fremdsprachen
@@ -258,15 +297,18 @@ END
258
297
 
259
298
 
260
299
  def output_projects (mode,order)
300
+ puts "<a name=\"anchor_Projekte\">" if mode == :html
261
301
  puts "<h1>" if mode == :html
262
302
  puts "Projekte"
263
303
  puts "</h1>" if mode == :html
264
304
  puts "<table border=\"1\" width=\"100%\" cellpadding=\"5\">" if mode == :html
265
305
  if mode == :html
266
- puts "<td width=\"10%\"><b>Branche</b></td>"
267
- puts "<td width=\"70%\"><b>Beschreibung</b></td>"
268
- puts "<td width=\"10%\"><b>Dauer</b></td>"
269
- puts "<td width=\"10%\"><b>zuletzt</b></td>"
306
+ puts "<tr>"
307
+ puts "<th width=\"10%\"><b>Branche</b></th>"
308
+ puts "<th width=\"70%\"><b>Beschreibung</b></th>"
309
+ puts "<th width=\"10%\"><b>Dauer</b></th>"
310
+ puts "<th width=\"10%\"><b>zuletzt</b></th>"
311
+ puts "</tr>"
270
312
  end
271
313
  if order == :newest_first
272
314
  @projectlist.sort.reverse.each {|project|
@@ -300,6 +342,7 @@ END
300
342
  }
301
343
  #######################################
302
344
  tmpl = TemplateText.new <<END
345
+ <a name="anchor_#{category[0].gsub(/ /,'_')}">
303
346
  <h1>#{category[0]}</h1>
304
347
  <table border="1" width="100%" cellpadding="5">
305
348
  <tr>
@@ -324,6 +367,36 @@ END
324
367
  #f = File.open("hula#{cate[0]}.html","w")
325
368
  end
326
369
 
370
+ def output_sonstiges(mode)
371
+ # array1 = []
372
+ # array1 << { :text=>@sonstiges }
373
+ ########################################
374
+ #tmpl = TemplateText.new <<END
375
+ #<h1>Sonstige Kenntnisse</h1>
376
+ #<table border="1" width="100%" cellpadding="5">
377
+ # <tr id=table1>
378
+ # <td id="text">
379
+ # </tr>
380
+ #</table>
381
+ #END
382
+ # data = {
383
+ # :table1=>array1
384
+ # }
385
+ # tmpl.prettyprint = true
386
+ # tmpl.expand($stdout, data)
387
+
388
+ #erstmal nur die einfache L�sung ohne Template
389
+ puts <<_END_
390
+ <a name="anchor_Sonstige_Kenntnisse">
391
+ <h1>Sonstige Kenntnisse</h1>
392
+ <table border="1" width="100%" cellpadding="5">
393
+ <tr>
394
+ <td>#{@sonstiges}</td>
395
+ </tr>
396
+ </table>
397
+ _END_
398
+ end
399
+
327
400
  private
328
401
 
329
402
  def human_months(months)
@@ -18,7 +18,7 @@ class Tool
18
18
 
19
19
  def last_used
20
20
  #@zuletzt
21
- "#{@zuletzt.month}/#{zuletzt.year}"
21
+ "#{@zuletzt.month}/#{@zuletzt.year}"
22
22
  end
23
23
 
24
24
  def update(dauer,zuletzt)
@@ -1,11 +1,23 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
2
+
1
3
  require 'rubygems'
4
+ require 'rresume'
5
+
2
6
  require "amrita/template"
3
7
  include Amrita
4
8
 
5
- require 'rresume'
6
-
9
+ # Ein Beispiel fuer komplettes Profil
10
+ # (in eine Methode gepackt zum leichtern Aufrufen,
11
+ # kann aber auch entfallen
7
12
 
8
13
  def thomas_profil
14
+
15
+ # man definiert alle einzelnen 'Tools', die in Projekten verwendet wurden
16
+ # und die man im Profil ver�ffentlichen m�chte. Der Name in Anf�hrungszeichen
17
+ # beim Anlegen ist der Name, der sp�ter ausgegeben werden soll.
18
+ # 'Tools' k�nnen sein, Programmiersprachen, Datenbanken, Betriebssysteme, etc.
19
+ # oder auch Kenntnisse aus ganz anderen Berufsbereichen.
20
+
9
21
  #-- Sprachen
10
22
  ada = Tool.new("Ada")
11
23
  php = Tool.new("PHP")
@@ -16,6 +28,7 @@ require 'rresume'
16
28
  c = Tool.new("C")
17
29
  shell = Tool.new("Shell-Script")
18
30
  python = Tool.new("Python")
31
+
19
32
  #-- Datenbanken
20
33
  oracle = Tool.new("Oracle")
21
34
  mysql = Tool.new("MySQL")
@@ -25,6 +38,7 @@ require 'rresume'
25
38
  dbase = Tool.new("Dbase")
26
39
  informix = Tool.new("Informix")
27
40
  cisam = Tool.new("C-ISAM")
41
+
28
42
  #-- Betriessysteme/Umgebungen
29
43
  linux = Tool.new("Linux")
30
44
  windows = Tool.new("Windows")
@@ -46,8 +60,12 @@ require 'rresume'
46
60
  sqlloader = Tool.new("SQL-Loader")
47
61
  awk = Tool.new("AWK")
48
62
 
49
- # Person f�r Profil
63
+ # dann wird eine Person (mit Vor- und Zunamen) angegelegt, f�r die das Profil erstellt werden soll
50
64
  thomas = Person.new("Thomas","Preymesser")
65
+
66
+ # anschliessend werden pers�nliche Daten und Daten zur Ausbildung, Weiterbildungen, ...
67
+ # f�r diese Person zugewiesen
68
+ # hierfuer stehen die im folgenden aufgelisteten Attribute zur Verf�gung
51
69
  thomas.adresse = "Prinzenallee 36"
52
70
  thomas.plz = "13359"
53
71
  thomas.ort = "Berlin"
@@ -66,26 +84,52 @@ require 'rresume'
66
84
  "Englisch",
67
85
  "Italienisch (Grundkenntnisse)",
68
86
  ]
69
-
70
- # Container fuer saemtliche Projekte
87
+ # freier Text, hier kann man weitere Kenntnisse angeben, die nicht einem
88
+ # bestimmten Projekt zuzuordnen sind (z.B. OOD, XML, etc.)
89
+ # Dies wird als einfacher Text in einem Textkasten ausgegeben. HTML-code
90
+ # ist erlaubt und wird empfohlen.
91
+ thomas.sonstiges =<<END
92
+ sonstige Kenntnisse, die vorhanden sind, aber nicht speziellen Projekten zugeordnet werden k&ouml;nnen
93
+ <ul>
94
+ <li>Objektorientieres Design und Entwicklung</li>
95
+ <li>Ruby</li>
96
+ <li>Ruby on Rails</li>
97
+ <li>XML</li>
98
+ <li>Test-Driven-Development</li>
99
+ <li>Unit-Tests</li>
100
+ <li>SCCS / CVS / Subversion - Versionsverwaltungssysteme</li>
101
+ <li>CSS</li>
102
+ <li>Extreme Programming</li>
103
+ </ul>
104
+ END
105
+
106
+ # ProjectList ist ein Container fuer saemtliche Projekte dieser Person
71
107
  projectlist = ProjectList.new(thomas)
72
108
 
73
- # folgende Tools koennen den Projekten zugeordnet werden
74
- # hier koennen sowohl Programmiersprachen, Betriebssysteme, Datenbanken
75
- # angegeben werden, je nach Vorlieben
109
+ # diese Projektliste an Thomas zuweisen
110
+ thomas << projectlist
111
+
112
+
113
+ # Jetzt wird ein erstes Projekt angelegt. Die Reihenfolge der Projekte hier
114
+ # spielt keine Rolle. Bei der Ausgabe kann sp�er immer noch angegeben werden,
115
+ # ob die Ausgabe chronologisch auf- oder absteigend vorgenommen werden soll.
76
116
 
77
- # ein erstes Projekt
78
117
  cronon = Project.new("Cronon")
79
118
 
80
119
  # Start und Ende des Projekts (Monat/Jahr)
81
120
  cronon.von(4,2006)
82
121
  cronon.bis(8,2006)
122
+ # Angabe der Branche, hier k�nnte auch direkt ein Kunde angegeben werden (wobei es aber
123
+ # besser w�re ein separates Attribut 'kunde' f�r sp�tere Versionen von rresume vorzusehen
124
+ # der Kunde k�nnte bei der Ausgabe wahlweise unterdr�ckt werden)
83
125
  cronon.branche="IT/Web-Dienstleistungen"
126
+ # hier die Beschreibung des Projekts
84
127
  cronon.beschreibung="- ERP-Anwendungsentwicklung (Baan)"+
85
128
  "- Web-Entwicklung (www.1plusi.de)"+
86
129
  "- Web-Entwicklung f�r eine neuen Online-Community �hnlich OpenBC"
87
130
 
88
- # Tools
131
+ # jetzt k�nnen die vorher definierten Tools diesem Projekt zugeordnet werden.
132
+
89
133
  cronon.used_tool(php)
90
134
  cronon.used_tool(html)
91
135
  cronon.used_tool(css)
@@ -94,8 +138,14 @@ require 'rresume'
94
138
  cronon.used_tool(oracle)
95
139
  cronon.used_tool(windows)
96
140
 
141
+ # abschliessend muss dieses Projekt noch in die Projektliste - sonst wird es nicht ausgegeben
142
+ # (bei Geheimprojekten kann dies weggelassen werden, man hat aber trotzdem die Projektdaten
143
+ # angelegt ;-) )
144
+
97
145
  projectlist << cronon
98
146
 
147
+ # dann kommt das n�chstes Projekt - gleiches Prinzip wie vorher
148
+
99
149
  #===================================================================
100
150
  lulaliebe = Project.new("Lulaliebe")
101
151
  lulaliebe.von(5,2005)
@@ -455,68 +505,82 @@ Datenbank Oracle 7.x.x, Shell-Scripts, awk, Python. - Realisierung von Batchprog
455
505
 
456
506
  projectlist << vhs
457
507
 
508
+ # jetzt sind alle Projekte definiert worden
458
509
 
510
+ # Verwaltungskram:
459
511
 
460
- # pers�nlich Angaben
461
-
462
- # Ausgeben mit Verfuegbarkeit
463
- #projectlist.output_personal(:mit_verfuegbarkeit)
464
- # Ausgeben ohne Verfuegbarkeit (z.B. bei Verwendung durch andere Firma/Vermittler)
465
- projectlist.output_personal(:pdf)
466
-
467
- # alle Projekt auflisten (als html-output)
468
- projectlist.output(true,:html)
469
-
470
- # oder als einfache Liste, standardmaessig neueste Projekte am Anfang
471
- # projectlist.output
472
- # oder von alt nach neu sortieren:
473
- # projectlist.output(false)
512
+ buffer = ""
474
513
 
514
+ def buffer.write(str)
515
+ self << str
516
+ end
517
+
518
+ # Ausgabe umlenken
519
+ $stdout = buffer #-> ">>>"
475
520
 
476
- # Ausgabe der Tools
477
521
 
522
+ # da man nicht alle Fertigkeitkeiten/Tools wild durcheinander ausgeben m�chte, werden hier
523
+ # Kategorien definiert, denen die einzelnen, oben definierten Tools, zugewiesen werden.
524
+ # Z.B. Hier die Kategorien Programmmiersprachen, Datenbanken, etc.
525
+ # Kategorien k�nnen nach eigenen Erfordernissen angelegt und organisiert werden.
526
+
478
527
  categories = {"Programmiersprachen" => [ada,php,c,cpp,cobol,python,ruby,abap,html,perl],
479
528
  "Datenbanken" => [mysql,oracle,sybase,ctree,db2,dbase,informix,cisam],
480
529
  "Betriebssysteme" => [amboss,linux,windows,os2,unix,sap],
481
530
  "sonstige Tools" => [awk,sqlloader,plsql,css,cisam,oraclereports,oracledesigner,toad,shell],
482
531
  }
483
532
 
533
+ # Da man versehentlich bei der obigen Kategorisierung vielleicht ein Tool vergisst oder doppelt
534
+ # zuordnet, kann die Zuordnung mit folgender Funktion �berpr�ft werden.
535
+ # Es wird die Exception RuntimeError ausgel�st mit einem entsprechenden Fehlerhinweis, falls dies
536
+ # der Fall sein sollte
484
537
 
485
- # Testen, ob wir alle Tools in eine Kategorie aufgenommen haben
486
- # und keines doppelt vorkommt
487
538
  tools_in_categories?(categories)
488
539
 
489
- # Ausgabe Sprachen, Betriebssysteme, etc.
490
- categories.each {|output_category|
491
- projectlist.output_category(output_category, :html)
492
- }
493
- projectlist.output_werbung(:html)
494
- end # thomas_profil
540
+ # anschliessend werden diese Kategorien ebenfalls an die Person zugewiesen.
541
+ # Anmerkung: Man k�nnte hier, z.B. bei mehreren Mitarbeitern einer Firma, auch jedem Mitarbeiter
542
+ # ein andere Kategorisierung zuweisen (z.B. Buchhaltungskenntnise bei einem Assistenten und Programmiersprachen bei einer Softwareentwicklerin) (oder eben jedem die gleiche).
495
543
 
496
- def jahre(monate)
497
- monate/12.0.round
498
- end
499
-
500
- def tools_in_categories?(categories)
501
- # Testen, ob wir alle Tools in eine Kategorie aufgenommen haben
502
- ObjectSpace.each_object(Tool) {|tool|
503
- found=false
504
- categories.each {|cate|
505
- if cate[1] != cate[1].uniq
506
- raise "doppelter Eintrag in Kategorie"
507
- end
508
- cate[1].each {|t|
509
- if t.name == tool.name
510
- found = true
511
- end
512
- }
513
- }
514
- if !found
515
- puts "Tool #{tool.name} ist keiner Kategorie zugeordnet"
516
- raise RuntimeError
517
- end
544
+ thomas << categories
545
+
546
+ # jetzt ist eine Person komplett und es folgt die
547
+
548
+ ### AUSGABE
549
+
550
+ #thomas.write(mode=:html,order=:newest_first,:mit_verfuegbarkeit)
551
+
552
+ # Ausgabe im Format HTML, Sortierung: neuestes Projekt zuerst, Verfuegbarkeit wird weggelassen
553
+ # die Ausgabe erfolgt auf die Standand-Ausgabe und mu� mit >"dateiname.html" in die richtige
554
+ # html-Datei umgelenkt werden.
555
+ thomas.write(mode=:html,order=:newest_first)
556
+
557
+ # Ausgabe zur�cksetzen
558
+ $stdout = STDOUT
559
+
560
+ print buffer
561
+
562
+ # Hat der Buffer und die Vorlagedatei den gleichen Inhalt?
563
+ vergleich=""
564
+ f=File.new("vorlage_profil.html","r")
565
+ f.each { |line|
566
+ # puts line
567
+ vergleich<<line
518
568
  }
569
+
570
+ # if vergleich==buffer
571
+ # puts "sind gleich"
572
+ # else
573
+ # puts "sind nicht gleich"
574
+ # File.open("/tmp/123","w") {|bf|
575
+ # bf.print(buffer)
576
+ # }
577
+ # puts `diff /tmp/123 vorlage_profil.html`
578
+ # end
579
+ # assert_equal(vergleich,buffer,"Buffer ist nicht gleich der Vorlagedatei vorlage_profil.html")
519
580
  end
520
581
 
521
- thomas_profil
582
+ require 'toolcheck'
583
+
522
584
 
585
+ # main
586
+ thomas_profil