dockcheck 1.5.0 → 2.0.3

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: ae7aaa0ca2abb56b55e0ff11c0b816ec17e4e7626ed22bdea52700d971383686
4
- data.tar.gz: b5574801c3f3dc57dfa68d709c498eb0c1de1c8875bc8f501832f9d04dc1064f
3
+ metadata.gz: ed9065176dd1b7f5415c1aec2868487cfd32132596d12e293e14576ac70bb1ed
4
+ data.tar.gz: ad0d88dfa11855d9854a201c3382c0afc93dcb577f9c8456d917434f9d3a3b57
5
5
  SHA512:
6
- metadata.gz: 365180ad497aaf40d805dfc377516e474cce8c0e041ef756372f3e929a3409bb0e6fa0c6d7ac705c0374f42c620c3c080108d433de0ee1cfd36020bed0117d09
7
- data.tar.gz: b66ae04b7c81c9ddfd1a00359a3e3b861f5c2118b4a80dcf223b294617242a2997fd73fe91256bd39cff0ea85a4ff0fff8381d7afb1fc312d5df412c1cb05fcb
6
+ metadata.gz: ee4a9956d5790887cf7cbac5e5251e17344939d5ee52725a938ef19a1b18b7cb724eec900476d0fb49cf36f704efb7da5b4658784770f94d25cafd795ea97bc9
7
+ data.tar.gz: bb1d2dd63c048ccba919dc685485af9bdc3ee3a555d5940f3699d7097aa89e235080f6771d28bf9f112abb0b2538de86f49e9305a8748dbbe2aad9f6ea3ac5fc
data/lib/dockcheck.rb CHANGED
@@ -1,37 +1,52 @@
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)
11
+ def check(data)
12
+ document = DockHelper.prepare_doc(data)
13
+ check_doc(document)
13
14
  end
14
15
 
15
- def change_checker(checker)
16
- dispatch(checker)
17
- self
16
+ def check_many(documents)
17
+ documents.each do |document|
18
+ doc = DockHelper.prepare_doc(document)
19
+ check_doc(doc)
20
+ end
18
21
  end
19
22
 
20
- def current_checker
21
- @current_checker.name()
23
+ def list_checkers
24
+ @checkers_map.map { |checker| checker.last.name }
22
25
  end
23
26
 
24
27
  private
25
- def dispatch(checker)
26
- checkers_map = {inn: Inn, snils: Snils, bik: Bik, kpp: Kpp, ogrnip: Ogrnip, ogrn: Ogrn}
27
28
 
28
- if checkers_map.key?(checker.to_sym)
29
- @current_checker = checkers_map[checker].new
29
+ def check_doc(doc)
30
+ checker = doc[:type]
31
+ result = doc
32
+
33
+ if checker
34
+ if @checkers_map.key?(checker.to_sym)
35
+ if doc[:content]
36
+ result = @checkers_map[checker].check(doc)
37
+ else
38
+ result[:error] = 'Content field required!'
39
+ end
40
+ else
41
+ result[:error] = 'Incorrect checker!'
42
+ end
30
43
  else
31
- raise 'Incorrect checker!'
44
+ result[:error] = 'Document type field required!'
32
45
  end
46
+
47
+ result
33
48
  end
49
+
34
50
  end
35
51
 
36
52
  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
@@ -1,31 +1,34 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "#{__dir__}/dockhelper.rb"
4
+
3
5
  class DockCheck::Ogrn
4
6
 
5
- def check(ogrn, _)
7
+ def self.check(document)
8
+ ogrn = document[:content]
9
+
6
10
  case ogrn.length
7
11
  when 13
8
- if only_digits?(ogrn)
9
- ogrn_valid?(ogrn)
10
- else
11
- false
12
- end
12
+ document[:correct] =
13
+ if DockHelper.only_digits?(ogrn)
14
+ ogrn_valid?(ogrn)
15
+ else
16
+ false
17
+ end
13
18
  else
14
- raise StandardError.new 'Incorrect ogrn numbers count!'
19
+ document[:error] = 'Incorrect ogrn numbers count!'
15
20
  end
21
+
22
+ document
16
23
  end
17
24
 
18
- def name
25
+ def self.name
19
26
  :ogrn
20
27
  end
21
28
 
22
29
  private
23
30
 
24
- def only_digits?(ogrn)
25
- ogrn.scan(/\D/).empty?
26
- end
27
-
28
- def ogrn_valid?(ogrn)
31
+ def self.ogrn_valid?(ogrn)
29
32
  first_code = ogrn[0..12].to_i
30
33
  second_code = (first_code / 11).floor * 11
31
34
  result_sum = (first_code - second_code) % 10
@@ -1,31 +1,34 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "#{__dir__}/dockhelper.rb"
4
+
3
5
  class DockCheck::Ogrnip
4
6
 
5
- def check(ogrnip, _)
7
+ def self.check(document)
8
+ ogrnip = document[:content]
9
+
6
10
  case ogrnip.length
7
11
  when 15
8
- if only_digits?(ogrnip)
9
- ogrnip_valid?(ogrnip)
10
- else
11
- false
12
- end
12
+ document[:correct] =
13
+ if DockHelper.only_digits?(ogrnip)
14
+ ogrnip_valid?(ogrnip)
15
+ else
16
+ false
17
+ end
13
18
  else
14
- raise StandardError.new 'Incorrect ogrnip numbers count!'
19
+ document[:error] = 'Incorrect ogrnip numbers count!'
15
20
  end
21
+
22
+ document
16
23
  end
17
24
 
18
- def name
25
+ def self.name
19
26
  :ogrnip
20
27
  end
21
28
 
22
29
  private
23
30
 
24
- def only_digits?(ogrnip)
25
- ogrnip.scan(/\D/).empty?
26
- end
27
-
28
- def ogrnip_valid?(ogrnip)
31
+ def self.ogrnip_valid?(ogrnip)
29
32
  first_code = ogrnip[0..13].to_i
30
33
  second_code = (first_code / 13).floor * 13
31
34
  result_sum = (first_code - second_code) % 10
@@ -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.5.0
4
+ version: 2.0.3
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-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -32,6 +32,7 @@ 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
37
38
  - lib/dockcheck/ogrn.rb
@@ -49,7 +50,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
49
50
  requirements:
50
51
  - - ">="
51
52
  - !ruby/object:Gem::Version
52
- version: 2.7.0
53
+ version: 2.6.0
53
54
  required_rubygems_version: !ruby/object:Gem::Requirement
54
55
  requirements:
55
56
  - - ">="