class Deck::RackApp
Public Class Methods
app_root()
click to toggle source
# File lib/deck/rack_app.rb, line 8 def self.app_root here = File.dirname(__FILE__) app_root = File.expand_path "#{here}/../.." end
build(slide_files, options = {})
click to toggle source
# File lib/deck/rack_app.rb, line 17 def self.build slide_files, options = {} enable_thin_logging() Rack::Builder.app do use Rack::ShowExceptions use Rack::ShowStatus use Rack::Codehighlighter, :coderay, :element => "pre>code", :markdown => true, :pattern => /\A[:@]{3}\s?(\w+)\s*(\n|
)/i run ::Deck::RackApp.new(slide_files, options) end end
enable_thin_logging()
click to toggle source
# File lib/deck/rack_app.rb, line 31 def self.enable_thin_logging if const_defined?(:Thin) if require "thin/logging" Thin::Logging.debug = true end end end
new(slide_files, options = {})
click to toggle source
# File lib/deck/rack_app.rb, line 39 def initialize slide_files, options = {} @options = options @slide_files = [slide_files].flatten.map do |slide_file| case slide_file when /\/?showoff(.*)\.json$/ parse_showoff_json(slide_file) else File.new(slide_file) end end.flatten @file_servers = [::Deck::RackApp.public_file_server] + @slide_files.map do |slide_file| File.expand_path File.dirname(slide_file.path) if slide_file.is_a? File end.compact.uniq.map do |slide_file_dir| Rack::File.new(slide_file_dir) end end
public_file_server()
click to toggle source
# File lib/deck/rack_app.rb, line 13 def self.public_file_server Rack::File.new("#{app_root}/public") end
Public Instance Methods
call(env)
click to toggle source
# File lib/deck/rack_app.rb, line 86 def call env request = Rack::Request.new(env) if request.path == "/" [200, {'Content-Type' => 'text/html'}, [deck.to_pretty]] else result = [404, {}, []] @file_servers.each do |file_server| result = file_server.call(env) return result if result.first < 400 end result end end
deck()
click to toggle source
# File lib/deck/rack_app.rb, line 100 def deck SlideDeck.new({:slides => slides}.merge(@options)) end
extract_options(config)
click to toggle source
# File lib/deck/rack_app.rb, line 78 def extract_options(config) ["style", "transition"].each do |key| if config[key] and !@options[key.to_sym] @options[key.to_sym] = config[key] end end end
extract_slides(config, json_file_dir)
click to toggle source
# File lib/deck/rack_app.rb, line 67 def extract_slides(config, json_file_dir) config['sections'].map do |markdown_file| if markdown_file =~ /^# / # you can use literal markdown instead of a file name s = Slide.split(markdown_file) s else File.new(json_file_dir + '/' + markdown_file) end end end
parse_showoff_json(slide_file)
click to toggle source
# File lib/deck/rack_app.rb, line 59 def parse_showoff_json(slide_file) json_file_dir = File.expand_path(File.dirname(slide_file)) json_file = slide_file config = JSON.parse(File.read(json_file)) extract_options(config) extract_slides(config, json_file_dir) end
slides()
click to toggle source
# File lib/deck/rack_app.rb, line 104 def slides out = [] @slide_files.each do |file| out += if file.is_a? Slide [file] else Slide.from_file file end end out end