Sha256: cb7d93c412b9f9c47d3a8a4346a41253f765f1744b26d32eba5c20ccfeb5761f
Contents?: true
Size: 1.87 KB
Versions: 3
Compression:
Stored size: 1.87 KB
Contents
# frozen_string_literal: true module Orthoses module ActiveRecord class Relation def initialize(loader) @loader = loader end def call @loader.call.tap do |store| ::ActiveRecord::Base.descendants.each do |klass| next if klass.abstract_class? primary_key = fetch_primary_key(klass) model_name = Utils.module_name(klass) or next class_specific_relation = "#{model_name}::ActiveRecord_Relation" class_specific_proxy = "#{model_name}::ActiveRecord_Associations_CollectionProxy" class_specific_generated_relation_methods = "#{model_name}::GeneratedRelationMethods" store[class_specific_generated_relation_methods].tap do |c| end store[class_specific_relation].tap do |c| c.header = "class #{class_specific_relation} < ::ActiveRecord::Relation" c << "include #{class_specific_generated_relation_methods}" c << "include _ActiveRecord_Relation[#{model_name}, #{primary_key}]" c << "include Enumerable[#{model_name}]" end store[class_specific_proxy].tap do |c| c.header = "class #{class_specific_proxy} < ::ActiveRecord::Associations::CollectionProxy" c << "include _ActiveRecord_Relation[#{model_name}, #{primary_key}]" end store[model_name].tap do |c| c << "extend _ActiveRecord_Relation_ClassMethods[#{model_name}, #{class_specific_relation}, #{primary_key}]" end end end end private def fetch_primary_key(klass) type = klass.type_for_attribute(klass.primary_key).type ActiveRecord.sql_type_to_rbs(type) rescue ::ActiveRecord::StatementInvalid => e Orthoses.logger.warn(e.to_s) "untyped" end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
orthoses-rails-1.2.0 | lib/orthoses/active_record/relation.rb |
orthoses-rails-1.1.0 | lib/orthoses/active_record/relation.rb |
orthoses-rails-1.0.0 | lib/orthoses/active_record/relation.rb |