batch-loader 1.2.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 0c89e0468fac3840ce82631d0a0f9ac61eeda081
4
- data.tar.gz: ec6c5021e04a5bc067356305659325431caa2753
2
+ SHA256:
3
+ metadata.gz: c1f4ff945285ef2833b1e70fd4c840b5a5dac71184941822cc5e4ed0b699e403
4
+ data.tar.gz: fa257f5d8e8a43e39300ad916112affb26365b7d9bf98d09a612a8652e512ffc
5
5
  SHA512:
6
- metadata.gz: 6551811eace7cb180cdea08c28b77695d8c243af3e6675e9da8d172645cab35ba51803f036359c4ecd8a6cc65a1ec2b95e2b1824f829c0454da2c0570748e396
7
- data.tar.gz: 78c0481961a045060a64c155ddb196f125da805944014ad59052464fb7b3a884e41cd6462ab5ceb186931cbcbd1e210f61d963007e4af8f1124809a2ec698e62
6
+ metadata.gz: 998465ddf29713fa411892ce9d88c2195d992444ef2f2e6e22a61fe9c1af036534e580791e7313517e084efb79e46826e9fe6ecf37442b703dc4adc8715954b9
7
+ data.tar.gz: 9834b2600bc1673d57926a245f463b5f8dd4bf637a59a5c6d384249fe9a6c4d2006adc500884f0593d31db2e81c48cc2bde151605a4e30e79a49530f0114f4bf
data/.gitignore CHANGED
@@ -11,3 +11,4 @@
11
11
  # rspec failure tracking
12
12
  .rspec_status
13
13
  .ruby-version
14
+ .tool-versions
data/.travis.yml CHANGED
@@ -1,23 +1,13 @@
1
- sudo: false
2
1
  language: ruby
3
- before_install: gem install bundler -v 1.17.1
4
- matrix:
5
- include:
6
- - gemfile: graphql-1.7.gemfile
7
- env: GRAPHQL_RUBY_VERSION=1_7 CI=true
8
- rvm: 2.3.8
9
- - gemfile: graphql-1.8.gemfile
10
- env: GRAPHQL_RUBY_VERSION=1_8 CI=true
11
- rvm: 2.3.8
12
- - gemfile: graphql-1.7.gemfile
13
- env: GRAPHQL_RUBY_VERSION=1_7 CI=true
14
- rvm: 2.4.5
15
- - gemfile: graphql-1.8.gemfile
16
- env: GRAPHQL_RUBY_VERSION=1_8 CI=true
17
- rvm: 2.4.5
18
- - gemfile: graphql-1.7.gemfile
19
- env: GRAPHQL_RUBY_VERSION=1_7 CI=true
20
- rvm: 2.5.3
21
- - gemfile: graphql-1.8.gemfile
22
- env: GRAPHQL_RUBY_VERSION=1_8 CI=true
23
- rvm: 2.5.3
2
+ before_install: gem install bundler -v 2.0.1
3
+ rvm:
4
+ - 2.3.8
5
+ - 2.4.10
6
+ - 2.5.8
7
+ - 2.6.6
8
+ - 2.7.2
9
+ - 3.0.0
10
+ env:
11
+ - CI=true
12
+ gemfile:
13
+ - graphql-latest.gemfile
data/CHANGELOG.md CHANGED
@@ -8,10 +8,56 @@ one of the following labels: `Added`, `Changed`, `Deprecated`,
8
8
  to manage the versions of this gem so
9
9
  that you can set version constraints properly.
10
10
 
11
- #### [Unreleased](https://github.com/exAspArk/batch-loader/compare/v1.2.2...HEAD)
11
+ #### [Unreleased](https://github.com/exAspArk/batch-loader/compare/v2.0.0...HEAD)
12
12
 
13
13
  * WIP
14
14
 
15
+ #### [v2.0.0](https://github.com/exAspArk/batch-loader/compare/v1.5.0...v2.0.0)
16
+
17
+ * `Removed`: Support for GraphQL version <= 1.7. [#75](https://github.com/exAspArk/batch-loader/pull/75)
18
+ * `Fixed`: Compatibility with Ruby 3. [#71](https://github.com/exAspArk/batch-loader/pull/71)
19
+
20
+ #### [v1.5.0](https://github.com/exAspArk/batch-loader/compare/v1.4.1...v1.5.0)
21
+
22
+ * `Added`: Support for GraphQL Interpreter. [#62](https://github.com/exAspArk/batch-loader/pull/62)
23
+ * `Deprecated`: `BatchLoader.for` in GraphQL. [#62](https://github.com/exAspArk/batch-loader/pull/62)
24
+
25
+ Please use `BatchLoader::GraphQL.for` instead:
26
+
27
+ ```rb
28
+ field :user, UserType, null: false
29
+
30
+ def user # resolver
31
+ BatchLoader::GraphQL.for...
32
+ end
33
+ ```
34
+
35
+ Or wrap a BatchLoader instance with `BatchLoader::GraphQL.wrap`:
36
+
37
+ ```rb
38
+ field :user, UserType, null: false
39
+
40
+ def user # resolver
41
+ BatchLoader::GraphQL.wrap(lazy_user)
42
+ end
43
+
44
+ def lazy_user
45
+ BatchLoader.for...
46
+ end
47
+ ```
48
+
49
+ #### [v1.4.1](https://github.com/exAspArk/batch-loader/compare/v1.4.0...v1.4.1)
50
+
51
+ * `Fixes`: Does not allow mutating and corrupting a list of items in a `batch` block. [#46](https://github.com/exAspArk/batch-loader/pull/46)
52
+
53
+ #### [v1.4.0](https://github.com/exAspArk/batch-loader/compare/v1.3.0...v1.4.0)
54
+
55
+ * `Added`: new `replace_methods` argument to `BatchLoader#batch` to allow control over `define_method` calls. [#45](https://github.com/exAspArk/batch-loader/pull/45)
56
+
57
+ #### [v1.3.0](https://github.com/exAspArk/batch-loader/compare/v1.2.2...v1.3.0)
58
+
59
+ * `Added`: `BatchLoader::GraphQL.for` to make it compatible with `graphql` gem versions `>= 1.8.7`. [#30](https://github.com/exAspArk/batch-loader/issues/30)
60
+
15
61
  #### [v1.2.2](https://github.com/exAspArk/batch-loader/compare/v1.2.1...v1.2.2)
16
62
 
17
63
  * `Fixed`: Identify item by `key` object instead of `key` string representation. [#27](https://github.com/exAspArk/batch-loader/pull/27)
data/README.md CHANGED
@@ -8,6 +8,20 @@
8
8
 
9
9
  This gem provides a generic lazy batching mechanism to avoid N+1 DB queries, HTTP queries, etc.
10
10
 
11
+ Developers from these companies use `BatchLoader`:
12
+
13
+ <a href="https://about.gitlab.com/"><img src="images/gitlab.png" height="35" width="114" alt="GitLab" style="max-width:100%;"></a>
14
+ <img src="images/space.png" height="35" width="10" alt="" style="max-width:100%;">
15
+ <a href="https://www.netflix.com/"><img src="images/netflix.png" height="35" width="110" alt="Netflix" style="max-width:100%;"></a>
16
+ <img src="images/space.png" height="35" width="10" alt="" style="max-width:100%;">
17
+ <a href="https://www.alibaba.com/"><img src="images/alibaba.png" height="35" width="86" alt="Alibaba" style="max-width:100%;"></a>
18
+ <img src="images/space.png" height="35" width="10" alt="" style="max-width:100%;">
19
+ <a href="https://www.universe.com/"><img src="images/universe.png" height="35" width="137" alt="Universe" style="max-width:100%;"></a>
20
+ <img src="images/space.png" height="35" width="10" alt="" style="max-width:100%;">
21
+ <a href="https://www.wealthsimple.com/"><img src="images/wealthsimple.png" height="35" width="150" alt="Wealthsimple" style="max-width:100%;"></a>
22
+ <img src="images/space.png" height="35" width="10" alt="" style="max-width:100%;">
23
+ <a href="https://decidim.org/"><img src="images/decidim.png" height="35" width="94" alt="Decidim" style="max-width:100%;"></a>
24
+
11
25
  ## Contents
12
26
 
13
27
  * [Highlights](#highlights)
@@ -20,8 +34,10 @@ This gem provides a generic lazy batching mechanism to avoid N+1 DB queries, HTT
20
34
  * [Loading multiple items](#loading-multiple-items)
21
35
  * [Batch key](#batch-key)
22
36
  * [Caching](#caching)
37
+ * [Replacing methods](#replacing-methods)
23
38
  * [Installation](#installation)
24
39
  * [API](#api)
40
+ * [Related tools](#related-tools)
25
41
  * [Implementation details](#implementation-details)
26
42
  * [Development](#development)
27
43
  * [Contributing](#contributing)
@@ -29,10 +45,6 @@ This gem provides a generic lazy batching mechanism to avoid N+1 DB queries, HTT
29
45
  * [License](#license)
30
46
  * [Code of Conduct](#code-of-conduct)
31
47
 
32
- <a href="https://www.universe.com/" target="_blank" rel="noopener noreferrer">
33
- <img src="images/universe.png" height="41" width="153" alt="Sponsored by Universe" style="max-width:100%;">
34
- </a>
35
-
36
48
  ## Highlights
37
49
 
38
50
  * Generic utility to avoid N+1 DB queries, HTTP requests, etc.
@@ -223,23 +235,38 @@ Batching is particularly useful with GraphQL. Using such techniques as preloadin
223
235
  Let's take a look at the simple [graphql-ruby](https://github.com/rmosolgo/graphql-ruby) schema example:
224
236
 
225
237
  ```ruby
226
- Schema = GraphQL::Schema.define do
227
- query QueryType
238
+ class MyProjectSchema < GraphQL::Schema
239
+ query Types::QueryType
228
240
  end
229
241
 
230
- QueryType = GraphQL::ObjectType.define do
231
- name "Query"
232
- field :posts, !types[PostType], resolve: ->(obj, args, ctx) { Post.all }
242
+ module Types
243
+ class QueryType < Types::BaseObject
244
+ field :posts, [PostType], null: false
245
+
246
+ def posts
247
+ Post.all
248
+ end
249
+ end
233
250
  end
234
251
 
235
- PostType = GraphQL::ObjectType.define do
236
- name "Post"
237
- field :user, !UserType, resolve: ->(post, args, ctx) { post.user } # N+1 queries
252
+ module Types
253
+ class PostType < Types::BaseObject
254
+ name "Post"
255
+
256
+ field :user, UserType, null: false
257
+
258
+ def user
259
+ post.user # N+1 queries
260
+ end
261
+ end
238
262
  end
239
263
 
240
- UserType = GraphQL::ObjectType.define do
241
- name "User"
242
- field :name, !types.String
264
+ module Types
265
+ class UserType < Types::BaseObject
266
+ name "User"
267
+
268
+ field :name, String, null: false
269
+ end
243
270
  end
244
271
  ```
245
272
 
@@ -255,17 +282,22 @@ query = "
255
282
  }
256
283
  }
257
284
  "
258
- Schema.execute(query)
285
+ MyProjectSchema.execute(query)
259
286
  ```
260
287
 
261
- To avoid this problem, all we have to do is to change the resolver to return `BatchLoader`:
288
+ To avoid this problem, all we have to do is to change the resolver to return `BatchLoader::GraphQL` ([#32](https://github.com/exAspArk/batch-loader/pull/32) explains why not just `BatchLoader`):
262
289
 
263
290
  ```ruby
264
- PostType = GraphQL::ObjectType.define do
265
- name "Post"
266
- field :user, !UserType, resolve: ->(post, args, ctx) do
267
- BatchLoader.for(post.user_id).batch do |user_ids, loader|
268
- User.where(id: user_ids).each { |user| loader.call(user.id, user) }
291
+ module Types
292
+ class PostType < Types::BaseObject
293
+ name "Post"
294
+
295
+ field :user, UserType, null: false
296
+
297
+ def user
298
+ BatchLoader::GraphQL.for(post.user_id).batch do |user_ids, loader|
299
+ User.where(id: user_ids).each { |user| loader.call(user.id, user) }
300
+ end
269
301
  end
270
302
  end
271
303
  end
@@ -274,8 +306,8 @@ end
274
306
  And setup GraphQL to use the built-in `lazy_resolve` method:
275
307
 
276
308
  ```ruby
277
- Schema = GraphQL::Schema.define do
278
- query QueryType
309
+ class MyProjectSchema < GraphQL::Schema
310
+ query Types::QueryType
279
311
  use BatchLoader::GraphQL
280
312
  end
281
313
  ```
@@ -292,7 +324,7 @@ BatchLoader.for(post.user_id).batch(default_value: NullUser.new) do |user_ids, l
292
324
  end
293
325
  ```
294
326
 
295
- For batches where the value is some kind of collection, such as an Array or Hash, `loader` also supports being called with a block, which yields the _current_ value, and returns the _next_ value. This is extremely useful for 1:Many relationships:
327
+ For batches where the value is some kind of collection, such as an Array or Hash, `loader` also supports being called with a block, which yields the _current_ value, and returns the _next_ value. This is extremely useful for 1:Many (`has_many`) relationships:
296
328
 
297
329
  ```ruby
298
330
  BatchLoader.for(user.id).batch(default_value: []) do |user_ids, loader|
@@ -314,7 +346,7 @@ def lazy_association(post)
314
346
 
315
347
  BatchLoader.for(id).batch(key: key) do |ids, loader, args|
316
348
  model = Object.const_get(args[:key])
317
- model.where(id: ids).each { |record| record.call(record.id, record) }
349
+ model.where(id: ids).each { |record| loader.call(record.id, record) }
318
350
  end
319
351
  end
320
352
  post1 = Post.save(association_id: 1, association_type: 'Tag')
@@ -374,6 +406,21 @@ puts user_lazy(1) # SELECT * FROM users WHERE id IN (1)
374
406
  puts user_lazy(1) # SELECT * FROM users WHERE id IN (1)
375
407
  ```
376
408
 
409
+ If you set `cache: false`, it's likely you also want `replace_methods: false` (see below section).
410
+
411
+ ### Replacing methods
412
+
413
+ By default, `BatchLoader` replaces methods on its instance by calling `#define_method` after batching to copy methods from the loaded value.
414
+ This consumes some time but allows to speed up any future method calls on the instance.
415
+ In some cases, when there are a lot of instances with a huge number of defined methods, this initial process of replacing the methods can be slow.
416
+ You may consider avoiding the "up front payment" and "pay as you go" with `#method_missing` by disabling the method replacement:
417
+
418
+ ```ruby
419
+ BatchLoader.for(id).batch(replace_methods: false) do |ids, loader|
420
+ # ...
421
+ end
422
+ ```
423
+
377
424
  ## Installation
378
425
 
379
426
  Add this line to your application's Gemfile:
@@ -393,20 +440,38 @@ Or install it yourself as:
393
440
  ## API
394
441
 
395
442
  ```ruby
396
- BatchLoader.for(item).batch(default_value: default_value, cache: cache, key: key) do |items, loader, args|
443
+ BatchLoader.for(item).batch(
444
+ default_value: default_value,
445
+ cache: cache,
446
+ replace_methods: replace_methods,
447
+ key: key
448
+ ) do |items, loader, args|
397
449
  # ...
398
450
  end
399
451
  ```
400
452
 
401
- | Argument Key | Default | Description |
402
- | --------------- | --------------------------------------------- | ------------------------------------------------------------- |
403
- | `item` | - | Item which will be collected and used for batching. |
404
- | `default_value` | `nil` | Value returned by default after batching. |
405
- | `cache` | `true` | Set `false` to disable caching between the same executions. |
406
- | `key` | `nil` | Pass custom key to uniquely identify the batch block. |
407
- | `items` | - | List of collected items for batching. |
408
- | `loader` | - | Lambda which should be called to load values loaded in batch. |
409
- | `args` | `{default_value: nil, cache: true, key: nil}` | Arguments passed to the `batch` method. |
453
+ | Argument Key | Default | Description |
454
+ | --------------- | --------------------------------------------- | ------------------------------------------------------------- |
455
+ | `item` | - | Item which will be collected and used for batching. |
456
+ | `default_value` | `nil` | Value returned by default after batching. |
457
+ | `cache` | `true` | Set `false` to disable caching between the same executions. |
458
+ | `replace_methods` | `true` | Set `false` to use `#method_missing` instead of replacing the methods after batching. |
459
+ | `key` | `nil` | Pass custom key to uniquely identify the batch block. |
460
+ | `items` | - | List of collected items for batching. |
461
+ | `loader` | - | Lambda which should be called to load values loaded in batch. |
462
+ | `args` | `{default_value: nil, cache: true, replace_methods: true, key: nil}` | Arguments passed to the `batch` method. |
463
+
464
+ ## Related tools
465
+
466
+ These gems are built by using `BatchLoader`:
467
+
468
+ * [decidim-core](https://github.com/decidim/decidim/) – participatory democracy framework made with Ruby on Rails.
469
+ * [ams_lazy_relationships](https://github.com/Bajena/ams_lazy_relationships/) – ActiveModel Serializers add-on for eliminating N+1 queries.
470
+ * [batch-loader-active-record](https://github.com/mathieul/batch-loader-active-record/) – ActiveRecord lazy association generator to avoid N+1 DB queries.
471
+
472
+ `BatchLoader` in other programming languages:
473
+
474
+ * [batch_loader](https://github.com/exaspark/batch_loader) - Elixir implementation.
410
475
 
411
476
  ## Implementation details
412
477
 
data/batch-loader.gemspec CHANGED
@@ -21,11 +21,11 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.required_ruby_version = '>= 2.1.0' # keyword args
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.15"
25
- spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_development_dependency "bundler", "~> 2.0"
25
+ spec.add_development_dependency "rake", "~> 13.0"
26
26
  spec.add_development_dependency "rspec", "~> 3.0"
27
- spec.add_development_dependency "graphql", "~> 1.6"
28
- spec.add_development_dependency "pry-byebug", "~> 3.4"
27
+ spec.add_development_dependency "graphql", "~> 1.8"
28
+ spec.add_development_dependency "pry", "~> 0.14"
29
29
  spec.add_development_dependency "benchmark-ips", "~> 2.7"
30
30
  spec.add_development_dependency "ruby-prof", "~> 0.16"
31
31
  end
@@ -2,6 +2,6 @@ source "https://rubygems.org"
2
2
 
3
3
  gem 'coveralls'
4
4
 
5
- gem "graphql", "~> 1.7"
5
+ gem "graphql", ">= 1.8"
6
6
 
7
7
  gemspec
data/lib/batch_loader.rb CHANGED
@@ -23,11 +23,13 @@ class BatchLoader
23
23
  @__executor_proxy = executor_proxy
24
24
  end
25
25
 
26
- def batch(default_value: nil, cache: true, key: nil, &batch_block)
26
+ def batch(default_value: nil, cache: true, replace_methods: nil, key: nil, &batch_block)
27
27
  @default_value = default_value
28
28
  @cache = cache
29
+ @replace_methods = replace_methods.nil? ? cache : replace_methods
29
30
  @key = key
30
31
  @batch_block = batch_block
32
+
31
33
  __executor_proxy.add(item: @item)
32
34
 
33
35
  __singleton_class.class_eval { undef_method(:batch) }
@@ -74,7 +76,7 @@ class BatchLoader
74
76
  def __sync!
75
77
  loaded_value = __sync
76
78
 
77
- if @cache
79
+ if @replace_methods
78
80
  __replace_with!(loaded_value)
79
81
  else
80
82
  loaded_value
@@ -86,7 +88,7 @@ class BatchLoader
86
88
 
87
89
  items = __executor_proxy.list_items
88
90
  loader = __loader
89
- args = {default_value: @default_value, cache: @cache, key: @key}
91
+ args = {default_value: @default_value, cache: @cache, replace_methods: @replace_methods, key: @key}
90
92
  @batch_block.call(items, loader, args)
91
93
  items.each do |item|
92
94
  next if __executor_proxy.value_loaded?(item: item)
@@ -18,7 +18,7 @@ class BatchLoader
18
18
  end
19
19
 
20
20
  def list_items
21
- items_to_load.to_a
21
+ items_to_load.to_a.freeze
22
22
  end
23
23
 
24
24
  def delete(items:)
@@ -2,29 +2,65 @@
2
2
 
3
3
  class BatchLoader
4
4
  class GraphQL
5
- class Wrapper
6
- def initialize(batch_loader)
7
- @batch_loader = batch_loader
8
- end
5
+ def self.use(schema_definition)
6
+ schema_definition.lazy_resolve(BatchLoader::GraphQL, :sync)
9
7
 
10
- def sync
11
- @batch_loader.__sync
8
+ # in cases when BatchLoader is being used instead of BatchLoader::GraphQL
9
+ if schema_definition.respond_to?(:interpreter?) && schema_definition.interpreter?
10
+ schema_definition.tracer(self)
11
+ else
12
+ schema_definition.instrument(:field, self)
12
13
  end
13
14
  end
14
15
 
15
- def self.use(schema_definition)
16
- schema_definition.lazy_resolve(BatchLoader::GraphQL::Wrapper, :sync)
17
- schema_definition.instrument(:field, self)
16
+ def self.trace(event, _data)
17
+ if event == 'execute_field'
18
+ result = yield
19
+ result.respond_to?(:__sync) ? wrap_with_warning(result) : result
20
+ else
21
+ yield
22
+ end
18
23
  end
19
24
 
20
25
  def self.instrument(type, field)
21
26
  old_resolve_proc = field.resolve_proc
22
27
  new_resolve_proc = ->(object, arguments, context) do
23
28
  result = old_resolve_proc.call(object, arguments, context)
24
- result.respond_to?(:__sync) ? BatchLoader::GraphQL::Wrapper.new(result) : result
29
+ result.respond_to?(:__sync) ? wrap_with_warning(result) : result
25
30
  end
26
31
 
27
32
  field.redefine { resolve(new_resolve_proc) }
28
33
  end
34
+
35
+ def self.wrap_with_warning(batch_loader)
36
+ warn "DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver."
37
+ wrap(batch_loader)
38
+ end
39
+ private_class_method :wrap_with_warning
40
+
41
+ def self.wrap(batch_loader)
42
+ BatchLoader::GraphQL.new.tap do |graphql|
43
+ graphql.batch_loader = batch_loader
44
+ end
45
+ end
46
+
47
+ def self.for(item)
48
+ new(item)
49
+ end
50
+
51
+ attr_writer :batch_loader
52
+
53
+ def initialize(item = nil)
54
+ @batch_loader = BatchLoader.for(item)
55
+ end
56
+
57
+ def batch(*kwargs, &block)
58
+ @batch_loader.batch(*kwargs, &block)
59
+ self
60
+ end
61
+
62
+ def sync
63
+ @batch_loader.__sync
64
+ end
29
65
  end
30
66
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class BatchLoader
4
- VERSION = "1.2.2"
4
+ VERSION = "2.0.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: batch-loader
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - exAspArk
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-12-03 00:00:00.000000000 Z
11
+ date: 2021-02-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.15'
19
+ version: '2.0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.15'
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '13.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '13.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -58,28 +58,28 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.6'
61
+ version: '1.8'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '1.6'
68
+ version: '1.8'
69
69
  - !ruby/object:Gem::Dependency
70
- name: pry-byebug
70
+ name: pry
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '3.4'
75
+ version: '0.14'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '3.4'
82
+ version: '0.14'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: benchmark-ips
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -127,8 +127,7 @@ files:
127
127
  - batch-loader.gemspec
128
128
  - bin/console
129
129
  - bin/setup
130
- - graphql-1.7.gemfile
131
- - graphql-1.8.gemfile
130
+ - graphql-latest.gemfile
132
131
  - lib/batch-loader.rb
133
132
  - lib/batch_loader.rb
134
133
  - lib/batch_loader/executor.rb
@@ -140,7 +139,7 @@ homepage: https://github.com/exAspArk/batch-loader
140
139
  licenses:
141
140
  - MIT
142
141
  metadata: {}
143
- post_install_message:
142
+ post_install_message:
144
143
  rdoc_options: []
145
144
  require_paths:
146
145
  - lib
@@ -155,9 +154,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
155
154
  - !ruby/object:Gem::Version
156
155
  version: '0'
157
156
  requirements: []
158
- rubyforge_project:
159
- rubygems_version: 2.6.11
160
- signing_key:
157
+ rubygems_version: 3.2.3
158
+ signing_key:
161
159
  specification_version: 4
162
160
  summary: Powerful tool to avoid N+1 DB or HTTP queries
163
161
  test_files: []
data/graphql-1.8.gemfile DELETED
@@ -1,7 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gem 'coveralls'
4
-
5
- gem "graphql", "~> 1.8"
6
-
7
- gemspec