digger 0.1.8 → 0.1.9

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
2
  SHA256:
3
- metadata.gz: 19e59bc2161a078d80d00adf538a7c33891a53f9beeb453748eec7e0810c5b65
4
- data.tar.gz: da1d93c663b42a6e0b7be2f136bea3b0f3a86c3c36c57a72347c70e7e0538508
3
+ metadata.gz: ed96af1c5ae92569e1de4885958ac5852864c045f6c6337d5f17d91747d8ed80
4
+ data.tar.gz: 82003ae80f54cd3f9b805757e5dcb4c7894bba91c4c376cf08ebd43e6de6e80b
5
5
  SHA512:
6
- metadata.gz: d13b06c8491f9cda42f8a8fd4fa9547aa6a95d075efbf52c789760adaa66d0c2bde24f810e23e4713df4362ae82cb82b0d61996386caaad2c685eb22f1a375db
7
- data.tar.gz: a63a5cfe70b154b446dcbd0d2937d94a33fb033277c0d17aa1500a9ccd86dc8791e3cc40e8487ecc1c609eec304b91fb4a29b75b89a74b8efe24e29c49957d4e
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
 
@@ -1,3 +1,3 @@
1
1
  module Digger
2
- VERSION = '0.1.8'.freeze
2
+ VERSION = '0.1.9'.freeze
3
3
  end
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: digger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - binz