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 +4 -4
- data/.rubocop.yml +4 -0
- data/ext/score_suffix/ScoreSuffix.cpp +31 -11
- data/test/zold/test_score.rb +24 -0
- data/zold-score.gemspec +3 -2
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3e8e3611ae87c09e55eb4f6ca4d9f2480d8247bae57009ec55cf4d3cdc44f097
|
4
|
+
data.tar.gz: 785e1f097278534c39d6bfad528138f0b16ee84041c27962dfdaebf81ef9b6b7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
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
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
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, ¶ms, unblocking_func, ¶ms);
|
124
|
+
return rb_str_new2(params.nonce.c_str());
|
105
125
|
}
|
106
126
|
|
107
127
|
extern "C"
|
data/test/zold/test_score.rb
CHANGED
@@ -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.
|
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.
|
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.
|
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-
|
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.
|
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.
|
110
|
+
version: 0.60.0
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: rubocop-rspec
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|