I have an update to the request plugin that I would like feedback or help with. I have contacted the author but have not heard anything back, which is why I am posting this here.
My goal was to allow for sites that could have unlimited user subdomains, but would like to reserve some subdomains for other uses. To do this I changed the plugin to allow for either multiple subdomains or to exclude single or multiple subdomains (or domains). It works pretty well (but could be cleaned up, I am not a great ruby coder, still pretty new).
Below is the code, please let me know if I can approve it ( I did try a case/switch statement, but it always seemed to throw and error in the routes):
module ActionController module Routing class Route
TESTABLE_REQUEST_METHODS = [:subdomain, :domain, :method, :port, :remote_ip, :content_type, :accepts, :request_uri, :protocol, :exclude_subdomain, :exclude_domain ]
def recognition_conditions result = ["(match = #{Regexp.new(recognition_pattern).inspect}.match(path))"] conditions.each do |method, value| if TESTABLE_REQUEST_METHODS.include? method if method.to_s[0,7] === 'exclude' prefix = "!" env_name = method.to_s[8,method.to_s.length-8].to_sym.inspect else prefix ="" env_name = method.inspect end condition_name = method.inspect result << "conditions[#{condition_name}] =~ env[#{env_name}]" if value.is_a? Regexp result << "#{prefix}conditions[#{condition_name}].include? (env[#{env_name}])" if value.is_a? Array result << "conditions[#{condition_name}] === env[#{env_name}]" if !value.is_a?(Regexp) && !value.is_a?(Array) else end end result end end
class RouteSet
def extract_request_environment(request) { :method => request.method, :subdomain => request.subdomains.first.to_s, :domain => request.domain, :port => request.port, :remote_ip => request.remote_ip, :content_type => request.content_type, :accepts => request.accepts.map(&:to_s).join(','), :request_uri => request.request_uri, :protocol => request.protocol } end
end end end