pass 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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 'rake/testtask'
30
- Rake::TestTask.new(:test) do |test|
31
- test.libs << 'lib' << 'test'
32
- test.pattern = 'test/**/test_*.rb'
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
- require 'rcov/rcovtask'
37
- Rcov::RcovTask.new do |test|
38
- test.libs << 'test'
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 => :test
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
1
+ 0.0.2
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ # The command line password generator
3
+
4
+ $LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
5
+ require 'rubygems'
6
+ require 'pass'
7
+
8
+ Pass.exec(ARGV)
@@ -1,16 +1,37 @@
1
1
 
2
2
  class Pass
3
- @list = ('a'..'z').to_a + ('A'..'Z').to_a + ('1'..'9').to_a
4
- @list.delete_if{|s| ['l','o','I','O','1'].include? s }
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(@list.size)
11
- pass += "#{@list[rand_num]}"
15
+ rand_num = rand(@list_carachters.size)
16
+ pass += @list_carachters[rand_num]
12
17
  }
13
- end until pass =~ /\d/
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
@@ -4,56 +4,61 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{pass}
8
- s.version = "0.0.1"
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 = %q{2011-04-12}
13
- s.description = %q{gem pass - Password Generator for CUI}
14
- s.email = %q{hitoshi@nextseed.jp}
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
- "test/helper.rb",
30
- "test/test_pass.rb"
31
+ "spec/pass_spec.rb",
32
+ "spec/spec_helper.rb"
31
33
  ]
32
- s.homepage = %q{http://github.com/krhitoshi/pass}
34
+ s.homepage = "http://github.com/krhitoshi/pass"
33
35
  s.licenses = ["MIT"]
34
36
  s.require_paths = ["lib"]
35
- s.rubygems_version = %q{1.7.2}
36
- s.summary = %q{Password Generator for CUI}
37
+ s.rubygems_version = "1.8.10"
38
+ s.summary = "Password Generator for CUI"
37
39
  s.test_files = [
38
- "test/helper.rb",
39
- "test/test_pass.rb"
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"])
@@ -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
@@ -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
- hash: 29
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
- date: 2011-04-12 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- type: :development
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
- hash: 3
28
- segments:
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
- - !ruby/object:Gem::Dependency
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
- requirement: &id002 !ruby/object:Gem::Requirement
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
- requirement: &id003 !ruby/object:Gem::Requirement
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
- requirement: &id004 !ruby/object:Gem::Requirement
69
- none: false
70
- requirements:
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
- - test/helper.rb
100
- - test/test_pass.rb
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
- hash: 3
115
- segments:
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ segments:
116
104
  - 0
117
- version: "0"
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
- hash: 3
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.7.2
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
- - test/helper.rb
136
- - test/test_pass.rb
118
+ test_files:
119
+ - spec/pass_spec.rb
120
+ - spec/spec_helper.rb
@@ -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
@@ -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
@@ -1,7 +0,0 @@
1
- require 'helper'
2
-
3
- class TestPass < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
6
- end
7
- end