rresume 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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