password_util 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/password_util.rb +101 -0
  3. metadata +43 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 585b4336af1d3cc4191a8f5ae5e5fa9f820dcc28aaaa6e4c4d90215436825c51
4
+ data.tar.gz: c553b39e03316a0882d05daac8463b8c75779ab2ef2dc99a4bc27d84cf8cb33f
5
+ SHA512:
6
+ metadata.gz: 3cd8c25a9a87be821e22fd6eaf68ba8742531c44a955f4ad69c3036da41359f1f6e91afc987ca4b9d2d8b290047962a9e695232689f8d1a30268622c55ed54fe
7
+ data.tar.gz: d8fa4ca0218c83b99d321328f9b35e08c1c89330c32f39163a7d735e30f3ace975ac01ca18000f7bc474456356950b9b3e0a46522495bcb1a4a9c3c7eb22d0c4
@@ -0,0 +1,101 @@
1
+ module PasswordUtil
2
+ class ConfigurationError < StandardError; end
3
+
4
+ UPPER_LETTERS = ('A'..'Z').to_a.freeze
5
+ LOWER_LETTERS = ('a'..'z').to_a.freeze
6
+ NUMBERS = ('0'..'9').to_a.freeze
7
+ SYMBOLS = %w[~ ` ! @ # $ % ^ & * ( ) _ - + = { \[ } \] | \\ : ; " ' < , > . ? /].freeze
8
+
9
+ def self.validate_config!
10
+ boolean_classes = [TrueClass, FalseClass]
11
+
12
+ raise ConfigurationError, 'password_length: expected Integer' unless password_length.is_a?(Integer)
13
+ raise ConfigurationError, 'has_lower_letters: expected Boolean' unless boolean_classes.include?(has_lower_letters.class)
14
+ raise ConfigurationError, 'min_lower_letters: expected Integer' unless min_lower_letters.is_a?(Integer)
15
+ raise ConfigurationError, 'has_upper_letters: expected Boolean' unless boolean_classes.include?(has_upper_letters.class)
16
+ raise ConfigurationError, 'min_upper_letters: expected Integer' unless min_upper_letters.is_a?(Integer)
17
+ raise ConfigurationError, 'has_numbers: expected Boolean' unless boolean_classes.include?(has_numbers.class)
18
+ raise ConfigurationError, 'min_numbers: expected Integer' unless min_numbers.is_a?(Integer)
19
+ raise ConfigurationError, 'has_symbols: expected Boolean' unless boolean_classes.include?(has_symbols.class)
20
+ raise ConfigurationError, 'min_symbols: expected Integer' unless min_symbols.is_a?(Integer)
21
+
22
+ raise ConfigurationError, 'No usable character set.' unless has_lower_letters || has_upper_letters || has_numbers || has_symbols
23
+ end
24
+
25
+ def self.reset_config
26
+ self.password_length = 8
27
+ self.has_lower_letters = true
28
+ self.min_lower_letters = 1
29
+ self.has_upper_letters = true
30
+ self.min_upper_letters = 1
31
+ self.has_numbers = true
32
+ self.min_numbers = 1
33
+ self.has_symbols = true
34
+ self.min_symbols = 1
35
+ end
36
+
37
+ def self.generate
38
+ validate_config!
39
+ charset = []
40
+ password = []
41
+
42
+ if has_lower_letters
43
+ charset << LOWER_LETTERS
44
+ min_lower_letters.times do
45
+ password << LOWER_LETTERS.sample
46
+ end
47
+ end
48
+
49
+ if has_upper_letters
50
+ charset << UPPER_LETTERS
51
+ min_upper_letters.times do
52
+ password << UPPER_LETTERS.sample
53
+ end
54
+ end
55
+
56
+ if has_numbers
57
+ charset << NUMBERS
58
+ min_numbers.times do
59
+ password << NUMBERS.sample
60
+ end
61
+ end
62
+
63
+ if has_symbols
64
+ charset << SYMBOLS
65
+ min_symbols.times do
66
+ password << SYMBOLS.sample
67
+ end
68
+ end
69
+
70
+ password.shuffle!
71
+ password << charset.sample.sample while password.length < password_length
72
+ password.join('')[0...password_length]
73
+ end
74
+
75
+ singleton_class.attr_accessor :password_length
76
+ self.password_length = 8
77
+
78
+ singleton_class.attr_accessor :has_lower_letters
79
+ self.has_lower_letters = true
80
+
81
+ singleton_class.attr_accessor :min_lower_letters
82
+ self.min_lower_letters = 1
83
+
84
+ singleton_class.attr_accessor :has_upper_letters
85
+ self.has_upper_letters = true
86
+
87
+ singleton_class.attr_accessor :min_upper_letters
88
+ self.min_upper_letters = 1
89
+
90
+ singleton_class.attr_accessor :has_numbers
91
+ self.has_numbers = true
92
+
93
+ singleton_class.attr_accessor :min_numbers
94
+ self.min_numbers = 1
95
+
96
+ singleton_class.attr_accessor :has_symbols
97
+ self.has_symbols = true
98
+
99
+ singleton_class.attr_accessor :min_symbols
100
+ self.min_symbols = 1
101
+ end
metadata ADDED
@@ -0,0 +1,43 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: password_util
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ platform: ruby
6
+ authors:
7
+ - Reinier John Avila
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-11-01 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Different password related utility tool.
14
+ email: reinieravila@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/password_util.rb
20
+ homepage: https://github.com/reinieravila/password_util.git
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.7.0
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubygems_version: 3.3.7
40
+ signing_key:
41
+ specification_version: 4
42
+ summary: Password Utility Tool
43
+ test_files: []