module RuboCop::Cop::ActiveRecordHelper
A mixin to extend cops for Active Record features
Constants
- WHERE_METHODS
Public Instance Methods
external_dependency_checksum()
click to toggle source
# File lib/rubocop/cop/mixin/active_record_helper.rb, line 30 def external_dependency_checksum return @external_dependency_checksum if defined?(@external_dependency_checksum) schema_path = RuboCop::Rails::SchemaLoader.db_schema_path return nil if schema_path.nil? schema_code = File.read(schema_path) @external_dependency_checksum ||= Digest::SHA1.hexdigest(schema_code) end
foreign_key_of(belongs_to)
click to toggle source
# File lib/rubocop/cop/mixin/active_record_helper.rb, line 82 def foreign_key_of(belongs_to) options = belongs_to.last_argument return unless options.hash_type? options.each_pair.find do |pair| next unless pair.key.sym_type? && pair.key.value == :foreign_key next unless pair.value.sym_type? || pair.value.str_type? break pair.value.value.to_s end end
in_where?(node)
click to toggle source
# File lib/rubocop/cop/mixin/active_record_helper.rb, line 103 def in_where?(node) send_node = node.each_ancestor(:send).first send_node && WHERE_METHODS.include?(send_node.method_name) end
inherit_active_record_base?(node)
click to toggle source
# File lib/rubocop/cop/mixin/active_record_helper.rb, line 26 def inherit_active_record_base?(node) node.each_ancestor(:class).any? { |class_node| active_record?(class_node.parent_class) } end
polymorphic?(belongs_to)
click to toggle source
# File lib/rubocop/cop/mixin/active_record_helper.rb, line 94 def polymorphic?(belongs_to) options = belongs_to.last_argument return false unless options.hash_type? options.each_pair.any? do |pair| pair.key.sym_type? && pair.key.value == :polymorphic && pair.value.true_type? end end
resolve_relation_into_column(name:, class_node:, table:)
click to toggle source
Resolve relation into column name. It just returns column_name if the column exists. Or it tries to resolve column_name as a relation. Returns an array of column names if the relation is polymorphic. It returns `nil` if it can't resolve.
@param name [String] @param class_node [RuboCop::AST::Node] @param table [RuboCop::Rails::SchemaLoader::Table] @return [Array, String, nil]
# File lib/rubocop/cop/mixin/active_record_helper.rb, line 67 def resolve_relation_into_column(name:, class_node:, table:) return unless table return name if table.with_column?(name: name) find_belongs_to(class_node) do |belongs_to| next unless belongs_to.first_argument.value.to_s == name fk = foreign_key_of(belongs_to) || "#{name}_id" next unless table.with_column?(name: fk) return polymorphic?(belongs_to) ? [fk, "#{name}_type"] : fk end nil end
schema()
click to toggle source
# File lib/rubocop/cop/mixin/active_record_helper.rb, line 41 def schema RuboCop::Rails::SchemaLoader.load(target_ruby_version) end
table_name(class_node)
click to toggle source
# File lib/rubocop/cop/mixin/active_record_helper.rb, line 45 def table_name(class_node) table_name = find_set_table_name(class_node).to_a.last&.first_argument return table_name.value.to_s if table_name class_nodes = class_node.defined_module.each_node namespaces = class_node.each_ancestor(:class, :module).map(&:identifier) [*class_nodes, *namespaces] .reverse .map { |node| node.children[1] }.join('_') .tableize end