pass 0.0.1 → 0.0.2
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.
- data/.rspec +1 -0
- data/Gemfile +1 -0
- data/Rakefile +8 -11
- data/VERSION +1 -1
- data/bin/pass +8 -0
- data/lib/pass.rb +27 -6
- data/pass.gemspec +18 -13
- data/spec/pass_spec.rb +89 -0
- data/spec/spec_helper.rb +12 -0
- metadata +74 -90
- data/Gemfile.lock +0 -20
- data/test/helper.rb +0 -18
- data/test/test_pass.rb +0 -7
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/Gemfile
CHANGED
@@ -6,6 +6,7 @@ source "http://rubygems.org"
|
|
6
6
|
# Add dependencies to develop your gem here.
|
7
7
|
# Include everything needed to run rake, tests, features, etc.
|
8
8
|
group :development do
|
9
|
+
gem "rspec", "~> 2.8.0"
|
9
10
|
gem "shoulda", ">= 0"
|
10
11
|
gem "bundler", "~> 1.0.0"
|
11
12
|
gem "jeweler", "~> 1.5.2"
|
data/Rakefile
CHANGED
@@ -26,21 +26,18 @@ Jeweler::Tasks.new do |gem|
|
|
26
26
|
end
|
27
27
|
Jeweler::RubygemsDotOrgTasks.new
|
28
28
|
|
29
|
-
require '
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
test.verbose = true
|
29
|
+
require 'rspec/core'
|
30
|
+
require 'rspec/core/rake_task'
|
31
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
32
|
+
spec.pattern = FileList['spec/**/*_spec.rb']
|
34
33
|
end
|
35
34
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
test.pattern = 'test/**/test_*.rb'
|
40
|
-
test.verbose = true
|
35
|
+
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
36
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
37
|
+
spec.rcov = true
|
41
38
|
end
|
42
39
|
|
43
|
-
task :default => :
|
40
|
+
task :default => :spec
|
44
41
|
|
45
42
|
require 'rake/rdoctask'
|
46
43
|
Rake::RDocTask.new do |rdoc|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
data/bin/pass
ADDED
data/lib/pass.rb
CHANGED
@@ -1,16 +1,37 @@
|
|
1
1
|
|
2
2
|
class Pass
|
3
|
-
|
4
|
-
|
3
|
+
NUM_ITERATION = 100
|
4
|
+
NUM_CHARACTERS = 12
|
5
|
+
@list_carachters = ('a'..'z').to_a + ('A'..'Z').to_a + ('1'..'9').to_a
|
6
|
+
@list_carachters.delete_if{|s| %w[l o I O 1].include? s }
|
5
7
|
|
6
|
-
def Pass.generate(num)
|
8
|
+
def Pass.generate(num = NUM_CHARACTERS)
|
9
|
+
raise "Invalid Argument: number of characters should be more than 1." if num <= 2
|
10
|
+
iteration = 0
|
7
11
|
begin
|
12
|
+
raise "Not Converged: #{NUM_ITERATION} times" if iteration > NUM_ITERATION
|
8
13
|
pass = ''
|
9
14
|
num.times{
|
10
|
-
rand_num = rand(@
|
11
|
-
pass +=
|
15
|
+
rand_num = rand(@list_carachters.size)
|
16
|
+
pass += @list_carachters[rand_num]
|
12
17
|
}
|
13
|
-
|
18
|
+
iteration += 1
|
19
|
+
end until pass =~ /\d/ && pass =~ /[a-z]/ && pass =~ /[A-Z]/
|
14
20
|
pass
|
15
21
|
end
|
22
|
+
|
23
|
+
def Pass.multi_generate(num_password, num_character = NUM_CHARACTERS)
|
24
|
+
passwords = []
|
25
|
+
num_password.times{
|
26
|
+
passwords << Pass.generate(num_character)
|
27
|
+
}
|
28
|
+
passwords
|
29
|
+
end
|
30
|
+
|
31
|
+
def Pass.exec(argv)
|
32
|
+
num_times = argv[0] || 1
|
33
|
+
num_characters = argv[1] || NUM_CHARACTERS
|
34
|
+
|
35
|
+
puts Pass.multi_generate(num_times.to_i, num_characters.to_i)
|
36
|
+
end
|
16
37
|
end
|
data/pass.gemspec
CHANGED
@@ -4,56 +4,61 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.0.
|
7
|
+
s.name = "pass"
|
8
|
+
s.version = "0.0.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Hitoshi Kurokawa"]
|
12
|
-
s.date =
|
13
|
-
s.description =
|
14
|
-
s.email =
|
12
|
+
s.date = "2012-02-04"
|
13
|
+
s.description = "gem pass - Password Generator for CUI"
|
14
|
+
s.email = "hitoshi@nextseed.jp"
|
15
|
+
s.executables = ["pass"]
|
15
16
|
s.extra_rdoc_files = [
|
16
17
|
"LICENSE.txt",
|
17
18
|
"README.rdoc"
|
18
19
|
]
|
19
20
|
s.files = [
|
20
21
|
".document",
|
22
|
+
".rspec",
|
21
23
|
"Gemfile",
|
22
|
-
"Gemfile.lock",
|
23
24
|
"LICENSE.txt",
|
24
25
|
"README.rdoc",
|
25
26
|
"Rakefile",
|
26
27
|
"VERSION",
|
28
|
+
"bin/pass",
|
27
29
|
"lib/pass.rb",
|
28
30
|
"pass.gemspec",
|
29
|
-
"
|
30
|
-
"
|
31
|
+
"spec/pass_spec.rb",
|
32
|
+
"spec/spec_helper.rb"
|
31
33
|
]
|
32
|
-
s.homepage =
|
34
|
+
s.homepage = "http://github.com/krhitoshi/pass"
|
33
35
|
s.licenses = ["MIT"]
|
34
36
|
s.require_paths = ["lib"]
|
35
|
-
s.rubygems_version =
|
36
|
-
s.summary =
|
37
|
+
s.rubygems_version = "1.8.10"
|
38
|
+
s.summary = "Password Generator for CUI"
|
37
39
|
s.test_files = [
|
38
|
-
"
|
39
|
-
"
|
40
|
+
"spec/pass_spec.rb",
|
41
|
+
"spec/spec_helper.rb"
|
40
42
|
]
|
41
43
|
|
42
44
|
if s.respond_to? :specification_version then
|
43
45
|
s.specification_version = 3
|
44
46
|
|
45
47
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
48
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
|
46
49
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
47
50
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
48
51
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
49
52
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
50
53
|
else
|
54
|
+
s.add_dependency(%q<rspec>, ["~> 2.8.0"])
|
51
55
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
52
56
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
53
57
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
54
58
|
s.add_dependency(%q<rcov>, [">= 0"])
|
55
59
|
end
|
56
60
|
else
|
61
|
+
s.add_dependency(%q<rspec>, ["~> 2.8.0"])
|
57
62
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
58
63
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
59
64
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
data/spec/pass_spec.rb
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require "stringio"
|
3
|
+
|
4
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
5
|
+
|
6
|
+
describe Pass do
|
7
|
+
describe "出力される文字数" do
|
8
|
+
it "文字数を指定できること" do
|
9
|
+
Pass.generate(3).size.should be(3)
|
10
|
+
Pass.generate(12).size.should be(12)
|
11
|
+
Pass.generate(30).size.should be(30)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "文字数を指定しない場合は12文字であること" do
|
15
|
+
Pass.generate.size.should be(12)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "特定文字が含まれること含まれないこと" do
|
20
|
+
it "文字列に数字が1文字以上含まれること" do
|
21
|
+
10.times do
|
22
|
+
(Pass.generate(3) =~ /\d/).should be_true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it "文字列に小文字が1文字以上含まれること" do
|
27
|
+
10.times do
|
28
|
+
(Pass.generate(3) =~ /[a-z]/).should be_true
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
it "文字列に大文字が1文字以上含まれること" do
|
33
|
+
10.times do
|
34
|
+
(Pass.generate(3) =~ /[A-Z]/).should be_true
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
it "見間違えやすい文字列が含まれないこと" do
|
39
|
+
exclude_characters = %w[l o I O 1]
|
40
|
+
50.times do
|
41
|
+
(Pass.generate =~ /[#{exclude_characters.join}]/).should be_false
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "エラーの発生" do
|
47
|
+
describe "特定回数の生成試行数を超えるとエラーを発生すること" do
|
48
|
+
before do
|
49
|
+
Pass::NUM_ITERATION = 1
|
50
|
+
end
|
51
|
+
after do
|
52
|
+
Pass::NUM_ITERATION = 100
|
53
|
+
end
|
54
|
+
it do
|
55
|
+
lambda{
|
56
|
+
10.times do
|
57
|
+
Pass.generate(3)
|
58
|
+
end
|
59
|
+
}.should raise_error
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
it "2以下の文字数を指定するとエラーを発生すること" do
|
64
|
+
lambda{ Pass.generate(2) }.should raise_error
|
65
|
+
lambda{ Pass.generate(0) }.should raise_error
|
66
|
+
lambda{ Pass.generate(-10) }.should raise_error
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "複数パスワードの生成" do
|
71
|
+
it "指定した個数のパスワードを配列で返すこと" do
|
72
|
+
Pass.multi_generate(2).size.should be(2)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "コマンド用メソッド" do
|
77
|
+
it "指定したパスワードが返ってくること" do
|
78
|
+
argv = [3, 16] # 16文字 3パスワード
|
79
|
+
$stdout = StringIO.new
|
80
|
+
Pass.exec(argv)
|
81
|
+
passwords = $stdout.string.chomp.split("\n")
|
82
|
+
passwords.size.should be(3)
|
83
|
+
passwords.each do |password|
|
84
|
+
password.size.should be(16)
|
85
|
+
end
|
86
|
+
$stdout = STDOUT
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
require 'rspec'
|
4
|
+
require 'pass'
|
5
|
+
|
6
|
+
# Requires supporting files with custom matchers and macros, etc,
|
7
|
+
# in ./support/ and its subdirectories.
|
8
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
9
|
+
|
10
|
+
RSpec.configure do |config|
|
11
|
+
|
12
|
+
end
|
metadata
CHANGED
@@ -1,136 +1,120 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: pass
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 1
|
10
|
-
version: 0.0.1
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Hitoshi Kurokawa
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
12
|
+
date: 2012-02-04 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: &70297626887700 !ruby/object:Gem::Requirement
|
23
17
|
none: false
|
24
|
-
requirements:
|
25
|
-
- -
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
|
28
|
-
|
29
|
-
- 0
|
30
|
-
version: "0"
|
31
|
-
version_requirements: *id001
|
32
|
-
name: shoulda
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.8.0
|
22
|
+
type: :development
|
33
23
|
prerelease: false
|
34
|
-
|
24
|
+
version_requirements: *70297626887700
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: shoulda
|
27
|
+
requirement: &70297626885860 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
35
33
|
type: :development
|
36
|
-
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70297626885860
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: bundler
|
38
|
+
requirement: &70297626884980 !ruby/object:Gem::Requirement
|
37
39
|
none: false
|
38
|
-
requirements:
|
40
|
+
requirements:
|
39
41
|
- - ~>
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
hash: 23
|
42
|
-
segments:
|
43
|
-
- 1
|
44
|
-
- 0
|
45
|
-
- 0
|
42
|
+
- !ruby/object:Gem::Version
|
46
43
|
version: 1.0.0
|
47
|
-
version_requirements: *id002
|
48
|
-
name: bundler
|
49
|
-
prerelease: false
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
44
|
type: :development
|
52
|
-
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70297626884980
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: jeweler
|
49
|
+
requirement: &70297626884380 !ruby/object:Gem::Requirement
|
53
50
|
none: false
|
54
|
-
requirements:
|
51
|
+
requirements:
|
55
52
|
- - ~>
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
hash: 7
|
58
|
-
segments:
|
59
|
-
- 1
|
60
|
-
- 5
|
61
|
-
- 2
|
53
|
+
- !ruby/object:Gem::Version
|
62
54
|
version: 1.5.2
|
63
|
-
version_requirements: *id003
|
64
|
-
name: jeweler
|
65
|
-
prerelease: false
|
66
|
-
- !ruby/object:Gem::Dependency
|
67
55
|
type: :development
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
- - ">="
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
hash: 3
|
74
|
-
segments:
|
75
|
-
- 0
|
76
|
-
version: "0"
|
77
|
-
version_requirements: *id004
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70297626884380
|
58
|
+
- !ruby/object:Gem::Dependency
|
78
59
|
name: rcov
|
60
|
+
requirement: &70297626883900 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
79
67
|
prerelease: false
|
68
|
+
version_requirements: *70297626883900
|
80
69
|
description: gem pass - Password Generator for CUI
|
81
70
|
email: hitoshi@nextseed.jp
|
82
|
-
executables:
|
83
|
-
|
71
|
+
executables:
|
72
|
+
- pass
|
84
73
|
extensions: []
|
85
|
-
|
86
|
-
extra_rdoc_files:
|
74
|
+
extra_rdoc_files:
|
87
75
|
- LICENSE.txt
|
88
76
|
- README.rdoc
|
89
|
-
files:
|
77
|
+
files:
|
90
78
|
- .document
|
79
|
+
- .rspec
|
91
80
|
- Gemfile
|
92
|
-
- Gemfile.lock
|
93
81
|
- LICENSE.txt
|
94
82
|
- README.rdoc
|
95
83
|
- Rakefile
|
96
84
|
- VERSION
|
85
|
+
- bin/pass
|
97
86
|
- lib/pass.rb
|
98
87
|
- pass.gemspec
|
99
|
-
-
|
100
|
-
-
|
88
|
+
- spec/pass_spec.rb
|
89
|
+
- spec/spec_helper.rb
|
101
90
|
homepage: http://github.com/krhitoshi/pass
|
102
|
-
licenses:
|
91
|
+
licenses:
|
103
92
|
- MIT
|
104
93
|
post_install_message:
|
105
94
|
rdoc_options: []
|
106
|
-
|
107
|
-
require_paths:
|
95
|
+
require_paths:
|
108
96
|
- lib
|
109
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
97
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
110
98
|
none: false
|
111
|
-
requirements:
|
112
|
-
- -
|
113
|
-
- !ruby/object:Gem::Version
|
114
|
-
|
115
|
-
segments:
|
99
|
+
requirements:
|
100
|
+
- - ! '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
segments:
|
116
104
|
- 0
|
117
|
-
|
118
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
|
+
hash: -1435995826567472989
|
106
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
107
|
none: false
|
120
|
-
requirements:
|
121
|
-
- -
|
122
|
-
- !ruby/object:Gem::Version
|
123
|
-
|
124
|
-
segments:
|
125
|
-
- 0
|
126
|
-
version: "0"
|
108
|
+
requirements:
|
109
|
+
- - ! '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
127
112
|
requirements: []
|
128
|
-
|
129
113
|
rubyforge_project:
|
130
|
-
rubygems_version: 1.
|
114
|
+
rubygems_version: 1.8.10
|
131
115
|
signing_key:
|
132
116
|
specification_version: 3
|
133
117
|
summary: Password Generator for CUI
|
134
|
-
test_files:
|
135
|
-
-
|
136
|
-
-
|
118
|
+
test_files:
|
119
|
+
- spec/pass_spec.rb
|
120
|
+
- spec/spec_helper.rb
|
data/Gemfile.lock
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
GEM
|
2
|
-
remote: http://rubygems.org/
|
3
|
-
specs:
|
4
|
-
git (1.2.5)
|
5
|
-
jeweler (1.5.2)
|
6
|
-
bundler (~> 1.0.0)
|
7
|
-
git (>= 1.2.5)
|
8
|
-
rake
|
9
|
-
rake (0.8.7)
|
10
|
-
rcov (0.9.9)
|
11
|
-
shoulda (2.11.3)
|
12
|
-
|
13
|
-
PLATFORMS
|
14
|
-
ruby
|
15
|
-
|
16
|
-
DEPENDENCIES
|
17
|
-
bundler (~> 1.0.0)
|
18
|
-
jeweler (~> 1.5.2)
|
19
|
-
rcov
|
20
|
-
shoulda
|
data/test/helper.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'bundler'
|
3
|
-
begin
|
4
|
-
Bundler.setup(:default, :development)
|
5
|
-
rescue Bundler::BundlerError => e
|
6
|
-
$stderr.puts e.message
|
7
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
-
exit e.status_code
|
9
|
-
end
|
10
|
-
require 'test/unit'
|
11
|
-
require 'shoulda'
|
12
|
-
|
13
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
14
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
15
|
-
require 'pass'
|
16
|
-
|
17
|
-
class Test::Unit::TestCase
|
18
|
-
end
|