legitbot 1.6.0 → 1.6.1

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: df2907ab34b159613adf21c3301607f53fa893e0823f81560e45ad2c8303075b
4
- data.tar.gz: fe913e9b72878969839326da227c1169ad8234a8ae335e276f614b53e5777d42
3
+ metadata.gz: 0bd071c617ddb67424715ae30b92783fa0155ca182c7ef0c7cac0a5962eff8d1
4
+ data.tar.gz: 33ed371772200f2d27d95d083782d73d1572eeac329f63e5e3d5f14937151b72
5
5
  SHA512:
6
- metadata.gz: f8af647da764cd722f27f2936f8f9728f9cdd7b313e295d9c80ebe7144a601a5360f5b615039d5afe75f7ded891e3bfc06292383e9e41e342977d39f1e485dab
7
- data.tar.gz: 74e3dd5cb2c4d2e7df717c6bb3a072c74aa51b922f7f71d280cde82387ba458d30970f85c4f79508852ef5c2969196bd640427bf2323104229616960314fb9df
6
+ metadata.gz: d188e8a97d9fd5115897f69c31a2f43f8b55b0426bd932c347800fd023231dfbc1c6c4ada108c94cdd4258673cbee06d012182ef3e815ff7be8b010b9d4eb4db
7
+ data.tar.gz: a00e24aa78775c201f9587286bb7cec46ec9993687ace3e675c2e4f585ff4ff56839f9a977e9709dab13e652098e72910a6f86b4dbc5fa38083970ca9085c143
@@ -0,0 +1,44 @@
1
+ name: autocorrect
2
+
3
+ on:
4
+ schedule:
5
+ - cron: '29 6 * * 6'
6
+
7
+ jobs:
8
+ lint:
9
+ runs-on: ubuntu-latest
10
+
11
+ strategy:
12
+ matrix:
13
+ ruby: [ 3.0 ]
14
+
15
+ steps:
16
+ - uses: actions/checkout@v2
17
+ - name: Set up Ruby
18
+ uses: ruby/setup-ruby@v1
19
+ with:
20
+ ruby-version: ${{ matrix.ruby }}
21
+ - name: Cache dependencies
22
+ uses: actions/cache@v1
23
+ with:
24
+ path: vendor/bundle
25
+ key: ${{ runner.os }}-${{ matrix.ruby }}-gems-${{ hashFiles('**/Gemfile.lock') }}
26
+ restore-keys: |
27
+ ${{ runner.os }}-${{ matrix.ruby }}-gems-
28
+ - name: Install dependencies
29
+ run: |
30
+ bundle config path vendor/bundle
31
+ bundle install --jobs 4 --retry 3
32
+ - name: Run tests
33
+ run: bundle exec rake test
34
+ - name: Run linter
35
+ run: bundle exec rubocop --auto-correct
36
+ - name: Create Pull Request
37
+ uses: peter-evans/create-pull-request@v3
38
+ with:
39
+ branch: update/lint-autocorrect
40
+ delete-branch: true
41
+ commit-message: '🔧 autocorrect by Rubocop'
42
+ title: '[rubocop] Automatic corrections'
43
+ body: |
44
+ Please review automatic changes proposed by `rubocop -a`.
@@ -3,8 +3,6 @@ name: build
3
3
  on:
4
4
  pull_request:
5
5
  push:
6
- schedule:
7
- - cron: '29 6 * * 6'
8
6
 
9
7
  jobs:
10
8
  test:
data/.rubocop.yml CHANGED
@@ -1,5 +1,6 @@
1
1
  require:
2
- - rubocop-minitest
2
+ - rubocop-minitest
3
+ - rubocop/cop/custom
3
4
 
4
5
  AllCops:
5
6
  CacheRootDirectory: 'vendor'
@@ -14,3 +15,6 @@ Naming/MemoizedInstanceVariableName:
14
15
 
15
16
  Style/MapToHash:
16
17
  Enabled: false
18
+
19
+ Custom/IpRanges:
20
+ Enabled: true
data/legitbot.gemspec CHANGED
@@ -26,9 +26,10 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency 'dns_mock', '~> 1.5.0', '>= 1.5.0'
27
27
  spec.add_development_dependency 'minitest', '~> 5.1', '>= 5.1.0'
28
28
  spec.add_development_dependency 'minitest-hooks', '~> 1.5', '>= 1.5.0'
29
+ spec.add_development_dependency 'nokogiri', '~> 1.13.0', '>= 1.13.0'
29
30
  spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.0'
30
- spec.add_development_dependency 'rubocop', '~> 1.24.0', '>= 1.24.0'
31
- spec.add_development_dependency 'rubocop-minitest', '~> 0.17.0', '>= 0.17.0'
31
+ spec.add_development_dependency 'rubocop', '~> 1.28.0', '>= 1.28.0'
32
+ spec.add_development_dependency 'rubocop-minitest', '~> 0.19.0', '>= 0.19.0'
32
33
 
33
34
  spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
34
35
  spec.rdoc_options = ['--charset=UTF-8']
@@ -3,21 +3,21 @@
3
3
  module Legitbot # :nodoc:
4
4
  # https://duckduckgo.com/duckduckbot
5
5
  class DuckDuckGo < BotMatch
6
+ # @fetch:url https://help.duckduckgo.com/duckduckgo-help-pages/results/duckduckbot/
7
+ # @fetch:selector section.main article.content ul > li
6
8
  ip_ranges %w[
7
- 20.191.45.212
8
- 40.88.21.235
9
- 40.76.173.151
10
- 40.76.163.7
11
- 20.185.79.47
12
- 52.142.26.175
13
9
  20.185.79.15
14
- 52.142.24.149
15
- 40.76.162.208
16
- 40.76.163.23
10
+ 20.185.79.47
11
+ 20.191.45.212
17
12
  40.76.162.191
13
+ 40.76.162.208
18
14
  40.76.162.247
19
- 54.208.102.37
20
- 107.21.1.8
15
+ 40.76.163.7
16
+ 40.76.163.23
17
+ 40.76.173.151
18
+ 40.88.21.235
19
+ 52.142.24.149
20
+ 52.142.26.175
21
21
  ]
22
22
  end
23
23
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Legitbot
4
- VERSION = '1.6.0'
4
+ VERSION = '1.6.1'
5
5
  end
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ipaddr'
4
+ require 'net/http'
5
+ require 'nokogiri'
6
+ require 'rubocop'
7
+ require 'uri'
8
+
9
+ module RuboCop
10
+ module Cop
11
+ module Custom
12
+ class IpRanges < Base # :nodoc:
13
+ extend AutoCorrector
14
+
15
+ MSG = 'Outdated list of IP ranges compared to %<url>s'
16
+ REGEXP = /^\s*#\s*@fetch:(?<param>[a-z0-9_]+)\s+(?<arg>.*)?/
17
+
18
+ def_node_matcher :on_ip_ranges, <<~PATTERN
19
+ (send nil? :ip_ranges $(array str+))
20
+ PATTERN
21
+
22
+ def on_send(node)
23
+ on_ip_ranges(node) do |value|
24
+ params = fetch_params(node)
25
+ return unless mandatory_params?(params)
26
+
27
+ existing_ips = read_node_ips value
28
+ new_ips = fetch_ips(**params)
29
+ return if existing_ips == new_ips
30
+
31
+ register_offense(value, new_ips, **params)
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def fetch_ips(url:, selector:)
38
+ response = Net::HTTP.get_response URI(url)
39
+ response.value
40
+
41
+ document = Nokogiri::HTML response.body
42
+ document.css(selector).map(&:content).sort_by(&IPAddr.method(:new))
43
+ end
44
+
45
+ def read_node_ips(value)
46
+ value.child_nodes.map(&:value).sort_by(&IPAddr.method(:new))
47
+ end
48
+
49
+ def register_offense(node, new_ips, **params)
50
+ message = format(MSG, params)
51
+ add_offense node, message: message do |corrector|
52
+ corrector.replace node, node_replacement(new_ips)
53
+ end
54
+ end
55
+
56
+ def mandatory_params?(params)
57
+ params.include?(:url) && params.include?(:selector)
58
+ end
59
+
60
+ def fetch_params(node)
61
+ comments = processed_source.ast_with_comments[node]
62
+ comments.map do |comment|
63
+ match = comment.text.match(REGEXP)
64
+ next unless match
65
+
66
+ [match[:param].to_sym, match[:arg]]
67
+ end.compact.to_h
68
+ end
69
+
70
+ def node_replacement(new_ips)
71
+ contents = new_ips.join("\n")
72
+ "%w[\n#{contents}\n]"
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'custom/ip_ranges'
data/test/ahrefs_test.rb CHANGED
@@ -12,13 +12,13 @@ class AhrefsTest < Minitest::Test
12
12
  def test_malicious_ip
13
13
  ip = '149.210.164.47'
14
14
  match = Legitbot::Ahrefs.new ip
15
- refute match.valid?
15
+ refute_predicate match, :valid?
16
16
  end
17
17
 
18
18
  def test_valid_ip
19
19
  ip = '54.36.148.0'
20
20
  match = Legitbot::Ahrefs.new ip
21
- assert match.valid?
21
+ assert_predicate match, :valid?
22
22
  end
23
23
 
24
24
  def test_malicious_ua
@@ -27,7 +27,7 @@ class AhrefsTest < Minitest::Test
27
27
  '149.210.164.47'
28
28
  )
29
29
  assert bot
30
- refute bot.valid?
30
+ refute_predicate bot, :valid?
31
31
  end
32
32
 
33
33
  def test_valid_ua
@@ -36,6 +36,6 @@ class AhrefsTest < Minitest::Test
36
36
  '54.36.148.0'
37
37
  )
38
38
  assert bot
39
- assert bot.valid?
39
+ assert_predicate bot, :valid?
40
40
  end
41
41
  end
data/test/alexa_test.rb CHANGED
@@ -12,13 +12,13 @@ class AlexaTest < Minitest::Test
12
12
  def test_malicious_ip
13
13
  ip = '149.210.164.47'
14
14
  match = Legitbot::Alexa.new ip
15
- refute match.valid?
15
+ refute_predicate match, :valid?
16
16
  end
17
17
 
18
18
  def test_valid_ip
19
19
  ip = '52.86.176.3'
20
20
  match = Legitbot::Alexa.new ip
21
- assert match.valid?
21
+ assert_predicate match, :valid?
22
22
  end
23
23
 
24
24
  def test_malicious_ua
@@ -27,7 +27,7 @@ class AlexaTest < Minitest::Test
27
27
  '149.210.164.47'
28
28
  )
29
29
  assert bot
30
- refute bot.valid?
30
+ refute_predicate bot, :valid?
31
31
  end
32
32
 
33
33
  def test_valid_ua
@@ -36,6 +36,6 @@ class AlexaTest < Minitest::Test
36
36
  '52.86.176.3'
37
37
  )
38
38
  assert bot
39
- assert bot.valid?
39
+ assert_predicate bot, :valid?
40
40
  end
41
41
  end
data/test/amazon_test.rb CHANGED
@@ -12,13 +12,13 @@ class AmazonTest < Minitest::Test
12
12
  def test_malicious_ip
13
13
  ip = '149.210.164.47'
14
14
  match = Legitbot::Amazon.new ip
15
- refute match.valid?
15
+ refute_predicate match, :valid?
16
16
  end
17
17
 
18
18
  def test_valid_ip
19
19
  ip = '54.166.7.90'
20
20
  match = Legitbot::Amazon.new ip
21
- assert match.valid?
21
+ assert_predicate match, :valid?
22
22
  end
23
23
 
24
24
  def test_malicious_ua
@@ -27,7 +27,7 @@ class AmazonTest < Minitest::Test
27
27
  '149.210.164.47'
28
28
  )
29
29
  assert bot
30
- refute bot.valid?
30
+ refute_predicate bot, :valid?
31
31
  end
32
32
 
33
33
  def test_valid_ua
@@ -36,7 +36,7 @@ class AmazonTest < Minitest::Test
36
36
  '54.166.7.90'
37
37
  )
38
38
  assert bot
39
- assert bot.valid?
39
+ assert_predicate bot, :valid?
40
40
  end
41
41
 
42
42
  def test_valid_name
data/test/apple_test.rb CHANGED
@@ -12,13 +12,13 @@ class AppleTest < Minitest::Test
12
12
  def test_valid_ip
13
13
  ip = '17.58.98.60'
14
14
  match = Legitbot::Apple.new(ip)
15
- assert match.valid?
15
+ assert_predicate match, :valid?
16
16
  end
17
17
 
18
18
  def test_invalid_ip
19
19
  ip = '127.0.0.1'
20
20
  match = Legitbot::Apple.new(ip)
21
- assert match.fake?
21
+ assert_predicate match, :fake?
22
22
  end
23
23
 
24
24
  # rubocop:disable Layout/LineLength
@@ -28,7 +28,7 @@ class AppleTest < Minitest::Test
28
28
  '17.58.98.60'
29
29
  )
30
30
  assert_equal :apple, bot.detected_as
31
- assert bot.valid?
31
+ assert_predicate bot, :valid?
32
32
  end
33
33
  # rubocop:enable Layout/LineLength
34
34
  end
@@ -20,17 +20,17 @@ class FacebookTest < Minitest::Test
20
20
  def test_valid_ip
21
21
  ip = '69.63.186.89'
22
22
  match = Legitbot::Facebook.new(ip)
23
- assert match.valid?
23
+ assert_predicate match, :valid?
24
24
 
25
25
  ip = '69.171.251.1'
26
26
  match = Legitbot::Facebook.new(ip)
27
- assert match.valid?
27
+ assert_predicate match, :valid?
28
28
  end
29
29
 
30
30
  def test_invalid_ip
31
31
  ip = '127.0.0.1'
32
32
  match = Legitbot::Facebook.new(ip)
33
- assert match.fake?
33
+ assert_predicate match, :fake?
34
34
  end
35
35
 
36
36
  def test_user_agent1
@@ -39,7 +39,7 @@ class FacebookTest < Minitest::Test
39
39
  '31.13.76.56'
40
40
  ) do |bot|
41
41
  assert_equal :facebook, bot.detected_as
42
- assert bot.valid?
42
+ assert_predicate bot, :valid?
43
43
  end
44
44
  end
45
45
 
@@ -49,7 +49,7 @@ class FacebookTest < Minitest::Test
49
49
  '173.252.87.8'
50
50
  ) do |bot|
51
51
  assert_equal :facebook, bot.detected_as
52
- assert bot.valid?
52
+ assert_predicate bot, :valid?
53
53
  end
54
54
  end
55
55
 
@@ -60,7 +60,7 @@ class FacebookTest < Minitest::Test
60
60
  '92.243.181.7'
61
61
  ) do |bot|
62
62
  assert_includes %i[facebook twitter], bot.detected_as
63
- assert bot.fake?
63
+ assert_predicate bot, :fake?
64
64
  end
65
65
  end
66
66
  # rubocop:enable Layout/LineLength
data/test/google_test.rb CHANGED
@@ -12,13 +12,13 @@ class GoogleTest < Minitest::Test
12
12
  def test_malicious_ip
13
13
  ip = '149.210.164.47'
14
14
  match = Legitbot::Google.new ip
15
- refute match.valid?
15
+ refute_predicate match, :valid?
16
16
  end
17
17
 
18
18
  def test_valid_ip
19
19
  ip = '66.249.64.141'
20
20
  match = Legitbot::Google.new ip
21
- assert match.valid?
21
+ assert_predicate match, :valid?
22
22
  end
23
23
 
24
24
  def test_malicious_ua
@@ -27,7 +27,7 @@ class GoogleTest < Minitest::Test
27
27
  '149.210.164.47'
28
28
  )
29
29
  assert bot
30
- refute bot.valid?
30
+ refute_predicate bot, :valid?
31
31
  end
32
32
 
33
33
  def test_valid_ua
@@ -36,7 +36,7 @@ class GoogleTest < Minitest::Test
36
36
  '66.249.64.141'
37
37
  )
38
38
  assert bot
39
- assert bot.valid?
39
+ assert_predicate bot, :valid?
40
40
  end
41
41
 
42
42
  def test_valid_name
@@ -87,7 +87,7 @@ module Legitbot
87
87
  assert EmptyRanges.valid_ip?('2a03:2880:f234:0:0:0:0:1')
88
88
 
89
89
  matcher = EmptyRanges.new '127.0.0.0'
90
- assert matcher.valid_ip?
90
+ assert_predicate matcher, :valid_ip?
91
91
  end
92
92
 
93
93
  def test_matcher_array
@@ -107,15 +107,15 @@ module Legitbot
107
107
  # rubocop:disable Metrics/AbcSize
108
108
  def test_matcher_loader
109
109
  assert_equal 0, LoadRanges.counter
110
- assert LoadRanges.new('127.127.127.127').valid_ip?
111
- refute LoadRanges.new('10.10.10.10').valid_ip?
112
- refute LoadRanges.new('192.168.127.254').valid_ip?
110
+ assert_predicate LoadRanges.new('127.127.127.127'), :valid_ip?
111
+ refute_predicate LoadRanges.new('10.10.10.10'), :valid_ip?
112
+ refute_predicate LoadRanges.new('192.168.127.254'), :valid_ip?
113
113
  assert_equal 1, LoadRanges.counter
114
114
 
115
115
  LoadRanges.reload_ips
116
- refute LoadRanges.new('127.127.127.127').valid_ip?
117
- refute LoadRanges.new('10.10.10.10').valid_ip?
118
- assert LoadRanges.new('192.168.127.254').valid_ip?
116
+ refute_predicate LoadRanges.new('127.127.127.127'), :valid_ip?
117
+ refute_predicate LoadRanges.new('10.10.10.10'), :valid_ip?
118
+ assert_predicate LoadRanges.new('192.168.127.254'), :valid_ip?
119
119
  assert_equal 2, LoadRanges.counter
120
120
  end
121
121
  # rubocop:enable Metrics/AbcSize
data/test/oracle_test.rb CHANGED
@@ -7,13 +7,13 @@ class OracleTest < Minitest::Test
7
7
  def test_malicious_ip
8
8
  ip = '149.210.164.47'
9
9
  match = Legitbot::Oracle.new ip
10
- refute match.valid?
10
+ refute_predicate match, :valid?
11
11
  end
12
12
 
13
13
  def test_valid_ip
14
14
  ip = '148.64.56.64'
15
15
  match = Legitbot::Oracle.new ip
16
- assert match.valid?
16
+ assert_predicate match, :valid?
17
17
  end
18
18
 
19
19
  def test_malicious_ua
@@ -22,7 +22,7 @@ class OracleTest < Minitest::Test
22
22
  '149.210.164.47'
23
23
  )
24
24
  assert bot
25
- refute bot.valid?
25
+ refute_predicate bot, :valid?
26
26
  end
27
27
 
28
28
  def test_valid_ua
@@ -31,6 +31,6 @@ class OracleTest < Minitest::Test
31
31
  '148.64.56.64'
32
32
  )
33
33
  assert bot
34
- assert bot.valid?
34
+ assert_predicate bot, :valid?
35
35
  end
36
36
  end
@@ -12,13 +12,13 @@ class PetalbotTest < Minitest::Test
12
12
  def test_malicious_ip
13
13
  ip = '149.210.164.47'
14
14
  match = Legitbot::Petalbot.new ip
15
- refute match.valid?
15
+ refute_predicate match, :valid?
16
16
  end
17
17
 
18
18
  def test_valid_ip
19
19
  ip = '114.119.134.10'
20
20
  match = Legitbot::Petalbot.new ip
21
- assert match.valid?
21
+ assert_predicate match, :valid?
22
22
  end
23
23
 
24
24
  def test_malicious_ua
@@ -27,7 +27,7 @@ class PetalbotTest < Minitest::Test
27
27
  '149.210.164.47'
28
28
  )
29
29
  assert bot
30
- refute bot.valid?
30
+ refute_predicate bot, :valid?
31
31
  end
32
32
 
33
33
  def test_valid_ua
@@ -36,7 +36,7 @@ class PetalbotTest < Minitest::Test
36
36
  '114.119.134.10'
37
37
  )
38
38
  assert bot
39
- assert bot.valid?
39
+ assert_predicate bot, :valid?
40
40
  end
41
41
 
42
42
  def test_valid_name
@@ -12,13 +12,13 @@ class PinterestTest < Minitest::Test
12
12
  def test_malicious_ip
13
13
  ip = '149.210.164.47'
14
14
  match = Legitbot::Pinterest.new ip
15
- refute match.valid?
15
+ refute_predicate match, :valid?
16
16
  end
17
17
 
18
18
  def test_valid_ip
19
19
  ip = '54.236.1.11'
20
20
  match = Legitbot::Pinterest.new ip
21
- assert match.valid?
21
+ assert_predicate match, :valid?
22
22
  end
23
23
 
24
24
  def test_malicious_ua
@@ -27,7 +27,7 @@ class PinterestTest < Minitest::Test
27
27
  '149.210.164.47'
28
28
  )
29
29
  assert bot
30
- refute bot.valid?
30
+ refute_predicate bot, :valid?
31
31
  end
32
32
 
33
33
  def test_valid_ua
@@ -36,7 +36,7 @@ class PinterestTest < Minitest::Test
36
36
  '54.236.1.11'
37
37
  )
38
38
  assert bot
39
- assert bot.valid?
39
+ assert_predicate bot, :valid?
40
40
  end
41
41
 
42
42
  # rubocop:disable Layout/LineLength
data/test/twitter_test.rb CHANGED
@@ -7,13 +7,13 @@ class TwitterTest < Minitest::Test
7
7
  def test_malicious_ip
8
8
  ip = '149.210.164.47'
9
9
  match = Legitbot::Twitter.new ip
10
- refute match.valid?
10
+ refute_predicate match, :valid?
11
11
  end
12
12
 
13
13
  def test_valid_ip
14
14
  ip = '199.16.156.125'
15
15
  match = Legitbot::Twitter.new ip
16
- assert match.valid?
16
+ assert_predicate match, :valid?
17
17
  end
18
18
 
19
19
  def test_malicious_ua
@@ -22,7 +22,7 @@ class TwitterTest < Minitest::Test
22
22
  '149.210.164.47'
23
23
  )
24
24
  assert bot
25
- refute bot.valid?
25
+ refute_predicate bot, :valid?
26
26
  end
27
27
 
28
28
  def test_valid_ua
@@ -31,6 +31,6 @@ class TwitterTest < Minitest::Test
31
31
  '199.16.156.125'
32
32
  )
33
33
  assert bot
34
- assert bot.valid?
34
+ assert_predicate bot, :valid?
35
35
  end
36
36
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: legitbot
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Azarov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-02 00:00:00.000000000 Z
11
+ date: 2022-04-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fast_interval_tree
@@ -130,6 +130,26 @@ dependencies:
130
130
  - - ">="
131
131
  - !ruby/object:Gem::Version
132
132
  version: 1.5.0
133
+ - !ruby/object:Gem::Dependency
134
+ name: nokogiri
135
+ requirement: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: 1.13.0
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: 1.13.0
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: 1.13.0
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: 1.13.0
133
153
  - !ruby/object:Gem::Dependency
134
154
  name: rake
135
155
  requirement: !ruby/object:Gem::Requirement
@@ -156,40 +176,40 @@ dependencies:
156
176
  requirements:
157
177
  - - "~>"
158
178
  - !ruby/object:Gem::Version
159
- version: 1.24.0
179
+ version: 1.28.0
160
180
  - - ">="
161
181
  - !ruby/object:Gem::Version
162
- version: 1.24.0
182
+ version: 1.28.0
163
183
  type: :development
164
184
  prerelease: false
165
185
  version_requirements: !ruby/object:Gem::Requirement
166
186
  requirements:
167
187
  - - "~>"
168
188
  - !ruby/object:Gem::Version
169
- version: 1.24.0
189
+ version: 1.28.0
170
190
  - - ">="
171
191
  - !ruby/object:Gem::Version
172
- version: 1.24.0
192
+ version: 1.28.0
173
193
  - !ruby/object:Gem::Dependency
174
194
  name: rubocop-minitest
175
195
  requirement: !ruby/object:Gem::Requirement
176
196
  requirements:
177
197
  - - "~>"
178
198
  - !ruby/object:Gem::Version
179
- version: 0.17.0
199
+ version: 0.19.0
180
200
  - - ">="
181
201
  - !ruby/object:Gem::Version
182
- version: 0.17.0
202
+ version: 0.19.0
183
203
  type: :development
184
204
  prerelease: false
185
205
  version_requirements: !ruby/object:Gem::Requirement
186
206
  requirements:
187
207
  - - "~>"
188
208
  - !ruby/object:Gem::Version
189
- version: 0.17.0
209
+ version: 0.19.0
190
210
  - - ">="
191
211
  - !ruby/object:Gem::Version
192
- version: 0.17.0
212
+ version: 0.19.0
193
213
  description: Does Web request come from a real search engine or from an impersonating
194
214
  agent?
195
215
  email: self@alaz.me
@@ -198,6 +218,7 @@ extensions: []
198
218
  extra_rdoc_files: []
199
219
  files:
200
220
  - ".editorconfig"
221
+ - ".github/workflows/autocorrect.yml"
201
222
  - ".github/workflows/build.yml"
202
223
  - ".gitignore"
203
224
  - ".rubocop.yml"
@@ -228,6 +249,8 @@ files:
228
249
  - lib/legitbot/validators/ip_ranges.rb
229
250
  - lib/legitbot/version.rb
230
251
  - lib/legitbot/yandex.rb
252
+ - lib/rubocop/cop/custom.rb
253
+ - lib/rubocop/cop/custom/ip_ranges.rb
231
254
  - rakelib/bump.rake
232
255
  - rakelib/bundler.rake
233
256
  - rakelib/console.rake