# File lib/auto_admin/node.rb, line 67 def primary_keys klass.respond_to?(:primary_keys) ? klass.primary_keys : [klass.primary_key] end
class AutoAdmin::Node
Attributes
klass[RW]
Public Class Methods
new(klass)
click to toggle source
# File lib/auto_admin/node.rb, line 43 def initialize(klass) self.klass = klass end
nodes()
click to toggle source
# File lib/auto_admin/node.rb, line 4 def nodes @nodes ||= begin Rails.application.eager_load! ActiveRecord::Base.descendants.each_with_object({}) do |klass, hash| next if klass.abstract_class? || klass.name.split('::').first == 'ActiveRecord' hash[klass.name] = AutoAdmin::Node.new(klass) end end end
preload_associations!()
click to toggle source
# File lib/auto_admin/node.rb, line 15 def preload_associations! # rubocop:disable Metrics/MethodLength, Metrics/AbcSize return true if @preloading @preloading = true @preload_associations ||= begin nodes.values.each do |node| node.klass.reflect_on_all_associations(:has_many).each do |association| node.has_many association unless association.options[:through] end node.klass.reflect_on_all_associations(:has_one).each do |association| node.has_one association end node.klass.reflect_on_all_associations(:belongs_to).each do |association| node.belongs_to association unless association.polymorphic? end end true end end
root_nodes()
click to toggle source
# File lib/auto_admin/node.rb, line 35 def root_nodes nodes.values.select { |n| n.belongs_to.none? }.sort_by { |n| -n.weight } end
Public Instance Methods
attributes()
click to toggle source
# File lib/auto_admin/node.rb, line 63 def attributes klass.column_names - primary_keys - belongs_to.map(&:node).map { |hm| hm.to_s.foreign_key } end
belongs_to(association = nil)
click to toggle source
# File lib/auto_admin/node.rb, line 99 def belongs_to(association = nil) @belongs_to ||= Set.new if association node = self.class.nodes[association.klass.name] @belongs_to << Association.new(node, association.name) else self.class.preload_associations! end @belongs_to end
define_routes!(ctx)
click to toggle source
# File lib/auto_admin/node.rb, line 47 def define_routes!(ctx) ctx.resources resource_name, controller: 'resources', defaults: { node: klass.name }, only: %i(index show), shallow: true do has_many.map(&:node).each do |child_node| child_node.define_routes!(ctx) end end end
has_many(association = nil)
click to toggle source
# File lib/auto_admin/node.rb, line 75 def has_many(association = nil) # rubocop:disable Metrics/AbcSize @has_many ||= Set.new if association node = self.class.nodes[association.klass.name] node.belongs_to << Association.new(self, association.inverse_of) if association.inverse_of @has_many << Association.new(node, association.name) else self.class.preload_associations! end @has_many end
has_one(association = nil)
click to toggle source
# File lib/auto_admin/node.rb, line 87 def has_one(association = nil) # rubocop:disable Metrics/AbcSize @has_one ||= Set.new if association node = self.class.nodes[association.klass.name] node.belongs_to << Association.new(self, association.inverse_of) if association.inverse_of @has_one << Association.new(node, association.name) else self.class.preload_associations! end @has_one end
polymorphic_path()
click to toggle source
# File lib/auto_admin/node.rb, line 59 def polymorphic_path [resource_name] end
primary_keys()
click to toggle source
resource_name()
click to toggle source
# File lib/auto_admin/node.rb, line 55 def resource_name klass.name.demodulize.underscore.pluralize end
weight()
click to toggle source
# File lib/auto_admin/node.rb, line 71 def weight @weight ||= has_many.map(&:node).sum(&:weight) + 1 end