class Packwerk::AssociationInspector
Extracts the implicit constant reference from an active record association
Constants
- CustomAssociations
- RAILS_ASSOCIATIONS
Public Class Methods
new(inflector:, custom_associations: Set.new)
click to toggle source
# File lib/packwerk/association_inspector.rb, line 23 def initialize(inflector:, custom_associations: Set.new) @inflector = inflector @associations = T.let(RAILS_ASSOCIATIONS + custom_associations, CustomAssociations) end
Public Instance Methods
constant_name_from_node(node, ancestors:)
click to toggle source
# File lib/packwerk/association_inspector.rb, line 33 def constant_name_from_node(node, ancestors:) return unless Node.method_call?(node) return unless association?(node) arguments = Node.method_arguments(node) return unless (association_name = association_name(arguments)) if (class_name_node = custom_class_name(arguments)) return unless Node.string?(class_name_node) Node.literal_value(class_name_node) else @inflector.classify(association_name.to_s) end end
Private Instance Methods
association?(node)
click to toggle source
# File lib/packwerk/association_inspector.rb, line 51 def association?(node) method_name = Node.method_name(node) @associations.include?(method_name) end
association_name(arguments)
click to toggle source
# File lib/packwerk/association_inspector.rb, line 65 def association_name(arguments) return unless Node.symbol?(arguments[0]) Node.literal_value(arguments[0]) end
custom_class_name(arguments)
click to toggle source
# File lib/packwerk/association_inspector.rb, line 57 def custom_class_name(arguments) association_options = arguments.detect { |n| Node.hash?(n) } return unless association_options Node.value_from_hash(association_options, :class_name) end