dockcheck 1.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4db77327141c60927c497dac9420f9f054810d1812cee41565a7a0bb5ce1524a
4
- data.tar.gz: cb28c66b5914807ae53ed9509068a7d269285ff76c9350d0852b6021e194befc
3
+ metadata.gz: 0334f4fff36db9957de8703cfb0a729fadf92677bff5e26cd2639dd14d0bf335
4
+ data.tar.gz: bf5fd6c357a00f436a0c75ed75d5e0a67b1166c4ad7d8aab4f85efdb97a2f16e
5
5
  SHA512:
6
- metadata.gz: 94e25d852a60b6dc4518fb98aa07da7ef09f1ab636204d79d1397df48cf69f2d516ec74e200eef076e8d5843533cdf3b46e4324cca8271519e4fda28b2e93964
7
- data.tar.gz: b5ce4d3d479da2c0fbcdea780686dc67fbb40f8b40473669142c5809e0ddf885f2718b80a878c936e2702dadc1224249c15942946a7b9bdc35c50518728e9c97
6
+ metadata.gz: bb1ff933ac9370992f3ee5ad68ff4adf25deb0d442fffcf2442556922b7939ce2ac8a2dafe6450b59a61129ec4a4f547107fc61dca74eaf119b3e2e02930520a
7
+ data.tar.gz: 44fc73683518fb66e17e9a12d649db25887c0f3765e446db8970a622c895bfbdfcbdb87a0ef821ad546ab69df93d6bd99d17f44c53abb7a61b6fb25f2aec9168
data/lib/dockcheck.rb CHANGED
@@ -1,45 +1,35 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class DockCheck
4
- @current_checker
5
4
  @checkers_map
6
5
 
7
- def initialize(checker = :inn)
6
+ def initialize()
8
7
  @checkers_map = {inn: Inn, snils: Snils, bik: Bik, kpp: Kpp, ogrnip: Ogrnip, ogrn: Ogrn}
9
- dispatch(checker)
10
8
  self
11
9
  end
12
10
 
13
- def check(numbers, *other_data)
14
- @current_checker.check(numbers, *other_data)
11
+ def check(data)
12
+ doc = DockHelper.prepare_doc(data)
13
+ checker = doc[:type]
14
+ if @checkers_map.key?(checker.to_sym)
15
+ @checkers_map[checker].check(doc)
16
+ else
17
+ raise 'Incorrect checker!'
18
+ end
15
19
  end
16
20
 
17
21
  def check_many(documents)
18
22
  documents.each do |document|
19
23
  checker = document[:type]
20
- doc = document[:content]
21
- extra = document[:extra]
22
- document[:correct] = @checkers_map[checker].new.check(doc, extra)
24
+ doc = DockHelper.prepare_doc(document)
25
+ @checkers_map[checker].check(doc)
23
26
  end
24
27
  end
25
28
 
26
- def change_checker(checker)
27
- dispatch(checker)
28
- self
29
- end
30
-
31
- def current_checker
32
- @current_checker.name()
29
+ def list_checkers
30
+ @checkers_map.map { |checker| checker.last.name }
33
31
  end
34
32
 
35
- private
36
- def dispatch(checker)
37
- if @checkers_map.key?(checker.to_sym)
38
- @current_checker = @checkers_map[checker].new
39
- else
40
- raise 'Incorrect checker!'
41
- end
42
- end
43
33
  end
44
34
 
45
35
  Dir[File.join(__dir__, 'dockcheck', '*.rb')].each { |file| require file }
data/lib/dockcheck/bik.rb CHANGED
@@ -4,16 +4,20 @@ require "#{__dir__}/dockhelper.rb"
4
4
 
5
5
  class DockCheck::Bik
6
6
 
7
- def check(bik, _)
7
+ def self.check(document)
8
+ bik = document[:content]
9
+
8
10
  case bik.length
9
11
  when 9
10
- DockHelper.only_digits?(bik)
12
+ document[:correct] = DockHelper.only_digits?(bik)
11
13
  else
12
- raise StandardError.new 'Incorrect bik numbers count!'
14
+ document[:error] = 'Incorrect bik numbers count!'
13
15
  end
16
+
17
+ document
14
18
  end
15
19
 
16
- def name
20
+ def self.name
17
21
  :bik
18
22
  end
19
23
 
@@ -10,4 +10,11 @@ class DockHelper
10
10
  document.scan(/\D/).empty?
11
11
  end
12
12
 
13
+ def self.prepare_doc(doc)
14
+ new_data = doc
15
+ new_data[:correct] = false
16
+ new_data[:error] = ""
17
+ new_data
18
+ end
19
+
13
20
  end
data/lib/dockcheck/inn.rb CHANGED
@@ -7,42 +7,45 @@ class DockCheck::Inn
7
7
  @@twelve_digits_first_map = [7, 2, 4, 10, 3, 5, 9, 4, 6, 8]
8
8
  @@twelve_digits_second_map = [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8]
9
9
 
10
- def check(numbers, _)
11
- inn = DockHelper.numberize_document(numbers)
10
+ def self.check(document)
11
+ inn = DockHelper.numberize_document(document[:content])
12
+
12
13
  case inn.count
13
14
  when 10
14
- ten_digit_inn_valid?(inn)
15
+ document[:correct] = ten_digit_inn_valid?(inn)
15
16
  when 12
16
- twelve_digit_inn_valid?(inn)
17
+ document[:correct] = twelve_digit_inn_valid?(inn)
17
18
  else
18
- raise StandardError.new 'Incorrect inn numbers count!'
19
+ document[:error] = 'Incorrect inn numbers count!'
19
20
  end
21
+
22
+ document
20
23
  end
21
24
 
22
- def name
25
+ def self.name
23
26
  :inn
24
27
  end
25
28
 
26
29
  private
27
30
 
28
- def control_sum_calc(inn, coefficients)
31
+ def self.control_sum_calc(inn, coefficients)
29
32
  inn
30
33
  .zip(coefficients)
31
34
  .filter { |(a, b)| !b.nil? }
32
35
  .reduce(0) { |acc, (a, b)| a * b + acc }
33
36
  end
34
37
 
35
- def sum_div(number)
38
+ def self.sum_div(number)
36
39
  number % 11 % 10
37
40
  end
38
41
 
39
- def ten_digit_inn_valid?(inn)
42
+ def self.ten_digit_inn_valid?(inn)
40
43
  last_number = inn.last
41
44
  control_sum = control_sum_calc(inn, @@ten_digits_map)
42
45
  last_number == sum_div(control_sum)
43
46
  end
44
47
 
45
- def twelve_digit_inn_valid?(inn)
48
+ def self.twelve_digit_inn_valid?(inn)
46
49
  last_number = inn.last
47
50
  penult_number = inn.fetch(10)
48
51
 
data/lib/dockcheck/kpp.rb CHANGED
@@ -2,22 +2,26 @@
2
2
 
3
3
  class DockCheck::Kpp
4
4
 
5
- def check(kpp, _)
5
+ def self.check(document)
6
+ kpp = document[:content]
7
+
6
8
  case kpp.length
7
9
  when 9
8
- kpp_valid?(kpp)
10
+ document[:correct] = kpp_valid?(kpp)
9
11
  else
10
- raise StandardError.new 'Incorrect kpp numbers count!'
12
+ document[:error] = 'Incorrect kpp numbers count!'
11
13
  end
14
+
15
+ document
12
16
  end
13
17
 
14
- def name
18
+ def self.name
15
19
  :kpp
16
20
  end
17
21
 
18
22
  private
19
23
 
20
- def kpp_valid?(kpp)
24
+ def self.kpp_valid?(kpp)
21
25
  !!(kpp =~ /^[0-9]{4}[0-9A-Z]{2}[0-9]{3}$/)
22
26
  end
23
27
  end
@@ -4,26 +4,31 @@ require "#{__dir__}/dockhelper.rb"
4
4
 
5
5
  class DockCheck::Ogrn
6
6
 
7
- def check(ogrn, _)
7
+ def self.check(document)
8
+ ogrn = document[:content]
9
+
8
10
  case ogrn.length
9
11
  when 13
10
- if DockHelper.only_digits?(ogrn)
11
- ogrn_valid?(ogrn)
12
- else
13
- false
14
- end
12
+ document[:correct] =
13
+ if DockHelper.only_digits?(ogrn)
14
+ ogrn_valid?(ogrn)
15
+ else
16
+ false
17
+ end
15
18
  else
16
- raise StandardError.new 'Incorrect ogrn numbers count!'
19
+ document[:error] = 'Incorrect ogrn numbers count!'
17
20
  end
21
+
22
+ document
18
23
  end
19
24
 
20
- def name
25
+ def self.name
21
26
  :ogrn
22
27
  end
23
28
 
24
29
  private
25
30
 
26
- def ogrn_valid?(ogrn)
31
+ def self.ogrn_valid?(ogrn)
27
32
  first_code = ogrn[0..12].to_i
28
33
  second_code = (first_code / 11).floor * 11
29
34
  result_sum = (first_code - second_code) % 10
@@ -4,26 +4,31 @@ require "#{__dir__}/dockhelper.rb"
4
4
 
5
5
  class DockCheck::Ogrnip
6
6
 
7
- def check(ogrnip, _)
7
+ def self.check(document)
8
+ ogrnip = document[:content]
9
+
8
10
  case ogrnip.length
9
11
  when 15
10
- if DockHelper.only_digits?(ogrnip)
11
- ogrnip_valid?(ogrnip)
12
- else
13
- false
14
- end
12
+ document[:correct] =
13
+ if DockHelper.only_digits?(ogrnip)
14
+ ogrnip_valid?(ogrnip)
15
+ else
16
+ false
17
+ end
15
18
  else
16
- raise StandardError.new 'Incorrect ogrnip numbers count!'
19
+ document[:error] = 'Incorrect ogrnip numbers count!'
17
20
  end
21
+
22
+ document
18
23
  end
19
24
 
20
- def name
25
+ def self.name
21
26
  :ogrnip
22
27
  end
23
28
 
24
29
  private
25
30
 
26
- def ogrnip_valid?(ogrnip)
31
+ def self.ogrnip_valid?(ogrnip)
27
32
  first_code = ogrnip[0..13].to_i
28
33
  second_code = (first_code / 13).floor * 13
29
34
  result_sum = (first_code - second_code) % 10
@@ -5,31 +5,34 @@ require "#{__dir__}/dockhelper.rb"
5
5
  class DockCheck::Snils
6
6
  @@coefficients_map = [9, 8, 7, 6, 5, 4, 3, 2, 1]
7
7
 
8
- def check(numbers, _)
9
- snils = DockHelper.numberize_document(numbers)
8
+ def self.check(document)
9
+ snils = DockHelper.numberize_document(document[:content])
10
+
10
11
  case snils.count
11
12
  when 11
12
- last_digits = numbers.slice(9, 10).to_i
13
- snils_valid?(snils, last_digits)
13
+ last_digits = document[:content].slice(9, 10).to_i
14
+ document[:correct] = snils_valid?(snils, last_digits)
14
15
  else
15
- raise StandardError.new 'Incorrect snils numbers count!'
16
+ document[:error] = 'Incorrect snils numbers count!'
16
17
  end
18
+
19
+ document
17
20
  end
18
21
 
19
- def name
22
+ def self.name
20
23
  :snils
21
24
  end
22
25
 
23
26
  private
24
27
 
25
- def control_sum_calc(inn, coefficients)
28
+ def self.control_sum_calc(inn, coefficients)
26
29
  inn
27
30
  .zip(coefficients)
28
31
  .filter { |(a, b)| !b.nil? }
29
32
  .reduce(0) { |acc, (a, b)| a * b + acc }
30
33
  end
31
34
 
32
- def check_control_sum(control_sum)
35
+ def self.check_control_sum(control_sum)
33
36
  if control_sum < 100
34
37
  control_sum
35
38
  elsif control_sum == 100
@@ -40,7 +43,7 @@ class DockCheck::Snils
40
43
  end
41
44
  end
42
45
 
43
- def snils_valid?(snils, last_digits)
46
+ def self.snils_valid?(snils, last_digits)
44
47
  control_sum = control_sum_calc(snils, @@coefficients_map)
45
48
  last_digits == check_control_sum(control_sum)
46
49
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dockcheck
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artem Solomatin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-04 00:00:00.000000000 Z
11
+ date: 2021-07-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -50,7 +50,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: 2.7.0
53
+ version: 2.5.0
54
54
  required_rubygems_version: !ruby/object:Gem::Requirement
55
55
  requirements:
56
56
  - - ">="