Sha256: 19d64a0177e2c280a3cf763e1d66c2a10234ea41538ca9cd1e43905ed7182741

Contents?: true

Size: 1.32 KB

Versions: 8

Compression:

Stored size: 1.32 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

            collection_proxy = "#{base_name}::ActiveRecord_Associations_CollectionProxy"

            lines = base.reflect_on_all_associations(:has_many).flat_map do |ref|
              singular_name = ref.name.to_s.singularize

              [
                "def #{ref.name}: () -> #{collection_proxy}",
                "def #{ref.name}=: (#{collection_proxy} | Array[#{ref.klass}]) -> (#{collection_proxy} | Array[#{ref.klass}])",
                "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)
            store[base_name] << "include #{generated_association_methods}"
          end
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
orthoses-rails-0.9.0 lib/orthoses/active_record/has_many.rb
orthoses-rails-0.8.0 lib/orthoses/active_record/has_many.rb
orthoses-rails-0.7.0 lib/orthoses/active_record/has_many.rb
orthoses-rails-0.6.0 lib/orthoses/active_record/has_many.rb
orthoses-rails-0.5.0 lib/orthoses/active_record/has_many.rb
orthoses-rails-0.4.0 lib/orthoses/active_record/has_many.rb
orthoses-rails-0.3.0 lib/orthoses/active_record/has_many.rb
orthoses-rails-0.2.0 lib/orthoses/active_record/has_many.rb