realrand 1.0.3 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/random/online.rb +115 -18
- metadata +21 -7
data/lib/random/online.rb
CHANGED
@@ -31,12 +31,22 @@ module Random
|
|
31
31
|
).start(@host) { |h|
|
32
32
|
response = h.get("#{script}?#{parameters}")
|
33
33
|
if response.class == Net::HTTPOK
|
34
|
-
return response
|
34
|
+
return check_response(response)
|
35
35
|
else
|
36
|
-
|
36
|
+
handle_response_error(response)
|
37
37
|
end
|
38
38
|
}
|
39
39
|
end
|
40
|
+
|
41
|
+
protected
|
42
|
+
|
43
|
+
def check_response(response)
|
44
|
+
return response
|
45
|
+
end
|
46
|
+
|
47
|
+
def handle_response_error(response)
|
48
|
+
raise "An HTTP error occured."
|
49
|
+
end
|
40
50
|
end
|
41
51
|
|
42
52
|
class RandomOrg < OnlineGenerator
|
@@ -44,28 +54,24 @@ module Random
|
|
44
54
|
super("www.random.org")
|
45
55
|
end
|
46
56
|
|
47
|
-
def randnum(num = 100, min = 1, max = 100)
|
48
|
-
|
49
|
-
|
50
|
-
end
|
51
|
-
return [] if num == 0
|
52
|
-
if min < -1_000_000_000
|
53
|
-
raise RangeError, "Invalid minimum: #{min}."
|
54
|
-
end
|
55
|
-
if max > 1_000_000_000
|
56
|
-
raise RangeError, "Invalid maximum: #{max}."
|
57
|
-
end
|
58
|
-
if max <= min
|
59
|
-
raise RangeError, "Maximum has to be bigger than minimum."
|
60
|
-
end
|
57
|
+
def randnum(num = 100, min = 1, max = 100, args = {})
|
58
|
+
check_amount_requested(num)
|
59
|
+
check_min_max_range(min, max)
|
61
60
|
|
62
61
|
parameters = "num=#{num}&min=#{min}&max=#{max}&col=#{num}"
|
63
|
-
|
62
|
+
parameters << "&format=plain&base=10"
|
63
|
+
parameters << "&rnd=#{args[:rnd]}" if args[:rnd]
|
64
|
+
|
65
|
+
response = get_response("/integers/", parameters)
|
64
66
|
convert_result(response.body)
|
65
67
|
end
|
68
|
+
alias :integers :randnum
|
66
69
|
|
70
|
+
##
|
71
|
+
# Note: randbyte is deprecated, should use '/integers/' instead.
|
72
|
+
# Network load decrease if using hex format instead here?
|
67
73
|
def randbyte(nbytes = 256)
|
68
|
-
if nbytes
|
74
|
+
if nbytes <= 0 || nbytes > 16_384
|
69
75
|
raise RangeError, "Invalid amount: #{nbytes}."
|
70
76
|
end
|
71
77
|
return [] if nbytes == 0
|
@@ -74,6 +80,71 @@ module Random
|
|
74
80
|
convert_result(response.body)
|
75
81
|
end
|
76
82
|
|
83
|
+
def randseq(min = 1, max = 100, args = {})
|
84
|
+
check_min_max_range(min, max)
|
85
|
+
|
86
|
+
parameters = "min=#{min}&max=#{max}&col=1"
|
87
|
+
parameters << "&format=plain" # TODO: No need for "&base=10" here?
|
88
|
+
parameters << "&rnd=#{args[:rnd]}" if args[:rnd]
|
89
|
+
|
90
|
+
response = get_response("/sequences/", parameters)
|
91
|
+
convert_result(response.body)
|
92
|
+
end
|
93
|
+
alias :sequences :randseq
|
94
|
+
|
95
|
+
|
96
|
+
def randstring(num, len, args = {})
|
97
|
+
default_args = {
|
98
|
+
:digits => :on,
|
99
|
+
:upperalpha =>:on,
|
100
|
+
:loweralpha =>:on,
|
101
|
+
:unique => :off,
|
102
|
+
# :rnd => :new
|
103
|
+
}
|
104
|
+
args = default_args.update(args)
|
105
|
+
|
106
|
+
check_amount_requested(num)
|
107
|
+
check_num_within(len, 1, 20, 'length')
|
108
|
+
|
109
|
+
parameters = "num=#{num}&len=#{len}&format=plain"
|
110
|
+
parameters << "&" << hash_args_to_params(args)
|
111
|
+
|
112
|
+
response = get_response("/strings/", parameters)
|
113
|
+
response.body.split
|
114
|
+
end
|
115
|
+
alias :strings :randstring
|
116
|
+
|
117
|
+
|
118
|
+
def quota(ip=nil)
|
119
|
+
parameters = "format=plain"
|
120
|
+
parameters += "&ip=#{ip}" if ip
|
121
|
+
response = get_response("/quota/", parameters)
|
122
|
+
convert_result(response.body).first
|
123
|
+
end
|
124
|
+
|
125
|
+
protected
|
126
|
+
|
127
|
+
def check_response(response)
|
128
|
+
# RandomOrg returns 200 OK even for failures...
|
129
|
+
error = contains_error(response.body)
|
130
|
+
handle_response_error(response, error.to_s) if error
|
131
|
+
return response
|
132
|
+
end
|
133
|
+
|
134
|
+
def handle_response_error(response, message = nil)
|
135
|
+
unless message then
|
136
|
+
# Check the response body for an error message.
|
137
|
+
error = contains_error(response.body)
|
138
|
+
message = error.to_s if error
|
139
|
+
end
|
140
|
+
message ||= "An HTTP error occured."
|
141
|
+
raise message
|
142
|
+
end
|
143
|
+
|
144
|
+
def contains_error(body)
|
145
|
+
body.match(/error:.*/i)
|
146
|
+
end
|
147
|
+
|
77
148
|
private
|
78
149
|
|
79
150
|
def convert_result(response)
|
@@ -83,6 +154,32 @@ module Random
|
|
83
154
|
}
|
84
155
|
result
|
85
156
|
end
|
157
|
+
|
158
|
+
|
159
|
+
def hash_args_to_params(args)
|
160
|
+
args.collect{|k,v| "#{k}=#{v}"}.join('&')
|
161
|
+
end
|
162
|
+
|
163
|
+
def check_amount_requested(num)
|
164
|
+
check_num_within(num, 1, 10_000, 'amount')
|
165
|
+
end
|
166
|
+
|
167
|
+
def check_num_within(num, min, max, desc = "number")
|
168
|
+
raise RangeError, "Invalid #{desc}: #{num}." if num < min || num > max
|
169
|
+
end
|
170
|
+
|
171
|
+
def check_min_max_range(min, max)
|
172
|
+
if min < -1_000_000_000
|
173
|
+
raise RangeError, "Invalid minimum: #{min}."
|
174
|
+
end
|
175
|
+
if max > 1_000_000_000
|
176
|
+
raise RangeError, "Invalid maximum: #{max}."
|
177
|
+
end
|
178
|
+
if max <= min
|
179
|
+
raise RangeError, "Maximum has to be bigger than minimum."
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
86
183
|
end
|
87
184
|
|
88
185
|
class FourmiLab < OnlineGenerator
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: realrand
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 31
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
- 4
|
10
|
+
version: 1.0.4
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Maik Schmidt
|
@@ -9,7 +15,7 @@ autorequire: random/online
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date:
|
18
|
+
date: 2011-05-01 00:00:00 +02:00
|
13
19
|
default_executable:
|
14
20
|
dependencies: []
|
15
21
|
|
@@ -23,31 +29,39 @@ extra_rdoc_files: []
|
|
23
29
|
|
24
30
|
files:
|
25
31
|
- lib/random/online.rb
|
26
|
-
has_rdoc:
|
32
|
+
has_rdoc: true
|
27
33
|
homepage: http://realrand.rubyforge.org
|
34
|
+
licenses: []
|
35
|
+
|
28
36
|
post_install_message:
|
29
37
|
rdoc_options: []
|
30
38
|
|
31
39
|
require_paths:
|
32
40
|
- lib
|
33
41
|
required_ruby_version: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
34
43
|
requirements:
|
35
44
|
- - ">="
|
36
45
|
- !ruby/object:Gem::Version
|
46
|
+
hash: 3
|
47
|
+
segments:
|
48
|
+
- 0
|
37
49
|
version: "0"
|
38
|
-
version:
|
39
50
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
40
52
|
requirements:
|
41
53
|
- - ">="
|
42
54
|
- !ruby/object:Gem::Version
|
55
|
+
hash: 3
|
56
|
+
segments:
|
57
|
+
- 0
|
43
58
|
version: "0"
|
44
|
-
version:
|
45
59
|
requirements: []
|
46
60
|
|
47
61
|
rubyforge_project: realrand
|
48
|
-
rubygems_version: 1.3.
|
62
|
+
rubygems_version: 1.3.7
|
49
63
|
signing_key:
|
50
|
-
specification_version:
|
64
|
+
specification_version: 3
|
51
65
|
summary: A simple API for creating real random numbers.
|
52
66
|
test_files: []
|
53
67
|
|