module Charcoal::Utilities
Constants
- Routing
Public Instance Methods
allowed_methods_for?(protocol)
click to toggle source
# File lib/charcoal/utilities.rb, line 6 def allowed_methods_for?(protocol) @allowed_methods ||= {} return @allowed_methods[protocol] if @allowed_methods[protocol] @allowed_methods[protocol] = methods_allowed_for?(protocol) end
Private Instance Methods
find_route(path, env)
click to toggle source
# File lib/charcoal/utilities.rb, line 38 def find_route(path, env) routes = [Rails.application.routes] railties = Rails.application.railties railties = railties.respond_to?(:all) ? railties.all : railties._all routes += railties.select { |tie| tie.is_a?(Rails::Engine) }.map(&:routes) routes.each do |route_set| return route_set.recognize_path(path, env) rescue ActionController::RoutingError end nil rescue ActionController::RoutingError nil end
methods_allowed_for?(protocol)
click to toggle source
# File lib/charcoal/utilities.rb, line 14 def methods_allowed_for?(protocol) Routing::HTTP_METHODS.select do |verb| next if verb == :options route = find_route(request.path, request.env.merge(method: verb)) if route controller = route[:controller].camelize controller = "#{controller}Controller".constantize action = route[:action] || params[:path].last.split(".").first instance = controller.new instance.request = request instance.response = response method_name = "#{protocol}_allowed" controller.respond_to?(method_name.to_sym) && controller.send(method_name + "?", instance, action) else false end end end