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 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