Instiki 0.16.3: Rails 2.3.0
Instiki now runs on the Rails 2.3.0 Candidate Release. Among other improvements, this means that it now automagically selects between WEBrick and Mongrel. Just run ./instiki --daemon
This commit is contained in:
parent
43aadecc99
commit
4e14ccc74d
893 changed files with 71965 additions and 28511 deletions
|
@ -1,12 +1,3 @@
|
|||
require 'action_controller/mime_type'
|
||||
require 'action_controller/request'
|
||||
require 'action_controller/response'
|
||||
require 'action_controller/routing'
|
||||
require 'action_controller/resources'
|
||||
require 'action_controller/url_rewriter'
|
||||
require 'action_controller/status_codes'
|
||||
require 'action_view'
|
||||
require 'drb'
|
||||
require 'set'
|
||||
|
||||
module ActionController #:nodoc:
|
||||
|
@ -173,8 +164,8 @@ module ActionController #:nodoc:
|
|||
#
|
||||
# Other options for session storage are:
|
||||
#
|
||||
# * ActiveRecordStore - Sessions are stored in your database, which works better than PStore with multiple app servers and,
|
||||
# unlike CookieStore, hides your session contents from the user. To use ActiveRecordStore, set
|
||||
# * ActiveRecord::SessionStore - Sessions are stored in your database, which works better than PStore with multiple app servers and,
|
||||
# unlike CookieStore, hides your session contents from the user. To use ActiveRecord::SessionStore, set
|
||||
#
|
||||
# config.action_controller.session_store = :active_record_store
|
||||
#
|
||||
|
@ -263,7 +254,7 @@ module ActionController #:nodoc:
|
|||
cattr_reader :protected_instance_variables
|
||||
# Controller specific instance variables which will not be accessible inside views.
|
||||
@@protected_instance_variables = %w(@assigns @performed_redirect @performed_render @variables_added @request_origin @url @parent_controller
|
||||
@action_name @before_filter_chain_aborted @action_cache_path @_session @_cookies @_headers @_params
|
||||
@action_name @before_filter_chain_aborted @action_cache_path @_session @_headers @_params
|
||||
@_flash @_response)
|
||||
|
||||
# Prepends all the URL-generating helpers from AssetHelper. This makes it possible to easily move javascripts, stylesheets,
|
||||
|
@ -310,10 +301,7 @@ module ActionController #:nodoc:
|
|||
# A YAML parser is also available and can be turned on with:
|
||||
#
|
||||
# ActionController::Base.param_parsers[Mime::YAML] = :yaml
|
||||
@@param_parsers = { Mime::MULTIPART_FORM => :multipart_form,
|
||||
Mime::URL_ENCODED_FORM => :url_encoded_form,
|
||||
Mime::XML => :xml_simple,
|
||||
Mime::JSON => :json }
|
||||
@@param_parsers = {}
|
||||
cattr_accessor :param_parsers
|
||||
|
||||
# Controls the default charset for all renders.
|
||||
|
@ -336,6 +324,10 @@ module ActionController #:nodoc:
|
|||
# sets it to <tt>:authenticity_token</tt> by default.
|
||||
cattr_accessor :request_forgery_protection_token
|
||||
|
||||
# Controls the IP Spoofing check when determining the remote IP.
|
||||
@@ip_spoofing_check = true
|
||||
cattr_accessor :ip_spoofing_check
|
||||
|
||||
# Indicates whether or not optimise the generated named
|
||||
# route helper methods
|
||||
cattr_accessor :optimise_named_routes
|
||||
|
@ -387,6 +379,13 @@ module ActionController #:nodoc:
|
|||
attr_accessor :action_name
|
||||
|
||||
class << self
|
||||
def call(env)
|
||||
# HACK: For global rescue to have access to the original request and response
|
||||
request = env["action_controller.rescue.request"] ||= Request.new(env)
|
||||
response = env["action_controller.rescue.response"] ||= Response.new
|
||||
process(request, response)
|
||||
end
|
||||
|
||||
# Factory for the standard create, process loop where the controller is discarded after processing.
|
||||
def process(request, response) #:nodoc:
|
||||
new.process(request, response)
|
||||
|
@ -507,7 +506,7 @@ module ActionController #:nodoc:
|
|||
protected :filter_parameters
|
||||
end
|
||||
|
||||
delegate :exempt_from_layout, :to => 'ActionView::Base'
|
||||
delegate :exempt_from_layout, :to => 'ActionView::Template'
|
||||
end
|
||||
|
||||
public
|
||||
|
@ -529,7 +528,7 @@ module ActionController #:nodoc:
|
|||
end
|
||||
|
||||
def send_response
|
||||
response.prepare! unless component_request?
|
||||
response.prepare!
|
||||
response
|
||||
end
|
||||
|
||||
|
@ -645,7 +644,7 @@ module ActionController #:nodoc:
|
|||
end
|
||||
|
||||
def session_enabled?
|
||||
request.session_options && request.session_options[:disabled] != false
|
||||
ActiveSupport::Deprecation.warn("Sessions are now lazy loaded. So if you don't access them, consider them disabled.", caller)
|
||||
end
|
||||
|
||||
self.view_paths = []
|
||||
|
@ -864,20 +863,28 @@ module ActionController #:nodoc:
|
|||
def render(options = nil, extra_options = {}, &block) #:doc:
|
||||
raise DoubleRenderError, "Can only render or redirect once per action" if performed?
|
||||
|
||||
validate_render_arguments(options, extra_options, block_given?)
|
||||
|
||||
if options.nil?
|
||||
return render(:file => default_template_name, :layout => true)
|
||||
elsif !extra_options.is_a?(Hash)
|
||||
raise RenderError, "You called render with invalid options : #{options.inspect}, #{extra_options.inspect}"
|
||||
else
|
||||
if options == :update
|
||||
options = extra_options.merge({ :update => true })
|
||||
elsif !options.is_a?(Hash)
|
||||
raise RenderError, "You called render with invalid options : #{options.inspect}"
|
||||
options = { :template => default_template, :layout => true }
|
||||
elsif options == :update
|
||||
options = extra_options.merge({ :update => true })
|
||||
elsif options.is_a?(String) || options.is_a?(Symbol)
|
||||
case options.to_s.index('/')
|
||||
when 0
|
||||
extra_options[:file] = options
|
||||
when nil
|
||||
extra_options[:action] = options
|
||||
else
|
||||
extra_options[:template] = options
|
||||
end
|
||||
|
||||
options = extra_options
|
||||
end
|
||||
|
||||
response.layout = layout = pick_layout(options)
|
||||
logger.info("Rendering template within #{layout}") if logger && layout
|
||||
layout = pick_layout(options)
|
||||
response.layout = layout.path_without_format_and_extension if layout
|
||||
logger.info("Rendering template within #{layout.path_without_format_and_extension}") if logger && layout
|
||||
|
||||
if content_type = options[:content_type]
|
||||
response.content_type = content_type.to_s
|
||||
|
@ -902,7 +909,7 @@ module ActionController #:nodoc:
|
|||
render_for_text(@template.render(options.merge(:layout => layout)), options[:status])
|
||||
|
||||
elsif action_name = options[:action]
|
||||
render_for_file(default_template_name(action_name.to_s), options[:status], layout)
|
||||
render_for_file(default_template(action_name.to_s), options[:status], layout)
|
||||
|
||||
elsif xml = options[:xml]
|
||||
response.content_type ||= Mime::XML
|
||||
|
@ -937,7 +944,7 @@ module ActionController #:nodoc:
|
|||
render_for_text(nil, options[:status])
|
||||
|
||||
else
|
||||
render_for_file(default_template_name, options[:status], layout)
|
||||
render_for_file(default_template, options[:status], layout)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -994,7 +1001,7 @@ module ActionController #:nodoc:
|
|||
@performed_redirect = false
|
||||
response.redirected_to = nil
|
||||
response.redirected_to_method_params = nil
|
||||
response.headers['Status'] = DEFAULT_RENDER_STATUS_CODE
|
||||
response.status = DEFAULT_RENDER_STATUS_CODE
|
||||
response.headers.delete('Location')
|
||||
end
|
||||
|
||||
|
@ -1115,7 +1122,7 @@ module ActionController #:nodoc:
|
|||
end
|
||||
|
||||
# Sets the etag, last_modified, or both on the response and renders a
|
||||
# "304 Not Modified" response if the request is already fresh.
|
||||
# "304 Not Modified" response if the request is already fresh.
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
|
@ -1123,8 +1130,8 @@ module ActionController #:nodoc:
|
|||
# @article = Article.find(params[:id])
|
||||
# fresh_when(:etag => @article, :last_modified => @article.created_at.utc)
|
||||
# end
|
||||
#
|
||||
# This will render the show template if the request isn't sending a matching etag or
|
||||
#
|
||||
# This will render the show template if the request isn't sending a matching etag or
|
||||
# If-Modified-Since header and just a "304 Not Modified" response if there's a match.
|
||||
def fresh_when(options)
|
||||
options.assert_valid_keys(:etag, :last_modified)
|
||||
|
@ -1164,20 +1171,19 @@ module ActionController #:nodoc:
|
|||
def reset_session #:doc:
|
||||
request.reset_session
|
||||
@_session = request.session
|
||||
response.session = @_session
|
||||
end
|
||||
|
||||
|
||||
private
|
||||
def render_for_file(template_path, status = nil, layout = nil, locals = {}) #:nodoc:
|
||||
logger.info("Rendering #{template_path}" + (status ? " (#{status})" : '')) if logger
|
||||
path = template_path.respond_to?(:path_without_format_and_extension) ? template_path.path_without_format_and_extension : template_path
|
||||
logger.info("Rendering #{path}" + (status ? " (#{status})" : '')) if logger
|
||||
render_for_text @template.render(:file => template_path, :locals => locals, :layout => layout), status
|
||||
end
|
||||
|
||||
def render_for_text(text = nil, status = nil, append_response = false) #:nodoc:
|
||||
@performed_render = true
|
||||
|
||||
response.headers['Status'] = interpret_status(status || DEFAULT_RENDER_STATUS_CODE)
|
||||
response.status = interpret_status(status || DEFAULT_RENDER_STATUS_CODE)
|
||||
|
||||
if append_response
|
||||
response.body ||= ''
|
||||
|
@ -1191,6 +1197,16 @@ module ActionController #:nodoc:
|
|||
end
|
||||
end
|
||||
|
||||
def validate_render_arguments(options, extra_options, has_block)
|
||||
if options && (has_block && options != :update) && !options.is_a?(String) && !options.is_a?(Hash) && !options.is_a?(Symbol)
|
||||
raise RenderError, "You called render with invalid options : #{options.inspect}"
|
||||
end
|
||||
|
||||
if !extra_options.is_a?(Hash)
|
||||
raise RenderError, "You called render with invalid options : #{options.inspect}, #{extra_options.inspect}"
|
||||
end
|
||||
end
|
||||
|
||||
def initialize_template_class(response)
|
||||
response.template = ActionView::Base.new(self.class.view_paths, {}, self)
|
||||
response.template.helpers.send :include, self.class.master_helper_module
|
||||
|
@ -1199,7 +1215,7 @@ module ActionController #:nodoc:
|
|||
end
|
||||
|
||||
def assign_shortcuts(request, response)
|
||||
@_request, @_params, @_cookies = request, request.parameters, request.cookies
|
||||
@_request, @_params = request, request.parameters
|
||||
|
||||
@_response = response
|
||||
@_response.session = request.session
|
||||
|
@ -1217,11 +1233,10 @@ module ActionController #:nodoc:
|
|||
def log_processing
|
||||
if logger && logger.info?
|
||||
log_processing_for_request_id
|
||||
log_processing_for_session_id
|
||||
log_processing_for_parameters
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def log_processing_for_request_id
|
||||
request_id = "\n\nProcessing #{self.class.name}\##{action_name} "
|
||||
request_id << "to #{params[:format]} " if params[:format]
|
||||
|
@ -1230,17 +1245,10 @@ module ActionController #:nodoc:
|
|||
logger.info(request_id)
|
||||
end
|
||||
|
||||
def log_processing_for_session_id
|
||||
if @_session && @_session.respond_to?(:session_id) && @_session.respond_to?(:dbman) &&
|
||||
!@_session.dbman.is_a?(CGI::Session::CookieStore)
|
||||
logger.info " Session ID: #{@_session.session_id}"
|
||||
end
|
||||
end
|
||||
|
||||
def log_processing_for_parameters
|
||||
parameters = respond_to?(:filter_parameters) ? filter_parameters(params) : params.dup
|
||||
parameters = parameters.except!(:controller, :action, :format, :_method)
|
||||
|
||||
|
||||
logger.info " Parameters: #{parameters.inspect}" unless parameters.empty?
|
||||
end
|
||||
|
||||
|
@ -1255,10 +1263,17 @@ module ActionController #:nodoc:
|
|||
elsif respond_to? :method_missing
|
||||
method_missing action_name
|
||||
default_render unless performed?
|
||||
elsif template_exists?
|
||||
default_render
|
||||
else
|
||||
raise UnknownAction, "No action responded to #{action_name}. Actions: #{action_methods.sort.to_sentence}", caller
|
||||
begin
|
||||
default_render
|
||||
rescue ActionView::MissingTemplate => e
|
||||
# Was the implicit template missing, or was it another template?
|
||||
if e.path == default_template_name
|
||||
raise UnknownAction, "No action responded to #{action_name}. Actions: #{action_methods.sort.to_sentence}", caller
|
||||
else
|
||||
raise e
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -1270,11 +1285,6 @@ module ActionController #:nodoc:
|
|||
@action_name = (params['action'] || 'index')
|
||||
end
|
||||
|
||||
def assign_default_content_type_and_charset
|
||||
response.assign_default_content_type_and_charset!
|
||||
end
|
||||
deprecate :assign_default_content_type_and_charset => :'response.assign_default_content_type_and_charset!'
|
||||
|
||||
def action_methods
|
||||
self.class.action_methods
|
||||
end
|
||||
|
@ -1305,14 +1315,8 @@ module ActionController #:nodoc:
|
|||
"#{request.protocol}#{request.host}#{request.request_uri}"
|
||||
end
|
||||
|
||||
def close_session
|
||||
@_session.close if @_session && @_session.respond_to?(:close)
|
||||
end
|
||||
|
||||
def template_exists?(template_name = default_template_name)
|
||||
@template.send(:_pick_template, template_name) ? true : false
|
||||
rescue ActionView::MissingTemplate
|
||||
false
|
||||
def default_template(action_name = self.action_name)
|
||||
self.view_paths.find_template(default_template_name(action_name), default_template_format)
|
||||
end
|
||||
|
||||
def default_template_name(action_name = self.action_name)
|
||||
|
@ -1334,7 +1338,16 @@ module ActionController #:nodoc:
|
|||
end
|
||||
|
||||
def process_cleanup
|
||||
close_session
|
||||
end
|
||||
end
|
||||
|
||||
Base.class_eval do
|
||||
[ Filters, Layout, Benchmarking, Rescue, Flash, MimeResponds, Helpers,
|
||||
Cookies, Caching, Verification, Streaming, SessionManagement,
|
||||
HttpAuthentication::Basic::ControllerMethods, HttpAuthentication::Digest::ControllerMethods,
|
||||
RecordIdentifier, RequestForgeryProtection, Translation
|
||||
].each do |mod|
|
||||
include mod
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue