pass 0.0.2 → 0.0.3

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.
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: []