super_random 3.2.230116 → 3.2.230213

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -3
  3. data/lib/super_random.rb +20 -22
  4. metadata +126 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 80443021c230106600a502974f5ae31b39f6e6f22b5c1e50eef7a00f03b8c9b9
4
- data.tar.gz: c4133b454e2e339d5f59d9d64da877fa3ae8831fe701b9846bd86d0cd79906f1
3
+ metadata.gz: 22e0311c10d4d5713318a8d42b1710477c60f93ffbcda9014d125761246d4c94
4
+ data.tar.gz: a703a7dc1eebb662736a6f45645dc18091cb4c0c717062a83c6285f51c085099
5
5
  SHA512:
6
- metadata.gz: eee1ab617d8e57d836f519f96c504ba3e1bb8331ab3e7e300b3cf8360711e4fe688016af2fe37c0ef3f5fb60b74f7883b36c17ccfd496a4a227d416ddf0f8489
7
- data.tar.gz: 3cee029f0a3ad6ee2a730934112b91a7997ac55ce0cc760ce17fde375ef5fb87fb0b88cc94dbc90dd73d1dbbb10c63f49467d61fb1f04a878840ad0b42b5afda
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.230116](https://github.com/carlosjhr64/super_random/releases)
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 #=> "3.2.230116"
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 carlosjhr64
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.230116'
9
+ VERSION = '3.2.230213'
10
10
  DEFAULT_SOURCES = [
11
- 'https://www.random.org/strings/?num=10&len=20&digits=on&upperalpha=on&loweralpha=on&unique=on&format=plain&rnd=new',
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
- @@LAST_TIME = Time.now.to_i - RATE_LIMIT - 1
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,6,true
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 - @@LAST_TIME > RATE_LIMIT
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
- return x,y
48
+ [x,y]
46
49
  end
47
50
 
48
51
  def integer2
@@ -60,11 +63,7 @@ class SuperRandom
60
63
  # An alternate way to generate a float...
61
64
  x,y = xy
62
65
  # ...but what distribution is this?
63
- Rational(x,y).to_f
64
- rescue ZeroDivisionError
65
- # Fat chance!
66
- return 0 if x == 0
67
- 1.0/0.0
66
+ Rational(x+1,y+1).to_f
68
67
  end
69
68
 
70
69
  def random_number(scale=1.0)
@@ -74,7 +73,7 @@ class SuperRandom
74
73
  when Integer
75
74
  return ((integer + SecureRandom.random_number(scale)) % scale)
76
75
  end
77
- raise "rand(scale Integer|Float)"
76
+ raise 'rand(scale Integer|Float)'
78
77
  end
79
78
  alias rand random_number
80
79
 
@@ -88,9 +87,9 @@ class SuperRandom
88
87
  end
89
88
  def roll
90
89
  @big,roll = @big.divmod(@sides)
91
- return roll+@minimum
90
+ roll+@minimum
92
91
  ensure
93
- set_big unless @big>0
92
+ set_big unless @big.positive?
94
93
  end
95
94
  end
96
95
  def dice(sides, minimum:1)
@@ -103,12 +102,13 @@ class SuperRandom
103
102
  def _get_bytes
104
103
  MUTEX.synchronize do
105
104
  SHASUM.update SecureRandom.bytes(64)
106
- SHASUM.digest.chars.map{_1.ord}
105
+ SHASUM.digest.chars.map(&:ord)
107
106
  end
108
107
  ensure
109
108
  MUTEX.synchronize{SHASUM.update SecureRandom.bytes(64)}
110
109
  end
111
110
 
111
+ # source in @sources may be anything URI.open can handle:
112
112
  def _update_with(source)
113
113
  URI.open(source) do |tmp|
114
114
  MUTEX.synchronize do
@@ -120,26 +120,24 @@ class SuperRandom
120
120
  end
121
121
  end
122
122
  rescue
123
- $stderr.puts $!
123
+ warn $!.message
124
124
  end
125
125
 
126
126
  def _do_updates
127
- @@LAST_TIME = Time.now.to_i
127
+ @@last_time = Time.now.to_i
128
128
  threads = @sources.inject([]){|t,s|t.push Thread.new{_update_with s}}
129
129
  begin
130
130
  # Initially, would like to get them all.
131
- Timeout.timeout(@first_timeout){threads.each{_1.join}}
131
+ Timeout.timeout(@first_timeout){threads.each(&:join)}
132
132
  rescue Timeout::Error
133
133
  begin
134
134
  Timeout.timeout(@second_timeout) do
135
135
  # But at this point,
136
136
  # would like to get at least one.
137
- while @services<1 and threads.any?{_1.alive?}
138
- Thread.pass
139
- end
137
+ Thread.pass while @source_count.zero? && threads.any?(&:alive?)
140
138
  end
141
139
  rescue Timeout::Error
142
- Mutex.sychronize{threads.each{_1.exit}} # Exit each thread
140
+ MUTEX.synchronize{threads.each(&:exit)} # Exit each thread
143
141
  raise $! unless @nevermind # Go on if never-minding
144
142
  end
145
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.230116
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-01-16 00:00:00.000000000 Z
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
- - 'ruby: ruby 3.2.0 (2022-12-25 revision a528908271) [aarch64-linux]'
44
- rubygems_version: 3.4.3
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