Graphql::EagerLoader

Eager-load your Active Record associations automagically.

Usage

Call this method like this:

Graphql::EagerLoader::LookaheadLoader.call(Project, lookahead)

Here's a full example with 'graphql' field:

field :projects, Types::ProjectType, null: true, extras: [:lookahead]
def projects(lookahead:)
  Graphql::EagerLoader::LookaheadLoader.call(Project, lookahead).all # or: .where(published: true)
end

This method allows you to add additional functionality while eager loading app's models. For example you can do stuff like (notice the location of .all below):

field :projects, Types::ProjectType, null: true, extras: [:lookahead]
def projects(lookahead:)
  Graphql::EagerLoader::LookaheadLoader.call(Project, lookahead) do |eager_loaded_model, associations|
    associations.values.each do |association|
      if association.instance_of?(ActiveRecord::Reflection::HasManyReflection)
        eager_loaded_model = eager_loaded_model.merge(association.klass.where(published: true))
      end
    end
    eager_loaded_model
  end.all
end

Installation

gem 'graphql-eager_loader'

And then execute:

$ bundle install

Contributing

Contributions welcome!

Special Thanks

Thank you to @colinjfw for the great GraphQL-Api gem that inspired this.

Thank you to @rmosolgo for the incredible GraphQL gem.

License

The gem is available as open source under the terms of the MIT License.