class Presentation
Attributes
current[R]
Public Class Methods
define_slide(include: 0, variant: nil, class_name: nil, &contents)
click to toggle source
# File lib/testing.rb, line 352 def self.define_slide(include: 0, variant: nil, class_name: nil, &contents) @@slide_counter += 1 slide = proc { |number| self.send("slide_#{number}".to_sym) } define_method "slide_#{@@slide_counter}".to_sym do instance_eval("#{class_name}.send(:#{variant.to_s})") if variant current_number = __method__.to_s.split('_').last.to_i (include != 0 ? instance_exec(current_number + include, &slide) : []) + instance_exec(&contents) end end
define_slide_sequence(class_name, method, test_class_name, test_method, test_sequence, variant = nil)
click to toggle source
# File lib/testing.rb, line 339 def self.define_slide_sequence(class_name, method, test_class_name, test_method, test_sequence, variant = nil) if class_name define_slide(variant: variant, class_name: class_name) do method_source(class_name,method,/_slow|_fast|_wrong|_correct/) end define_slide { run_tests(test_sequence.split('_')[0..-2].join('_')) } end if test_class_name define_slide(include: class_name ? -2 : 0){method_source(test_class_name,test_method) } define_slide { run_tests(test_sequence) } end end
new(first_slide = 1)
click to toggle source
# File lib/testing.rb, line 214 def initialize(first_slide = 1) self.current = @current = first_slide end
Public Instance Methods
center(slide)
click to toggle source
# File lib/testing.rb, line 291 def center(slide) lines = slide.size blank = Term.height - lines half, rest = blank.divmod(2) puts "\n" * half slide.each do |l| content, format = l.split('#') content ||= l format = (format || '').split('.') display = format.include?('CODE') ? content.ljust(Term.width - 10) : content.center(Term.width) result = (format - ['CODE']).inject(display) do |res, f| res.send(f.to_sym) end puts result end puts "\n" * (half + rest - 1) rescue ArgumentError => e "Παρακαλώ μεγαλώστε το παράθυρο για εμφανιστεί η σελίδα..." puts "Error: #{e.message}" puts e.backtrace puts ["lines:", lines, "height:", Term.height, "width:", Term.width, "blank:", blank, "half:", half, "rest:", rest].join(" ") @current -= 1 ensure pager = "Slide: %d / %d >" % [current, size] prompt = "b: back one,<number>: goto slide, <enter>: next, h,?: help, q: quit" printf prompt + pager.rjust(Term.width - prompt.size - 3) end
current=(position)
click to toggle source
# File lib/testing.rb, line 218 def current=(position) if position < 1 @current = 1 elsif position > size @current = size else @current = position end end
display_slide()
click to toggle source
# File lib/testing.rb, line 283 def display_slide center(self.send(@slides[@current - 1])) end
method_source(class_name,method,hide = //)
click to toggle source
# File lib/testing.rb, line 330 def method_source(class_name,method,hide = //) ["class #{class_name.to_s}", ""] + class_name. instance_method(method). source. gsub(hide,''). split("\n"). map { |c| c + '#CODE' } end
play()
click to toggle source
# File lib/testing.rb, line 228 def play while current <= size display_slide key = STDIN.gets.chomp case key when 'b' self.current -= 1 when /[0-9][0-9]*/ self.current = key.to_i when 'q' exit when 'h', '?' print_help else self.current += 1 end system('clear') end end
print_help()
click to toggle source
# File lib/testing.rb, line 258 def print_help system('clear') puts "Press... to:" puts "h,? print this help" puts "q quit" puts "<number> go to slide <number>" puts "<enter> go to next slide" puts "b go to previous slide" puts "Run... to:" puts "ruby #{$0} RECORD, to generate pdf of presentation" STDIN.gets.chomp end
record()
click to toggle source
# File lib/testing.rb, line 248 def record # requires MacOS + ImageMagick (1..size).each do |index| self.current = index display_slide sleep 1 `screencapture slide_#{"%04d" % (index)}.png` end `convert slide_*.png presentation.pdf` end
run_tests(sequence)
click to toggle source
# File lib/testing.rb, line 323 def run_tests(sequence) ['Run Tests'] + if ARGV[0] !~ /RUN_TESTS/ `ruby testing.rb #{['RUN_TESTS', sequence].join('_')}` end.split("\n").map { |c| c + '#CODE' } end
size()
click to toggle source
# File lib/testing.rb, line 279 def size slides.size end
slides()
click to toggle source
# File lib/testing.rb, line 271 def slides @slides ||= self.class.public_instance_methods(true). grep(/\Aslide_/). map(&:to_s). sort_by { |s| s.split('_').last.to_i }. map(&:to_sym) end
split_screen()
click to toggle source
# File lib/testing.rb, line 287 def split_screen ["", "", "", "#underline", "", "", ""] end