perception 0.1.5

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/demo/demo_zz.rb ADDED
@@ -0,0 +1,332 @@
1
+
2
+ if $0 == __FILE__
3
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'perception' )
4
+ else
5
+ require 'perception'
6
+ end
7
+
8
+
9
+ module Perception #:nodoc
10
+
11
+ class DemoSee
12
+ @@initialized_count = 0
13
+
14
+ def initialize( announce_first=true )
15
+ @@initialized_count += 1
16
+ return if (@@initialized_count == 1 && !announce_first)
17
+ seee.fast!
18
+ #seee.left!
19
+ seee.indent!
20
+ see ("\n" * 5) if @@initialized_count > 1
21
+ see "Perception Demo ##{@@initialized_count}"
22
+ see "=================="
23
+ see
24
+ wait_for_key('Press any key to start')
25
+ end # def
26
+
27
+
28
+
29
+ # Printing basic types
30
+ def demo_see_basic_types
31
+ see '1dim Arrays:'
32
+ see a=['this','is','an','array','1']
33
+ see b=['this','is','another','array','2']
34
+ see c=['and','this','is','another', :tree]
35
+ see d=['complex array', [1,2,3], {:key => :value, :love => :baby}, 4.0, :four]
36
+ see d=['next','is','two','blank', 'lines']
37
+ see
38
+ see
39
+ see '2dim Arrays'
40
+ see [a,b,c,d]
41
+ see
42
+ see
43
+ see 'Other Objects:'
44
+ see []
45
+ see 'ordinary string (without "")'
46
+ see '(next one is empty)'
47
+ see ''
48
+ see 1
49
+ see 2
50
+ see 3.0
51
+ see nil
52
+ see true
53
+ see false
54
+ see :a_symbol
55
+ see({:key => :value, :love => :baby})
56
+ see ['complex array', [1,2,3], {:key => :value, :love => :baby}, 3.0 , '']
57
+ end # def
58
+
59
+
60
+ def demo_level
61
+ seee.slow!
62
+ see "The printout is automaticaly indented. This is the printout of a nested structure of #see's:"
63
+ see
64
+ see
65
+ seee.indent!
66
+ sub_demo_level
67
+ see
68
+ see
69
+ wait_for_key
70
+ see 'You can force left printout with seee.left!. Reactivate indention with seee.indent!.'
71
+ seee.left!
72
+ see
73
+ see
74
+ sub_demo_level
75
+ end
76
+
77
+
78
+ def sub_demo_level
79
+ see "Hello world. This is level zero. "
80
+ (1..1).each do
81
+ see "This is the beginning of level one."
82
+ 1.downto(1) do
83
+ see "This is the beginning of level two."
84
+ 1.upto(1) do
85
+ see "This is the beginning of level three."
86
+ 1.times do
87
+ see "This is the beginning of level four."
88
+ see "This is the end of level four."
89
+ end
90
+ see "This is the end of level three."
91
+ end
92
+ see "This is the end of level two."
93
+ end
94
+ see "This is the end of level one."
95
+ end
96
+ see "This is level zero again. Bye. "
97
+ end # def
98
+
99
+
100
+
101
+
102
+
103
+
104
+ # slow printing
105
+ def demo_see_slowdown1
106
+ seee.slow!
107
+ see 'This is a string'
108
+ see 'and here we have a longer one.'
109
+ see 'so we need even longeer strings, but they all have to be different.'
110
+ see '#see has forgotten the first string. So I will tell him again: This is a string. and here we have a longer one. '
111
+ see 'In slow mode #see waits for you to read the lines. More words, longer waiting.'
112
+ see 'short prints...'
113
+ see '...short waiting.'
114
+ see 'short prints...'
115
+ see '...short waiting.'
116
+ string = 'This string is getting longer.'
117
+ (1..10).each do |i|
118
+ see string
119
+ string += ' But it repeats.'
120
+ end
121
+ see '#see only counts those words you have to read.'
122
+ see 'You can choose the speed. This is faster:'
123
+
124
+ wait_for_key
125
+ see
126
+ seee.slow!(0.5)
127
+ see 'This is a string'
128
+ see 'and here we have a longer one.'
129
+ see 'so we need even longeer strings, but they all have to be different.'
130
+ see '#see has forgotten the first string. So I will tell him again: This is a string. and here we have a longer one. '
131
+ see 'In slow mode #see waits for you to read the lines. More words, longer waiting.'
132
+ see 'short prints...'
133
+ see '...short waiting.'
134
+ see '...short waiting.'
135
+ string = 'This string is getting longer.'
136
+ (1..10).each do |i|
137
+ see string
138
+ string += ' But it repeats.'
139
+ end
140
+ see '#see only counts those words you have to read.'
141
+ see
142
+ end
143
+
144
+
145
+ def demo_see_slowdown2
146
+ seee.slow!
147
+ (1..8).each do |i|
148
+ see "#{i} see this "
149
+ end
150
+ (1..8).each do |i|
151
+ see "#{i} see that "
152
+ sleep 0.05
153
+ end
154
+ see 'The speed was always the same, but each "see that" took double the time.'
155
+ see '#see knows the time since last print.'
156
+ see 'You can use this for simple benchmarking:'
157
+ end
158
+
159
+
160
+ # Simple benchmarking
161
+ def demo_bench
162
+ see "I'm counting to 10 000 000, please wait."
163
+ 10000000.downto(0) {}
164
+ see "it took #{seee.bench} seconds."
165
+ see 'You always get the time since last print with seee.bench.'
166
+ end
167
+
168
+
169
+ # temporary printing
170
+ def demo_see_temp_and_clear_last
171
+ seee.slow!
172
+ see_print "countdown: "
173
+ 10.downto(0) do |i|
174
+ see_temp i
175
+ end
176
+ see 'finished!'
177
+ sleep 1
178
+ seee.clear!
179
+ see 'You can clear the last print with seee.clear!'
180
+ see 'And you can print temporary informations with see_temp'
181
+ end
182
+
183
+
184
+ # print two informations on one line
185
+ def demo_see_flash1
186
+ seee.fast!
187
+ (1..1000).each do |i|
188
+ see "I am line number #{i}. Waiting for line number 327."
189
+ seee.flash! if i == 327
190
+ end
191
+ see 'You can make the last printout blink with seee.flash!'
192
+ end
193
+
194
+
195
+ # print two informations on one line
196
+ def demo_alternate_see
197
+ see ['this','is','an','array',:one]
198
+ see ['this','is','an','array',:two]
199
+ see ['this','is','an','array',:three]
200
+ see ['this', [1,2,3], {:wEDSG => :DZHe5D, :DShg => :DGStdf}, 4.0, :four]
201
+ seee.flash! ' Hoops!! '
202
+ see ['this','is','an','array',:five]
203
+ see ['this','is','an','array',:six]
204
+ see ['this','is','an','array',:seven]
205
+ end
206
+
207
+
208
+ def demo_flash_puts
209
+ see 'Bla Bla '
210
+ see 'Bla Bla '
211
+ see 'Bla Bla '
212
+ see 'Bla Bla '
213
+ see 'Bla Bla '
214
+ see 'Bla Bla '
215
+ see 'Bla Bla '
216
+ see 'Bla Bla '
217
+ see 'Important'
218
+ seee.flash!
219
+ see 'Bla Bla '
220
+ see 'Bla Bla '
221
+ see 'Bla Bla '
222
+ see 'Bla Bla '
223
+ see 'Bla Bla '
224
+ see 'Bla Bla '
225
+ see 'Bla Bla '
226
+ see 'Bla Bla '
227
+ end
228
+
229
+
230
+ def demo_flash_pp
231
+ see_pp 'Bla Bla '
232
+ see_pp 'Bla Bla '
233
+ see_pp 'Bla Bla '
234
+ see_pp 'Bla Bla '
235
+ see_pp 'Bla Bla '
236
+ see_pp 'Bla Bla '
237
+ see_pp 'Bla Bla '
238
+ see_pp 'Bla Bla '
239
+ see_pp 'Important '
240
+ seee.flash!
241
+ see_pp 'Bla Bla '
242
+ see_pp 'Bla Bla '
243
+ see_pp 'Bla Bla '
244
+ see_pp 'Bla Bla '
245
+ see_pp 'Bla Bla '
246
+ see_pp 'Bla Bla '
247
+ see_pp 'Bla Bla '
248
+ see_pp 'Bla Bla '
249
+ end
250
+
251
+
252
+ def demo_flash_print
253
+ see_print 'Bla Bla '
254
+ see_print 'Bla Bla '
255
+ see_print 'Bla Bla '
256
+ see_print 'Bla Bla '
257
+ see_print 'Bla Bla '
258
+ see_print 'Bla Bla '
259
+ see_print 'Bla Bla '
260
+ see_print 'Bla Bla '
261
+ see_print 'Important '
262
+ seee.flash!
263
+ see_print 'Bla Bla '
264
+ see_print 'Bla Bla '
265
+ see_print 'Bla Bla '
266
+ see_print 'Bla Bla '
267
+ see_print 'Bla Bla '
268
+ see_print 'Bla Bla '
269
+ see_print 'Bla Bla '
270
+ see_print 'Bla Bla '
271
+ end
272
+
273
+
274
+ def demo_noinput
275
+ method = :see
276
+ seee.slow!
277
+ Object.send(method, 'Hallo')
278
+ Object.send(method)
279
+ Object.send(method, 'Welt')
280
+ Object.send(method)
281
+ Object.send(method, 'Double')
282
+ Object.send(method)
283
+ Object.send(method)
284
+ Object.send(method, 'Space')
285
+ Object.send(method)
286
+ Object.send(method)
287
+ Object.send(method, 'Blubb')
288
+ Object.send(method)
289
+ Object.send(method)
290
+ Object.send(method, 'Blubb!!')
291
+ end
292
+
293
+
294
+
295
+
296
+ def self.see_all_demos
297
+ Perception::DemoSee.new.demo_see_basic_types
298
+ Perception::DemoSee.new.demo_level
299
+ Perception::DemoSee.new.demo_see_slowdown1
300
+ Perception::DemoSee.new.demo_see_slowdown2
301
+ Perception::DemoSee.new.demo_bench
302
+ Perception::DemoSee.new.demo_see_temp_and_clear_last
303
+ Perception::DemoSee.new.demo_see_flash1
304
+ Perception::DemoSee.new.demo_alternate_see
305
+
306
+ Perception::DemoSee.new.demo_flash_puts
307
+ Perception::DemoSee.new.demo_flash_pp
308
+ Perception::DemoSee.new.demo_flash_print
309
+ Perception::DemoSee.new.demo_noinput
310
+ end
311
+
312
+
313
+
314
+ end # class
315
+ end # class
316
+
317
+
318
+ if $0 == __FILE__ then
319
+
320
+ Perception::DemoSee.see_all_demos
321
+
322
+ end
323
+
324
+
325
+
326
+
327
+
328
+
329
+
330
+
331
+
332
+
data/init.rb ADDED
@@ -0,0 +1,2 @@
1
+
2
+ require File.join(File.dirname(__FILE__), 'lib', 'perception.rb' )
@@ -0,0 +1,78 @@
1
+
2
+ require File.join(File.dirname(__FILE__), '..', 'perception' ) if $0 == __FILE__
3
+
4
+ module Perception #:nodoc
5
+
6
+ unless defined?(TIME_FORMATS)
7
+ TIME_FORMATS = {
8
+ # 0 1 2 3 4
9
+ :iso => [ '%Y-%m-%d', '%Y-%m-%d %H:%M', '%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S', '%Y-%m-%d %A %H:%M:%S' ],
10
+ :de => [ '%d.%b.%Y', '%d.%b.%Y %H:%M', '%d.%b.%Y %H:%M:%S', '%d. %B %Y %H:%M:%S', '%A, %d. %B %Y %H:%M:%S' ] # %e is not working
11
+ }
12
+ end
13
+
14
+
15
+
16
+
17
+ # Shows a ruler
18
+ unless defined? RULER
19
+ r100= "0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999"
20
+ r10= "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
21
+ RULER = r100 + r100 + "\n" + r10 + r10
22
+ end
23
+
24
+
25
+ SEE_PERCEPTION_TIME_PER_WORD = 200 unless defined? SEE_PERCEPTION_TIME_PER_WORD
26
+
27
+ # automatic indention
28
+ SEE_TAB_WIDTH = 2 unless defined? SEE_TAB_WIDTH
29
+ SEE_LEVEL_START = 1 unless defined? SEE_LEVEL_START
30
+ SEE_INDENT_START = false unless defined? SEE_INDENT_START
31
+
32
+
33
+ # nicht verwenden: 07..13, 27
34
+ PPP_KOMMA = 1.chr unless defined? PPP_KOMMA
35
+ PPP_SEARCH = 2.chr unless defined? PPP_SEARCH
36
+ PPP_GESCHW_KLAMMER_AUF = 3.chr unless defined? PPP_GESCHW_KLAMMER_AUF
37
+ PPP_GESCHW_KLAMMER_ZU = 4.chr unless defined? PPP_GESCHW_KLAMMER_ZU
38
+ PPP_ECKIGE_KLAMMER_AUF = 5.chr unless defined? PPP_ECKIGE_KLAMMER_AUF
39
+ PPP_ECKIGE_KLAMMER_ZU = 6.chr unless defined? PPP_ECKIGE_KLAMMER_ZU
40
+ PPP_SPITZE_KLAMMER_AUF = 14.chr unless defined? PPP_SPITZE_KLAMMER_AUF
41
+ PPP_SPITZE_KLAMMER_ZU = 15.chr unless defined? PPP_SPITZE_KLAMMER_ZU
42
+ PPP_PFEIL = 16.chr+16.chr unless defined? PPP_PFEIL
43
+ PPP_TUDDELCHEN1 = 17.chr unless defined? PPP_TUDDELCHEN1
44
+ PPP_TUDDELCHEN2 = 18.chr unless defined? PPP_TUDDELCHEN2
45
+ PPP_ANTI_NEWLINE = 31.chr unless defined? PPP_ANTI_NEWLINE
46
+
47
+
48
+
49
+
50
+ # codieren: P => Q, in P fehlen derzeit die spitzen Klammern, weil sonst Hash nicht funktioniert
51
+ # decodieren: Q => R
52
+ PPP_TR_ARRAY_P = %q{'"{}[]<>} unless defined? PPP_TR_ARRAY_P
53
+ unless defined? PPP_TR_ARRAY_Q
54
+ PPP_TR_ARRAY_Q = PPP_TUDDELCHEN1 + PPP_TUDDELCHEN2 +
55
+ PPP_GESCHW_KLAMMER_AUF + PPP_GESCHW_KLAMMER_ZU +
56
+ PPP_ECKIGE_KLAMMER_AUF + PPP_ECKIGE_KLAMMER_ZU +
57
+ PPP_SPITZE_KLAMMER_AUF + PPP_SPITZE_KLAMMER_ZU
58
+ end
59
+ PPP_TR_ARRAY_R = %q{'"{}[]<>} unless defined? PPP_TR_ARRAY_R
60
+
61
+ PPP_TR_ALL = PPP_TR_ARRAY_Q + PPP_KOMMA + PPP_ANTI_NEWLINE unless defined? PPP_TR_ALL
62
+
63
+
64
+
65
+
66
+ end # module
67
+
68
+
69
+
70
+ # -----------------------------------------------------------------------------------------
71
+ # ausprobieren
72
+ #
73
+ if $0 == __FILE__ then
74
+
75
+ require File.join(File.dirname(__FILE__), '..', '..', 'demo', 'demo_pp' )
76
+ Perception::DemoSee.see_all_demos
77
+
78
+ end # if
@@ -0,0 +1,78 @@
1
+
2
+ require File.join(File.dirname(__FILE__), '..', 'perception' ) if $0 == __FILE__
3
+
4
+
5
+ module Perception #:nodoc
6
+ module TimeI
7
+
8
+
9
+ def inspect_see(options={})
10
+ norm = options[:norm] || :iso
11
+ precision_max = 4
12
+ precision = options[:precision] || precision_max
13
+ precision = 0 if precision < 0
14
+ precision = precision_max if precision > precision_max
15
+ formatstring = TIME_FORMATS[norm][precision]
16
+ self.strftime(formatstring)
17
+ end
18
+
19
+
20
+
21
+
22
+ def to_s
23
+ self.inspect_see(:precision => 5)
24
+ end
25
+
26
+
27
+ def pretty_print(q)
28
+ q.text(self.inspect_see(:precision => 5))
29
+ end
30
+
31
+
32
+ end # module TimeI
33
+ end # module Perception
34
+
35
+
36
+
37
+
38
+ class Time #:nodoc:
39
+ include Perception::TimeI
40
+ end
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+ # -----------------------------------------------------------------------------------------
51
+ # Tests
52
+ #
53
+ if $0 == __FILE__ then
54
+
55
+ # ms = 2635200
56
+ # puts (Time.now - ms*0).inspect_see(:norm => :de, :precision => 5)
57
+ # see Time.now
58
+
59
+ require File.join(File.dirname(__FILE__), '..', '..', 'test', 'test_date_and_time' )
60
+
61
+
62
+ end # if
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
@@ -0,0 +1,123 @@
1
+
2
+ require File.join(File.dirname(__FILE__), '..', 'perception' ) if $0 == __FILE__
3
+
4
+
5
+ module Perception #:nodoc
6
+
7
+ class SeeSession
8
+
9
+ def logger( logdir=nil, filename='see.log' )
10
+ return @logger if @logger
11
+ require 'logger' unless defined?(Logger)
12
+
13
+ # Logfile festlegen
14
+ unless logdir
15
+ mycaller = CallerUtils.mycaller(:skip => ['perception', 'ruby\gems', 'ruby/gems', 'test/unit'])
16
+ logdir = CallerUtils.mycaller_maindir(mycaller) + '/log' if mycaller
17
+ end
18
+ if ( logdir.nil? || logdir == 'test/log' )
19
+ require 'tmpdir'
20
+ logdir = Dir::tmpdir + '/log'
21
+ end
22
+ logfile = File.join(logdir, filename)
23
+ # puts "\nmycaller=#{mycaller.inspect_pp}"
24
+ # puts "\nlogdir=#{logdir.inspect_pp}"
25
+ # puts "\nlogfile=#{logfile.inspect_pp}"
26
+
27
+
28
+ # Erzeugen, wenn nötig
29
+ begin
30
+ # Dir erzeugen
31
+ unless File.exist?(logdir)
32
+ Dir.mkdir(logdir)
33
+ puts "\n\nSeeSession#logger: Directory #{logdir} created\n\n"
34
+ end
35
+ # File erzeugen
36
+ unless File.exist?(logfile)
37
+ File.open(logfile,(File::WRONLY | File::APPEND | File::CREAT))
38
+ log_status("Logfile created by #{mycaller}")
39
+ end
40
+ #Logger erzeugen
41
+ @logger = Logger.new( logfile )
42
+ log_level = :debug
43
+ @logger.level = Logger.const_get(log_level.to_s.upcase)
44
+ @logger << "\n" # dem letzten Eintrag fehlt vielleicht das newline
45
+ #rescue
46
+
47
+ end
48
+
49
+ return @logger
50
+ end # def
51
+
52
+
53
+
54
+ def log_status(message='')
55
+ status = "\n\n\n# " + ('-'*120) + "\n"
56
+ status += "# " + Time.now.inspect_see + "\n"
57
+ status += "# " + message + "\n"
58
+ logger << status
59
+ end
60
+
61
+
62
+ end # class
63
+
64
+
65
+ end # module
66
+
67
+
68
+ class Object
69
+
70
+ # Same as method see, but outputs in logfile only
71
+ def log(input=:kein_input, *rest)
72
+ out_bak = seee.out.dup
73
+ seee.out=[:log]
74
+ if rest.empty?
75
+ see input
76
+ else
77
+ seee.process_print( ( [input] + rest), :method => :multi )
78
+ end
79
+ seee.out=out_bak
80
+ nil
81
+ end
82
+
83
+
84
+ # raw output into logfile
85
+ def rawlog(input='')
86
+ seee.logger << (input)
87
+ nil
88
+ end
89
+
90
+
91
+ end
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+ # ------------------------------------------------------------------------------
100
+ # Ausprobieren
101
+ #
102
+ if $0 == __FILE__ then
103
+
104
+
105
+ see "Hallo"
106
+ see 'Jups.', :g, :h
107
+ #seee.log_status
108
+ log 'Jups.'
109
+ log 'Jups.', :g, :h
110
+
111
+
112
+
113
+ end # if
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+
122
+
123
+