dockcheck 1.3.1 → 2.0.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: 3d171f2c4d241e2c32f77cdcff6c0d81d9db7db81467610873126be57fe36649
4
- data.tar.gz: a99ba98ec717d4ee3178cef11bff8f323146f7a5ea237aa62ac9888bfb8a9214
3
+ metadata.gz: ce6335c554c010b4ef8e38830655dc51522ff2cf8fb9b059208b7ee7f3cda679
4
+ data.tar.gz: 34486681d359d60c93f09cd4160951c8ff16e3df3885f5d344d75c9e2fba079a
5
5
  SHA512:
6
- metadata.gz: 824018480964b8acafb978f634dede9df9e1367936e2d6a992bf2e63e1933d114625346514c2c5e19faafb771d9f72bd512fe84b0fdf63a4efd69974802b9880
7
- data.tar.gz: 24bfc2ca9e4a2f5ddfbe50f511148c0cecbd933b4c809b61b633df29e83d5269e34d437afaee0b9df2cd7850efd1d7dc02d2d8dde0c5578c3385768363682ce9
6
+ metadata.gz: 047a29ec46c09464e4a108ac4d0b73639e5ea1840cf88e21cc9709eb748103acf5369514864d5962cbb6170f8fc949f09f8cd29c8dea01f9ba949a4694a54dfb
7
+ data.tar.gz: e8c8f66ad72f8a5c519b0a9a9464da987651b055d0331e3714036f5c7cf8022de54eb5dbb97524992a90cf083d69a1d36c76a9fb16938557308e76764b4473db
data/lib/dockcheck.rb CHANGED
@@ -1,37 +1,47 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class DockCheck
4
- @current_checker
4
+ @checkers_map
5
5
 
6
- def initialize(checker = :inn)
7
- dispatch(checker)
6
+ def initialize()
7
+ @checkers_map = {inn: Inn, snils: Snils, bik: Bik, kpp: Kpp, ogrnip: Ogrnip, ogrn: Ogrn}
8
8
  self
9
9
  end
10
10
 
11
- def check(numbers, *other_data)
12
- @current_checker.check(numbers, *other_data)
13
- end
11
+ def check(data)
12
+ doc = DockHelper.prepare_doc(data)
13
+ checker = doc[:type]
14
+ result = doc
15
+
16
+ if checker
17
+ if @checkers_map.key?(checker.to_sym)
18
+ if doc[:content]
19
+ result = @checkers_map[checker].check(doc)
20
+ else
21
+ result[:error] = 'Content field required!'
22
+ end
23
+ else
24
+ result[:error] = 'Incorrect checker!'
25
+ end
26
+ else
27
+ result[:error] = 'Document type field required!'
28
+ end
14
29
 
15
- def change_checker(checker)
16
- dispatch(checker)
17
- self
30
+ result
18
31
  end
19
32
 
20
- def current_checker
21
- @current_checker.name()
33
+ def check_many(documents)
34
+ documents.each do |document|
35
+ checker = document[:type]
36
+ doc = DockHelper.prepare_doc(document)
37
+ @checkers_map[checker].check(doc)
38
+ end
22
39
  end
23
40
 
24
- private
25
- def dispatch(checker)
26
- checkers_map = {inn: Inn, snils: Snils, bik: Bik, kpp: Kpp}
27
-
28
- if checkers_map.key?(checker.to_sym)
29
- @current_checker = checkers_map[checker].new
30
- else
31
- raise 'Incorrect checker!'
32
- end
41
+ def list_checkers
42
+ @checkers_map.map { |checker| checker.last.name }
33
43
  end
44
+
34
45
  end
35
46
 
36
47
  Dir[File.join(__dir__, 'dockcheck', '*.rb')].each { |file| require file }
37
-
data/lib/dockcheck/bik.rb CHANGED
@@ -1,23 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "#{__dir__}/dockhelper.rb"
4
+
3
5
  class DockCheck::Bik
4
6
 
5
- def check(bik, _)
7
+ def self.check(document)
8
+ bik = document[:content]
9
+
6
10
  case bik.length
7
11
  when 9
8
- bik_valid?(bik)
12
+ document[:correct] = DockHelper.only_digits?(bik)
9
13
  else
10
- raise StandardError.new 'Incorrect bik numbers count!'
14
+ document[:error] = 'Incorrect bik numbers count!'
11
15
  end
16
+
17
+ document
12
18
  end
13
19
 
14
- def name
20
+ def self.name
15
21
  :bik
16
22
  end
17
23
 
18
- private
19
-
20
- def bik_valid?(bik)
21
- bik.scan(/\D/).empty?
22
- end
23
24
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ class DockHelper
4
+
5
+ def self.numberize_document(numbers)
6
+ numbers.split('').map(&:to_i)
7
+ end
8
+
9
+ def self.only_digits?(document)
10
+ document.scan(/\D/).empty?
11
+ end
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
+
20
+ end
data/lib/dockcheck/inn.rb CHANGED
@@ -1,49 +1,51 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "#{__dir__}/dockhelper.rb"
4
+
3
5
  class DockCheck::Inn
4
6
  @@ten_digits_map = [2, 4, 10, 3, 5, 9, 4, 6, 8]
5
7
  @@twelve_digits_first_map = [7, 2, 4, 10, 3, 5, 9, 4, 6, 8]
6
8
  @@twelve_digits_second_map = [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8]
7
9
 
8
- def check(numbers, _)
9
- inn = prepare_inn(numbers)
10
+ def self.check(document)
11
+ inn = DockHelper.numberize_document(document[:content])
12
+
10
13
  case inn.count
11
14
  when 10
12
- ten_digit_inn_valid?(inn)
15
+ document[:correct] = ten_digit_inn_valid?(inn)
13
16
  when 12
14
- twelve_digit_inn_valid?(inn)
17
+ document[:correct] = twelve_digit_inn_valid?(inn)
15
18
  else
16
- raise StandardError.new 'Incorrect inn numbers count!'
19
+ document[:error] = 'Incorrect inn numbers count!'
17
20
  end
21
+
22
+ document
18
23
  end
19
24
 
20
- def name
25
+ def self.name
21
26
  :inn
22
27
  end
23
28
 
24
29
  private
25
- def prepare_inn(numbers)
26
- numbers.split('').map(&:to_i)
27
- end
28
30
 
29
- def control_sum_calc(inn, coefficients)
31
+ def self.control_sum_calc(inn, coefficients)
30
32
  inn
31
33
  .zip(coefficients)
32
34
  .filter { |(a, b)| !b.nil? }
33
35
  .reduce(0) { |acc, (a, b)| a * b + acc }
34
36
  end
35
37
 
36
- def sum_div(number)
38
+ def self.sum_div(number)
37
39
  number % 11 % 10
38
40
  end
39
41
 
40
- def ten_digit_inn_valid?(inn)
42
+ def self.ten_digit_inn_valid?(inn)
41
43
  last_number = inn.last
42
44
  control_sum = control_sum_calc(inn, @@ten_digits_map)
43
45
  last_number == sum_div(control_sum)
44
46
  end
45
47
 
46
- def twelve_digit_inn_valid?(inn)
48
+ def self.twelve_digit_inn_valid?(inn)
47
49
  last_number = inn.last
48
50
  penult_number = inn.fetch(10)
49
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
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "#{__dir__}/dockhelper.rb"
4
+
5
+ class DockCheck::Ogrn
6
+
7
+ def self.check(document)
8
+ ogrn = document[:content]
9
+
10
+ case ogrn.length
11
+ when 13
12
+ document[:correct] =
13
+ if DockHelper.only_digits?(ogrn)
14
+ ogrn_valid?(ogrn)
15
+ else
16
+ false
17
+ end
18
+ else
19
+ document[:error] = 'Incorrect ogrn numbers count!'
20
+ end
21
+
22
+ document
23
+ end
24
+
25
+ def self.name
26
+ :ogrn
27
+ end
28
+
29
+ private
30
+
31
+ def self.ogrn_valid?(ogrn)
32
+ first_code = ogrn[0..12].to_i
33
+ second_code = (first_code / 11).floor * 11
34
+ result_sum = (first_code - second_code) % 10
35
+ result_sum == ogrn[13].to_i
36
+ end
37
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "#{__dir__}/dockhelper.rb"
4
+
5
+ class DockCheck::Ogrnip
6
+
7
+ def self.check(document)
8
+ ogrnip = document[:content]
9
+
10
+ case ogrnip.length
11
+ when 15
12
+ document[:correct] =
13
+ if DockHelper.only_digits?(ogrnip)
14
+ ogrnip_valid?(ogrnip)
15
+ else
16
+ false
17
+ end
18
+ else
19
+ document[:error] = 'Incorrect ogrnip numbers count!'
20
+ end
21
+
22
+ document
23
+ end
24
+
25
+ def self.name
26
+ :ogrnip
27
+ end
28
+
29
+ private
30
+
31
+ def self.ogrnip_valid?(ogrnip)
32
+ first_code = ogrnip[0..13].to_i
33
+ second_code = (first_code / 13).floor * 13
34
+ result_sum = (first_code - second_code) % 10
35
+ result_sum == ogrnip[14].to_i
36
+ end
37
+ end
@@ -1,36 +1,38 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "#{__dir__}/dockhelper.rb"
4
+
3
5
  class DockCheck::Snils
4
6
  @@coefficients_map = [9, 8, 7, 6, 5, 4, 3, 2, 1]
5
7
 
6
- def check(numbers, _)
7
- snils = prepare_snils(numbers)
8
+ def self.check(document)
9
+ snils = DockHelper.numberize_document(document[:content])
10
+
8
11
  case snils.count
9
12
  when 11
10
- last_digits = numbers.slice(9, 10).to_i
11
- snils_valid?(snils, last_digits)
13
+ last_digits = document[:content].slice(9, 10).to_i
14
+ document[:correct] = snils_valid?(snils, last_digits)
12
15
  else
13
- raise StandardError.new 'Incorrect snils numbers count!'
16
+ document[:error] = 'Incorrect snils numbers count!'
14
17
  end
18
+
19
+ document
15
20
  end
16
21
 
17
- def name
22
+ def self.name
18
23
  :snils
19
24
  end
20
25
 
21
26
  private
22
- def prepare_snils(numbers)
23
- numbers.split('').map(&:to_i)
24
- end
25
27
 
26
- def control_sum_calc(inn, coefficients)
28
+ def self.control_sum_calc(inn, coefficients)
27
29
  inn
28
30
  .zip(coefficients)
29
31
  .filter { |(a, b)| !b.nil? }
30
32
  .reduce(0) { |acc, (a, b)| a * b + acc }
31
33
  end
32
34
 
33
- def check_control_sum(control_sum)
35
+ def self.check_control_sum(control_sum)
34
36
  if control_sum < 100
35
37
  control_sum
36
38
  elsif control_sum == 100
@@ -41,7 +43,7 @@ class DockCheck::Snils
41
43
  end
42
44
  end
43
45
 
44
- def snils_valid?(snils, last_digits)
46
+ def self.snils_valid?(snils, last_digits)
45
47
  control_sum = control_sum_calc(snils, @@coefficients_map)
46
48
  last_digits == check_control_sum(control_sum)
47
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.3.1
4
+ version: 2.0.1
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-06-27 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
@@ -32,8 +32,11 @@ extra_rdoc_files: []
32
32
  files:
33
33
  - lib/dockcheck.rb
34
34
  - lib/dockcheck/bik.rb
35
+ - lib/dockcheck/dockhelper.rb
35
36
  - lib/dockcheck/inn.rb
36
37
  - lib/dockcheck/kpp.rb
38
+ - lib/dockcheck/ogrn.rb
39
+ - lib/dockcheck/ogrnip.rb
37
40
  - lib/dockcheck/snils.rb
38
41
  homepage: https://rubygems.org/gems/dockcheck
39
42
  licenses:
@@ -47,7 +50,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
47
50
  requirements:
48
51
  - - ">="
49
52
  - !ruby/object:Gem::Version
50
- version: 2.7.0
53
+ version: 2.5.0
51
54
  required_rubygems_version: !ruby/object:Gem::Requirement
52
55
  requirements:
53
56
  - - ">="