Sha256: e07f9cc957bf9889bd2a2b1e80ae38e47a76956334af4be16daae69ba0c14235
Contents?: true
Size: 1.7 KB
Versions: 2
Compression:
Stored size: 1.7 KB
Contents
# frozen_string_literal: true module ActiveElement # Provides an interface to available admin routes, used for populating a default navigation bar # and detecting available permitted routes if the default root path is not permitted. class Routes include Enumerable def initialize(rails_component:, permissions: []) @permissions = permissions @rails_component = rails_component end def permitted @permitted ||= available_routes.select(&:permitted?) end def available @available ||= available_routes end def alternative_routes @alternative_routes ||= available.select(&:primary?).reject { |route| route.path == '/' } end def each(&block) available.each(&block) end private attr_reader :permissions, :rails_component def available_routes @available_routes ||= descendants_with_permissions.map do |descendant, required_permissions| descendant.public_methods(false).map do |action| route(descendant, action, required_permissions) end end.flatten.compact.select(&:rails_route?).sort end def descendants_with_permissions @descendants_with_permissions ||= descendants.map do |controller_class| [controller_class.new, controller_class.active_element_permissions] end.compact end def descendants @descendants ||= ActiveElement::ApplicationController.descendants end def route(controller, action, required_permissions) Route.new( controller: controller, action: action, required_permissions: required_permissions, user_permissions: permissions, rails_component: rails_component ) end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
active_element-0.0.3 | lib/active_element/routes.rb |
active_element-0.0.2 | lib/active_element/routes.rb |