digger 0.1.8 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/digger/index.rb +29 -0
- data/lib/digger/version.rb +1 -1
- data/spec/index_spec.rb +16 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed96af1c5ae92569e1de4885958ac5852864c045f6c6337d5f17d91747d8ed80
|
4
|
+
data.tar.gz: 82003ae80f54cd3f9b805757e5dcb4c7894bba91c4c376cf08ebd43e6de6e80b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b7aad69fd46c7d1688026ece2e1efe14d7dea29b42f94656d794655e12a92677bd3e1034f0c776bf197bcd75c96bd49377df399433bd2e1c13507520af1addc5
|
7
|
+
data.tar.gz: 60055a69ec3ad77e80fc4f1b50bb3a6c298e2274827ae21b64d1d82dae53a1d5338ccc99bcdb09c7d2e946abd007a488ff3034a753bc54586e9b651aeb3c5ce7
|
data/lib/digger/index.rb
CHANGED
@@ -17,6 +17,35 @@ module Digger
|
|
17
17
|
pattern.gsub('*').each_with_index { |_, i| arg[i] }
|
18
18
|
end
|
19
19
|
|
20
|
+
def self.slow_down(entities, conf = {}, &block)
|
21
|
+
raise NoBlockError, 'No block given' unless block
|
22
|
+
|
23
|
+
config = {
|
24
|
+
sleep_range_seconds: 4...10, # 随机等待时间范围
|
25
|
+
fail_max_cnt: 10, # 最多失败次数
|
26
|
+
fail_unit_seconds: 10 * 60, # 失败等待时间
|
27
|
+
when_fail: ->(ent, e, failed_cnt) {}
|
28
|
+
}.merge(conf)
|
29
|
+
failed_cnt = 0
|
30
|
+
cursor = 0
|
31
|
+
result = []
|
32
|
+
while cursor < entities.length
|
33
|
+
begin
|
34
|
+
result << block.call(entities[cursor])
|
35
|
+
rescue StandardError => e
|
36
|
+
failed_cnt += 1
|
37
|
+
config[:when_fail].call(entities[cursor], e, failed_cnt)
|
38
|
+
break if failed_cnt >= config[:fail_max_cnt]
|
39
|
+
|
40
|
+
sleep(failed_cnt * config[:fail_unit_seconds])
|
41
|
+
else
|
42
|
+
cursor += 1
|
43
|
+
sleep(rand(config[:sleep_range_seconds]))
|
44
|
+
end
|
45
|
+
end
|
46
|
+
result
|
47
|
+
end
|
48
|
+
|
20
49
|
def self.batch(entities, cocurrence = 1, &block)
|
21
50
|
raise NoBlockError, 'No block given' unless block
|
22
51
|
|
data/lib/digger/version.rb
CHANGED
data/spec/index_spec.rb
CHANGED
@@ -9,4 +9,20 @@ describe Digger::Index do
|
|
9
9
|
end
|
10
10
|
expect(pt.join).to eq(list.map { |num| "##{num}" }.join)
|
11
11
|
end
|
12
|
+
|
13
|
+
it 'slow down' do
|
14
|
+
list = [1, 2, 3, 4]
|
15
|
+
conf = {
|
16
|
+
sleep_range_seconds: 1...2,
|
17
|
+
fail_unit_seconds: 1,
|
18
|
+
fail_max_cnt: 2,
|
19
|
+
when_fail: ->(_, e, nth) { puts "#{nth}: #{e.message}" }
|
20
|
+
}
|
21
|
+
pt = Digger::Index.slow_down(list, conf) do |num|
|
22
|
+
raise 'error' if num == 3
|
23
|
+
num
|
24
|
+
end
|
25
|
+
p pt
|
26
|
+
expect(pt.size).to eq(2)
|
27
|
+
end
|
12
28
|
end
|