From cb3bf151118271277ed6783ad8873fd87235297a Mon Sep 17 00:00:00 2001 From: Ashish Rao Date: Sun, 29 Aug 2021 12:47:46 +0530 Subject: [PATCH 1/2] Re-add the `Faker::Internet.base64` method --- lib/faker/default/internet.rb | 27 +++++++++++++++++++++++ test/faker/default/test_faker_internet.rb | 7 ++++++ 2 files changed, 34 insertions(+) diff --git a/lib/faker/default/internet.rb b/lib/faker/default/internet.rb index e97bbc3113..cce11299e3 100644 --- a/lib/faker/default/internet.rb +++ b/lib/faker/default/internet.rb @@ -530,6 +530,33 @@ def uuid '%08x-%04x-%04x-%04x-%04x%08x' % ary # rubocop:disable Style/FormatString end + ## + # Produces a random string of alphabetic characters, (no digits) + # + # @param length [Integer] The length of the string to generate + # @param padding [Boolean] Toggles if a final equal '=' will be added. + # @param urlsafe [Boolean] Toggles charset to '-' and '_' instead of '+' and '/'. + # + # @return [String] + # + # @example + # Faker::Internet.base64 + # #=> "r_hbZ2DSD-ZACzZT" + # @example + # Faker::Internet.base64(length: 4, padding: true, urlsafe: false) + # #=> "x1/R=" + def base64(length: 16, padding: false, urlsafe: true) + char_range = [ + Array('0'..'9'), + Array('A'..'Z'), + Array('a'..'z'), + urlsafe ? %w[- _] : %w[+ /] + ].flatten + s = Array.new(length) { sample(char_range) }.join + s += '=' if padding + s + end + ## # Produces a randomized hash of internet user details # @example diff --git a/test/faker/default/test_faker_internet.rb b/test/faker/default/test_faker_internet.rb index c9e11533aa..fa49e1bf5f 100644 --- a/test/faker/default/test_faker_internet.rb +++ b/test/faker/default/test_faker_internet.rb @@ -333,6 +333,13 @@ def test_uuid assert_match(/\A\h{8}-\h{4}-4\h{3}-\h{4}-\h{12}\z/, uuid) end + def test_base64 + assert_match(/[[[:alnum:]]\-_]{16}/, @tester.base64) + assert_match(/[[[:alnum:]]\-_]{4}/, @tester.base64(length: 4)) + assert_match(/[[[:alnum:]]\-_]{16}=/, @tester.base64(padding: true)) + assert_match(/[[[:alnum:]]+\/]{16}/, @tester.base64(urlsafe: false)) + end + def test_user_with_args user = @tester.user('username', 'email', 'password') assert user[:username].match(/[a-z]+((_|\.)[a-z]+)?/) From 0169eb1ebac6e31b4be61ccddff2e884a1102db1 Mon Sep 17 00:00:00 2001 From: Ashish Rao Date: Tue, 31 Aug 2021 18:04:06 +0530 Subject: [PATCH 2/2] add since 2.11.0 --- lib/faker/default/internet.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/faker/default/internet.rb b/lib/faker/default/internet.rb index cce11299e3..fe77f217a9 100644 --- a/lib/faker/default/internet.rb +++ b/lib/faker/default/internet.rb @@ -545,6 +545,8 @@ def uuid # @example # Faker::Internet.base64(length: 4, padding: true, urlsafe: false) # #=> "x1/R=" + # + # @faker.version 2.11.0 def base64(length: 16, padding: false, urlsafe: true) char_range = [ Array('0'..'9'),