From e7bd46c7289ac15268e8be60c4b4110a31382b85 Mon Sep 17 00:00:00 2001 From: Ian Ker-Seymer Date: Thu, 2 May 2019 15:23:04 -0400 Subject: [PATCH 1/2] Add Faker::Internet.uuid --- doc/unreleased/default/internet.md | 2 ++ lib/faker/default/internet.rb | 4 ++++ test/faker/default/test_faker_internet.rb | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/doc/unreleased/default/internet.md b/doc/unreleased/default/internet.md index 2621e5745f..1af415e2bc 100644 --- a/doc/unreleased/default/internet.md +++ b/doc/unreleased/default/internet.md @@ -79,4 +79,6 @@ Faker::Internet.slug('foo bar', '-') #=> "foo-bar" # Optional argument: vendor=nil Faker::Internet.user_agent #=> "Mozilla/5.0 (compatible; MSIE 9.0; AOL 9.7; AOLBuild 4343.19; Windows NT 6.1; WOW64; Trident/5.0; FunWebProducts)" Faker::Internet.user_agent(:firefox) #=> "Mozilla/5.0 (Windows NT x.y; Win64; x64; rv:10.0) Gecko/20100101 Firefox/10.0" + +Faker::Internet.uuid #=> "929ef6ef-b11f-38c9-111b-accd67a258b2" ``` diff --git a/lib/faker/default/internet.rb b/lib/faker/default/internet.rb index 9bbdb79a97..5d664a040e 100644 --- a/lib/faker/default/internet.rb +++ b/lib/faker/default/internet.rb @@ -192,6 +192,10 @@ def user_agent(vendor = nil) sample(agents) end + def uuid + Faker::Config.random.bytes(16).unpack('H8H4H4H4H12').join('-') + end + alias user_name username end end diff --git a/test/faker/default/test_faker_internet.rb b/test/faker/default/test_faker_internet.rb index 06135cd92f..58de5bfa5a 100644 --- a/test/faker/default/test_faker_internet.rb +++ b/test/faker/default/test_faker_internet.rb @@ -280,4 +280,8 @@ def test_user_agent_with_invalid_argument assert @tester.user_agent(nil).match(/Mozilla|Opera/) assert @tester.user_agent(1).match(/Mozilla|Opera/) end + + def test_uuid + assert @tester.uuid.match(/\h{8}-\h{4}-\h{4}-\h{4}-\h{12}/) + end end From 772cc445f482ecd919253e97ca51870c514c62fb Mon Sep 17 00:00:00 2001 From: Ian Ker-Seymer Date: Thu, 2 May 2019 15:58:42 -0400 Subject: [PATCH 2/2] Make uuid v4 compatible --- lib/faker/default/internet.rb | 6 +++++- test/faker/default/test_faker_internet.rb | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/faker/default/internet.rb b/lib/faker/default/internet.rb index 5d664a040e..09447f67fa 100644 --- a/lib/faker/default/internet.rb +++ b/lib/faker/default/internet.rb @@ -193,7 +193,11 @@ def user_agent(vendor = nil) end def uuid - Faker::Config.random.bytes(16).unpack('H8H4H4H4H12').join('-') + # borrowed from: https://github.com/ruby/ruby/blob/d48783bb0236db505fe1205d1d9822309de53a36/lib/securerandom.rb#L250 + ary = Faker::Config.random.bytes(16).unpack('NnnnnN') + ary[2] = (ary[2] & 0x0fff) | 0x4000 + ary[3] = (ary[3] & 0x3fff) | 0x8000 + '%08x-%04x-%04x-%04x-%04x%08x' % ary # rubocop:disable Style/FormatString end alias user_name username diff --git a/test/faker/default/test_faker_internet.rb b/test/faker/default/test_faker_internet.rb index 58de5bfa5a..f35fe2ae51 100644 --- a/test/faker/default/test_faker_internet.rb +++ b/test/faker/default/test_faker_internet.rb @@ -282,6 +282,8 @@ def test_user_agent_with_invalid_argument end def test_uuid - assert @tester.uuid.match(/\h{8}-\h{4}-\h{4}-\h{4}-\h{12}/) + uuid = @tester.uuid + assert_equal(36, uuid.size) + assert_match(/\A\h{8}-\h{4}-4\h{3}-\h{4}-\h{12}\z/, uuid) end end