Class: Synthra::Types::TextContent::Password

Inherits:
Base
  • Object
show all
Defined in:
lib/synthra/types/text_content/security.rb

Overview

Password type

Instance Method Summary collapse

Instance Method Details

#generate_edge(rng, context, args) ⇒ Object



34
35
36
# File 'lib/synthra/types/text_content/security.rb', line 34

def generate_edge(rng, context, args)
  ["", "A", "12345678"].sample(random: rng.instance_variable_get(:@random))
end

#generate_invalid(rng, context, args) ⇒ Object



38
39
40
# File 'lib/synthra/types/text_content/security.rb', line 38

def generate_invalid(rng, context, args)
  [nil, 123, [], {}].sample(random: rng.instance_variable_get(:@random))
end

#generate_random(rng, context, args) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/synthra/types/text_content/security.rb', line 8

def generate_random(rng, context, args)
  min_length = args[:min_length] || 8
  min_upper = args[:min_upper] || 1
  min_lower = args[:min_lower] || 1
  min_numbers = args[:min_numbers] || 1
  min_symbols = args[:min_symbols] || 0

  uppercase = ('A'..'Z').to_a
  lowercase = ('a'..'z').to_a
  numbers = ('0'..'9').to_a
  symbols = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '+', '=']

  password = []
  password.concat(min_upper.times.map { rng.sample(uppercase) })
  password.concat(min_lower.times.map { rng.sample(lowercase) })
  password.concat(min_numbers.times.map { rng.sample(numbers) })
  password.concat(min_symbols.times.map { rng.sample(symbols) })

  # Fill remaining length
  all_chars = uppercase + lowercase + numbers + symbols
  remaining = min_length - password.length
  password.concat(remaining.times.map { rng.sample(all_chars) }) if remaining > 0

  password.shuffle(random: rng.instance_variable_get(:@random)).join
end