super_random 3.2.230118 → 3.2.230213
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/README.md +3 -3
- data/lib/super_random.rb +19 -17
- metadata +126 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22e0311c10d4d5713318a8d42b1710477c60f93ffbcda9014d125761246d4c94
|
4
|
+
data.tar.gz: a703a7dc1eebb662736a6f45645dc18091cb4c0c717062a83c6285f51c085099
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 44b375eae14a0ef677074d24b1b3c60fcf0021f9ab6074f9e0ad4237a8f92acf7aba25735d3fe314376d3675beb0f43e94b18bd62dbb3541a93f9cb887dd8185
|
7
|
+
data.tar.gz: 3af65a15f411e9c02d729131a9002d34de5cb4a342a6cc6df72f9732ce2419a4ba4e016c3bc330025d03a077573250cc3ac0eb8e28ef1d8126d7e78a1903b09d
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# SuperRandom
|
2
2
|
|
3
|
-
* [VERSION 3.2.
|
3
|
+
* [VERSION 3.2.230213](https://github.com/carlosjhr64/super_random/releases)
|
4
4
|
* [github](https://github.com/carlosjhr64/super_random)
|
5
5
|
* [rubygems](https://rubygems.org/gems/super_random)
|
6
6
|
|
@@ -17,7 +17,7 @@ You can't get more random than random, but you can try really, really, really ha
|
|
17
17
|
## SYNOPSIS:
|
18
18
|
```ruby
|
19
19
|
require 'super_random'
|
20
|
-
SuperRandom::VERSION
|
20
|
+
SuperRandom::VERSION #~> ^3.\d+.\d+$
|
21
21
|
SuperRandom::DEFAULT_SOURCES #~> www.random.org
|
22
22
|
super_random = SuperRandom.new
|
23
23
|
super_random.sources #~> www.random.org
|
@@ -83,7 +83,7 @@ super_random.sources
|
|
83
83
|
|
84
84
|
(The MIT License)
|
85
85
|
|
86
|
-
Copyright (c) 2023
|
86
|
+
Copyright (c) 2023 CarlosJHR64
|
87
87
|
|
88
88
|
Permission is hereby granted, free of charge, to any person obtaining
|
89
89
|
a copy of this software and associated documentation files (the
|
data/lib/super_random.rb
CHANGED
@@ -6,27 +6,30 @@ require 'digest'
|
|
6
6
|
#`ruby`
|
7
7
|
|
8
8
|
class SuperRandom
|
9
|
-
VERSION = '3.2.
|
9
|
+
VERSION = '3.2.230213'
|
10
10
|
DEFAULT_SOURCES = [
|
11
|
-
'https://www.random.org/strings/?
|
11
|
+
'https://www.random.org/strings/?' \
|
12
|
+
'num=10&len=20&digits=on&upperalpha=on&loweralpha=on&unique=on&' \
|
13
|
+
'format=plain&rnd=new'
|
12
14
|
]
|
13
15
|
MUTEX = Mutex.new
|
14
16
|
DIV = 128.times.inject(''){|h,_|h<<'f'}.to_i(16)
|
15
17
|
RATE_LIMIT = 60 # One minute, be nice!
|
16
|
-
@@
|
18
|
+
@@last_time = Time.now.to_i - RATE_LIMIT - 1
|
17
19
|
|
18
20
|
attr_accessor :first_timeout, :second_timeout, :nevermind
|
19
21
|
attr_reader :sources, :source_count, :byte_count
|
22
|
+
|
20
23
|
def initialize(*sources)
|
21
24
|
@sources = sources.empty? ? DEFAULT_SOURCES.dup : sources
|
22
25
|
@byte_count,@source_count = 0,0
|
23
|
-
@first_timeout,@second_timeout,@nevermind = 3,
|
26
|
+
@first_timeout,@second_timeout,@nevermind = 3,3,true
|
24
27
|
end
|
25
28
|
|
26
29
|
# Returns 64 random bytes(at least from SecureRandom's)
|
27
30
|
def bytes
|
28
31
|
@byte_count,@source_count = 0,0
|
29
|
-
_do_updates if Time.now.to_i - @@
|
32
|
+
_do_updates if Time.now.to_i - @@last_time > RATE_LIMIT
|
30
33
|
_get_bytes
|
31
34
|
end
|
32
35
|
|
@@ -42,7 +45,7 @@ class SuperRandom
|
|
42
45
|
hex = hexadecimal
|
43
46
|
x = hex[0...64].to_i(16)
|
44
47
|
y = hex[64..128].to_i(16)
|
45
|
-
|
48
|
+
[x,y]
|
46
49
|
end
|
47
50
|
|
48
51
|
def integer2
|
@@ -70,7 +73,7 @@ class SuperRandom
|
|
70
73
|
when Integer
|
71
74
|
return ((integer + SecureRandom.random_number(scale)) % scale)
|
72
75
|
end
|
73
|
-
raise
|
76
|
+
raise 'rand(scale Integer|Float)'
|
74
77
|
end
|
75
78
|
alias rand random_number
|
76
79
|
|
@@ -84,9 +87,9 @@ class SuperRandom
|
|
84
87
|
end
|
85
88
|
def roll
|
86
89
|
@big,roll = @big.divmod(@sides)
|
87
|
-
|
90
|
+
roll+@minimum
|
88
91
|
ensure
|
89
|
-
set_big unless @big
|
92
|
+
set_big unless @big.positive?
|
90
93
|
end
|
91
94
|
end
|
92
95
|
def dice(sides, minimum:1)
|
@@ -99,12 +102,13 @@ class SuperRandom
|
|
99
102
|
def _get_bytes
|
100
103
|
MUTEX.synchronize do
|
101
104
|
SHASUM.update SecureRandom.bytes(64)
|
102
|
-
SHASUM.digest.chars.map
|
105
|
+
SHASUM.digest.chars.map(&:ord)
|
103
106
|
end
|
104
107
|
ensure
|
105
108
|
MUTEX.synchronize{SHASUM.update SecureRandom.bytes(64)}
|
106
109
|
end
|
107
110
|
|
111
|
+
# source in @sources may be anything URI.open can handle:
|
108
112
|
def _update_with(source)
|
109
113
|
URI.open(source) do |tmp|
|
110
114
|
MUTEX.synchronize do
|
@@ -116,26 +120,24 @@ class SuperRandom
|
|
116
120
|
end
|
117
121
|
end
|
118
122
|
rescue
|
119
|
-
|
123
|
+
warn $!.message
|
120
124
|
end
|
121
125
|
|
122
126
|
def _do_updates
|
123
|
-
@@
|
127
|
+
@@last_time = Time.now.to_i
|
124
128
|
threads = @sources.inject([]){|t,s|t.push Thread.new{_update_with s}}
|
125
129
|
begin
|
126
130
|
# Initially, would like to get them all.
|
127
|
-
Timeout.timeout(@first_timeout){threads.each
|
131
|
+
Timeout.timeout(@first_timeout){threads.each(&:join)}
|
128
132
|
rescue Timeout::Error
|
129
133
|
begin
|
130
134
|
Timeout.timeout(@second_timeout) do
|
131
135
|
# But at this point,
|
132
136
|
# would like to get at least one.
|
133
|
-
while @
|
134
|
-
Thread.pass
|
135
|
-
end
|
137
|
+
Thread.pass while @source_count.zero? && threads.any?(&:alive?)
|
136
138
|
end
|
137
139
|
rescue Timeout::Error
|
138
|
-
|
140
|
+
MUTEX.synchronize{threads.each(&:exit)} # Exit each thread
|
139
141
|
raise $! unless @nevermind # Go on if never-minding
|
140
142
|
end
|
141
143
|
end
|
metadata
CHANGED
@@ -1,15 +1,135 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: super_random
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.2.
|
4
|
+
version: 3.2.230213
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- CarlosJHR64
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
12
|
-
dependencies:
|
11
|
+
date: 2023-02-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: colorize
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.8'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.8.1
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.8'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.8.1
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: cucumber
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '8.0'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 8.0.0
|
43
|
+
type: :development
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '8.0'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 8.0.0
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: help_parser
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '8.2'
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 8.2.230210
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '8.2'
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 8.2.230210
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: parser
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - "~>"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '3.2'
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 3.2.1
|
83
|
+
type: :development
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.2'
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: 3.2.1
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: rubocop
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '1.45'
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 1.45.1
|
103
|
+
type: :development
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '1.45'
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: 1.45.1
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: test-unit
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - "~>"
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '3.5'
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: 3.5.7
|
123
|
+
type: :development
|
124
|
+
prerelease: false
|
125
|
+
version_requirements: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - "~>"
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '3.5'
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: 3.5.7
|
13
133
|
description: |
|
14
134
|
You can't get more random than random, but you can try really, really, really hard.
|
15
135
|
|
@@ -40,8 +160,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
40
160
|
- !ruby/object:Gem::Version
|
41
161
|
version: '0'
|
42
162
|
requirements:
|
43
|
-
- '
|
44
|
-
|
163
|
+
- 'git: 2.30'
|
164
|
+
- 'ruby: 3.2'
|
165
|
+
rubygems_version: 3.4.6
|
45
166
|
signing_key:
|
46
167
|
specification_version: 4
|
47
168
|
summary: You can't get more random than random, but you can try really, really, really
|