password_generator 0.0.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.

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,20 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - ruby-head
5
+ - 2.0.0
6
+ - 1.9.3
7
+ - 1.9.2
8
+ - rbx-nightly-19mode
9
+ - jruby-head
10
+ - jruby-19mode
11
+
12
+ matrix:
13
+ allow_failures:
14
+ - rvm: ruby-head
15
+ - rvm: rbx-nightly-19mode
16
+ - rvm: jruby-head
17
+ - rvm: jruby-19mode
18
+
19
+ before_install:
20
+ - 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 for 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 - [1.9.3 or later](http://travis-ci.org/#!/kachick/ruby-password_generator)
34
+
35
+ Install
36
+ -------
37
+
38
+ ```bash
39
+ gem install ruby-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,72 @@
1
+ # coding: us-ascii
2
+ # password_generator - A generator of daily passwords
3
+ # Copyright (c) 2013 Kenichi Kamiya
4
+
5
+ require '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
+ class << self
19
+
20
+ GENERATE_OptArg = OptionalArgument.define {
21
+ opt :avoid_downcases, default: false, condition: BOOLEAN?
22
+ opt :avoid_uppercases, default: false, condition: BOOLEAN?
23
+ opt :avoid_numbers, default: false, condition: BOOLEAN?
24
+ opt :avoid_symbols, default: false, condition: BOOLEAN?
25
+ opt :avoid_whitespace, default: true, condition: BOOLEAN?
26
+ }
27
+
28
+ # @param length [Fixnum, #to_int]
29
+ # @param options [Hash]
30
+ # @option options [Boolean] :avoid_downcases
31
+ # @option options [Boolean] :avoid_uppercases
32
+ # @option options [Boolean] :avoid_numbers
33
+ # @option options [Boolean] :avoid_symbols
34
+ # @option options [Boolean] :avoid_whitespace
35
+ # @return [String]
36
+ def generate(length, options={})
37
+ length = length.to_int
38
+ unless length >= 1
39
+ raise ArgumentError, "too small length thrown: #{length.inspect}"
40
+ end
41
+ options = GENERATE_OptArg.parse options
42
+ chars = characters_for(options).freeze
43
+
44
+ charlen = chars.length
45
+
46
+ # `Array#sample` accepts random generator via optional-argument.
47
+ # But the feature/syntax makes my anxiety :(
48
+ length.times.map{chars.fetch(SecureRandom.random_number(charlen))}.join
49
+ end
50
+
51
+ private
52
+
53
+ # @param options [GENERATE_OptArg]
54
+ # @return [Array<String>]
55
+ def characters_for(options)
56
+ chars = []
57
+ chars.concat(DOWNCASES) unless options.avoid_downcases
58
+ chars.concat(UPPERCASES) unless options.avoid_uppercases
59
+ chars.concat(NUMBERS) unless options.avoid_numbers
60
+ chars.concat(SYMBOLS) unless options.avoid_symbols
61
+ chars.push(WHITESPACE) unless options.avoid_whitespace
62
+
63
+ unless chars.length >= 2
64
+ raise ArgumentError, "using character-list is too short: #{chars.inspect}"
65
+ end
66
+
67
+ chars
68
+ end
69
+
70
+ end
71
+
72
+ end
@@ -0,0 +1,5 @@
1
+ # coding: us-ascii
2
+
3
+ module PasswordGenerator
4
+ VERSION = '0.0.1'.freeze
5
+ end
@@ -0,0 +1,3 @@
1
+ # coding: us-ascii
2
+
3
+ require_relative 'password_generator'
@@ -0,0 +1,31 @@
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.required_ruby_version = '>= 1.9.3'
15
+
16
+ gem.add_runtime_dependency 'optionalargument', '~> 0.1'
17
+
18
+ gem.add_development_dependency 'yard', '>= 0.8.6.1', '< 0.9'
19
+ gem.add_development_dependency 'rspec', '>= 2.13', '< 3'
20
+ gem.add_development_dependency 'rake', '>= 10', '< 20'
21
+ gem.add_development_dependency 'bundler', '>= 1.3.5', '< 2'
22
+
23
+ # common
24
+
25
+ gem.authors = ['Kenichi Kamiya']
26
+ gem.email = ['kachick1+ruby@gmail.com']
27
+ gem.files = `git ls-files`.split($\)
28
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
29
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
30
+ gem.require_paths = ['lib']
31
+ end
@@ -0,0 +1,98 @@
1
+ # coding: utf-8
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 be_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,169 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: password_generator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Kenichi Kamiya
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-06-21 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: optionalargument
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '0.1'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '0.1'
30
+ - !ruby/object:Gem::Dependency
31
+ name: yard
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 0.8.6.1
38
+ - - <
39
+ - !ruby/object:Gem::Version
40
+ version: '0.9'
41
+ type: :development
42
+ prerelease: false
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
48
+ version: 0.8.6.1
49
+ - - <
50
+ - !ruby/object:Gem::Version
51
+ version: '0.9'
52
+ - !ruby/object:Gem::Dependency
53
+ name: rspec
54
+ requirement: !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ! '>='
58
+ - !ruby/object:Gem::Version
59
+ version: '2.13'
60
+ - - <
61
+ - !ruby/object:Gem::Version
62
+ version: '3'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '2.13'
71
+ - - <
72
+ - !ruby/object:Gem::Version
73
+ version: '3'
74
+ - !ruby/object:Gem::Dependency
75
+ name: rake
76
+ requirement: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ! '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '10'
82
+ - - <
83
+ - !ruby/object:Gem::Version
84
+ version: '20'
85
+ type: :development
86
+ prerelease: false
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ! '>='
91
+ - !ruby/object:Gem::Version
92
+ version: '10'
93
+ - - <
94
+ - !ruby/object:Gem::Version
95
+ version: '20'
96
+ - !ruby/object:Gem::Dependency
97
+ name: bundler
98
+ requirement: !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: 1.3.5
104
+ - - <
105
+ - !ruby/object:Gem::Version
106
+ version: '2'
107
+ type: :development
108
+ prerelease: false
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
112
+ - - ! '>='
113
+ - !ruby/object:Gem::Version
114
+ version: 1.3.5
115
+ - - <
116
+ - !ruby/object:Gem::Version
117
+ version: '2'
118
+ description: A generator for daily passwords
119
+ email:
120
+ - kachick1+ruby@gmail.com
121
+ executables:
122
+ - password_generator
123
+ extensions: []
124
+ extra_rdoc_files: []
125
+ files:
126
+ - .gitignore
127
+ - .travis.yml
128
+ - .yardopts
129
+ - Gemfile
130
+ - MIT-LICENSE
131
+ - README.md
132
+ - Rakefile
133
+ - bin/password_generator
134
+ - examples/README.rb
135
+ - lib/password_generator.rb
136
+ - lib/password_generator/version.rb
137
+ - lib/passwordgenerator.rb
138
+ - password_generator.gemspec
139
+ - spec/password_generator_spec.rb
140
+ - spec/spec_helper.rb
141
+ homepage: http://kachick.github.com/ruby-password_generator/
142
+ licenses:
143
+ - MIT
144
+ post_install_message:
145
+ rdoc_options: []
146
+ require_paths:
147
+ - lib
148
+ required_ruby_version: !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ! '>='
152
+ - !ruby/object:Gem::Version
153
+ version: 1.9.3
154
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
+ none: false
156
+ requirements:
157
+ - - ! '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ requirements: []
161
+ rubyforge_project:
162
+ rubygems_version: 1.8.23
163
+ signing_key:
164
+ specification_version: 3
165
+ summary: A generator for daily passwords
166
+ test_files:
167
+ - spec/password_generator_spec.rb
168
+ - spec/spec_helper.rb
169
+ has_rdoc: