rresume 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/rresume/person.rb +99 -26
- data/lib/rresume/tool.rb +1 -1
- data/{lib/thomas.rb → test/example_thomas.rb} +120 -56
- data/test/huhu.html +33 -0
- data/test/profil.html +535 -0
- data/test/tc_HTML_Konformitaet_thopre_de.rb +18 -0
- data/test/tc_thomas_neue_methode.rb +17 -1
- data/test/tc_tool.rb +38 -4
- data/test/toolcheck.rb +24 -0
- data/test/ts_rresume.rb +3 -2
- data/test/vorlage_profil.html +82 -83
- metadata +7 -4
- data/test/beispeil2.rb +0 -22
data/lib/rresume/person.rb
CHANGED
@@ -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
|
-
|
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>
|
91
|
+
<br>created with <a href="http://www.thopre.de/rresume/">rresume</a>
|
38
92
|
END
|
39
93
|
else
|
40
94
|
puts <<END
|
41
|
-
\
|
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
|
-
<
|
234
|
+
<h1><a name="link">Persö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 "<
|
267
|
-
puts "<
|
268
|
-
puts "<
|
269
|
-
puts "<
|
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)
|
data/lib/rresume/tool.rb
CHANGED
@@ -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
|
-
|
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
|
-
#
|
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ö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
|
-
#
|
74
|
-
|
75
|
-
|
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
|
-
|
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
|
-
#
|
490
|
-
|
491
|
-
|
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
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
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
|
-
|
582
|
+
require 'toolcheck'
|
583
|
+
|
522
584
|
|
585
|
+
# main
|
586
|
+
thomas_profil
|