timequiz 0.1.4 → 0.1.6

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.
data/lib/timequiz.rb CHANGED
@@ -1,25 +1,18 @@
1
1
  #!/usr/bin/env ruby
2
2
  #encoding: UTF-8
3
-
4
3
  =begin
5
- /******************************************************************************
6
- * Copyright © 2017-2021, Michael Uplawski <michael.uplawski@uplawski.eu> *
7
- * *
8
- * This program is free software; you can redistribute it and/or modify *
9
- * it under the terms of the GNU General Public License as published by *
10
- * the Free Software Foundation; either version 3 of the License, or *
11
- * (at your option) any later version. *
12
- * *
13
- * This program is distributed in the hope that it will be useful, *
14
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16
- * GNU General Public License for more details. *
17
- * *
18
- * You should have received a copy of the GNU General Public License *
19
- * along with this program; if not, write to the *
20
- * Free Software Foundation, Inc., *
21
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
22
- ******************************************************************************/
4
+ /***************************************************************************
5
+ * ©2017-2024, Michael Uplawski <michael.uplawski@uplawski.eu> *
6
+ * *
7
+ * This program is free software; you can redistribute it and/or modify *
8
+ * it under the terms of the WTFPL 2.0 or later, see *
9
+ * http://www.wtfpl.net/about/ *
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. *
14
+ * *
15
+ ***************************************************************************/
23
16
  =end
24
17
 
25
18
  require_relative 'argparser'
@@ -29,7 +22,7 @@ require_relative 'extstring'
29
22
  require_relative 'user_input'
30
23
  require_relative 'busy_indicator'
31
24
  require_relative 'event'
32
- require_relative 'logging'
25
+ require_relative 'basic_logging'
33
26
 
34
27
  require 'date'
35
28
 
@@ -37,8 +30,7 @@ require 'date'
37
30
  # precisely in the start_game() method which has to be defined by an
38
31
  # interface-module.
39
32
  class Timequiz
40
- self::extend(Logging)
41
- @@log = self::init_logger()
33
+ include BasicLogging
42
34
 
43
35
  # Find out, how the program has been called.
44
36
  # In juin 2017 this can be 'timequiz' or 'timequizGtk'.
@@ -60,7 +52,7 @@ class Timequiz
60
52
  when 'timequizGtk'
61
53
  # require_relative 'gtk/timequizGtk'
62
54
  # include TimequizGtk
63
- @log.info('I am sorry. But there is not Gtk-interface, for the time.')
55
+ info('I am sorry. But there is not Gtk-interface, for the time.')
64
56
  # Text only
65
57
  when 'timequiz'
66
58
  require_relative 'console'
@@ -74,7 +66,7 @@ class Timequiz
74
66
  # puts "How did you do that?"
75
67
  # ... HEY! I guess: You created a link to the executable but forgot
76
68
  # something else. Read the comment to the 'called_as?' method, above.
77
- @log.error(": A user-interface \"" << called_as? << "\" has not (yet) been defined (read the code, my friend)! Aborting.")
69
+ error(": A user-interface \"" << called_as? << "\" has not (yet) been defined (read the code, my friend)! Aborting.")
78
70
  exit false
79
71
  end
80
72
 
@@ -85,14 +77,14 @@ class Timequiz
85
77
  begin
86
78
  ofl = File.open(file, 'a')
87
79
  if !File.readable?(file)
88
- @log.error('The file ' << file << ' cannot be read! Aborting')
80
+ error('The file ' << file << ' cannot be read! Aborting')
89
81
  exit false
90
82
  end
91
83
  if(File.empty?(file) )
92
- @log.info("The file " << file << " is empty. You must add some events to it.")
84
+ info("The file " << file << " is empty. You must add some events to it.")
93
85
  if(File.writable?(file) )
94
86
  orig_file = File.dirname(__FILE__) << File::Separator << 'events.rb'
95
- @log.debug('orig_file is ' << orig_file)
87
+ debug('orig_file is ' << orig_file)
96
88
  File.open(orig_file, 'r') do |ifl|
97
89
  ofl.puts("# Events defined for the Timequiz game")
98
90
  ofl.puts("# Lines starting with '#' are comments.\n\n# EXAMPLES:")
@@ -114,25 +106,21 @@ class Timequiz
114
106
  end
115
107
  rescue IOError => ex
116
108
  ofl.close
117
- @log.error('Cannot work with the given file: ' << ex.message)
109
+ error('Cannot work with the given file: ' << ex.message)
118
110
  exit false
119
111
  end
120
112
  end
121
113
 
122
114
  def initialize(*args)
123
- @log = @@log
124
115
  # adjust log-level, if given.
125
116
  # Else use what you know.
126
117
  options = ArgParser.parse(*args)
127
- $LOG_LEVEL = Logger::DEBUG if options.debug
128
- @log.level = $LOG_LEVEL if $LOG_LEVEL
129
- @log.debug('log_level is ' << $LOG_LEVEL.to_s)
130
- @log.debug('options are ' << options.to_s)
118
+ set_level (BasicLogging::DEBUG if options.debug)
131
119
  # should we add only a new event to the list
132
- @log.debug('options are : ' << options.to_s)
120
+ debug('options are : ' << options.to_s)
133
121
  add_ok = game_ok = false
134
122
  if(options.file)
135
- @log.debug('shall use non-standard events file')
123
+ debug('shall use non-standard events file')
136
124
  add_ok, game_ok = verify_prepare(options.file)
137
125
  else
138
126
  game_ok = require_relative 'events'
@@ -142,10 +130,10 @@ class Timequiz
142
130
  Adder::add(options)
143
131
  exit true
144
132
  elsif(options.file)
145
- @log.error('cannot add events to ' << options.file)
133
+ error('cannot add events to ' << options.file)
146
134
  exit false
147
135
  else
148
- @log.error('PSE start the program with -h or --help to see an option-overview')
136
+ error('PSE start the program with -h or --help to see an option-overview')
149
137
  exit false
150
138
  end
151
139
  end
@@ -154,8 +142,8 @@ class Timequiz
154
142
  if(game_ok)
155
143
  start_game
156
144
  else
157
- @log.error("Cannot play with the events in " << options.file)
158
- @log.error("PSE verify that there are at least 3 events defined!")
145
+ error("Cannot play with the events in " << options.file)
146
+ error("PSE verify that there are at least 3 events defined!")
159
147
  exit false
160
148
  end
161
149
  end
@@ -186,7 +174,7 @@ class Timequiz
186
174
  response_years = []
187
175
  # response.each_with_index {|r, i| response_years[r-1] = @m_events[i].year}
188
176
  response.each_with_index {|r, i| response_years[i] = @m_events[r-1].year}
189
- @log.debug('response is ' << response.join(', ') << "\nresponse_years is : " << response_years.join(', ') )
177
+ debug('response is ' << response.join(', ') << "\nresponse_years is : " << response_years.join(', ') )
190
178
  puts 'response is ' << response.join(', ') << "\nresponse_years is : " << response_years.join(', ')
191
179
 
192
180
  # do not change the displayed index
data/lib/user_input.rb CHANGED
@@ -2,22 +2,16 @@
2
2
 
3
3
  =begin
4
4
  /***************************************************************************
5
- * Copyright © 2017-2017, Michael Uplawski <michael.uplawski@uplawski.eu>*
5
+ * ©2017-2024, Michael Uplawski <michael.uplawski@uplawski.eu> *
6
6
  * *
7
7
  * This program is free software; you can redistribute it and/or modify *
8
- * it under the terms of the GNU General Public License as published by *
9
- * the Free Software Foundation; either version 3 of the License, or *
10
- * (at your option) any later version. *
8
+ * it under the terms of the WTFPL 2.0 or later, see *
9
+ * http://www.wtfpl.net/about/ *
11
10
  * *
12
11
  * This program is distributed in the hope that it will be useful, *
13
12
  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15
- * GNU General Public License for more details. *
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
16
14
  * *
17
- * You should have received a copy of the GNU General Public License *
18
- * along with this program; if not, write to the *
19
- * Free Software Foundation, Inc., *
20
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
21
15
  ***************************************************************************/
22
16
  =end
23
17
 
data/lib/version.rb CHANGED
@@ -1,27 +1,22 @@
1
- #!/usr/bin/env ruby
2
1
  #encoding: UTF-8
3
2
 
4
3
  =begin
5
- /******************************************************************************
6
- * Copyright © 2021-2021, Michael Uplawski <michael.uplawski@uplawski.eu> *
7
- * *
8
- * This program is free software; you can redistribute it and/or modify *
9
- * it under the terms of the GNU General Public License as published by *
10
- * the Free Software Foundation; either version 3 of the License, or *
11
- * (at your option) any later version. *
12
- * *
13
- * This program is distributed in the hope that it will be useful, *
14
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16
- * GNU General Public License for more details. *
17
- * *
18
- * You should have received a copy of the GNU General Public License *
19
- * along with this program; if not, write to the *
20
- * Free Software Foundation, Inc., *
21
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
22
- ******************************************************************************/
4
+ /***************************************************************************
5
+ * ©2017-2024, Michael Uplawski <michael.uplawski@uplawski.eu> *
6
+ * *
7
+ * This program is free software; you can redistribute it and/or modify *
8
+ * it under the terms of the WTFPL 2.0 or later, see *
9
+ * http://www.wtfpl.net/about/ *
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. *
14
+ * *
15
+ ***************************************************************************/
23
16
  =end
24
17
 
25
- VERSION = '0.1.4'
26
- SUMMARY = 'Bugs fixed: Timeline validation corrected. Line-breaks in console-output, when more than 9 events are listed.'
27
-
18
+ VERSION = '0.1.6'
19
+ SUMMARY = 'Some new events added. Fixed a bug in the logging-configuration.'
20
+ AUTHOR = 'Michael Uplawski'
21
+ AUTHOR_MAIL = '<michael.uplawski@uplawski.eu>'
22
+ YEARS = 2017 - 2024
data/timequiz.gemspec CHANGED
@@ -9,11 +9,11 @@ Gem::Specification.new do |s|
9
9
  s.description = "Play a history game"
10
10
  s.authors = ["Michael Uplawski"]
11
11
  s.email = 'michael.uplawski@uplawski.eu'
12
- s.files = %w~timequiz~.collect{|f| 'bin/' << f} + %w~log.conf version.rb file_checking.rb logging.rb adder.rb argparser.rb busy_indicator.rb color_output.rb console.rb constants.rb event.rb events.rb extstring.rb user_input.rb timequiz.rb~.collect{|f| 'lib/' << f} + %w~timequiz.gemspec~.collect{|f|f} + %w~man/timequiz.6.gz html/timequiz.html pdf/timequiz.pdf rst/timequiz.rst license.txt~.collect{|f| 'doc/' << f}
12
+ s.files = %w~timequiz~.collect{|f| 'bin/' << f} + %w~basic_logging.rb version.rb file_checking.rb adder.rb argparser.rb busy_indicator.rb color_output.rb console.rb constants.rb event.rb events.rb extstring.rb user_input.rb timequiz.rb~.collect{|f| 'lib/' << f} + %w~timequiz.gemspec~.collect{|f|f} + %w~man/timequiz.6.gz html/timequiz.html pdf/timequiz.pdf rst/timequiz.rst license.txt~.collect{|f| 'doc/' << f} + ["README.md"]
13
13
  s.homepage = ''
14
14
  #s.requirements = ''
15
15
  #s.add_runtime_dependency ''
16
16
  s.executables = 'timequiz'
17
- s.license = 'GPL-3.0'
17
+ s.license = 'Nonstandard'
18
18
  s.required_ruby_version = '>= 2.7'
19
19
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: timequiz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Uplawski
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-15 00:00:00.000000000 Z
11
+ date: 2024-01-06 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Play a history game
14
14
  email: michael.uplawski@uplawski.eu
@@ -17,6 +17,7 @@ executables:
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
+ - README.md
20
21
  - bin/timequiz
21
22
  - doc/html/timequiz.html
22
23
  - doc/license.txt
@@ -25,6 +26,7 @@ files:
25
26
  - doc/rst/timequiz.rst
26
27
  - lib/adder.rb
27
28
  - lib/argparser.rb
29
+ - lib/basic_logging.rb
28
30
  - lib/busy_indicator.rb
29
31
  - lib/color_output.rb
30
32
  - lib/console.rb
@@ -33,17 +35,15 @@ files:
33
35
  - lib/events.rb
34
36
  - lib/extstring.rb
35
37
  - lib/file_checking.rb
36
- - lib/log.conf
37
- - lib/logging.rb
38
38
  - lib/timequiz.rb
39
39
  - lib/user_input.rb
40
40
  - lib/version.rb
41
41
  - timequiz.gemspec
42
42
  homepage: ''
43
43
  licenses:
44
- - GPL-3.0
44
+ - Nonstandard
45
45
  metadata: {}
46
- post_install_message:
46
+ post_install_message:
47
47
  rdoc_options: []
48
48
  require_paths:
49
49
  - lib
@@ -58,9 +58,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
58
58
  - !ruby/object:Gem::Version
59
59
  version: '0'
60
60
  requirements: []
61
- rubygems_version: 3.2.5
62
- signing_key:
61
+ rubygems_version: 3.4.20
62
+ signing_key:
63
63
  specification_version: 4
64
- summary: 'Bugs fixed: Timeline validation corrected. Line-breaks in console-output,
65
- when more than 9 events are listed.'
64
+ summary: Some new events added. Fixed a bug in the logging-configuration.
66
65
  test_files: []
data/lib/log.conf DELETED
@@ -1,55 +0,0 @@
1
- #encoding: UTF-8
2
- =begin
3
- /***************************************************************************
4
- * ©2013 - 2021 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
- :Timequiz => [debug, '/tmp/timequiz.log'],
51
- :Console =>
52
-
53
- # And ignore the remainder, too.
54
- }
55
- #eof
data/lib/logging.rb DELETED
@@ -1,204 +0,0 @@
1
- #encoding: UTF-8
2
- =begin
3
- /***************************************************************************
4
- * ©2011-2016 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
- require_relative 'file_checking'
24
-
25
- =begin Creates a member @log and precede its output with the name of the class
26
- of the object.
27
- Example for a class-level logger:
28
- # --------------------
29
- class TClass
30
- self.extend(Logging)
31
- @@log = init_logger(STDOUT)
32
- def test_log
33
- @@log.info('class-level logger called from instance: ' << @@log.to_s)
34
- @log = @@log
35
- @log.info('AGAIN: class-level logger called from instance: ' << @log.to_s)
36
- end
37
- def self::test_log
38
- @log.info('class-level logger called from class: ' << @log.to_s)
39
- @@log.info('AGAIN: class-level logger called from class: ' << @@log.to_s)
40
- end
41
- end
42
- #---------------------
43
- Example for a object-level logger:
44
- ATTN! This means 1 logger per object.
45
- # --------------------
46
- class TClass
47
- include Logging
48
- def initialize
49
- init_logger(STDOUT, Logger::DEBUG)
50
- end
51
- def test_log
52
- @log.debug('called test_log() ')
53
- end
54
- end
55
- =end
56
- module Logging
57
- include File_Checking
58
-
59
- @@have_log = false
60
- @@LOG_CONF = File.dirname(File.absolute_path(__FILE__)) << File::Separator << 'log.conf'
61
-
62
- # Call this method in an instance-method (e.g. initialize() ) to define the
63
- # object-level logger; i.e. an object-specific member @log.
64
- # Call this method within the class-definition for a class-level logger; i.e.
65
- # a member @log for class-level acces.
66
- # The method returns the logger, so you can actually do what you want with it.
67
- def init_logger(target = STDOUT, level = Logger::INFO)
68
- # Prepare for a class-level logger. This is actually quite cool.
69
-
70
- # ---> Ingeniuous code starts here
71
- cn = (self.class == Class ? name : self.class.name)
72
- # <--- Ingeniuous code ends here
73
-
74
- # allow to override the set log-levels with an
75
- # external configuration (log.conf).
76
- log_conf(cn)
77
- # Or use the defaults as set here or elsewhere...
78
-
79
- @level ||= level
80
- @target ||= target
81
-
82
- @log = Logger.new(@target)
83
- @log.level = @level
84
-
85
- @log.formatter = proc do |severity, datetime, progname, msg|
86
- t = Time.now
87
- "#{cn}: #{severity} #{t.hour}-#{t.min}-#{t.sec}: #{msg}\n"
88
- end
89
- if ! @@have_log
90
- @log.debug cn.dup << ' reading logging-configuration from ' << @@LOG_CONF
91
- @@have_log = true
92
- @log.debug('level is ' << level.to_s)
93
- end
94
- return @log
95
- end
96
-
97
- def log_label=(label)
98
- @log.formatter = proc do |severity, datetime, progname, msg|
99
- t = Time.now
100
- if(label && !label.empty?)
101
- "#{label}: #{severity} #{t.hour}-#{t.min}-#{t.sec}: #{msg}\n"
102
- else
103
- "#{$0}: #{severity} #{t.hour}-#{t.min}-#{t.sec}: #{msg}\n"
104
- end
105
- end
106
- end
107
-
108
- # Set the log-target to an IO object.
109
- def log_target=(target)
110
- @target = target
111
- @log = Logger.new(@@target)
112
- @log.level = @level
113
- end
114
-
115
- # set the log-level
116
- def log_level=(level)
117
- @level = level
118
- @log.level = @level
119
- end
120
-
121
- private
122
-
123
- # Override or set the log-level and target-device, as set in a file 'log.conf'.
124
- # I do not like the look of this, but it works just the way I want it to.
125
- # "HEAVANS! Isn't there a standard way to do this in Ruby, for Christ's sake?", you say.
126
- # Heck, I don't care. <= Read that again, I say.
127
- def log_conf(cn = nil)
128
- config = level = target = nil
129
- # puts 'log-config is in ' << @@LOG_CONF
130
- if(File::exist?(@@LOG_CONF) )
131
- begin
132
- conf = File.read(@@LOG_CONF)
133
- config = instance_eval(conf)
134
- rescue Exception => ex
135
- STDERR.puts "WARNING! Cannot evaluate the logger-configuration!" << ' ' << ex.message
136
- STDERR.puts "Default log-levels apply."
137
- end
138
- # else
139
- # puts "Default log-levels apply."
140
- end
141
-
142
- if(config && config.respond_to?(:to_hash) )
143
- config.default = nil
144
- if cn
145
- config = config[cn.to_sym]
146
- else
147
- config = config[self.class.name.to_sym]
148
- end
149
-
150
- if(config )
151
- if(config.respond_to?(:to_ary) && config.size == 2)
152
- @level, @target = config
153
- @target.downcase!
154
- logdir = File.dirname(@target)
155
- msg = file_check(logdir, :exist?, :directory?, :writable?)
156
- if(msg)
157
- STDERR.puts "WARNING! A logfile for '%s' cannot be written to %s (%s)!" %[self.class.name, logdir, msg]
158
- @target = nil
159
- end
160
- else
161
- @level = config
162
- end
163
- end
164
- end
165
- end
166
- end
167
-
168
- ######### test
169
- if __FILE__ == $0
170
- class TClass
171
- # class level ---->
172
- self.extend(Logging)
173
- @@log = init_logger(STDOUT, Logger::INFO)
174
- # <------
175
- # object-level ---->
176
- include Logging
177
- # <---------
178
-
179
- def test_log
180
- @@log.info('class-level logger called from instance: ' << @@log.to_s)
181
- #@log = @@log # works too
182
- @log = TClass.class_eval{@log}
183
- @log.info('AGAIN: class-level logger called from instance: ' << @log.to_s)
184
- @log.debug("you won't see this on log-level INFO")
185
-
186
- # object-level ---->
187
- init_logger
188
- # <-----------
189
- @log.info("That's a different thing: " << @log.to_s << " - object-level logger!")
190
-
191
- end
192
- def self::test_log
193
- @log.info('class-level logger called from class: ' << @log.to_s)
194
- @@log.info('AGAIN: class-level logger called from class: ' << @log.to_s)
195
- end
196
- end
197
-
198
- TClass.new.test_log # class-logger + 1st object-logger
199
- TClass.new.test_log # same class-logger + 2nd object-logger
200
-
201
- TClass::test_log # same class-logger
202
- puts 'And just say it once clearly: THIS IS COOOL!!'
203
- end
204
- #EOF