Actions
Feature #4938
closedAdd Random.bytes [patch]
Description
It could be useful to add a Random.bytes
method (equivalent to Random::DEFAULT.bytes
), as per the simple patch attached.
Files
Updated by shyouhei (Shyouhei Urabe) over 12 years ago
- Status changed from Open to Assigned
Updated by marcandre (Marc-Andre Lafortune) about 12 years ago
Comment about this trivial feature would be appreciated.
Updated by mrkn (Kenta Murata) about 12 years ago
- Target version changed from 2.0.0 to 2.6
I think it is useful and acceptable to introduce, but 2.0 is already frozen about its features, so the target version should be next-minor.
Updated by hsbt (Hiroshi SHIBATA) about 10 years ago
- File randombytes-ruby22.diff added
I update this patch on Ruby 2.2.
Updated by marcandre (Marc-Andre Lafortune) about 10 years ago
Hi Nobu,
is there a reason not to commit this?
Updated by nobu (Nobuyoshi Nakada) about 10 years ago
- Assignee changed from nobu (Nobuyoshi Nakada) to normalperson (Eric Wong)
I think there is no problems.
Updated by hsbt (Hiroshi SHIBATA) about 10 years ago
- File deleted (
randombytes-ruby22.diff)
Updated by hsbt (Hiroshi SHIBATA) about 10 years ago
- File randombytes-ruby22.diff randombytes-ruby22.diff added
I revised patch for Ruby 2.2.
Updated by normalperson (Eric Wong) about 10 years ago
shibata.hiroshi@gmail.com wrote:
File randombytes-ruby22.diff added
Looks good to me.
Any approval from matz since this is a new API?
Updated by normalperson (Eric Wong) about 10 years ago
- Assignee changed from normalperson (Eric Wong) to matz (Yukihiro Matsumoto)
Any comment from matz for API addition?
Updated by nobu (Nobuyoshi Nakada) almost 7 years ago
Updated.
diff --git i/random.c w/random.c
index 43a3d2ffee..b800f1d9a1 100644
--- i/random.c
+++ w/random.c
@@ -1134,6 +1134,19 @@ rb_random_bytes(VALUE obj, long n)
return genrand_bytes(rnd, n);
}
+/*
+ * call-seq: Random.bytes(size) -> a_string
+ *
+ * Returns a random binary string. The argument size specified the length of
+ * the result string.
+ */
+static VALUE
+random_s_bytes(VALUE obj, VALUE len)
+{
+ rb_random_t *rnd = rand_start(&default_rand);
+ return genrand_bytes(rnd, NUM2LONG(rb_to_int(len)));
+}
+
static VALUE
range_values(VALUE vmax, VALUE *begp, VALUE *endp, int *exclp)
{
@@ -1636,6 +1649,7 @@ InitVM_Random(void)
rb_define_singleton_method(rb_cRandom, "srand", rb_f_srand, -1);
rb_define_singleton_method(rb_cRandom, "rand", random_s_rand, -1);
+ rb_define_singleton_method(rb_cRandom, "bytes", random_s_bytes, 1);
rb_define_singleton_method(rb_cRandom, "new_seed", random_seed, 0);
rb_define_singleton_method(rb_cRandom, "urandom", random_raw_seed, 1);
rb_define_private_method(CLASS_OF(rb_cRandom), "state", random_s_state, 0);
diff --git i/test/ruby/test_rand.rb w/test/ruby/test_rand.rb
index 882d33fb40..136ee4f912 100644
--- i/test/ruby/test_rand.rb
+++ w/test/ruby/test_rand.rb
@@ -347,10 +347,15 @@
end
def assert_random_bytes(r)
+ srand(0)
assert_equal("", r.bytes(0))
- assert_equal("\xAC".force_encoding("ASCII-8BIT"), r.bytes(1))
- assert_equal("/\xAA\xC4\x97u\xA6\x16\xB7\xC0\xCC".force_encoding("ASCII-8BIT"),
- r.bytes(10))
+ assert_equal("", Random.bytes(0))
+ x = "\xAC".force_encoding("ASCII-8BIT")
+ assert_equal(x, r.bytes(1))
+ assert_equal(x, Random.bytes(1))
+ x = "/\xAA\xC4\x97u\xA6\x16\xB7\xC0\xCC".force_encoding("ASCII-8BIT")
+ assert_equal(x, r.bytes(10))
+ assert_equal(x, Random.bytes(10))
end
def test_random_range
Updated by matz (Yukihiro Matsumoto) almost 7 years ago
Accepted. Better later than never.
Matz.
Updated by nobu (Nobuyoshi Nakada) almost 7 years ago
- Status changed from Assigned to Closed
Applied in changeset trunk|r62497.
random.c: Random.bytes
- random.c (random_s_bytes): new method Random.bytes, which is
equivalent to Random::DEFAULT.bytes. [Feature #4938]
Actions
Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0