batch-loader 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 124dbf8b2fa20f0e0fd6bca686449f48c3dd3625
4
- data.tar.gz: d10abd20d3f55f64871673b5410c8d92539abaa5
3
+ metadata.gz: 0cb2bec5ff8fdc6fd2c2ec099c1db9ca07916594
4
+ data.tar.gz: af763f4dc852c3f2b4ca73a3ce0ff639ea544f0a
5
5
  SHA512:
6
- metadata.gz: 4e97a8dcbb31e6310dc2b40df35143f6bdac4a1153b1ea9de175f07b36e8df0da7890e1c445f91c782e3ac1804ee0129107329685e0aac50dcafadbe17278c3a
7
- data.tar.gz: 93188a2738ac3f57735e0643003818b19eb4875c2b748fbbf0e19751c837a8ba32247b84fa84533bb2bbe84515eb35fc28f31929813871c6eb21b9fc08a1d4b8
6
+ metadata.gz: 699d6d95a80c2b7b7c366979277bb003c0eada94ea087df1812b2b1754ac70d6a518608bd25c7ae3d6665d6d0629c9836811c2e9d0e07bf3879064bf4f0b11c7
7
+ data.tar.gz: 614b0b57b84e80a7f1de5af9d961c4ca78252e4c84e3a624fa49a25810acae7c6ec2648c8a573cddc2b9620896645d966d79b8c936c02f09b3cca0eb1a445d18
@@ -8,10 +8,14 @@ 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.1.0...HEAD)
11
+ #### [Unreleased](https://github.com/exAspArk/batch-loader/compare/v1.1.1...HEAD)
12
12
 
13
13
  * WIP
14
14
 
15
+ #### [v1.1.1](https://github.com/exAspArk/batch-loader/compare/v1.1.0...v1.1.1)
16
+
17
+ * `Fixed`: `loader`, made it thread-safe again. [#10](https://github.com/exAspArk/batch-loader/pull/10)
18
+
15
19
  #### [v1.1.0](https://github.com/exAspArk/batch-loader/compare/v1.0.4...v1.1.0)
16
20
 
17
21
  * `Added`: `default_value` override option. [#8](https://github.com/exAspArk/batch-loader/pull/8)
@@ -18,8 +18,9 @@ class BatchLoader
18
18
  new(item: item)
19
19
  end
20
20
 
21
- def initialize(item:)
21
+ def initialize(item:, executor_proxy: nil)
22
22
  @item = item
23
+ @__executor_proxy = executor_proxy
23
24
  end
24
25
 
25
26
  def batch(default_value: nil, cache: true, &batch_block)
@@ -76,23 +77,29 @@ class BatchLoader
76
77
  return if __executor_proxy.value_loaded?(item: @item)
77
78
 
78
79
  items = __executor_proxy.list_items
79
- loader = -> (item, value = (no_value = true; nil), &block) {
80
+ loader = __loader
81
+ @batch_block.call(items, loader)
82
+ items.each do |item|
83
+ next if __executor_proxy.value_loaded?(item: item)
84
+ loader.call(item, @default_value)
85
+ end
86
+ __executor_proxy.delete(items: items)
87
+ end
88
+
89
+ def __loader
90
+ mutex = Mutex.new
91
+ -> (item, value = (no_value = true; nil), &block) do
80
92
  if no_value && !block
81
93
  raise ArgumentError, "Please pass a value or a block"
82
94
  elsif block && !no_value
83
95
  raise ArgumentError, "Please pass a value or a block, not both"
84
96
  end
85
97
 
86
- next_value = block ? block.call(__executor_proxy.loaded_value(item: item)) : value
87
- __executor_proxy.load(item: item, value: next_value)
88
- }
89
-
90
- @batch_block.call(items, loader)
91
- items.each do |item|
92
- next if __executor_proxy.value_loaded?(item: item)
93
- loader.call(item, @default_value)
98
+ mutex.synchronize do
99
+ next_value = block ? block.call(__executor_proxy.loaded_value(item: item)) : value
100
+ __executor_proxy.load(item: item, value: next_value)
101
+ end
94
102
  end
95
- __executor_proxy.delete(items: items)
96
103
  end
97
104
 
98
105
  def __singleton_class
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class BatchLoader
4
- VERSION = "1.1.0"
4
+ VERSION = "1.1.1"
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.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - exAspArk
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-11-02 00:00:00.000000000 Z
11
+ date: 2017-11-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler