Class: ShowOff

Inherits:
Sinatra::Application
  • Object
show all
Defined in:
lib/showoff.rb

Constant Summary collapse

Version =
VERSION = '0.5.1.1'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app = nil) ⇒ ShowOff

Returns a new instance of ShowOff.



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/showoff.rb', line 45

def initialize(app=nil)
  super(app)
  @logger = Logger.new(STDOUT)
  @logger.formatter = proc { |severity,datetime,progname,msg| "#{progname} #{msg}\n" }
  @logger.level = options.verbose ? Logger::DEBUG : Logger::WARN

  dir = File.expand_path(File.join(File.dirname(__FILE__), '..'))
  @logger.debug(dir)

  # showoff_dir: The directory that the showoff gem has been installed in
  showoff_dir = File.expand_path(File.join(File.dirname(__FILE__), '..'))
  # If working directory is the showoff gem install dir, set presentation directory to the example folder and set the root path to "."
  if Dir.pwd == showoff_dir
    options.pres_dir = "#{showoff_dir}/example"
    @root_path = "."
  # Otherwise set presentation directory to either the one specified or the current working directory, and set the root path to ".."
  else
    options.pres_dir ||= Dir.pwd
    @root_path = ".."
  end
  # Now expand path of the presentation directory
  options.pres_dir = File.expand_path(options.pres_dir)
  if (options.pres_file)
    puts "Using #{options.pres_file}"
    ShowOffUtils.presentation_config_file = options.pres_file
  end
  puts "Serving presentation from #{options.pres_dir}"
  @cached_image_size = {}
  @logger.debug options.pres_dir
  @pres_name = options.pres_dir.split('/').pop
  require_ruby_files
end

Instance Attribute Details

#cached_image_sizeObject (readonly)

Returns the value of attribute cached_image_size.



37
38
39
# File 'lib/showoff.rb', line 37

def cached_image_size
  @cached_image_size
end

Class Method Details

.do_static(what) ⇒ Object



363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
# File 'lib/showoff.rb', line 363

def self.do_static(what)
  what = "index" if !what

  # Nasty hack to get the actual ShowOff module
  showoff = ShowOff.new
  while !showoff.is_a?(ShowOff)
    showoff = showoff.instance_variable_get(:@app)
  end
  name = showoff.instance_variable_get(:@pres_name)
  path = showoff.instance_variable_get(:@root_path)
  data = showoff.send(what, true)
  if data.is_a?(File)
    FileUtils.cp(data.path, "#{name}.pdf")
  else
    out  = "#{path}/#{name}/static"
    # First make a directory
    FileUtils.makedirs(out)
    # Then write the html
    file = File.new("#{out}/index.html", "w")
    file.puts(data)
    file.close
    # Now copy all the js and css
    my_path = File.join( File.dirname(__FILE__), '..', 'public')
    ["js", "css"].each { |dir|
      FileUtils.copy_entry("#{my_path}/#{dir}", "#{out}/#{dir}")
    }
    # And copy the directory
    Dir.glob("#{my_path}/#{name}/*").each { |subpath|
      base = File.basename(subpath)
      next if "static" == base
      next unless File.directory?(subpath) || base.match(/\.(css|js)$/)
      FileUtils.copy_entry(subpath, "#{out}/#{base}")
    }

    # Set up file dir
    file_dir = File.join(out, 'file')
    FileUtils.makedirs(file_dir)
    pres_dir = showoff.options.pres_dir

    # ..., copy all user-defined styles and javascript files
    Dir.glob("#{pres_dir}/*.{css,js}").each { |path|
      FileUtils.copy(path, File.join(file_dir, File.basename(path)))
    }

    # ... and copy all needed image files
    data.scan(/img src=\".\/file\/(.*?)\"/).flatten.each do |path|
      dir = File.dirname(path)
      FileUtils.makedirs(File.join(file_dir, dir))
      FileUtils.copy(File.join(pres_dir, path), File.join(file_dir, path))
    end
    # copy images from css too
    Dir.glob("#{pres_dir}/*.css").each do |css_path|
      File.open(css_path) do |file|
        data = file.read
        data.scan(/url\((.*)\)/).flatten.each do |path|
          @logger.debug path
          dir = File.dirname(path)
          FileUtils.makedirs(File.join(file_dir, dir))
          FileUtils.copy(File.join(pres_dir, path), File.join(file_dir, path))
        end
      end
    end
  end
end

Instance Method Details

#eval_ruby(code) ⇒ Object



428
429
430
431
432
# File 'lib/showoff.rb', line 428

def eval_ruby code
  eval(code).to_s
rescue => e
  e.message
end

#require_ruby_filesObject



78
79
80
# File 'lib/showoff.rb', line 78

def require_ruby_files
  Dir.glob("#{options.pres_dir}/*.rb").map { |path| require path }
end