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 +5 -5
- data/.gitignore +1 -0
- data/.travis.yml +12 -22
- data/CHANGELOG.md +47 -1
- data/README.md +101 -36
- data/batch-loader.gemspec +4 -4
- data/{graphql-1.7.gemfile → graphql-latest.gemfile} +1 -1
- data/lib/batch_loader.rb +5 -3
- data/lib/batch_loader/executor_proxy.rb +1 -1
- data/lib/batch_loader/graphql.rb +46 -10
- data/lib/batch_loader/version.rb +1 -1
- metadata +16 -18
- data/graphql-1.8.gemfile +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c1f4ff945285ef2833b1e70fd4c840b5a5dac71184941822cc5e4ed0b699e403
|
4
|
+
data.tar.gz: fa257f5d8e8a43e39300ad916112affb26365b7d9bf98d09a612a8652e512ffc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 998465ddf29713fa411892ce9d88c2195d992444ef2f2e6e22a61fe9c1af036534e580791e7313517e084efb79e46826e9fe6ecf37442b703dc4adc8715954b9
|
7
|
+
data.tar.gz: 9834b2600bc1673d57926a245f463b5f8dd4bf637a59a5c6d384249fe9a6c4d2006adc500884f0593d31db2e81c48cc2bde151605a4e30e79a49530f0114f4bf
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,23 +1,13 @@
|
|
1
|
-
sudo: false
|
2
1
|
language: ruby
|
3
|
-
before_install: gem install bundler -v
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
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/
|
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
|
-
|
227
|
-
query QueryType
|
238
|
+
class MyProjectSchema < GraphQL::Schema
|
239
|
+
query Types::QueryType
|
228
240
|
end
|
229
241
|
|
230
|
-
|
231
|
-
|
232
|
-
|
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
|
-
|
236
|
-
|
237
|
-
|
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
|
-
|
241
|
-
|
242
|
-
|
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
|
-
|
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
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
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
|
-
|
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|
|
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(
|
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
|
402
|
-
| ---------------
|
403
|
-
| `item`
|
404
|
-
| `default_value`
|
405
|
-
| `cache`
|
406
|
-
| `
|
407
|
-
| `
|
408
|
-
| `
|
409
|
-
| `
|
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", "~>
|
25
|
-
spec.add_development_dependency "rake", "~>
|
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.
|
28
|
-
spec.add_development_dependency "pry
|
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
|
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 @
|
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)
|
data/lib/batch_loader/graphql.rb
CHANGED
@@ -2,29 +2,65 @@
|
|
2
2
|
|
3
3
|
class BatchLoader
|
4
4
|
class GraphQL
|
5
|
-
|
6
|
-
|
7
|
-
@batch_loader = batch_loader
|
8
|
-
end
|
5
|
+
def self.use(schema_definition)
|
6
|
+
schema_definition.lazy_resolve(BatchLoader::GraphQL, :sync)
|
9
7
|
|
10
|
-
|
11
|
-
|
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.
|
16
|
-
|
17
|
-
|
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) ?
|
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
|
data/lib/batch_loader/version.rb
CHANGED
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:
|
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:
|
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: '
|
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: '
|
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: '
|
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: '
|
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.
|
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.
|
68
|
+
version: '1.8'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name: pry
|
70
|
+
name: pry
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
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: '
|
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-
|
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
|
-
|
159
|
-
|
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: []
|