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
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