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

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: