Sha256: adc4040a36898d612299dd2910dc6b10cb8ce7c8bcaf41a563d5ea67d1c6b3b0
Contents?: true
Size: 1.95 KB
Versions: 2
Compression:
Stored size: 1.95 KB
Contents
# frozen_string_literal: true require 'eac_ruby_utils/core_ext' module CanCanDry # Copiado de https://github.com/appirits/awesome_admin_layout # /lib/awesome_admin_layout/recognize_path.rb class PathRecognizer class << self def recognize(root_path, path, options = {}) new(root_path, path, options).recognize_or_raise end def remove_root_path(root_path, path) path = path.gsub(/\A#{Regexp.quote(root_path)}/, '') path.gsub(%r{\A/*}, '/') end end common_constructor :root_path, :path, :options do self.path = self.class.remove_root_path(root_path, path) end def recognize_or_raise recognize || raise("Path not recognized: \"#{path}\" (Options: #{options})") end def recognize core_recognize || engines_recognize end private def core_recognize Rails.application.routes.recognize_path(path, options) rescue ActionController::RoutingError nil end def engines_recognize Rails::Engine.subclasses.each do |engine| recognized_path = engine_recognize(engine) return recognized_path if recognized_path end nil end def engine_recognize(engine) engine_path = path_for_engine(engine.instance.class) return unless engine_path begin return engine.instance.routes.recognize_path(engine_path, options) rescue ActionController::RoutingError => e Rails.logger.debug { "[#{engine}] ActionController::RoutingError: #{e.message}" } end nil end def path_for_engine(engine_class) engine_route = Rails.application.routes.routes.find { |r| app_class_for(r) == engine_class } return unless engine_route path.gsub(/^#{engine_route.path.spec}/, '') end def app_class_for(route) if Rails.version >= '4.2' # for Rails 4.2 route.app.app else # for Rails 4.1, 4.0, 3.2 route.app end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
can_can_dry-0.5.7 | lib/can_can_dry/path_recognizer.rb |
can_can_dry-0.5.6 | lib/can_can_dry/path_recognizer.rb |