Sprichwoerter 0.1 → 1.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,44 @@
1
+ #encoding 'UTF-8'
2
+
3
+ # functions to apply colors to terminal output
4
+
5
+ COLORS = {:default => 9, :black => 0, :red => 1, :green => 2, :yellow => 3, :blue => 4, :purple => 5, :cyan => 6, :white => 7 }
6
+
7
+ BG = 4
8
+ FG = 3
9
+ REGULAR = 0
10
+ BOLD = 1
11
+ UNDERLINE = 4
12
+ BLINK = 5
13
+ SWAP = 7
14
+ NEUTRAL = 0
15
+
16
+ STYLES = {:regular => REGULAR, :bold => BOLD, :underline => UNDERLINE, :blink => BLINK, :swap => SWAP, :neutral => NEUTRAL}
17
+
18
+ def colorize(text, color_code)
19
+ "#{color_code}#{text}\033[0m"
20
+ end
21
+
22
+ def style(text, style_code)
23
+ "#{style_code}#{text}\033[0m"
24
+ end
25
+
26
+ def colored_output(output_text, fg_color = :default, bg_color = :default, style = :regular , mode = :neutral )
27
+ "\033[%i;%i;%i%i;%i%im%s\033[0m" %[STYLES[mode.to_sym], STYLES[style.to_sym], FG, COLORS[fg_color.to_sym], BG, COLORS[bg_color.to_sym], output_text]
28
+ end
29
+
30
+ def red(text); colorize(text, "\033[31m"); end
31
+ def green(text); colorize(text, "\033[32m"); end
32
+ def yellow(text); colorize(text, "\033[33m"); end
33
+ def purple(text); colorize(text, "\033[35m"); end
34
+ def cyan(text); colorize(text, "\033[36m"); end
35
+ def blue(text); colorize(text, "\033[34m"); end
36
+ def white(text); colorize(text, "\033[37m"); end
37
+ def black(text); colorize(text, "\033[30m"); end
38
+
39
+ def black_on_white(text); colorize(colorize(text, "\033[30m"), "\033[47m");end
40
+ def white_on_black(text); colorize(colorize(text, "\033[37m"), "\033[40m");end
41
+
42
+ def bold(text); style(text, "\033[01m");end
43
+ def underline(text); style(text, "\033[04m");end
44
+
@@ -1,7 +1,7 @@
1
1
  #encoding: UTF-8
2
2
  =begin
3
3
  /***************************************************************************
4
- * ©2016-2016 Michael Uplawski <michael.uplawski@uplawski.eu> *
4
+ * ©2016-2019 Michael Uplawski <michael.uplawski@uplawski.eu> *
5
5
  * *
6
6
  * This program is free software; you can redistribute it and/or modify *
7
7
  * it under the terms of the GNU General Public License as published by *
@@ -20,10 +20,32 @@
20
20
  ***************************************************************************/
21
21
  =end
22
22
 
23
+ # 1. plural nominativ
24
+ # TODO: Add proverbs to this first group.
25
+ $proverbs0=[
26
+ ["Hunde, die bellen,", "beißen nicht"],
27
+ ["Lügen", "haben kurze Beine"],
28
+ ["Scherben", "bringen Glück"],
29
+ ["Kleine Geschenke", "erhalten die Freundschaft"],
30
+ ["Große Ereignisse", "werfen ihre Schatten voraus"],
31
+ ["Viele Köche", "verderben den Brei"],
32
+ ["Viele Jäger", "sind des Hasen Tot"],
33
+ ["Stille Wasser", "sind tief"],
34
+ ["Neue Besen", "kehren gut"],
35
+ ["Viele sind berufen aber nur wenige", "sind auserwählt"],
36
+ ["", ""],
37
+ ["", ""],
38
+ ["", ""],
39
+ ["", ""],
40
+ ["", ""],
41
+ ["", ""],
42
+ ["", ""],
43
+ ["", ""],
44
+ ]
23
45
 
24
- $proverbs=[
46
+ # 2. Singular und unzählbare
47
+ $proverbs1=[
25
48
  ["Der Spatz in der Hand", "ist besser als die Taube auf dem Dach"],
26
- ["Wer im Glashaus sitzt", "soll nicht mit Steinen werfen"],
27
49
  ["Die Axt im Haus", "erspart den Zimmermann"],
28
50
  ["Trautes Heim", "- Glück allein"],
29
51
  ["Der Fisch", "fängt beim Kopfe an, zu stinken"],
@@ -37,14 +59,9 @@ $proverbs=[
37
59
  ["Gelegenheit", "macht Diebe"],
38
60
  ["Kleinvieh", "macht auch Mist"],
39
61
  ["Gut Ding", "will Weile haben"],
40
- ["Wer zuletzt lacht", "lacht am besten"],
41
- ["Wer den Pfennig nicht ehrt", "ist den Taler nicht wert"],
42
62
  ["Ein gebranntes Kind", "scheut das Feuer"],
43
63
  ["Ein Unglück", "kommt selten allein"],
44
- ["Wer den Schaden hat", "braucht für den Spott nicht zu sorgen"],
45
64
  ["Ehrlich", "währt am längsten"],
46
- ["Wer nicht hören will", "muss leiden"],
47
- ["Wer zuerst kommt", "mahlt zuerst"],
48
65
  ["Adel", "verpflichtet"],
49
66
  ["Aller Anfang", "ist schwer"],
50
67
  ["Alles Gute", "kommt von oben"],
@@ -140,6 +157,10 @@ $proverbs=[
140
157
  ["Versuch", "macht klug"],
141
158
  ["Vertrauen", "ist gut, Kontrolle ist besser"],
142
159
  ["Vorsicht", "ist besser als Nachsicht"],
160
+ ["Wer nicht hören will", "muss leiden"],
161
+ ["Wer zuerst kommt", "mahlt zuerst"],
162
+ ["Wer zuletzt lacht", "lacht am besten"],
163
+ ["Wer den Pfennig nicht ehrt", "ist den Taler nicht wert"],
143
164
  ["Wer A sagt", "muss auch B sagen"],
144
165
  ["Wer austeilt", "muss auch einstecken können"],
145
166
  ["Wer die Wahl hat", "hat die Qual"],
@@ -150,5 +171,6 @@ $proverbs=[
150
171
  ["Wer sich entschuldigt", "klagt sich an"],
151
172
  ["Wer Sorgen hat", "hat auch Likör"],
152
173
  ["Wer Wind sät", "wird Sturm ernten"],
153
-
174
+ ["Wer den Schaden hat", "braucht für den Spott nicht zu sorgen"],
175
+ ["Wer im Glashaus sitzt", "soll nicht mit Steinen werfen"],
154
176
  ]
@@ -1,7 +1,7 @@
1
1
  #encoding: UTF-8
2
2
  =begin
3
3
  /***************************************************************************
4
- * ©2016-2016 Michael Uplawski <michael.uplawski@uplawski.eu> *
4
+ * ©2016-2019 Michael Uplawski <michael.uplawski@uplawski.eu> *
5
5
  * *
6
6
  * This program is free software; you can redistribute it and/or modify *
7
7
  * it under the terms of the GNU General Public License as published by *
@@ -20,89 +20,137 @@
20
20
  ***************************************************************************/
21
21
  =end
22
22
 
23
+ # plural subjects
24
+ $proverbs0=[["Good laws", "have sprung from bad customs"],
25
+ ["Beggars", "can't be choosers"],
26
+ ["Birds of a feather", "flock together"],
27
+ ["Fine feathers", "make fine birds"],
28
+ ["All cats", "love fish but hate to get their paws wet"],
29
+ ["Cheaters", "never prosper"],
30
+ ["Children", "are uncertain comforts but certain cares"],
31
+ ["Good clothes", "open all doors"],
32
+ ["Crows", "will not pick out crows eyes"],
33
+ ["Desperate diseases", "must have desperate remedies"],
34
+ ["Barking dogs", "seldom bite"],
35
+ ["Eavesdroppers", "hear no good of themselves"],
36
+ ["Eggs and oaths", "are soon broken"],
37
+ ["Good fences", "make good neighbors"],
38
+ ["Bought friends", "are not friends indeed"],
39
+ ["Two wrongs", "don't make a right"],
40
+ ["Still waters", "run deep"],
41
+ ["Oil and water", "don't mix"],
42
+ ["Marriages", "are made in heaven"],
43
+ ["Mighty oaks" ,"from little acorns grow"],
44
+ ["Manners", "maketh man"],
45
+ ["Whom the Gods love", "die young"],
46
+ ["They who would be young when they are old", "must be old when they are young"],
47
+ ["The best things in life", "are free"],
48
+ ["The more things change, the more", "they stay the same"],
49
+ ["Rats", "desert a sinking ship"],
50
+ ["All roads", "lead to Rome"],
51
+ ["Rules", "were meant to be broken"],
52
+ ["Dead men", "tell no tales"],
53
+ ["Great minds", "agree"],
54
+ ["People who live in glass houses", "shouldn't throw stones"],
55
+ ["Those who do not learn from history", "are doomed to repeat it"],
56
+ ["Many are called but few", "are chosen"],
57
+ ["Sticks and stones", "may break my bones, but words will never hurt me"],
58
+ ["Walls", "have ears"]]
23
59
 
24
- $proverbs=[
25
- ["The pen", "is mightier as the sword"],
26
- ["The squeaky wheel", "gets the grease"],
27
- ["No man", "is an island"],
28
- ["Fortune", "favors the bold"],
29
- ["A picture", "is worth a thousand words"],
30
- ["Discretion", "is the greater part of valor"],
31
- ["The early bird", "catches the worm"],
32
- ["God", "helps those who help themselves"],
33
- ["Cleanliness", "is next to godliness"],
34
- ["A watched pot", "never boils"],
35
- ["Practice", "makes perfect"],
36
- ["One man's trash", "is another man's treasure"],
37
- ["Beauty", "is in the eye of the beholder"],
38
- ["Necessity", "is the mother of invention"],
39
- ["A penny saved", "is a penny earned"],
40
- ["Familiarity", "breeds contempt"],
41
- ["The grass", "is always greener on the other side of the hill"],
42
- ["A chain", "is only as strong as its weakest link"],
43
- ["Honesty", "is the best policy"],
44
- ["Absence", "makes the heart grow fonder"],
45
- ["A broken clock", "is right twice a day"],
46
- ["A friend in need", "is a friend indeed"],
47
- ["A little bit of knowledge", "is a dangerous thing"],
48
- ["A journey of a thousand miles", "begins with a single step"],
49
- ["All", "is fair in love and war"],
50
- ["All work and no play", "makes Jack a dull boy"],
51
- ["Early to bed and early to rise", "makes a man healthy, wealthy and wise"],
52
- ["Every cloud", "has a silver lining"],
53
- ["Haste", "makes waste"],
54
- ["Hindsight", "is 20/20"],
55
- ["Jack of all trades", "master of none"],
56
- ["Knowledge", "is power"],
57
- ["Misery", "loves company"],
58
- ["Power corrupts and absolute power", "corrupts absolutely"],
59
- ["Rome", "wasn't build in a day"],
60
- ["Slow and steady", "wins the race"],
61
- ["The apple", "doesn't fall far from the tree"],
62
- ["The road to hell", "is paved with good intentions"],
63
- ["The best way to a man's heart", "is through his stomach"],
64
- ["Time", "is money"],
65
- ["Two is company, three", "is a crowd"],
66
- ["What goes around", "comes around"],
67
- ["What goes up", "must come down"],
68
- ["What's good for the goose", "is good for the gender"],
69
- ["He who does not advance", "goes backward"],
70
- ["Advice most needed", "is least heeded"],
71
- ["An apple a day", "keeps the doctor away"],
72
- ["A rotten apple", "injures its companions"],
73
- ["A bad settlement", "is better than a good lawsuit"],
74
- ["Better", "is the enemy of good"],
75
- ["A good beginning", "makes a good ending"],
76
- ["Well begun", "is half done"],
77
- ["A bird in the hand", "is worth two in the bush"],
78
- ["Blood", "is thicker than water"],
79
- ["Good blood", "always shows itself"],
80
- ["A book", "is a friend"],
81
- ["A rising tide", "lifts all boats"],
82
- ["Half a loaf", "is better than no bread"],
83
- ["A new broome", "sweapeth cleane"],
84
- ["The younger brother", "the better gentleman"],
85
- ["Business", "is business"],
86
- ["Everyone's business", "is no one's business"],
87
- ["A candle", "loses nothing by lighting another candle"],
88
- ["Curiosity", "killed the cat"],
89
- ["The child", "is father to the man and to the woman"],
90
- ["Who has not served", "cannot command"],
91
- ["Common sense", "is not so common"],
92
- ["Confidence", "begets confidence"],
93
- ["A guilty conscience", "needs an accuser"],
94
- ["He's an ill cook that", "cannot lick his own fingers"],
95
- ["Counsel", "is no command"],
96
- ["The customer", "is always right"],
97
- ["Deep", "calls to deep"],
98
- ["The best defense", "is a good offence"],
99
- ["Who digs a trap for others", "ends up in it himself"],
100
- ["An ounce of discretion", "is worth a pound of wit"],
101
- ["\"Well done\"", "is better than \"well said\""],
102
- ["The door", "swings both ways"],
103
- ["Constant dropping", "wears away the stone"],
104
- ["Dwarf on a giants shoulder", "sees farther of the two"],
105
- ["Good eating", "deserves good drinking"],
106
- ["He that steals an egg", "will steal an ox"],
107
- ["An empty vessel", "makes much noise"]
108
- ]
60
+ # singular and uncountables
61
+ $proverbs1=[["The best", "is cheapest"],
62
+ ["The pen", "is mightier than the sword"],
63
+ ["The squeaky wheel", "gets the grease"],
64
+ ["No man", "is an island"],
65
+ ["Fortune", "favors the bold"],
66
+ ["A picture", "is worth a thousand words"],
67
+ ["Discretion", "is the greater part of valor"],
68
+ ["The early bird", "catches the worm"],
69
+ ["God", "helps those who help themselves"],
70
+ ["Cleanliness", "is next to godliness"],
71
+ ["A watched pot", "never boils"],
72
+ ["Practice", "makes perfect"],
73
+ ["One man's trash", "is another man's treasure"],
74
+ ["Beauty", "is in the eye of the beholder"],
75
+ ["Necessity", "is the mother of invention"],
76
+ ["A penny saved", "is a penny earned"],
77
+ ["Familiarity", "breeds contempt"],
78
+ ["The grass", "is always greener on the other side of the hill"],
79
+ ["A chain", "is only as strong as its weakest link"],
80
+ ["Honesty", "is the best policy"],
81
+ ["Absence", "makes the heart grow fonder"],
82
+ ["A broken clock", "is right twice a day"],
83
+ ["A friend in need", "is a friend indeed"],
84
+ ["A little bit of knowledge", "is a dangerous thing"],
85
+ ["A journey of a thousand miles", "begins with a single step"],
86
+ ["All", "is fair in love and war"],
87
+ ["All work and no play", "makes Jack a dull boy"],
88
+ ["Early to bed and early to rise", "makes a man healthy, wealthy and wise"],
89
+ ["Every cloud", "has a silver lining"],
90
+ ["Haste", "makes waste"],
91
+ ["Hindsight", "is 20/20"],
92
+ ["Jack of all trades", "master of none"],
93
+ ["Knowledge", "is power"],
94
+ ["Misery", "loves company"],
95
+ ["Power corrupts and absolute power", "corrupts absolutely"],
96
+ ["Rome", "wasn't build in a day"],
97
+ ["Slow and steady", "wins the race"],
98
+ ["The apple", "doesn't fall far from the tree"],
99
+ ["The road to hell", "is paved with good intentions"],
100
+ ["The best way to a man's heart", "is through his stomach"],
101
+ ["Time", "is money"],
102
+ ["Two is company, three", "is a crowd"],
103
+ ["What goes around", "comes around"],
104
+ ["What goes up", "must come down"],
105
+ ["What's good for the goose", "is good for the gender"],
106
+ ["He who does not advance", "goes backward"],
107
+ ["Advice most needed", "is least heeded"],
108
+ ["An apple a day", "keeps the doctor away"],
109
+ ["A rotten apple", "injures its companions"],
110
+ ["A bad settlement", "is better than a good lawsuit"],
111
+ ["Better", "is the enemy of good"],
112
+ ["A good beginning", "makes a good ending"],
113
+ ["Well begun", "is half done"],
114
+ ["A bird in the hand", "is worth two in the bush"],
115
+ ["Blood", "is thicker than water"],
116
+ ["Good blood", "always shows itself"],
117
+ ["A book", "is a friend"],
118
+ ["A rising tide", "lifts all boats"],
119
+ ["Half a loaf", "is better than no bread"],
120
+ ["A new broome", "sweapeth cleane"],
121
+ ["The younger brother", "the better gentleman"],
122
+ ["Business", "is business"],
123
+ ["Everyone's business", "is no one's business"],
124
+ ["A candle", "loses nothing by lighting another candle"],
125
+ ["Curiosity", "killed the cat"],
126
+ ["The child", "is father to the man and to the woman"],
127
+ ["Who has not served", "cannot command"],
128
+ ["Common sense", "is not so common"],
129
+ ["Confidence", "begets confidence"],
130
+ ["A guilty conscience", "needs an accuser"],
131
+ ["He's an ill cook that", "cannot lick his own fingers"],
132
+ ["Counsel", "is no command"],
133
+ ["The customer", "is always right"],
134
+ ["The best defense", "is a good offence"],
135
+ ["Who digs a trap for others", "ends up in it himself"],
136
+ ["An ounce of discretion", "is worth a pound of wit"],
137
+ ["\"Well done\"", "is better than \"well said\""],
138
+ ["The door", "swings both ways"],
139
+ ["Constant dropping", "wears away the stone"],
140
+ ["Dwarf on a giants shoulder", "sees farther of the two"],
141
+ ["Good eating", "deserves good drinking"],
142
+ ["He that steals an egg", "will steal an ox"],
143
+ ["An empty vessel", "makes much noise"],
144
+ ["All's well that", "ends well"],
145
+ ["The enemy of my enemy", "is my friend"],
146
+ ["Every rose", "has its thorn"],
147
+ ["Evil", "begets evil"],
148
+ ["Example", "is better than correction"],
149
+ ["The exception", "proves the rule"],
150
+ ["A staff", "is quickly found to beat a dog"],
151
+ ["Brag is a good dog, but holdfast", "is better"],
152
+ ["He that would hang his dog", "gives out first that he is mad"],
153
+ ["Common fame", "is often to blame"],
154
+ ["A burnt child", "dreads the fire"],
155
+ ["All is fish that", "comes to the net"],
156
+ ["A fish", "always rots from the head down"]]
@@ -0,0 +1,55 @@
1
+ #encoding: UTF-8
2
+ =begin
3
+ /***************************************************************************
4
+ * ©2013 - 2019 Michael Uplawski <michael.uplawski@uplawski.eu> *
5
+ * *
6
+ * This program is free software; you can redistribute it and/or modify *
7
+ * it under the terms of the GNU General Public License as published by *
8
+ * the Free Software Foundation; either version 3 of the License, or *
9
+ * (at your option) any later version. *
10
+ * *
11
+ * This program is distributed in the hope that it will be useful, *
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14
+ * GNU General Public License for more details. *
15
+ * *
16
+ * You should have received a copy of the GNU General Public License *
17
+ * along with this program; if not, write to the *
18
+ * Free Software Foundation, Inc., *
19
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
20
+ ***************************************************************************/
21
+
22
+ A simplified logger configuration. Set the level for each individual logger
23
+ below. Choose a different log-device or log-file if you like. Keep the
24
+ formatting intact. Do not change other sections of this file.
25
+ =end
26
+
27
+ # Do not touch from here ----->
28
+ require 'logger'
29
+
30
+ debug = Logger::DEBUG
31
+ info = Logger::INFO
32
+ error = Logger::ERROR
33
+ fatal = Logger::FATAL
34
+ warn = Logger::WARN
35
+ unknown = Logger::UNKNOWN
36
+ {
37
+ # <---------------- to here !
38
+
39
+ # Enter your settings here, but take into consideration that not all
40
+ # the named classes will really produce readable output. Well, you can
41
+ # always try... Either name just the log-level or make the log-level
42
+ # precede the output-device or output-file like in the examples.
43
+
44
+ # Example: naming a log-file
45
+ #
46
+ # :HtmlBuilder => [info, 'C:\temp\htmlbuilder.log'],
47
+ #
48
+ # :HtmlBuilder => [debug, '/tmp/htmlbuilder.log'],
49
+
50
+ :SprichWoerter => info,
51
+ :Adder => info,
52
+
53
+ # And ignore the remainder, too.
54
+ }
55
+ #eof
@@ -0,0 +1,193 @@
1
+ #encoding: UTF-8
2
+ =begin
3
+ /***************************************************************************
4
+ * ©2011-2019 Michael Uplawski <michael.uplawski@uplawski.eu> *
5
+ * *
6
+ * This program is free software; you can redistribute it and/or modify *
7
+ * it under the terms of the GNU General Public License as published by *
8
+ * the Free Software Foundation; either version 3 of the License, or *
9
+ * (at your option) any later version. *
10
+ * *
11
+ * This program is distributed in the hope that it will be useful, *
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14
+ * GNU General Public License for more details. *
15
+ * *
16
+ * You should have received a copy of the GNU General Public License *
17
+ * along with this program; if not, write to the *
18
+ * Free Software Foundation, Inc., *
19
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
20
+ ***************************************************************************/
21
+ =end
22
+ require 'logger'
23
+
24
+ =begin Creates a member @log and precede its output with the name of the class
25
+ of the object.
26
+ Example for a class-level logger:
27
+ # --------------------
28
+ class TClass
29
+ self.extend(Logging)
30
+ @@log = init_logger(STDOUT)
31
+ def test_log
32
+ @@log.info('class-level logger called from instance: ' << @@log.to_s)
33
+ @log = @@log
34
+ @log.info('AGAIN: class-level logger called from instance: ' << @log.to_s)
35
+ end
36
+ def self::test_log
37
+ @log.info('class-level logger called from class: ' << @log.to_s)
38
+ @@log.info('AGAIN: class-level logger called from class: ' << @@log.to_s)
39
+ end
40
+ end
41
+ #---------------------
42
+ Example for a object-level logger:
43
+ ATTN! This means 1 logger per object.
44
+ # --------------------
45
+ class TClass
46
+ include Logging
47
+ def initialize
48
+ init_logger(STDOUT, Logger::DEBUG)
49
+ end
50
+ def test_log
51
+ @log.debug('called test_log() ')
52
+ end
53
+ end
54
+ =end
55
+ module Logging
56
+
57
+ @@have_log = false
58
+ @@LOG_CONF = File.dirname(File.absolute_path(__FILE__)) << File::Separator << 'log.conf'
59
+
60
+ # Call this method in an instance-method (e.g. initialize() ) to define the
61
+ # object-level logger; i.e. an object-specific member @log.
62
+ # Call this method within the class-definition for a class-level logger; i.e.
63
+ # a member @log for class-level acces.
64
+ # The method returns the logger, so you can actually do what you want with it.
65
+ def init_logger(target = STDOUT, level = Logger::INFO)
66
+ # Prepare for a class-level logger. This is actually quite cool.
67
+
68
+ # ---> Ingeniuous code starts here
69
+ cn = (self.class == Class ? name : self.class.name)
70
+ # <--- Ingeniuous code ends here
71
+
72
+ # allow to override the set log-levels with an
73
+ # external configuration (log.conf).
74
+ log_conf(cn)
75
+ # Or use the defaults as set here or elsewhere...
76
+
77
+ @level ||= level
78
+ @target ||= target
79
+
80
+ @log = Logger.new(@target)
81
+ @log.level = @level
82
+
83
+ @log.formatter = proc do |severity, datetime, progname, msg|
84
+ t = Time.now
85
+ "#{cn}: #{severity} #{t.hour}-#{t.min}-#{t.sec}: #{msg}\n"
86
+ end
87
+ if ! @@have_log
88
+ @log.debug cn.dup << ' reading logging-configuration from ' << @@LOG_CONF
89
+ @@have_log = true
90
+ @log.debug('level is ' << level.to_s)
91
+ end
92
+ return @log
93
+ end
94
+
95
+ # Set the log-target to an IO object.
96
+ def log_target=(target)
97
+ @target = target
98
+ @log = Logger.new(@@target)
99
+ @log.level = @level
100
+ end
101
+
102
+ # set the log-level
103
+ def log_level=(level)
104
+ @level = level
105
+ @log.level = @level
106
+ end
107
+
108
+ private
109
+
110
+ # Override or set the log-level and target-device, as set in a file 'log.conf'.
111
+ # I do not like the look of this, but it works just the way I want it to.
112
+ # "HEAVANS! Isn't there a standard way to do this in Ruby, for Christ's sake?", you say.
113
+ # Heck, I don't care. <= Read that again, I say.
114
+ def log_conf(cn = nil)
115
+ config = level = target = nil
116
+ # puts 'log-config is in ' << @@LOG_CONF
117
+ if(File::exist?(@@LOG_CONF) )
118
+ begin
119
+ conf = File.read(@@LOG_CONF)
120
+ config = instance_eval(conf)
121
+ rescue Exception => ex
122
+ STDERR.puts "WARNING! Cannot evaluate the logger-configuration!" << ' ' << ex.message
123
+ STDERR.puts "Default log-levels apply."
124
+ end
125
+ else
126
+ puts "Default log-levels apply."
127
+ end
128
+
129
+ if(config && config.respond_to?(:to_hash) )
130
+ config.default = nil
131
+ if cn
132
+ config = config[cn.to_sym]
133
+ else
134
+ config = config[self.class.name.to_sym]
135
+ end
136
+
137
+ if(config )
138
+ if(config.respond_to?(:to_ary) && config.size == 2)
139
+ @level, @target = config
140
+ @target.downcase!
141
+ logdir = File.dirname(@target)
142
+ [:exist?, :directory?, :writable?].each do |m|
143
+ msg = File.send(m, logdir)
144
+ if(msg)
145
+ STDERR.puts "WARNING! A logfile for '%s' cannot be written to %s (%s)!" %[self.class.name, logdir, msg]
146
+ @target = nil
147
+ end
148
+ end
149
+ else
150
+ @level = config
151
+ end
152
+ end
153
+ end
154
+ end
155
+ end
156
+
157
+ ######### test
158
+ if __FILE__ == $0
159
+ class TClass
160
+ # class level ---->
161
+ self.extend(Logging)
162
+ @@log = init_logger(STDOUT, Logger::INFO)
163
+ # <------
164
+ # object-level ---->
165
+ include Logging
166
+ # <---------
167
+
168
+ def test_log
169
+ @@log.info('class-level logger called from instance: ' << @@log.to_s)
170
+ #@log = @@log # works too
171
+ @log = TClass.class_eval{@log}
172
+ @log.info('AGAIN: class-level logger called from instance: ' << @log.to_s)
173
+ @log.debug("you won't see this on log-level INFO")
174
+
175
+ # object-level ---->
176
+ init_logger
177
+ # <-----------
178
+ @log.info("That's a different thing: " << @log.to_s << " - object-level logger!")
179
+
180
+ end
181
+ def self::test_log
182
+ @log.info('class-level logger called from class: ' << @log.to_s)
183
+ @@log.info('AGAIN: class-level logger called from class: ' << @log.to_s)
184
+ end
185
+ end
186
+
187
+ TClass.new.test_log # class-logger + 1st object-logger
188
+ TClass.new.test_log # same class-logger + 2nd object-logger
189
+
190
+ TClass::test_log # same class-logger
191
+ puts 'And just say it once clearly: THIS IS COOOL!!'
192
+ end
193
+ #EOF