password_generator 0.1.1

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.

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