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.connection_type, 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.connection_type, 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.