Sha256: 76b0a21327dbe49dfc2b94ab1c0001054c5aaa99e22552b674d69c61c8267577

Contents?: true

Size: 1.78 KB

Versions: 19

Compression:

Stored size: 1.78 KB

Contents

# frozen_string_literal: true

module PgEngine
  module RouteHelper
    class NamespaceDeductor
      def self.controller(context)
        if context.respond_to?(:request) && context.request
          # Controllers
          context
        elsif context.respond_to?(:helpers) && context.helpers
          # Decorators
          context.helpers.controller
        elsif context.respond_to?(:template) && context.template
          # FormBuilders
          context.template.controller
        end
      end

      def self.current_route(context)
        controller = controller(context)
        # Sólo si hay un controller de verdá
        return if controller.instance_of? ApplicationController

        req = controller.request
        Rails.application.routes.recognize_path(req.path, method: req.env['REQUEST_METHOD'])
      end

      def self.namespace(context)
        return Current.namespace if Current.namespace.present?

        route = current_route(context)
        return if route.blank?

        parts = route[:controller].split('/')
        return unless parts.length > 1

        parts.first.to_sym
      rescue ActionController::RoutingError
        nil
      end
    end

    def pg_current_route
      NamespaceDeductor.current_route(self)
    end

    def pg_namespace
      NamespaceDeductor.namespace(self)
    end

    def namespaced_path(object, options = {})
      target = [pg_namespace, object]

      if options[:prefix]
        target.prepend options[:prefix]
        options.delete(:prefix)
      end

      if options[:suffix]
        target.append options[:suffix]
        options.delete(:suffix)
      end

      polymorphic_url(target.flatten.compact, options.merge(only_path: true))
    end

    def path_for(array)
      url_for(array.push({ only_path: true }))
    end
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
pg_rails-7.6.22 pg_engine/app/helpers/pg_engine/route_helper.rb
pg_rails-7.6.22.pre.3 pg_engine/app/helpers/pg_engine/route_helper.rb
pg_rails-7.6.22.pre.2 pg_engine/app/helpers/pg_engine/route_helper.rb
pg_rails-7.6.22.pre.1 pg_engine/app/helpers/pg_engine/route_helper.rb
pg_rails-7.6.21 pg_engine/app/helpers/pg_engine/route_helper.rb
pg_rails-7.6.21.pre.11 pg_engine/app/helpers/pg_engine/route_helper.rb
pg_rails-7.6.21.pre.10 pg_engine/app/helpers/pg_engine/route_helper.rb
pg_rails-7.6.21.pre.9 pg_engine/app/helpers/pg_engine/route_helper.rb
pg_rails-7.6.21.pre.8 pg_engine/app/helpers/pg_engine/route_helper.rb
pg_rails-7.6.21.pre.7 pg_engine/app/helpers/pg_engine/route_helper.rb
pg_rails-7.6.21.pre.6 pg_engine/app/helpers/pg_engine/route_helper.rb
pg_rails-7.6.21.pre.5 pg_engine/app/helpers/pg_engine/route_helper.rb
pg_rails-7.6.21.pre.4 pg_engine/app/helpers/pg_engine/route_helper.rb
pg_rails-7.6.21.pre.3 pg_engine/app/helpers/pg_engine/route_helper.rb
pg_rails-7.6.21.pre.2 pg_engine/app/helpers/pg_engine/route_helper.rb
pg_rails-7.6.21.pre.1 pg_engine/app/helpers/pg_engine/route_helper.rb
pg_rails-7.6.20 pg_engine/app/helpers/pg_engine/route_helper.rb
pg_rails-7.6.19 pg_engine/app/helpers/pg_engine/route_helper.rb
pg_rails-7.6.18 pg_engine/app/helpers/pg_engine/route_helper.rb