pass 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (10) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +3 -3
  3. data/README.rdoc +28 -3
  4. data/Rakefile +2 -9
  5. data/VERSION +1 -1
  6. data/bin/pass +1 -1
  7. data/lib/pass.rb +80 -26
  8. data/pass.gemspec +15 -18
  9. data/spec/pass_spec.rb +113 -22
  10. metadata +51 -43
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 91bcbf233648df0ab6b9b4a676eb9edc2ba9878a
4
+ data.tar.gz: 6ab800006ea66bbe80c5fdfa274d056de1eae4b7
5
+ SHA512:
6
+ metadata.gz: 06e9e65a42cf8323eb67d8f010c72040e8a9200df6b3b6a64c7116ac1d011d4eadfc3dd6c31143659588ae2f2bea3e22c8c879c2f7b9f5f4e6c0e853502b291c
7
+ data.tar.gz: 1aeb65fb37aec9c688e32e33351f7b59c38e354751e727ee0f3227c35ab266e69af7b3652a7c6d3e7ed64ec238ebd356f8ecaab2bac412d6bac1e99f4c3abd38
data/Gemfile CHANGED
@@ -8,7 +8,7 @@ source "http://rubygems.org"
8
8
  group :development do
9
9
  gem "rspec", "~> 2.8.0"
10
10
  gem "shoulda", ">= 0"
11
- gem "bundler", "~> 1.0.0"
12
- gem "jeweler", "~> 1.5.2"
13
- gem "rcov", ">= 0"
11
+ gem "yard", "~> 0.7"
12
+ gem "bundler", "~> 1.9.1"
13
+ gem "jeweler", "~> 1.8.3"
14
14
  end
@@ -1,8 +1,33 @@
1
- = pass
1
+ = Pass
2
2
 
3
- Description goes here.
3
+ Pass is a command to generator random passwords for CUI.
4
4
 
5
- == Contributing to pass
5
+ == Using
6
+
7
+ The first step is to install the gem
8
+
9
+ gem install pass
10
+
11
+ You can run Pass to generate one random password. A generated password has 12 characters with more than one upper case letter, lower case letter, and numeric character.
12
+
13
+ pass
14
+
15
+ If you need more passwords, you can specify the number of passwords.
16
+
17
+ pass 12
18
+
19
+ You can specify the password length by -c option.
20
+
21
+ pass -c 18
22
+
23
+ == Options
24
+
25
+ ```
26
+ -c NUM specify password length
27
+ -v, --version show version
28
+ ```
29
+
30
+ == Contributing to Pass
6
31
 
7
32
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
8
33
  * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
data/Rakefile CHANGED
@@ -39,12 +39,5 @@ end
39
39
 
40
40
  task :default => :spec
41
41
 
42
- require 'rake/rdoctask'
43
- Rake::RDocTask.new do |rdoc|
44
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
45
-
46
- rdoc.rdoc_dir = 'rdoc'
47
- rdoc.title = "pass #{version}"
48
- rdoc.rdoc_files.include('README*')
49
- rdoc.rdoc_files.include('lib/**/*.rb')
50
- end
42
+ require 'yard'
43
+ YARD::Rake::YardocTask.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.3
data/bin/pass CHANGED
@@ -5,4 +5,4 @@ $LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
5
5
  require 'rubygems'
6
6
  require 'pass'
7
7
 
8
- Pass.exec(ARGV)
8
+ Pass.new.exec(ARGV)
@@ -1,37 +1,91 @@
1
+ require 'optparse'
1
2
 
2
3
  class Pass
3
- NUM_ITERATION = 100
4
+ MIN_NUM_CHARACTERS = 3
4
5
  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 }
7
6
 
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
11
- begin
12
- raise "Not Converged: #{NUM_ITERATION} times" if iteration > NUM_ITERATION
13
- pass = ''
14
- num.times{
15
- rand_num = rand(@list_carachters.size)
16
- pass += @list_carachters[rand_num]
17
- }
18
- iteration += 1
19
- end until pass =~ /\d/ && pass =~ /[a-z]/ && pass =~ /[A-Z]/
20
- pass
21
- end
22
-
23
- def Pass.multi_generate(num_password, num_character = NUM_CHARACTERS)
7
+ class Error < StandardError; end
8
+
9
+ def initialize
10
+ @list_carachters = ('a'..'z').to_a + ('A'..'Z').to_a + ('1'..'9').to_a - %w[l o I O 1]
11
+ @num_iteration = 100
12
+ @validation_regexps = [/\d/, /[a-z]/, /[A-Z]/]
13
+ end
14
+
15
+ def generate(num = NUM_CHARACTERS)
16
+ if !integer?(num) || num < MIN_NUM_CHARACTERS
17
+ raise Pass::Error, "Invalid Argument: number of characters should be more than #{MIN_NUM_CHARACTERS}."
18
+ end
19
+
20
+ @num_iteration.times do
21
+ pass = @list_carachters.sample(num).join
22
+ return pass if valid?(pass)
23
+ end
24
+ raise "Not Converged: #{@num_iteration} times"
25
+ end
26
+
27
+ def valid?(pass)
28
+ @validation_regexps.all?{|reg| reg =~ pass}
29
+ end
30
+
31
+ def multi_generate(num_password, num_character = NUM_CHARACTERS)
24
32
  passwords = []
25
- num_password.times{
26
- passwords << Pass.generate(num_character)
27
- }
33
+ num_password.times do
34
+ passwords << generate(num_character)
35
+ end
28
36
  passwords
29
37
  end
30
38
 
31
- def Pass.exec(argv)
32
- num_times = argv[0] || 1
33
- num_characters = argv[1] || NUM_CHARACTERS
39
+ def Pass.generate(num = NUM_CHARACTERS)
40
+ Pass.new.generate(num)
41
+ end
42
+
43
+ def exec(argv)
44
+ num_characters = NUM_CHARACTERS
45
+ opts = OptionParser.new
46
+ opts.on('-c NUM', 'specify password length') do |value|
47
+ num_characters = value
48
+ end
49
+ opts.on_tail('-v', '--version', 'show version') do
50
+ puts "#{self.class.name} #{version}"
51
+ exit 0
52
+ end
53
+ opts.banner = <<END
54
+ Usage: pass [options] [number of passwords]
55
+
56
+ Description:
57
+ Generates random passwords.
58
+
59
+ Options:
60
+ END
61
+ begin
62
+ res_argv = opts.parse!(argv)
63
+ num_times = res_argv[0] || 1
64
+ puts multi_generate(num_times.to_i, num_characters.to_i)
65
+ rescue SystemExit
66
+ rescue Exception => e
67
+ $stderr.puts "Error: #{e.message}"
68
+ exit 1
69
+ end
70
+ exit 0
71
+ end
72
+
73
+ def num_iteration
74
+ @num_iteration
75
+ end
76
+
77
+ def num_iteration=(value)
78
+ raise(Error, "Invalid Argument: num_iteration #{value}") if !integer?(value) || value <= 0
79
+ @num_iteration = value
80
+ end
81
+
82
+ def version
83
+ number = File.read(File.dirname(__FILE__) + '/../VERSION')
84
+ number.chomp
85
+ end
34
86
 
35
- puts Pass.multi_generate(num_times.to_i, num_characters.to_i)
87
+ private
88
+ def integer?(value)
89
+ value.kind_of?(Integer)
36
90
  end
37
91
  end
@@ -2,14 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
+ # stub: pass 0.0.3 ruby lib
5
6
 
6
7
  Gem::Specification.new do |s|
7
8
  s.name = "pass"
8
- s.version = "0.0.2"
9
+ s.version = "0.0.3"
9
10
 
10
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib"]
11
13
  s.authors = ["Hitoshi Kurokawa"]
12
- s.date = "2012-02-04"
14
+ s.date = "2015-08-22"
13
15
  s.description = "gem pass - Password Generator for CUI"
14
16
  s.email = "hitoshi@nextseed.jp"
15
17
  s.executables = ["pass"]
@@ -33,36 +35,31 @@ Gem::Specification.new do |s|
33
35
  ]
34
36
  s.homepage = "http://github.com/krhitoshi/pass"
35
37
  s.licenses = ["MIT"]
36
- s.require_paths = ["lib"]
37
- s.rubygems_version = "1.8.10"
38
+ s.rubygems_version = "2.4.5"
38
39
  s.summary = "Password Generator for CUI"
39
- s.test_files = [
40
- "spec/pass_spec.rb",
41
- "spec/spec_helper.rb"
42
- ]
43
40
 
44
41
  if s.respond_to? :specification_version then
45
- s.specification_version = 3
42
+ s.specification_version = 4
46
43
 
47
44
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
48
45
  s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
49
46
  s.add_development_dependency(%q<shoulda>, [">= 0"])
50
- s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
51
- s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
52
- s.add_development_dependency(%q<rcov>, [">= 0"])
47
+ s.add_development_dependency(%q<yard>, ["~> 0.7"])
48
+ s.add_development_dependency(%q<bundler>, ["~> 1.9.1"])
49
+ s.add_development_dependency(%q<jeweler>, ["~> 1.8.3"])
53
50
  else
54
51
  s.add_dependency(%q<rspec>, ["~> 2.8.0"])
55
52
  s.add_dependency(%q<shoulda>, [">= 0"])
56
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
57
- s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
58
- s.add_dependency(%q<rcov>, [">= 0"])
53
+ s.add_dependency(%q<yard>, ["~> 0.7"])
54
+ s.add_dependency(%q<bundler>, ["~> 1.9.1"])
55
+ s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
59
56
  end
60
57
  else
61
58
  s.add_dependency(%q<rspec>, ["~> 2.8.0"])
62
59
  s.add_dependency(%q<shoulda>, [">= 0"])
63
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
64
- s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
65
- s.add_dependency(%q<rcov>, [">= 0"])
60
+ s.add_dependency(%q<yard>, ["~> 0.7"])
61
+ s.add_dependency(%q<bundler>, ["~> 1.9.1"])
62
+ s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
66
63
  end
67
64
  end
68
65
 
@@ -4,86 +4,177 @@ require "stringio"
4
4
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
5
5
 
6
6
  describe Pass do
7
+ before do
8
+ @pass = Pass.new
9
+ end
10
+
7
11
  describe "出力される文字数" do
8
12
  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)
13
+ @pass.generate(3).size.should be(3)
14
+ @pass.generate(12).size.should be(12)
15
+ @pass.generate(30).size.should be(30)
12
16
  end
13
17
 
14
18
  it "文字数を指定しない場合は12文字であること" do
15
- Pass.generate.size.should be(12)
19
+ @pass.generate.size.should be(12)
16
20
  end
17
21
  end
18
22
 
19
23
  describe "特定文字が含まれること含まれないこと" do
20
24
  it "文字列に数字が1文字以上含まれること" do
21
25
  10.times do
22
- (Pass.generate(3) =~ /\d/).should be_true
26
+ (@pass.generate(3) =~ /\d/).should be_true
23
27
  end
24
28
  end
25
29
 
26
30
  it "文字列に小文字が1文字以上含まれること" do
27
31
  10.times do
28
- (Pass.generate(3) =~ /[a-z]/).should be_true
32
+ (@pass.generate(3) =~ /[a-z]/).should be_true
29
33
  end
30
34
  end
31
35
 
32
36
  it "文字列に大文字が1文字以上含まれること" do
33
37
  10.times do
34
- (Pass.generate(3) =~ /[A-Z]/).should be_true
38
+ (@pass.generate(3) =~ /[A-Z]/).should be_true
35
39
  end
36
40
  end
37
41
 
38
42
  it "見間違えやすい文字列が含まれないこと" do
39
43
  exclude_characters = %w[l o I O 1]
40
44
  50.times do
41
- (Pass.generate =~ /[#{exclude_characters.join}]/).should be_false
45
+ (@pass.generate =~ /[#{exclude_characters.join}]/).should be_false
42
46
  end
43
47
  end
44
48
  end
45
49
 
46
- describe "エラーの発生" do
47
- describe "特定回数の生成試行数を超えるとエラーを発生すること" do
50
+ describe "valid?" do
51
+ it "validなパスワードでtrueを返すこと" do
52
+ @pass.valid?("aT2").should be_true
53
+ @pass.valid?("1bR").should be_true
54
+ @pass.valid?("J0e").should be_true
55
+ end
56
+
57
+ it "invalidなパスワードでfalseを返すこと" do
58
+ @pass.valid?("012").should be_false
59
+ @pass.valid?("abc").should be_false
60
+ @pass.valid?("ABC").should be_false
61
+ @pass.valid?("0bc").should be_false
62
+ @pass.valid?("0BC").should be_false
63
+ @pass.valid?("AbC").should be_false
64
+ end
65
+ end
66
+
67
+ describe "イテレーションの回数" do
68
+ it "回数値を読み込めること" do
69
+ @pass.num_iteration.should be(100)
70
+ end
71
+
72
+ it "回数値を変更できること" do
73
+ @pass.num_iteration = 10
74
+ @pass.num_iteration.should be(10)
75
+ end
76
+
77
+ it "0以下の回数値を入力すると例外を発生" do
78
+ lambda{ @pass.num_iteration = 0 }.should raise_error(Pass::Error)
79
+ lambda{ @pass.num_iteration = -10 }.should raise_error(Pass::Error)
80
+ end
81
+ end
82
+
83
+ describe "例外の発生" do
84
+ describe "特定回数の生成試行数を超えると例外を発生すること" do
48
85
  before do
49
- Pass::NUM_ITERATION = 1
86
+ @pass.num_iteration = 1
50
87
  end
88
+
51
89
  after do
52
- Pass::NUM_ITERATION = 100
90
+ @pass.num_iteration = 100
53
91
  end
92
+
54
93
  it do
55
94
  lambda{
56
95
  10.times do
57
- Pass.generate(3)
96
+ @pass.generate(3)
58
97
  end
59
98
  }.should raise_error
60
99
  end
61
100
  end
62
101
 
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
102
+ it "2以下の文字数を指定すると例外を発生すること" do
103
+ lambda{ @pass.generate(2) }.should raise_error(Pass::Error)
104
+ lambda{ @pass.generate(0) }.should raise_error(Pass::Error)
105
+ lambda{ @pass.generate(-10) }.should raise_error(Pass::Error)
106
+ end
107
+
108
+ it "不正な回数値を入力すると例外を発生すること" do
109
+ lambda{ @pass.num_iteration = "abc" }.should raise_error(Pass::Error)
110
+ end
111
+
112
+ it "不正な文字数を入力すると例外を発生すること" do
113
+ lambda{ @pass.generate("abc") }.should raise_error(Pass::Error)
67
114
  end
68
115
  end
69
116
 
70
117
  describe "複数パスワードの生成" do
71
118
  it "指定した個数のパスワードを配列で返すこと" do
72
- Pass.multi_generate(2).size.should be(2)
119
+ @pass.multi_generate(2).size.should be(2)
73
120
  end
74
121
  end
75
122
 
76
123
  describe "コマンド用メソッド" do
77
- it "指定したパスワードが返ってくること" do
78
- argv = [3, 16] # 16文字 3パスワード
124
+ before do
79
125
  $stdout = StringIO.new
80
- Pass.exec(argv)
126
+ end
127
+
128
+ after do
129
+ $stdout = STDOUT
130
+ end
131
+
132
+ it "オプション無しで1個のパスワードが返ってくること" do
133
+ argv = [] # オプションなし
134
+ lambda{ @pass.exec(argv) }.should raise_error(SystemExit)
135
+ passwords = $stdout.string.chomp.split("\n")
136
+ passwords.size.should be(1)
137
+ passwords.first.size.should be(12)
138
+ end
139
+
140
+ it "パスワード数が指定できること" do
141
+ argv = [20] # 20パスワード
142
+ lambda{ @pass.exec(argv) }.should raise_error(SystemExit)
143
+ passwords = $stdout.string.chomp.split("\n")
144
+ passwords.size.should be(20)
145
+ passwords.each do |password|
146
+ password.size.should be(12)
147
+ end
148
+ end
149
+
150
+ it "-cで文字数指定ができること" do
151
+ argv = %w[3 -c 16] # 16文字 3パスワード
152
+ lambda{ @pass.exec(argv) }.should raise_error(SystemExit)
81
153
  passwords = $stdout.string.chomp.split("\n")
82
154
  passwords.size.should be(3)
83
155
  passwords.each do |password|
84
156
  password.size.should be(16)
85
157
  end
86
- $stdout = STDOUT
158
+ end
159
+
160
+ it "指定順序が変わっても-cで文字数指定ができること" do
161
+ argv = %w[-c 16 3] # 16文字 3パスワード
162
+ lambda{ @pass.exec(argv) }.should raise_error(SystemExit)
163
+ passwords = $stdout.string.chomp.split("\n")
164
+ passwords.size.should be(3)
165
+ passwords.each do |password|
166
+ password.size.should be(16)
167
+ end
168
+ end
169
+
170
+ it "-vでバージョン表示をするとSystemExitすること" do
171
+ argv = %w[-v]
172
+ lambda{ @pass.exec(argv) }.should raise_error(SystemExit)
173
+ end
174
+
175
+ it "-hでヘルプ表示をするとSystemExitすること" do
176
+ argv = %w[-h]
177
+ lambda{ @pass.exec(argv) }.should raise_error(SystemExit)
87
178
  end
88
179
  end
89
180
  end
metadata CHANGED
@@ -1,71 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pass
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
5
- prerelease:
4
+ version: 0.0.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Hitoshi Kurokawa
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-02-04 00:00:00.000000000 Z
11
+ date: 2015-08-22 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rspec
16
- requirement: &70297626887700 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
19
  version: 2.8.0
22
20
  type: :development
23
21
  prerelease: false
24
- version_requirements: *70297626887700
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 2.8.0
25
27
  - !ruby/object:Gem::Dependency
26
28
  name: shoulda
27
- requirement: &70297626885860 !ruby/object:Gem::Requirement
28
- none: false
29
+ requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
- - - ! '>='
31
+ - - ">="
31
32
  - !ruby/object:Gem::Version
32
33
  version: '0'
33
34
  type: :development
34
35
  prerelease: false
35
- version_requirements: *70297626885860
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
36
41
  - !ruby/object:Gem::Dependency
37
- name: bundler
38
- requirement: &70297626884980 !ruby/object:Gem::Requirement
39
- none: false
42
+ name: yard
43
+ requirement: !ruby/object:Gem::Requirement
40
44
  requirements:
41
- - - ~>
45
+ - - "~>"
42
46
  - !ruby/object:Gem::Version
43
- version: 1.0.0
47
+ version: '0.7'
44
48
  type: :development
45
49
  prerelease: false
46
- version_requirements: *70297626884980
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.7'
47
55
  - !ruby/object:Gem::Dependency
48
- name: jeweler
49
- requirement: &70297626884380 !ruby/object:Gem::Requirement
50
- none: false
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
51
58
  requirements:
52
- - - ~>
59
+ - - "~>"
53
60
  - !ruby/object:Gem::Version
54
- version: 1.5.2
61
+ version: 1.9.1
55
62
  type: :development
56
63
  prerelease: false
57
- version_requirements: *70297626884380
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 1.9.1
58
69
  - !ruby/object:Gem::Dependency
59
- name: rcov
60
- requirement: &70297626883900 !ruby/object:Gem::Requirement
61
- none: false
70
+ name: jeweler
71
+ requirement: !ruby/object:Gem::Requirement
62
72
  requirements:
63
- - - ! '>='
73
+ - - "~>"
64
74
  - !ruby/object:Gem::Version
65
- version: '0'
75
+ version: 1.8.3
66
76
  type: :development
67
77
  prerelease: false
68
- version_requirements: *70297626883900
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 1.8.3
69
83
  description: gem pass - Password Generator for CUI
70
84
  email: hitoshi@nextseed.jp
71
85
  executables:
@@ -75,8 +89,8 @@ extra_rdoc_files:
75
89
  - LICENSE.txt
76
90
  - README.rdoc
77
91
  files:
78
- - .document
79
- - .rspec
92
+ - ".document"
93
+ - ".rspec"
80
94
  - Gemfile
81
95
  - LICENSE.txt
82
96
  - README.rdoc
@@ -90,31 +104,25 @@ files:
90
104
  homepage: http://github.com/krhitoshi/pass
91
105
  licenses:
92
106
  - MIT
107
+ metadata: {}
93
108
  post_install_message:
94
109
  rdoc_options: []
95
110
  require_paths:
96
111
  - lib
97
112
  required_ruby_version: !ruby/object:Gem::Requirement
98
- none: false
99
113
  requirements:
100
- - - ! '>='
114
+ - - ">="
101
115
  - !ruby/object:Gem::Version
102
116
  version: '0'
103
- segments:
104
- - 0
105
- hash: -1435995826567472989
106
117
  required_rubygems_version: !ruby/object:Gem::Requirement
107
- none: false
108
118
  requirements:
109
- - - ! '>='
119
+ - - ">="
110
120
  - !ruby/object:Gem::Version
111
121
  version: '0'
112
122
  requirements: []
113
123
  rubyforge_project:
114
- rubygems_version: 1.8.10
124
+ rubygems_version: 2.4.5
115
125
  signing_key:
116
- specification_version: 3
126
+ specification_version: 4
117
127
  summary: Password Generator for CUI
118
- test_files:
119
- - spec/pass_spec.rb
120
- - spec/spec_helper.rb
128
+ test_files: []