Sha256: 0f8ee4281d78ee73e174c75bfec0b07741bb43f639b7e5ee4fd933f759df032d

Contents?: true

Size: 1.49 KB

Versions: 12

Compression:

Stored size: 1.49 KB

Contents

module GraphQL
  module Models
    class AssociationLoadRequest
      attr_reader :base_model, :association, :context

      def initialize(base_model, association_name, context)
        @base_model = base_model
        @association = base_model.association(association_name)
        @context = context

        if reflection.is_a?(ActiveRecord::Reflection::ThroughReflection)
          fail ArgumentError, "You cannot batch-load a has_many :through association. Instead, load each association individually."
        end
      end

      def request
        AttributeLoader::Request.new(
          association.scope.where_values_hash,
          Helpers.orders_to_sql(association.scope.orders)
        )
      end

      def load
        loader.load(request).then do |result|
          result = result.first unless reflection.macro == :has_many
          Helpers.load_association_with(association, result)
          result
        end
      end

      #################################################################
      # Public members specific to an association load request
      #################################################################

      def target_class
        case when reflection.polymorphic?
          base_model.send(reflection.foreign_type).constantize
        else
          reflection.klass
        end
      end

      private

      def loader
        @loader ||= AttributeLoader.for(target_class)
      end

      def reflection
        association.reflection
      end

    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
graphql-activerecord-0.10.0 lib/graphql/models/association_load_request.rb
graphql-activerecord-0.10.0.pre.alpha3 lib/graphql/models/association_load_request.rb
graphql-activerecord-0.10.0.pre.alpha2 lib/graphql/models/association_load_request.rb
graphql-activerecord-0.10.0.pre.alpha1 lib/graphql/models/association_load_request.rb
graphql-activerecord-0.9.1 lib/graphql/models/association_load_request.rb
graphql-activerecord-0.9.0 lib/graphql/models/association_load_request.rb
graphql-activerecord-0.8.0 lib/graphql/models/association_load_request.rb
graphql-activerecord-0.7.3 lib/graphql/models/association_load_request.rb
graphql-activerecord-0.7.2 lib/graphql/models/association_load_request.rb
graphql-activerecord-0.8.0.pre.alpha1 lib/graphql/models/association_load_request.rb
graphql-activerecord-0.7.1 lib/graphql/models/association_load_request.rb
graphql-activerecord-0.7.0 lib/graphql/models/association_load_request.rb