password_generator 0.1.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of password_generator might be problematic. Click here for more details.

checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 81b0cd2eecfdd2418659db2bc99ed87a2f0b019e88c1b4f4aa26a0d46782f5af
4
+ data.tar.gz: ce0ec437a0993240b75950974e22a2c7b9cb177924aaa2b7ec847c2629d6bcbf
5
+ SHA512:
6
+ metadata.gz: a6eba4cc7012714703c963cc0e524a626428294d596d35079a1642825cc2af12196a7e82b502b206c31712fb3cf73d6bc421b108b28a911ee210d4cbd743b326
7
+ data.tar.gz: '097bd9de4e473c10d41847d740841bfc34a712674c7fbebebe25f9e1fff6af10abd189ccd8af3de74306386aef187f27342e7e896b12678554b42154890b3ed4'
data/.gitignore ADDED
@@ -0,0 +1,38 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .DS_Store
6
+ .ruby-version
7
+ coverage
8
+ coverage.data
9
+ InstalledFiles
10
+ lib/bundler/man
11
+ pkg
12
+ rdoc
13
+ spec/reports
14
+ test/tmp
15
+ test/version_tmp
16
+ tmp
17
+
18
+ # bundler
19
+ vendor/
20
+
21
+ # YARD artifacts
22
+ .yardoc
23
+ _yardoc
24
+ doc/
25
+
26
+ # tmp-old
27
+ .old
28
+
29
+ # editor
30
+ *~
31
+ .redcar
32
+
33
+ # other
34
+ *.lock
35
+ *.bak
36
+ tool/
37
+ .rbx/
38
+ *\#*
data/.travis.yml ADDED
@@ -0,0 +1,17 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - ruby-head
5
+ - 2.6
6
+ - 2.5
7
+ - rbx-4
8
+ - jruby-head
9
+
10
+ matrix:
11
+ allow_failures:
12
+ - rvm: ruby-head
13
+ - rvm: rbx-4
14
+ - rvm: jruby-head
15
+
16
+ before_install:
17
+ - gem install bundler
data/.yardopts ADDED
@@ -0,0 +1 @@
1
+ --readme README.md lib/**/*.rb
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :development do
6
+ gem 'rake'
7
+ end
8
+
9
+ group :test do
10
+ gem 'rake'
11
+ end
data/MIT-LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ (The MIT X11 License)
2
+
3
+ Copyright (c) 2013 Kenichi Kamiya
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ 'Software'), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,57 @@
1
+ ruby-password_generator
2
+ =======================
3
+
4
+ [![Build Status](https://secure.travis-ci.org/kachick/ruby-password_generator.png)](http://travis-ci.org/kachick/ruby-password_generator)
5
+ [![Gem Version](https://badge.fury.io/rb/ruby-password_generator.png)](http://badge.fury.io/rb/password_generator)
6
+
7
+ Description
8
+ -----------
9
+
10
+ A generator of daily passwords
11
+
12
+ Features
13
+ --------
14
+
15
+ * Using SecureRandom
16
+ * Customizable to choose characters
17
+
18
+ Usage
19
+ -----
20
+
21
+ ```ruby
22
+ require 'password_generator'
23
+
24
+ p PasswordGenerator.generate(8)
25
+ p PasswordGenerator.generate(24, avoid_symbols: true)
26
+ p PasswordGenerator.generate(24, avoid_downcases: true)
27
+ p PasswordGenerator.generate(24, avoid_uppercases: true)
28
+ ```
29
+
30
+ Requirements
31
+ -------------
32
+
33
+ * Ruby - [2.5 or later](http://travis-ci.org/#!/kachick/ruby-password_generator)
34
+
35
+ Install
36
+ -------
37
+
38
+ ```bash
39
+ gem install password_generator
40
+ ```
41
+
42
+ Link
43
+ ----
44
+
45
+ * [Home](http://kachick.github.com/ruby-password_generator/)
46
+ * [code](https://github.com/kachick/ruby-password_generator)
47
+ * [API](http://kachick.github.com/ruby-password_generator/yard/frames.html)
48
+ * [issues](https://github.com/kachick/ruby-password_generator/issues)
49
+ * [CI](http://travis-ci.org/#!/kachick/ruby-password_generator)
50
+ * [gem](https://rubygems.org/gems/password_generator)
51
+
52
+ License
53
+ --------
54
+
55
+ The MIT X11 License
56
+ Copyright (c) 2013 Kenichi Kamiya
57
+ See MIT-LICENSE for further details.
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env rake
2
+ require 'bundler/gem_tasks'
3
+
4
+ require 'rspec/core/rake_task'
5
+
6
+ task default: [:spec]
7
+
8
+ RSpec::Core::RakeTask.new(:spec) do |t|
9
+ t.pattern = 'spec/**/*_spec.rb'
10
+ t.ruby_opts = %w[-w]
11
+ end
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # coding: us-ascii
3
+
4
+ require_relative '../lib/password_generator'
5
+
6
+ puts PasswordGenerator.generate(Integer(ARGV.shift))
@@ -0,0 +1,10 @@
1
+ # coding: us-ascii
2
+
3
+ $VERBOSE = true
4
+
5
+ require_relative '../lib/password_generator'
6
+
7
+ p PasswordGenerator.generate(8)
8
+ p PasswordGenerator.generate(24, avoid_symbols: true)
9
+ p PasswordGenerator.generate(24, avoid_downcases: true)
10
+ p PasswordGenerator.generate(24, avoid_uppercases: true)
@@ -0,0 +1,5 @@
1
+ # coding: us-ascii
2
+
3
+ module PasswordGenerator
4
+ VERSION = '0.1.1'.freeze
5
+ end
@@ -0,0 +1,91 @@
1
+ # coding: us-ascii
2
+ # password_generator - A generator of daily passwords
3
+ # Copyright (c) 2013 Kenichi Kamiya
4
+
5
+ require 'securerandom' # Don't consider unsupported SecureRandom
6
+ require 'optionalargument'
7
+
8
+ require_relative 'password_generator/version'
9
+
10
+ module PasswordGenerator
11
+
12
+ DOWNCASES = ('a'..'z').map(&:freeze).freeze
13
+ UPPERCASES = ('A'..'Z').map(&:freeze).freeze
14
+ NUMBERS = ('0'..'9').map(&:freeze).freeze
15
+ SYMBOLS = [*'!'..'/', *':'..'@', *'['..'`', *'{'..'~'].each(&:freeze).freeze
16
+ WHITESPACE = ' '.freeze
17
+
18
+ GENERATE_OptArg = OptionalArgument.define {
19
+ opt :avoid_downcases, default: false, condition: BOOLEAN?
20
+ opt :avoid_uppercases, default: false, condition: BOOLEAN?
21
+ opt :avoid_numbers, default: false, condition: BOOLEAN?
22
+ opt :avoid_symbols, default: false, condition: BOOLEAN?
23
+ opt :avoid_whitespace, default: true, condition: BOOLEAN?
24
+ }
25
+
26
+ class Generator
27
+
28
+ attr_reader :length, :options, :letters
29
+
30
+ # @param length [Fixnum]
31
+ # @param options [GENERATE_OptArg]
32
+ def initialize(length, options)
33
+ @length, @options = length, options
34
+ @letters = generate_letters.freeze
35
+ end
36
+
37
+ # @return [String]
38
+ def generate
39
+ llen = letters.length
40
+
41
+ # `Array#sample` accepts random generator.
42
+ # But the feature/syntax makes my anxiety :(
43
+ length.times.map{letters.fetch(SecureRandom.random_number(llen))}.join
44
+ end
45
+
46
+ private
47
+
48
+ # @return [Array<String>]
49
+ def generate_letters
50
+ [].tap {|list|
51
+ list.concat(DOWNCASES) unless options.avoid_downcases
52
+ list.concat(UPPERCASES) unless options.avoid_uppercases
53
+ list.concat(NUMBERS) unless options.avoid_numbers
54
+ list.concat(SYMBOLS) unless options.avoid_symbols
55
+ list.push(WHITESPACE) unless options.avoid_whitespace
56
+
57
+ unless list.length >= 2
58
+ raise ArgumentError, "using letter-list is too short: #{list.inspect}"
59
+ end
60
+ }
61
+ end
62
+
63
+ end
64
+
65
+ if respond_to? :private_constant
66
+ private_constant :Generator
67
+ end
68
+
69
+ class << self
70
+
71
+ # @param length [Fixnum, #to_int]
72
+ # @param options [Hash]
73
+ # @option options [Boolean] :avoid_downcases
74
+ # @option options [Boolean] :avoid_uppercases
75
+ # @option options [Boolean] :avoid_numbers
76
+ # @option options [Boolean] :avoid_symbols
77
+ # @option options [Boolean] :avoid_whitespace
78
+ # @return [String]
79
+ def generate(length, options={})
80
+ length = length.to_int
81
+ unless length >= 1
82
+ raise ArgumentError, "too small length thrown: #{length.inspect}"
83
+ end
84
+ options = GENERATE_OptArg.parse options
85
+
86
+ Generator.new(length, options).generate
87
+ end
88
+
89
+ end
90
+
91
+ end
@@ -0,0 +1,3 @@
1
+ # coding: us-ascii
2
+
3
+ require_relative 'password_generator'
@@ -0,0 +1,30 @@
1
+ require './lib/password_generator/version'
2
+
3
+ Gem::Specification.new do |gem|
4
+ # specific
5
+
6
+ gem.description = %q{A generator for daily passwords}
7
+
8
+ gem.summary = gem.description.dup
9
+ gem.homepage = 'http://kachick.github.com/ruby-password_generator/'
10
+ gem.license = 'MIT'
11
+ gem.name = 'password_generator'
12
+ gem.version = PasswordGenerator::VERSION.dup
13
+
14
+ gem.add_runtime_dependency 'optionalargument', '~> 0.3'
15
+
16
+ gem.add_development_dependency 'rspec', '>= 3.8', '< 4'
17
+ gem.add_development_dependency 'yard', '>= 0.9.20', '< 2'
18
+ gem.add_development_dependency 'rake', '>= 10', '< 20'
19
+ gem.add_development_dependency 'bundler', '>= 2', '< 3'
20
+
21
+
22
+ # common
23
+
24
+ gem.authors = ['Kenichi Kamiya']
25
+ gem.email = ['kachick1+ruby@gmail.com']
26
+ gem.files = `git ls-files`.split($\)
27
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
28
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
29
+ gem.require_paths = ['lib']
30
+ end
@@ -0,0 +1,98 @@
1
+ # coding: us-ascii
2
+
3
+ require_relative 'spec_helper'
4
+
5
+ describe PasswordGenerator do
6
+ describe '.generate' do
7
+ context "with length argument" do
8
+ it "raises an ArgumentError when the length is lesser equal 0" do
9
+ expect{PasswordGenerator.generate(0)}.to raise_error(ArgumentError)
10
+ expect{PasswordGenerator.generate(-8)}.to raise_error(ArgumentError)
11
+ end
12
+
13
+ it "returns a String" do
14
+ expect(PasswordGenerator.generate(1)).to be_an_instance_of(String)
15
+ end
16
+
17
+ context "the returned String" do
18
+ it "'s length equal as the first argument" do
19
+ expect(PasswordGenerator.generate(1).length).to eq(1)
20
+ expect(PasswordGenerator.generate(8).length).to eq(8)
21
+ expect(PasswordGenerator.generate(256).length).to eq(256)
22
+ end
23
+
24
+ it "is not frozen" do
25
+ expect(PasswordGenerator.generate(1).frozen?).to eq(false)
26
+ end
27
+ end
28
+
29
+ context "without options" do
30
+ it "builded mixed characters without whitespace" do
31
+ ret = PasswordGenerator.generate(512)
32
+ expect(ret).to match(/[a-z]/)
33
+ expect(ret).to match(/[A-Z]/)
34
+ expect(ret).to match(/\d/)
35
+ expect(ret).to match(/[^a-zA-Z0-9 ]/)
36
+ expect(ret).not_to match(/ /)
37
+ end
38
+ end
39
+
40
+ context "with options" do
41
+ it "builded only downcases if enabled only downcases" do
42
+ expect(PasswordGenerator.generate(512, avoid_downcases: false,
43
+ avoid_uppercases: true,
44
+ avoid_numbers: true,
45
+ avoid_symbols: true,
46
+ avoid_whitespace: true
47
+ )).
48
+ to match(/\A[a-z]{512}\z/)
49
+ end
50
+
51
+ it "builded only uppercases if enabled only uppercases" do
52
+ expect(PasswordGenerator.generate(512, avoid_downcases: true,
53
+ avoid_uppercases: false,
54
+ avoid_numbers: true,
55
+ avoid_symbols: true,
56
+ avoid_whitespace: true
57
+ )).
58
+ to match(/\A[A-Z]{512}\z/)
59
+ end
60
+
61
+ it "builded only numbers if enabled only numbers" do
62
+ expect(PasswordGenerator.generate(512, avoid_downcases: true,
63
+ avoid_uppercases: true,
64
+ avoid_numbers: false,
65
+ avoid_symbols: true,
66
+ avoid_whitespace: true
67
+ )).
68
+ to match(/\A\d{512}\z/)
69
+ end
70
+
71
+ it "builded only symbols if enabled only symbols" do
72
+ expect(PasswordGenerator.generate(512, avoid_downcases: true,
73
+ avoid_uppercases: true,
74
+ avoid_numbers: true,
75
+ avoid_symbols: false,
76
+ avoid_whitespace: true
77
+ )).
78
+ to match(/\A[^a-zA-Z0-9 ]{512}\z/)
79
+ end
80
+
81
+ it "builded mixed characters with whitespace if disabled avoiding whitespace" do
82
+ ret = PasswordGenerator.generate(512, avoid_whitespace: false)
83
+ expect(ret).to match(/[a-z]/)
84
+ expect(ret).to match(/[A-Z]/)
85
+ expect(ret).to match(/\d/)
86
+ expect(ret).to match(/[^a-zA-Z0-9]/)
87
+ expect(ret).to match(/ /)
88
+ end
89
+ end
90
+ end
91
+
92
+ context "without arguments" do
93
+ it "raises an ArgumentError" do
94
+ expect{PasswordGenerator.generate}.to raise_error(ArgumentError)
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,5 @@
1
+ # coding: us-ascii
2
+
3
+ require 'rspec'
4
+
5
+ require_relative '../lib/password_generator'
metadata ADDED
@@ -0,0 +1,156 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: password_generator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Kenichi Kamiya
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-07-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: optionalargument
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '3.8'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '4'
37
+ type: :development
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '3.8'
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '4'
47
+ - !ruby/object:Gem::Dependency
48
+ name: yard
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 0.9.20
54
+ - - "<"
55
+ - !ruby/object:Gem::Version
56
+ version: '2'
57
+ type: :development
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 0.9.20
64
+ - - "<"
65
+ - !ruby/object:Gem::Version
66
+ version: '2'
67
+ - !ruby/object:Gem::Dependency
68
+ name: rake
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '10'
74
+ - - "<"
75
+ - !ruby/object:Gem::Version
76
+ version: '20'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '10'
84
+ - - "<"
85
+ - !ruby/object:Gem::Version
86
+ version: '20'
87
+ - !ruby/object:Gem::Dependency
88
+ name: bundler
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '2'
94
+ - - "<"
95
+ - !ruby/object:Gem::Version
96
+ version: '3'
97
+ type: :development
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '2'
104
+ - - "<"
105
+ - !ruby/object:Gem::Version
106
+ version: '3'
107
+ description: A generator for daily passwords
108
+ email:
109
+ - kachick1+ruby@gmail.com
110
+ executables:
111
+ - password_generator
112
+ extensions: []
113
+ extra_rdoc_files: []
114
+ files:
115
+ - ".gitignore"
116
+ - ".travis.yml"
117
+ - ".yardopts"
118
+ - Gemfile
119
+ - MIT-LICENSE
120
+ - README.md
121
+ - Rakefile
122
+ - bin/password_generator
123
+ - examples/README.rb
124
+ - lib/password_generator.rb
125
+ - lib/password_generator/version.rb
126
+ - lib/passwordgenerator.rb
127
+ - password_generator.gemspec
128
+ - spec/password_generator_spec.rb
129
+ - spec/spec_helper.rb
130
+ homepage: http://kachick.github.com/ruby-password_generator/
131
+ licenses:
132
+ - MIT
133
+ metadata: {}
134
+ post_install_message:
135
+ rdoc_options: []
136
+ require_paths:
137
+ - lib
138
+ required_ruby_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ required_rubygems_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ requirements: []
149
+ rubyforge_project:
150
+ rubygems_version: 2.7.6
151
+ signing_key:
152
+ specification_version: 4
153
+ summary: A generator for daily passwords
154
+ test_files:
155
+ - spec/password_generator_spec.rb
156
+ - spec/spec_helper.rb