Sha256: ffdfcc261df76b0832710bd6c89f239513db4c2589838d179fa238c3180e021b
Contents?: true
Size: 1.67 KB
Versions: 2
Compression:
Stored size: 1.67 KB
Contents
# frozen_string_literal: true module Orthoses module ActiveRecord class HasMany def initialize(loader) @loader = loader end def call @loader.call.tap do |store| ::ActiveRecord::Base.descendants.each do |base| next if base.abstract_class? base_name = Utils.module_name(base) || next lines = base.reflect_on_all_associations(:has_many).flat_map do |ref| singular_name = ref.name.to_s.singularize type = begin Utils.module_name(ref.klass) rescue NameError => e while e Orthoses.logger.warn(e.message) e = e.cause end next end collection_proxy = "::#{type}::ActiveRecord_Associations_CollectionProxy" [ "def #{ref.name}: () -> #{collection_proxy}", "def #{ref.name}=: (#{collection_proxy} | Array[#{type}]) -> (#{collection_proxy} | Array[#{type}])", "def #{singular_name}_ids: () -> Array[Integer]", "def #{singular_name}_ids=: (Array[Integer]) -> Array[Integer]", ] end generated_association_methods = "#{base_name}::GeneratedAssociationMethods" store[generated_association_methods].header = "module #{generated_association_methods}" store[generated_association_methods].concat(lines) sig = "include #{generated_association_methods}" store[base_name] << sig if !store[base_name].body.include?(sig) end end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
orthoses-rails-1.1.0 | lib/orthoses/active_record/has_many.rb |
orthoses-rails-1.0.0 | lib/orthoses/active_record/has_many.rb |