Sha256: bd85690b35494386192b78c462258b8bf0aac9a027687193b177ae9ce004a301

Contents?: true

Size: 1.69 KB

Versions: 2

Compression:

Stored size: 1.69 KB

Contents

# frozen_string_literal: true

module Orthoses
  module ActiveRecord
    class HasOne
      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_one).flat_map do |ref|
              type =
                begin
                  Utils.module_name(ref.klass) or next
                rescue NameError => e
                  while e
                    Orthoses.logger.warn(e.message)
                    e = e.cause
                  end
                  next
                end
              opt = "#{type}?"

              [
                "def #{ref.name}: () -> #{opt}",
                "def #{ref.name}=: (#{opt}) -> #{opt}",
                "def build_#{ref.name}: (?untyped attributes) ?{ (#{type}) -> void } -> #{type}",
                "def create_#{ref.name}: (?untyped attributes) ?{ (#{type}) -> void } -> #{type}",
                "def create_#{ref.name}!: (?untyped attributes) ?{ (#{type}) -> void } -> #{type}",
                "def reload_#{ref.name}: () -> #{opt}",
              ]
            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_one.rb
orthoses-rails-1.0.0 lib/orthoses/active_record/has_one.rb