term_note 0.0.1

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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/testing.rb +527 -0
  3. metadata +44 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 18cc749d193c1eaff54a5d90659cd44a3c1efd5e198ea798bdd7571ae9b29376
4
+ data.tar.gz: 3feeb08908a4c0c6a7f73a4fc840b7b8a36f791dd4b4fbb25bcc7f906192fdc8
5
+ SHA512:
6
+ metadata.gz: 46a47c4114dddef08df354c0185672a6a99ed6be87fcfcf0223f2525a42c76bd9176a19f4af476a9dbf9902dcbaf756a405342e29d3a2547d449ec13e13a7579
7
+ data.tar.gz: a6824ebd926c9186e6dfc20a3c61899b09f065a8e6fb0e97cc9335de7eaecddf5dac06e5380f984fecdd1d3d9f148697511a1b87a8a97c47cae09cbe6414fdaa
data/lib/testing.rb ADDED
@@ -0,0 +1,527 @@
1
+ require 'test/unit'
2
+ require 'method_source'
3
+ require 'colorize'
4
+
5
+ class MyList
6
+
7
+ def initialize(a = [])
8
+ @list = a
9
+ end
10
+
11
+ def contents
12
+ @list
13
+ end
14
+
15
+ def append(a)
16
+ @list.append(a)
17
+ end
18
+
19
+ def find_first_position_of(a)
20
+ i = 0
21
+ position = nil
22
+ while i < @list.length
23
+ if @list[i] == a
24
+ position = i
25
+ break
26
+ end
27
+ i += 1
28
+ end
29
+ return position
30
+ end
31
+
32
+ def find_positions_of(a)
33
+ positions = []
34
+ i = 0
35
+ while i < @list.length
36
+ if @list[i] == a
37
+ positions.append i
38
+ end
39
+ i += 1
40
+ end
41
+ return positions
42
+ end
43
+
44
+ def maximum
45
+ i = 0
46
+ max = @list[0]
47
+ while i < @list.length
48
+ if @list[i] > max
49
+ max = @list[i]
50
+ end
51
+ i += 1
52
+ end
53
+ return max
54
+ end
55
+
56
+ def minimum_wrong
57
+ i = 0
58
+ min = @list[0]
59
+ while i < @list.length
60
+ if @list[i] > min
61
+ min = @list[i]
62
+ end
63
+ i += 1
64
+ end
65
+ return min
66
+ end
67
+
68
+ def minimum_correct
69
+ i = 0
70
+ min = @list[0]
71
+ while i < @list.length
72
+ if @list[i] < min
73
+ min = @list[i]
74
+ end
75
+ i += 1
76
+ end
77
+ return min
78
+ end
79
+
80
+ def min_max_slow
81
+ [minimum, maximum]
82
+ end
83
+
84
+ def min_max_fast
85
+ i = 0
86
+ min = @list[0]
87
+ max = @list[0]
88
+ while i < @list.length
89
+ min = @list[i] if @list[i] < min
90
+ max = @list[i] if @list[i] > max
91
+ i += 1
92
+ end
93
+ [min, max]
94
+ end
95
+
96
+ def self.set_slow
97
+ alias_method :min_max, :min_max_slow
98
+ end
99
+
100
+ def self.set_fast
101
+ alias_method :min_max, :min_max_fast
102
+ end
103
+
104
+ def self.set_wrong
105
+ alias_method :minimum, :minimum_wrong
106
+ end
107
+
108
+ def self.set_correct
109
+ alias_method :minimum, :minimum_correct
110
+ end
111
+
112
+ self.set_fast
113
+ self.set_correct
114
+
115
+ end
116
+
117
+ if ARGV[0] =~ /RUN_TESTS/
118
+ class MyListClassTests < Test::Unit::TestCase; end
119
+ else
120
+ class MyListClassTests; end
121
+ end
122
+
123
+ MyList.set_slow if ARGV[0] =~ /SLOW/
124
+ MyList.set_wrong if ARGV[0] =~ /WRONG/
125
+
126
+ class MyListClassTests
127
+ def self.in_sequence(sequence)
128
+ ARGV[0] =~ /#{sequence}/ || ARGV[0].nil? || ARGV[0] =~ /RECORD/
129
+ end
130
+
131
+ if in_sequence('T1')
132
+ def test_new
133
+ assert_kind_of MyList, MyList.new([1, 2, 3])
134
+ end
135
+ end
136
+ if in_sequence('T2')
137
+ def test_contents
138
+ assert_equal [1, 2, 3], MyList.new([1, 2, 3]).contents
139
+ end
140
+ end
141
+ if in_sequence('T3')
142
+ def test_append
143
+ my_list = MyList.new([1, 2, 3])
144
+ my_list.append(4)
145
+ assert_equal [1, 2, 3, 4], my_list.contents
146
+ assert_includes my_list.contents, 4
147
+ end
148
+ end
149
+ if in_sequence('T4')
150
+ def test_find_first_position_of
151
+ my_list = MyList.new([1, 2, 3, 2, 5])
152
+ assert_equal 1, my_list.find_first_position_of(2)
153
+ assert_equal 0, my_list.find_first_position_of(1)
154
+ assert_equal 4, my_list.find_first_position_of(5)
155
+ end
156
+ end
157
+
158
+ if in_sequence('T5')
159
+ def test_find_positions_of
160
+ my_list = MyList.new([1, 2, 3, 2, 5])
161
+ assert_equal [1, 3], my_list.find_positions_of(2)
162
+ assert_equal [0], my_list.find_positions_of(1)
163
+ assert_equal [4], my_list.find_positions_of(5)
164
+ end
165
+ end
166
+ if in_sequence('T6')
167
+ def test_maximum
168
+ my_list = MyList.new([1, 2, 3, 2, 5, 16, 7, 12])
169
+ assert_equal 16, my_list.maximum
170
+ my_list = MyList.new([12, 2, 33, 2, 5, 16, 7, 12])
171
+ assert_equal 33, my_list.maximum
172
+ end
173
+ end
174
+ if in_sequence('T7')
175
+ def test_minimum
176
+ my_list = MyList.new([1, 2, 3, 2, 5, 16, 7, 12])
177
+ assert_equal 1, my_list.minimum
178
+ my_list = MyList.new([12, 1, 2, 3, 2, 25, 16, 7])
179
+ assert_equal 1, my_list.minimum
180
+ end
181
+ end
182
+ if in_sequence('T8')
183
+ def test_min_max
184
+ my_list = MyList.new([1, 2, 3, 2, 5, 16, 7, 12])
185
+ assert_equal [1, 16], my_list.min_max
186
+ my_list = MyList.new([12, 2, 33, 2, 5, 16, 7, 12])
187
+ assert_equal [2, 33], my_list.min_max
188
+ my_list = MyList.new([12, 1, 2, 3, 2, 25, 16, 7])
189
+ assert_equal [1, 25], my_list.min_max
190
+ end
191
+ end
192
+ end
193
+
194
+ if ARGV[0] !~ /RUN_TESTS/
195
+ class Term
196
+ class << self
197
+ attr_reader :height, :width
198
+ end
199
+
200
+ def self.get_terminal_size
201
+ @height, @width = [Integer(`tput li`), Integer(`tput co`)]
202
+ end
203
+
204
+ get_terminal_size
205
+ Signal.trap("WINCH") do
206
+ get_terminal_size
207
+ puts "New Size: #{@height} X #{@width}"
208
+ end
209
+ end
210
+
211
+ class Presentation
212
+ attr_reader :current
213
+
214
+ def initialize(first_slide = 1)
215
+ self.current = @current = first_slide
216
+ end
217
+
218
+ def current=(position)
219
+ if position < 1
220
+ @current = 1
221
+ elsif position > size
222
+ @current = size
223
+ else
224
+ @current = position
225
+ end
226
+ end
227
+
228
+ def play
229
+ while current <= size
230
+ display_slide
231
+ key = STDIN.gets.chomp
232
+ case key
233
+ when 'b'
234
+ self.current -= 1
235
+ when /[0-9][0-9]*/
236
+ self.current = key.to_i
237
+ when 'q'
238
+ exit
239
+ when 'h', '?'
240
+ print_help
241
+ else
242
+ self.current += 1
243
+ end
244
+ system('clear')
245
+ end
246
+ end
247
+
248
+ def record # requires MacOS + ImageMagick
249
+ (1..size).each do |index|
250
+ self.current = index
251
+ display_slide
252
+ sleep 1
253
+ `screencapture slide_#{"%04d" % (index)}.png`
254
+ end
255
+ `convert slide_*.png presentation.pdf`
256
+ end
257
+
258
+ def print_help
259
+ system('clear')
260
+ puts "Press... to:"
261
+ puts "h,? print this help"
262
+ puts "q quit"
263
+ puts "<number> go to slide <number>"
264
+ puts "<enter> go to next slide"
265
+ puts "b go to previous slide"
266
+ puts "Run... to:"
267
+ puts "ruby #{$0} RECORD, to generate pdf of presentation"
268
+ STDIN.gets.chomp
269
+ end
270
+
271
+ def slides
272
+ @slides ||= self.class.public_instance_methods(true).
273
+ grep(/\Aslide_/).
274
+ map(&:to_s).
275
+ sort_by { |s| s.split('_').last.to_i }.
276
+ map(&:to_sym)
277
+ end
278
+
279
+ def size
280
+ slides.size
281
+ end
282
+
283
+ def display_slide
284
+ center(self.send(@slides[@current - 1]))
285
+ end
286
+
287
+ def split_screen
288
+ ["", "", "", "#underline", "", "", ""]
289
+ end
290
+
291
+ def center(slide)
292
+ lines = slide.size
293
+ blank = Term.height - lines
294
+ half, rest = blank.divmod(2)
295
+
296
+ puts "\n" * half
297
+
298
+ slide.each do |l|
299
+ content, format = l.split('#')
300
+ content ||= l
301
+ format = (format || '').split('.')
302
+ display = format.include?('CODE') ? content.ljust(Term.width - 10) : content.center(Term.width)
303
+ result = (format - ['CODE']).inject(display) do |res, f|
304
+ res.send(f.to_sym)
305
+ end
306
+ puts result
307
+ end
308
+ puts "\n" * (half + rest - 1)
309
+ rescue ArgumentError => e
310
+ "Παρακαλώ μεγαλώστε το παράθυρο για εμφανιστεί η σελίδα..."
311
+ puts "Error: #{e.message}"
312
+ puts e.backtrace
313
+ puts ["lines:", lines, "height:", Term.height, "width:", Term.width, "blank:", blank, "half:", half, "rest:", rest].join(" ")
314
+ @current -= 1
315
+ ensure
316
+
317
+ pager = "Slide: %d / %d >" % [current, size]
318
+ prompt = "b: back one,<number>: goto slide, <enter>: next, h,?: help, q: quit"
319
+ printf prompt + pager.rjust(Term.width - prompt.size - 3)
320
+
321
+ end
322
+
323
+ def run_tests(sequence)
324
+ ['Run Tests'] +
325
+ if ARGV[0] !~ /RUN_TESTS/
326
+ `ruby testing.rb #{['RUN_TESTS', sequence].join('_')}`
327
+ end.split("\n").map { |c| c + '#CODE' }
328
+ end
329
+
330
+ def method_source(class_name,method,hide = //)
331
+ ["class #{class_name.to_s}", ""] +
332
+ class_name.
333
+ instance_method(method).
334
+ source.
335
+ gsub(hide,'').
336
+ split("\n").
337
+ map { |c| c + '#CODE' }
338
+ end
339
+ def self.define_slide_sequence(class_name, method, test_class_name, test_method, test_sequence, variant = nil)
340
+ if class_name
341
+ define_slide(variant: variant, class_name: class_name) do
342
+ method_source(class_name,method,/_slow|_fast|_wrong|_correct/)
343
+ end
344
+ define_slide { run_tests(test_sequence.split('_')[0..-2].join('_')) }
345
+ end
346
+ if test_class_name
347
+ define_slide(include: class_name ? -2 : 0){method_source(test_class_name,test_method) }
348
+ define_slide { run_tests(test_sequence) }
349
+ end
350
+ end
351
+
352
+ def self.define_slide(include: 0, variant: nil, class_name: nil, &contents)
353
+ @@slide_counter += 1
354
+ slide = proc { |number| self.send("slide_#{number}".to_sym) }
355
+ define_method "slide_#{@@slide_counter}".to_sym do
356
+ instance_eval("#{class_name}.send(:#{variant.to_s})") if variant
357
+ current_number = __method__.to_s.split('_').last.to_i
358
+ (include != 0 ? instance_exec(current_number + include, &slide) : []) +
359
+ instance_exec(&contents)
360
+ end
361
+ end
362
+
363
+ @@slide_counter = 0
364
+
365
+ define_slide { [
366
+ "Unit Testing", "",
367
+ "Πως μπορούμε να εξασφαλίσουμε την ορθότητα των προγραμμάτων;"
368
+ ] }
369
+
370
+ define_slide { ["Παντελέλης Μιχάλης#light_magenta",
371
+ "email: mpantel@aegean.gr#magenta", "",
372
+ "Ηλεκτρολόγος Μηχανικός & Μηχανικός Η/Υ#magenta", "",
373
+ "Ειδικός Λογαριασμός Ερευνας Π.Αιγαίου",
374
+ "Προϊστάμενος Τμήματος Διαχείρισης Πληροφοριακών Συστημάτων"]
375
+ }
376
+
377
+ define_slide{["Μπορούμε να αποδείξουμε ότι ένα πρόγραμμα είναι ορθό;"]}
378
+ define_slide(include:-1){["", "", "Για οποιαδήποτε είσοδο;"]}
379
+ define_slide(include:-1){["", "", "Αυτοματοποιημένα;"]}
380
+ define_slide{["Με το ερώτημα αυτό ασχολήθηκαν από τις αρχές του περασμένου αιώνα..."]}
381
+
382
+ #David Hilbert (https://en.wikipedia.org/wiki/David_Hilbert)
383
+ #His attempt to support axiomatized mathematics with definitive principles, which could banish theoretical uncertainties, ended in failure.
384
+ # (Entscheidungsproblem, 1928
385
+ define_slide(include:-1){["", "", "Ο David Hilbert (https://en.wikipedia.org/wiki/David_Hilbert):", "",
386
+ "Σχεδίαζε να ορίσει αξιώματα με τα οποία να μπορούμε να αποδείξουμε",
387
+ "υποθέσεις σε διάφορα μαθηματικά συστήματα (1900)", "",
388
+ "Στόχος: Η πληρότητα και η συνέπεια..."]}
389
+
390
+ #Kurt Gödel (https://en.wikipedia.org/wiki/Kurt_G%C3%B6del)
391
+ # Gödel demonstrated that any non-contradictory formal system, which was comprehensive enough to include at least arithmetic,
392
+ # cannot demonstrate its completeness by way of its own axioms. In 1931 his incompleteness theorem showed that Hilbert's
393
+ # grand plan was impossible as stated. The second point cannot in any reasonable way be combined with the first point,
394
+ # as long as the axiom system is genuinely finitary.
395
+ #Nevertheless, the subsequent achievements of proof theory at the very least clarified consistency
396
+ # as it relates to theories of central concern to mathematicians.
397
+ # Hilbert's work had started logic on this course of clarification; the need to understand Gödel's work then
398
+ # led to the development of recursion theory and then mathematical logic as an autonomous discipline in the 1930s.
399
+ # The basis for later theoretical computer science, in the work of Alonzo Church and Alan Turing, also grew directly out of this 'debate'.
400
+
401
+ define_slide(include:-2){["", "", "Ο Kurt Gödel (https://en.wikipedia.org/wiki/Kurt_G%C3%B6del):", "",
402
+ "Απέδειξε το θεώρημα της ΜΗ πληρώτητας (1931)#bold", "",
403
+ "Οπότε τα σχέδια του Hilbert ναυάγησαν :-("]}
404
+
405
+
406
+ #Alan Turing (https://en.wikipedia.org/wiki/Alan_Turing)
407
+ #Turing's proof (https://en.wikipedia.org/wiki/Turing%27s_proof)
408
+ #https://en.wikipedia.org/wiki/Halting_problem
409
+ #In computability theory, the halting problem is the problem of determining, from a description of an arbitrary
410
+ # computer program and an input, whether the program will finish running, or continue to run forever.
411
+ # Alan Turing proved in 1936 that a general algorithm to solve the halting problem for all possible program-input
412
+ # pairs cannot exist. For any program f that might determine if programs halt, a "pathological" program g called
413
+ # with an input can pass its own source and its input to f and then specifically do the opposite of
414
+ # what f predicts g will do. No f can exist that handles this case. A key part of the proof was a mathematical
415
+ # definition of a computer and program, which became known as a Turing machine; the halting problem is undecidable
416
+ # over Turing machines. Turing's proof is one of the first cases of decision problems to be concluded.
417
+ # The theoretical conclusion that it is not solvable is significant to practical computing efforts, defining
418
+ # a class of applications which no programming invention can possibly perform perfectly.
419
+
420
+ define_slide(include:-3){["", "", "O Alan Turing (https://en.wikipedia.org/wiki/Alan_Turing):", "", "",
421
+ "Απέδειξε ότι ΔΕΝ υπάρχει αλγόριθμος που να αποφασίζει πάντα και σωστά", "",
422
+ "για ένα οποιοδήποτε πρόγραμμα και την είσοδό του", "",
423
+ "αν το πρόγραμμα θα σταματήσει όταν το εκτελέσουμε με την είσοδο αυτή"
424
+ ]}
425
+
426
+ define_slide {
427
+ ["while (true) continue",
428
+ *split_screen,
429
+ "print \"Hello, world!\""
430
+ ] }
431
+
432
+ define_slide{["Πώς ελέγχουμε τα προγράμματα που φτιάχουμε π.χ. για το εργαστήριο;", "",
433
+ "Με το χέρι...", "",
434
+ "Εποπτικά...", "",
435
+ "Εμπειρικά..."]}
436
+
437
+ define_slide{["Πώς ελέγχουμε μεγάλα συστήματα λογισμικού;", "",
438
+ "Regression Suites", "",
439
+ "End User Testing", "",
440
+ "Automated Testing", ""
441
+ ]}
442
+
443
+ define_slide{["Program Development by Stepwise Refinement", "",
444
+ "Niklaus Wirth", "",
445
+ "Communications of the ACM, Vol. 14, No. 4, April 1971", "",
446
+ "http://sunnyday.mit.edu/16.355/wirth-refinement.html#italic"
447
+ ]}
448
+
449
+ define_slide{["Test-Driven Development",
450
+ "(Martin Fowler: https://martinfowler.com/bliki/TestDrivenDevelopment.html)", "",
451
+ "Είναι τεχνική για τη κατασκευή λογισμικού",
452
+ "που οδηγείται από της συγγραφή tests", "",
453
+ "Αναπτύχθηκε από τον Kent Beck στα τέλη της δεκαετίας του 1990",
454
+ "ως τμήμα της μεθοδολογίας Extreme Programming.", "",
455
+ ]}
456
+ define_slide {["Test-Driven Development", "", "",
457
+ "Πρακτικά αποτελείται από τρία επαναλαμβανόμενα βήματα:", "",]}
458
+
459
+ define_slide(include:-1) {[
460
+ "1. Γράφουμε πρώτα τα test για τη λειτουργικότητα",
461
+ "που θα προσθέσουμε στην εφαρμογή.", "",
462
+ ]}
463
+
464
+ define_slide(include:-1) do
465
+ ["2. Γράφουμε τον κώδικα της εφαρμογής μέχρι να ικανοποιήσουμε",
466
+ "τiς απαιτήσεις του test.", ""]
467
+ end
468
+
469
+ define_slide(include:-1){["3. Αναδιατάσουμε το κώδικα (Refactor) μέχρι να έρθει","στην δομική μορφή που επιθυμούμε."]}
470
+
471
+ define_slide { ["RED - GREEN - REFACTOR", "", ""] }
472
+ define_slide(include:-1) { ["RED: Γράφουμε tests (που αρχικά δεν ικανοποιούνται)", "", ""] }
473
+ define_slide(include:-1) { ["GREEN: Γράφουμε κώδικα που ικανοποιεί τα tests", "", ""] }
474
+ define_slide(include:-1) { ["REFACTOR: Βελτιώνουμε τη ποιότητα του κώδικα", "", ""] }
475
+
476
+ define_slide { (["Refactoring (Martin Fowler, https://refactoring.com/)", "", "",
477
+ "Ουσιαστικό (refactoring): αλλαγή στην εσωτερική δομή του λογισμικού ώστε:",
478
+ "να γίνει εύκολότερη η κατανόησή του",
479
+ "και οικονομικότερη η εξέλιξή του,",
480
+ "ΧΩΡΙΣ να αλλάξει η εξωτερική του συμπεριφορά.",
481
+ "", "",]) }
482
+
483
+ define_slide(include:-1) { ["Ρήμα (refactor): η διαδικασία της αναδιάταξης του κώδικα μέσω",
484
+ "μίας σαφούς αλληλουχίας βημάτων με τρόπο τέτοιο ώστε ",
485
+ "να μήν αλλάξει η εξωτερική του συμπεριφορά."] }
486
+
487
+ define_slide { (["Testing Frameworks", "", "",
488
+ "Διαθέσιμα πλέον στις περισσότερες γλώσσες προγραμματισμού", "",
489
+ "Διαφορετικές Φιλοσοφίες (TDD - testing, BDD - Behaviour)", "",
490
+ "Διαφορετικά επίπεδα testing (unit, integration, front end...)", "",
491
+ "Διαφορετική αποδοχή από της κοινότητες προγραμματιστών", "",
492
+ ]) }
493
+
494
+ define_slide { [
495
+ "TDD: Assertions - Διαβεβαιώσεις", "", "",
496
+ "assert_equal 2, @size#CODE", "",
497
+ "assert_includes @list, \"item\"#CODE", "",
498
+ "assert_instance_of Array, @list#CODE", "",
499
+ "assert_kind_of Array, @list#CODE", "",
500
+ "assert_nil#CODE"
501
+ ] }
502
+
503
+ define_slide { ["Παραδείγματα"] }
504
+ define_slide_sequence(MyList, :initialize, MyListClassTests, :test_new, 'T1')
505
+ define_slide_sequence(MyList, :contents, MyListClassTests, :test_contents, 'T1_T2')
506
+ define_slide_sequence(MyList, :append, MyListClassTests, :test_append, 'T1_T2_T3')
507
+ define_slide_sequence(MyList, :find_first_position_of, MyListClassTests, :test_find_first_position_of, 'T1_T2_T3_T4')
508
+ define_slide_sequence(MyList, :find_positions_of, MyListClassTests, :test_find_positions_of, 'T1_T2_T3_T4_T5')
509
+ define_slide_sequence(MyList, :maximum, MyListClassTests, :test_maximum, 'T1_T2_T3_T4_T5_T6')
510
+ define_slide_sequence(MyList, :minimum, MyListClassTests, :test_minimum, 'WRONG_T1_T2_T3_T4_T5_T6_T7', :set_wrong)
511
+ define_slide_sequence(MyList, :minimum, nil, nil, 'T1_T2_T3_T4_T5_T6_T7_CORRECT', :set_correct)
512
+ define_slide_sequence(MyList, :min_max, MyListClassTests, :test_min_max, 'SLOW_T1_T2_T3_T4_T5_T6_T7_T8', :set_slow)
513
+ define_slide_sequence(MyList, :min_max, nil, nil, 'T1_T2_T3_T4_T5_T6_T7_T8_FAST', :set_fast)
514
+
515
+ define_slide { ["Συμπεράσματα - Unit Testing", "", "",] }
516
+ define_slide(include:-1) { ["1. Είναι σημαντικό να ελέγχουμε τα προγράμματα που γράφουμε", "",] }
517
+ define_slide(include:-1) { ["2. Μπορούμε να επικεντρωθούμε στις συνοριακές περιπτώσεις", "",] }
518
+ define_slide(include:-1) { ["3. Είναι σημαντικό ο έλεγχος να γίνεται αυτοματοποιημένα", "",] }
519
+ define_slide(include:-1) { ["4. Μπορεί να μας καθοδηγήσει στη βελτίωση του κωδικά που γράφουμε", ""] }
520
+ define_slide(include:-1) { ["5. Είναι ίσως το σημαντικότερο εργαλείο που διαθέτουμε ως προγραμματιστές", "",] }
521
+ define_slide { ["Ευχαριστώ για τη προσοχή σας..."] }
522
+
523
+ end
524
+
525
+ Presentation.new.play if ARGV[0] !~ /RECORD/
526
+ Presentation.new.record if ARGV[0] =~ /RECORD/
527
+ end
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: term_note
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Michail Pantelelis
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-11-16 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A simple hello world gem
14
+ email: mpantel@aegean.gr
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/testing.rb
20
+ homepage: https://rubygems.org/gems/term_note
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubyforge_project:
40
+ rubygems_version: 2.7.6.2
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: Give presentations written in Ruby through plain old console
44
+ test_files: []