zold-score 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|