zold-score 0.3.2 → 0.3.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: 68392cfa1c2e06dd6c73d634175ee5b9be791022bfe1aa1a4a8cbad3162473d2
4
- data.tar.gz: f28d302d34fe57cf1aa6012e5e7a3af4f275f383118aa993196b3a5b19e95d81
3
+ metadata.gz: 3e8e3611ae87c09e55eb4f6ca4d9f2480d8247bae57009ec55cf4d3cdc44f097
4
+ data.tar.gz: 785e1f097278534c39d6bfad528138f0b16ee84041c27962dfdaebf81ef9b6b7
5
5
  SHA512:
6
- metadata.gz: dfd692c492b853c62786c0a88a8bbca50cd32e61ed544e877689c5b62ac61a2d3f01f1ce1d0690a32a7ecde3ebcd6f18827db92f6411e55d7e574b4dc485f0bc
7
- data.tar.gz: f6cef47b4f15809ee287a9a8097dd2a8999eba7fa13e7187da060f1e1cf610737394c1eb01b8a276625a256cf98abd9590cc99983ef4c1d58ae112a72ab29480
6
+ metadata.gz: 0b1e6c40f46bdcb1149ebca1b95e30806535d25257410ca6d98ed30d2d8d1ae2a73e079d4c5960f9d3bced6058b4c7d890f80d2297d848afc2865ac44ff082ff
7
+ data.tar.gz: 12822784b61069fbec36a2258658e4fb5536a67878eeb31b3e555aeac8a8a80b149c94bc275a9df6d6338d4ef3c4efe34711486eb85b6412d3a17ded0565357b
data/.rubocop.yml CHANGED
@@ -2,12 +2,16 @@ AllCops:
2
2
  DisplayCopNames: true
3
3
  TargetRubyVersion: 2.3.3
4
4
 
5
+ Layout/EmptyLineAfterGuardClause:
6
+ Enabled: false
5
7
  Layout/EndOfLine:
6
8
  EnforcedStyle: lf
7
9
  Metrics/LineLength:
8
10
  Max: 120
9
11
  Metrics/AbcSize:
10
12
  Max: 25
13
+ Metrics/BlockLength:
14
+ Max: 30
11
15
  Metrics/MethodLength:
12
16
  Max: 25
13
17
  Metrics/ClassLength:
@@ -23,9 +23,17 @@
23
23
  #include <vector>
24
24
  #include <openssl/sha.h>
25
25
  #include <ruby.h>
26
+ #include <ruby/thread.h>
26
27
 
27
28
  using namespace std;
28
29
 
30
+ struct index_params {
31
+ string prefix;
32
+ int strength;
33
+ string nonce;
34
+ bool keep_going;
35
+ };
36
+
29
37
  static
30
38
  array<uint8_t, SHA256_DIGEST_LENGTH> sha256(const string &string)
31
39
  {
@@ -61,7 +69,6 @@ string create_nonce(uint64_t i)
61
69
  "0123456789"
62
70
  "abcdefghijklmnopqrstuvwxyz"
63
71
  "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
64
-
65
72
  string rv;
66
73
  for (int l = 0; l < 6; l++) { // Cut to 6 sym
67
74
  rv += chars[i % chars.size()];
@@ -74,16 +81,25 @@ string create_nonce(uint64_t i)
74
81
  }
75
82
 
76
83
  static
77
- string index(const string &prefix, int strength)
84
+ void *index(void *arg)
78
85
  {
86
+ index_params *params = static_cast<index_params *>(arg);
79
87
  mt19937_64 random(uint64_t(time(nullptr)));
80
-
81
- for (uint64_t i = random(); ; i++) {
82
- const auto hash = sha256(prefix + " " + create_nonce(i));
83
- if (check_hash(hash, strength)) {
84
- return create_nonce(i);
88
+ for (uint64_t i = random(); params->keep_going; i++) {
89
+ const auto hash = sha256(params->prefix + " " + create_nonce(i));
90
+ if (check_hash(hash, params->strength)) {
91
+ params->nonce = create_nonce(i);
92
+ break;
85
93
  }
86
94
  }
95
+ return nullptr;
96
+ }
97
+
98
+ static
99
+ void unblocking_func(void *arg)
100
+ {
101
+ index_params *params = static_cast<index_params *>(arg);
102
+ params->keep_going = false;
87
103
  }
88
104
 
89
105
  static
@@ -98,10 +114,14 @@ static
98
114
  VALUE ScoreSuffix_value(VALUE self)
99
115
  {
100
116
  auto prefix_value = rb_iv_get(self, "@prefix");
101
- const string prefix = StringValuePtr(prefix_value);
102
- const int strength = NUM2INT(rb_iv_get(self, "@strength"));
103
- const auto nonce = index(prefix, strength);
104
- return rb_str_new2(nonce.c_str());
117
+ index_params params = {
118
+ StringValuePtr(prefix_value),
119
+ NUM2INT(rb_iv_get(self, "@strength")),
120
+ "",
121
+ true
122
+ };
123
+ rb_thread_call_without_gvl(index, &params, unblocking_func, &params);
124
+ return rb_str_new2(params.nonce.c_str());
105
125
  }
106
126
 
107
127
  extern "C"
@@ -21,7 +21,9 @@
21
21
  # SOFTWARE.
22
22
 
23
23
  require 'minitest/autorun'
24
+ require 'minitest/hooks/test'
24
25
  require 'tmpdir'
26
+ require 'timeout'
25
27
  require 'time'
26
28
  require_relative '../../lib/zold/score'
27
29
 
@@ -30,6 +32,18 @@ require_relative '../../lib/zold/score'
30
32
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
31
33
  # License:: MIT
32
34
  class TestScore < Minitest::Test
35
+ include Minitest::Hooks
36
+
37
+ # We need this in order to make sure any test is faster than a minute. This
38
+ # should help spotting tests that hang out sometimes. The number of seconds
39
+ # to wait can be increased, but try to make it as little as possible,
40
+ # in order to catch problems ealier.
41
+ def around
42
+ Timeout.timeout(10) do
43
+ super
44
+ end
45
+ end
46
+
33
47
  def test_reduces_itself
34
48
  score = Zold::Score.new(
35
49
  time: Time.parse('2017-07-19T21:24:51Z'),
@@ -164,4 +178,14 @@ class TestScore < Minitest::Test
164
178
  )
165
179
  assert_equal('e04ab4e69f86aa17be1316a52148e7bc3187c6d3df581d885a862d8850000000', score.hash)
166
180
  end
181
+
182
+ def test_lets_the_thread_to_die
183
+ score = Zold::Score.new(host: 'localhost', invoice: 'NOPREFIX@ffffffffffffffff', strength: 30)
184
+ thread = Thread.start do
185
+ score.next
186
+ end
187
+ sleep(0.1)
188
+ thread.kill
189
+ thread.join
190
+ end
167
191
  end
data/zold-score.gemspec CHANGED
@@ -27,7 +27,7 @@ Gem::Specification.new do |s|
27
27
  s.rubygems_version = '2.2'
28
28
  s.required_ruby_version = '>=2.3'
29
29
  s.name = 'zold-score'
30
- s.version = '0.3.2'
30
+ s.version = '0.3.3'
31
31
  s.license = 'MIT'
32
32
  s.summary = 'Zold score'
33
33
  s.description = 'Score calculating Ruby Gem for Zold'
@@ -42,9 +42,10 @@ Gem::Specification.new do |s|
42
42
  s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
43
43
  s.add_development_dependency 'codecov', '0.1.14'
44
44
  s.add_development_dependency 'minitest', '5.11.3'
45
+ s.add_development_dependency 'minitest-hooks', '1.5.0'
45
46
  s.add_development_dependency 'rake-compiler', '1.0.4'
46
47
  s.add_development_dependency 'rdoc', '4.3.0'
47
48
  s.add_development_dependency 'rspec-rails', '3.8.1'
48
- s.add_development_dependency 'rubocop', '0.58.1'
49
+ s.add_development_dependency 'rubocop', '0.60.0'
49
50
  s.add_development_dependency 'rubocop-rspec', '1.30.0'
50
51
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zold-score
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-21 00:00:00.000000000 Z
11
+ date: 2018-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: codecov
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
40
  version: 5.11.3
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest-hooks
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 1.5.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 1.5.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake-compiler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +100,14 @@ dependencies:
86
100
  requirements:
87
101
  - - '='
88
102
  - !ruby/object:Gem::Version
89
- version: 0.58.1
103
+ version: 0.60.0
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - '='
95
109
  - !ruby/object:Gem::Version
96
- version: 0.58.1
110
+ version: 0.60.0
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rubocop-rspec
99
113
  requirement: !ruby/object:Gem::Requirement