super_random 3.2.230116 → 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.
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