various-additions 0.3.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 0453a814c64b77f9dee54f1120000909b9221e286c13c43ed5d8bbc76dbdfbdb
4
+ data.tar.gz: 603103a5262e63286b055b1193fa57b680ced8073ab015de21ea99ddf49abcd4
5
+ SHA512:
6
+ metadata.gz: 4623ab9641819ffaedffaaaa6349ab732d0cd021dbfb45f68e591d6f10a0960b0e1097c0a5b1a28f72b6a8dba94d348fe718b714a3d63abfb6515d62c6782a4d
7
+ data.tar.gz: 331e4d94cfb5ecd9170f508a9eb37310076ec087d4eae3c5810c8bbfda3d4f245b58174b602d980cec0bf7e6dc2b220148e600b44ccafda44dda4e519dda463e
@@ -0,0 +1,2 @@
1
+ require_relative 'queue-with-timeout'
2
+ require_relative 'checksum'
@@ -0,0 +1,46 @@
1
+ require 'date'
2
+
3
+ module Checkers
4
+ def self.tmout_any?( tlast, *models )
5
+ !! models.select do |item|
6
+ if item.respond_to?( :created_at )
7
+ item.created_at + tlast < Time.now
8
+ else
9
+ case item
10
+ when Date
11
+ item + tlast < Time.now.to_date
12
+ when DateTime
13
+ item + tlast < Time.now.to_datetime
14
+ when Time, Date, DateTime
15
+ item + tlast < Time.now
16
+ when Numeric
17
+ item + tlast < Time.now.to_i
18
+ else
19
+ raise ArgumentError.new( "Can't measure tmout for #{ item.class.name.to_s }." )
20
+ end
21
+ end
22
+ end.any?
23
+ end
24
+
25
+ def self.tmout_all?( tlast, *models )
26
+ !! ( models.select do |item|
27
+ if item.respond_to?( :created_at )
28
+ item.created_at + tlast < Time.now
29
+ else
30
+ case item
31
+ when Date
32
+ item + tlast < Time.now.to_date
33
+ when DateTime
34
+ item + tlast < Time.now.to_datetime
35
+ when Time, Date, DateTime
36
+ item + tlast < Time.now
37
+ when Numeric
38
+ item + tlast < Time.now.to_i
39
+ else
40
+ raise ArgumentError.new( "Can't measure tmout for #{ item.class.name.to_s }." )
41
+ end
42
+ end
43
+ end.count == models.count )
44
+ end
45
+
46
+ end
@@ -0,0 +1,55 @@
1
+ module Checksum
2
+ module_function
3
+ def okpo?( n )
4
+ text = n.to_s
5
+ return false unless [ 8, 10 ].include?( text.length )
6
+ mul = 1
7
+ control = text.split('')[1..-2].reduce( text[0].to_i ){ |sum, x| sum + x.to_i * (mul += 1) } % 11
8
+ if control > 9
9
+ mul = 3
10
+ control = text.split('')[1..-2].reduce( text[0].to_i ){ |sum, x| sum + x.to_i * (mul += 1) } % 11
11
+ end
12
+ control = 0 if control > 9
13
+ control == text[-1].to_i
14
+ end
15
+
16
+ def inn?( n )
17
+ text = n.to_s.freeze
18
+ return false unless [ 10, 12 ].include?(text.length)
19
+ w = [
20
+ [ 7, 2, 4, 10, 3, 5, 9, 4, 6, 8 ],
21
+ [ 3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8 ],
22
+ [ 2, 4, 10, 3, 5, 9, 4, 6, 8 ]
23
+ ].freeze
24
+ if text.length == 12
25
+ i = -1
26
+ n2 = text.split('')[0..-3].reduce(0){ |sum, x| sum + x.to_i * w[0][i += 1] } % 11
27
+ n2 = 0 if n2 == 10
28
+
29
+ i = -1
30
+ n1 = text.split('')[0..-2].reduce(0){ |sum, x| sum + x.to_i * w[1][i += 1] } % 11
31
+ n1 = 0 if n1 == 10
32
+
33
+ return ( text[-2].to_i == n2 && text[-1].to_i == n1 )
34
+ else
35
+ i = -1
36
+ n1 = text.split('')[0..-2].reduce(0){ |sum, x| sum + x.to_i * w[2][i += 1] } % 11
37
+ n1 = 0 if n1 == 10
38
+
39
+ return ( text[-1].to_i == n1 )
40
+ end
41
+ end
42
+
43
+ def addr_or_name?( n )
44
+ n =~ /\W{4,}/ && n.length > 10
45
+ end
46
+
47
+ def ogrn?( n )
48
+ text = n.to_s.freeze
49
+ return false unless [13,15].include?( text.length )
50
+ z = 1
51
+ ctrl = text.split('')[0..-2].reduce(0){ |sum,x| z *= -1; sum + z * x.to_i }
52
+ ctrl = ctrl.to_s[-1].to_i if ctrl.abs > 9
53
+ text[-1].to_i == ctrl % (text.length - 2)
54
+ end
55
+ end
@@ -0,0 +1,18 @@
1
+ require 'monkey-hash'
2
+
3
+ # Ждём сообщения в очередь, при наступлении таймаута (если указан) вкидываем nil.
4
+
5
+ class QueueWithTimeout < Queue
6
+ def pop( tmout = nil )
7
+ if tmout.present? && tmout > 0
8
+ that = self
9
+ dog = Thread.new {
10
+ sleep tmout
11
+ that << nil
12
+ }
13
+ end
14
+ ret = super()
15
+ dog.kill.join
16
+ return ret
17
+ end
18
+ end
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: various-additions
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.1
5
+ platform: ruby
6
+ authors:
7
+ - deemytch
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-04-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: monkey-hash
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: cfgstore
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description:
42
+ email: aspamkiller@yandex.ru
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - lib/additions.rb
48
+ - lib/checkers.rb
49
+ - lib/checksum.rb
50
+ - lib/queue-with-timeout.rb
51
+ homepage: https://github.com/deemytch/various-additions
52
+ licenses:
53
+ - GPL-2.0
54
+ metadata: {}
55
+ post_install_message:
56
+ rdoc_options: []
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ requirements: []
70
+ rubygems_version: 3.1.2
71
+ signing_key:
72
+ specification_version: 4
73
+ summary: Дополнения и полезные утилиты, которые не вошли в monkey-hash
74
+ test_files: []