Class: Web::Wiki::Request

Inherits:
Object show all
Defined in:
lib/web/wiki.rb

Overview

:nodoc:

Defined Under Namespace

Classes: Action

Constant Summary collapse

@@actions =
{}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(wiki) ⇒ Request

Returns a new instance of Request.



362
363
364
365
366
367
368
369
370
# File 'lib/web/wiki.rb', line 362

def initialize( wiki )
  @page = @handled = false
  @wiki = wiki
  @template = if (File.basename(Web.script_name || '') == "admin.rb")
                "admin.html"
              else
                "template.html"
              end
end

Instance Attribute Details

#content_templateObject

Returns the value of attribute content_template.



360
361
362
# File 'lib/web/wiki.rb', line 360

def content_template
  @content_template
end

#pageObject



373
374
375
376
377
378
379
380
381
382
383
384
385
386
# File 'lib/web/wiki.rb', line 373

def page
  unless @page
    @page = self.wiki.load_page
    unless (Web["revision"] == nil || Web["revision"].empty? || Web["revision"].to_s == "0")
      history = @page.history
      revision = history.find{ |p|
        Web["revision"].to_i == p.revision
      }
      revision.history = history
      @page = revision || @page
    end
  end
  @page
end

#templateObject

Returns the value of attribute template.



360
361
362
# File 'lib/web/wiki.rb', line 360

def template
  @template
end

#varsObject



389
390
391
392
393
394
395
396
# File 'lib/web/wiki.rb', line 389

def vars
  @vars ||= {"page"    => self.page,
             "wiki"    => self.wiki,
             "action"  => Web["action"],
             "baseurl" => Web::Wiki::pref(:baseurl),
             "resourceurl" => Web::Wiki::pref(:resourceurl),
  }
end

#wikiObject

Returns the value of attribute wiki.



360
361
362
# File 'lib/web/wiki.rb', line 360

def wiki
  @wiki
end

Class Method Details

.action(name, &action) ⇒ Object



421
422
423
# File 'lib/web/wiki.rb', line 421

def Request.action( name, &action )
  Action.new name, &action
end

.actionsObject



417
418
419
# File 'lib/web/wiki.rb', line 417

def Request.actions
  @@actions
end

Instance Method Details

#download_file(basedir, requested_asset) ⇒ Object



473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
# File 'lib/web/wiki.rb', line 473

def download_file( basedir, requested_asset )
  self.template = nil
  self.content_template = nil

  basedir = File.expand_path( basedir )
  requested_asset = File.expand_path( File.join(basedir,
                                                requested_asset.gsub( /\\/, "/") ) )
  # security check on the requested_asset --
  # it must be underneath the basedir
  if ( requested_asset.index( basedir ) == 0 && \
       File.exists?( requested_asset ) )
    # deliver the file
    Web.content_type = Web.get_mime_type( requested_asset )
    Web.write File.open(requested_asset, "r" ) { |f|
      f.read
    }
    Web.flush
  else
    Web.status = "404";
    Web.write "404 File Not Found"
    Web.flush
  end
end

#handle_requestObject



398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
# File 'lib/web/wiki.rb', line 398

def handle_request
  cmd = Web["action"]
  cmd = "default" if cmd.empty? || cmd == "view_revision"
  cmd = "download_resource" if Web::path_info =~ /^\/resources\//
  cmd = "default" unless Web::Wiki::pref("allowed_actions").include?(cmd)
  
  Request.actions[cmd].call(self)
  
  
  unless @handled
    Web::config[:load_path] << Web::Wiki::pref("resource_dir")
    self.vars["content_template"] = self.content_template
    Web::local.merge!( self.vars )
    Web::load( self.template ) if self.template
    @handled = true
  end
end