passwd 0.0.7 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8d747281623609db763e8bbefa99fc1fb14cdad2
4
+ data.tar.gz: fa857ec1c64e9fc4f0967fd963a435793e1050b5
5
+ SHA512:
6
+ metadata.gz: 21df8d0e09673b322a47834202f2663e0a687a10c28665283c832a35b857f37575a19bbf25a66110eb7ffe8b67f3e4546930676e25ed816f6ab33beea5b7bdef
7
+ data.tar.gz: b2672f8d1c14d48b0b7f0171eee41a6c9aeead396e61af1c6a058592876c3da106214888c134c1ec9c4ecd54dac049ce37adeb827257e777696534422132fbf7
data/.coveralls.yml CHANGED
@@ -1 +1 @@
1
- repo_token: juJNf3K7FF93l6tzdF8cv1V2NFgGdCaWv
1
+ repo_token: 106V5oEIwXeOfqT35UWifTnifi5sEO2QP
data/.travis.yml CHANGED
@@ -4,7 +4,7 @@ rvm:
4
4
  - 2.0.0
5
5
  gemfile:
6
6
  - Gemfile
7
- script: bundle exec rspec
7
+ script: bundle exec rake spec
8
8
  branches:
9
9
  only:
10
10
  - master
data/Gemfile CHANGED
@@ -5,4 +5,5 @@ gemspec
5
5
 
6
6
  group :test do
7
7
  gem 'coveralls', require: false
8
+ gem 'simplecov', require: false
8
9
  end
data/README.md CHANGED
@@ -45,12 +45,16 @@ password_hash = Passwd.hashing(password)
45
45
 
46
46
  ### Password settings
47
47
 
48
- Default config is stored in the class variable. (@@config)
48
+ Default config is stored in the class instance variable.
49
49
  Changing the default configs are as follows:
50
50
 
51
51
  ```ruby
52
52
  Passwd.config => Get config hash.
53
53
  Passwd.config(length: 10) => Change to the default length.
54
+
55
+ Passwd.configure do |c|
56
+ c.length = 10
57
+ end
54
58
  ```
55
59
 
56
60
  Options that can be specified:
data/Rakefile CHANGED
@@ -1,11 +1,9 @@
1
1
  require "bundler/gem_tasks"
2
-
3
- Bundler.setup
4
2
  require 'rspec/core/rake_task'
5
3
 
6
- task default: [:spec]
7
-
8
4
  desc "Run all specs"
9
5
  RSpec::Core::RakeTask.new(:spec) do |t|
10
6
  t.rspec_opts = ["-c", "-fs"]
11
7
  end
8
+
9
+ task :default => :spec
data/lib/passwd.rb CHANGED
@@ -5,23 +5,16 @@ require "digest/sha1"
5
5
  require "passwd/version"
6
6
  require "passwd/password"
7
7
  require "passwd/active_record"
8
+ require "passwd/configuration"
8
9
 
9
10
  module Passwd
10
- @@config = {
11
- length: 8,
12
- lower: true,
13
- upper: true,
14
- number: true,
15
- letters_lower: ('a'..'z').to_a,
16
- letters_upper: ('A'..'Z').to_a,
17
- letters_number: ('0'..'9').to_a
18
- }
11
+ @config = Configuration.new
19
12
 
20
13
  class << self
21
14
  def create(options={})
22
- config = @@config.merge(config_validator(options))
23
- letters = get_retters(config)
24
- Array.new(config[:length]){letters[rand(letters.size)]}.join
15
+ config = @config.dup
16
+ config.merge options
17
+ Array.new(config.length){config.letters[rand(config.letters.size)]}.join
25
18
  end
26
19
 
27
20
  def auth(password_text, salt_hash, password_hash)
@@ -29,26 +22,25 @@ module Passwd
29
22
  password_hash == enc_pass
30
23
  end
31
24
 
32
- def hashing(password)
33
- Digest::SHA1.hexdigest password
25
+ def hashing(plain)
26
+ Digest::SHA1.hexdigest plain
34
27
  end
35
28
 
36
- def config(options={})
37
- @@config.merge!(config_validator(options))
38
- end
39
-
40
- private
41
- def get_retters(config)
42
- ["lower", "upper", "number"].inject([]) do |letters, type|
43
- letters.concat(config["letters_#{type}".to_sym]) if config[type.to_sym]
44
- letters
29
+ def configure(options={}, &block)
30
+ if block_given?
31
+ @config.configure &block
32
+ else
33
+ if options.empty?
34
+ @config
35
+ else
36
+ @config.merge options
37
+ end
45
38
  end
46
39
  end
40
+ alias :config :configure
47
41
 
48
- def config_validator(config_hash)
49
- parameters = [:length, :lower, :upper, :number, :letters_lower, :letters_upper, :letters_number]
50
- config = config_hash.inject({}){|r, (k, v)| r.store(k.to_sym, v); r}
51
- config.select{|k, v| parameters.include? k}
42
+ def reset_config
43
+ @config.reset
52
44
  end
53
45
  end
54
46
  end
@@ -0,0 +1,50 @@
1
+ # coding: utf-8
2
+
3
+ module Passwd
4
+ class Configuration
5
+ VALID_OPTIONS_KEYS = [
6
+ :length,
7
+ :lower,
8
+ :upper,
9
+ :number,
10
+ :letters_lower,
11
+ :letters_upper,
12
+ :letters_number
13
+ ].freeze
14
+
15
+ attr_accessor *VALID_OPTIONS_KEYS
16
+
17
+ def initialize
18
+ reset
19
+ end
20
+
21
+ def configure
22
+ yield self
23
+ end
24
+
25
+ def merge(configs)
26
+ configs.keys.each do |k|
27
+ send("#{k}=", configs[k])
28
+ end
29
+ end
30
+
31
+ def letters
32
+ chars = []
33
+ chars.concat(self.letters_lower) if self.lower
34
+ chars.concat(self.letters_upper) if self.upper
35
+ chars.concat(self.letters_number) if self.number
36
+ raise "letters is empty" if chars.empty?
37
+ chars
38
+ end
39
+
40
+ def reset
41
+ self.length = 8
42
+ self.lower = true
43
+ self.upper = true
44
+ self.number = true
45
+ self.letters_lower = ("a".."z").to_a
46
+ self.letters_upper = ("A".."Z").to_a
47
+ self.letters_number = ("0".."9").to_a
48
+ end
49
+ end
50
+ end
@@ -1,3 +1,3 @@
1
1
  module Passwd
2
- VERSION = "0.0.7"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -139,4 +139,4 @@ describe Passwd::ActiveRecord do
139
139
  end
140
140
  end
141
141
  end
142
- end
142
+ end
@@ -0,0 +1,242 @@
1
+ # coding: utf-8
2
+
3
+ require "spec_helper"
4
+
5
+ describe Passwd::Configuration do
6
+ let(:config) {Passwd::Configuration.new}
7
+
8
+ describe "defined accessors" do
9
+ it "defined length" do
10
+ expect(config.respond_to? :length).to be_true
11
+ end
12
+
13
+ it "defined lower" do
14
+ expect(config.respond_to? :lower).to be_true
15
+ end
16
+
17
+ it "defined upper" do
18
+ expect(config.respond_to? :upper).to be_true
19
+ end
20
+
21
+ it "defined number" do
22
+ expect(config.respond_to? :number).to be_true
23
+ end
24
+
25
+ it "defined letters_lower" do
26
+ expect(config.respond_to? :letters_lower).to be_true
27
+ end
28
+
29
+ it "defined letters_upper" do
30
+ expect(config.respond_to? :letters_upper).to be_true
31
+ end
32
+
33
+ it "defined letters_number" do
34
+ expect(config.respond_to? :letters_number).to be_true
35
+ end
36
+ end
37
+
38
+ describe "#initialize" do
39
+ it "length should be a default" do
40
+ expect(config.length).to eq(8)
41
+ end
42
+
43
+ it "lower should be a default" do
44
+ expect(config.lower).to be_true
45
+ end
46
+
47
+ it "upper should be a default" do
48
+ expect(config.upper).to be_true
49
+ end
50
+
51
+ it "number should be a default" do
52
+ expect(config.number).to be_true
53
+ end
54
+
55
+ it "letters_lower should be a default" do
56
+ expect(config.letters_lower).to eq(("a".."z").to_a)
57
+ end
58
+
59
+ it "letters_upper should be a default" do
60
+ expect(config.letters_upper).to eq(("A".."Z").to_a)
61
+ end
62
+
63
+ it "letters_number should be a default" do
64
+ expect(config.letters_number).to eq(("0".."9").to_a)
65
+ end
66
+ end
67
+
68
+ describe "#configure" do
69
+ before {
70
+ config.configure do |c|
71
+ c.length = 20
72
+ c.lower = false
73
+ c.upper = false
74
+ c.number = false
75
+ c.letters_lower = ["a"]
76
+ c.letters_upper = ["A"]
77
+ c.letters_number = ["0"]
78
+ end
79
+ }
80
+
81
+ it "set length from block" do
82
+ expect(config.length).to eq(20)
83
+ end
84
+
85
+ it "set lower from block" do
86
+ expect(config.lower).to be_false
87
+ end
88
+
89
+ it "set upper from block" do
90
+ expect(config.upper).to be_false
91
+ end
92
+
93
+ it "set number from block" do
94
+ expect(config.number).to be_false
95
+ end
96
+
97
+ it "set letters_lower from block" do
98
+ expect(config.letters_lower).to eq(["a"])
99
+ end
100
+
101
+ it "set letters_upper from block" do
102
+ expect(config.letters_upper).to eq(["A"])
103
+ end
104
+
105
+ it "set letters_number from block" do
106
+ expect(config.letters_number).to eq(["0"])
107
+ end
108
+
109
+ it "raise error unknown setting" do
110
+ expect {
111
+ config.configure do |c|
112
+ c.unknown = true
113
+ end
114
+ }.to raise_error
115
+ end
116
+ end
117
+
118
+ describe "#merge" do
119
+ it "set length from hash" do
120
+ config.merge(length: 10)
121
+ expect(config.length).to eq(10)
122
+ end
123
+
124
+ it "set lower from hash" do
125
+ config.merge(lower: false)
126
+ expect(config.lower).to be_false
127
+ end
128
+
129
+ it "set upper from hash" do
130
+ config.merge(upper: false)
131
+ expect(config.upper).to be_false
132
+ end
133
+
134
+ it "set number from hash" do
135
+ config.merge(number: false)
136
+ expect(config.number).to be_false
137
+ end
138
+
139
+ it "set letters_lower from hash" do
140
+ config.merge(letters_lower: ["a"])
141
+ expect(config.letters_lower).to eq(["a"])
142
+ end
143
+
144
+ it "set letters_upper from hash" do
145
+ config.merge(letters_upper: ["A"])
146
+ expect(config.letters_upper).to eq(["A"])
147
+ end
148
+
149
+ it "set letters_number from hash" do
150
+ config.merge(letters_number: ["0"])
151
+ expect(config.letters_number).to eq(["0"])
152
+ end
153
+
154
+ it "raise error unknown setting" do
155
+ expect {
156
+ config.merge(unknown: true)
157
+ }.to raise_error
158
+ end
159
+ end
160
+
161
+ describe "#letters" do
162
+ it "return Array object" do
163
+ expect(config.letters.is_a? Array).to be_true
164
+ end
165
+
166
+ it "all elements of the string" do
167
+ config.letters.each do |l|
168
+ expect(l.is_a? String).to be_true
169
+ end
170
+ end
171
+
172
+ it "return all letters" do
173
+ all_letters = ("a".."z").to_a.concat(("A".."Z").to_a).concat(("0".."9").to_a)
174
+ expect(config.letters).to eq(all_letters)
175
+ end
176
+
177
+ it "return except for the lower case" do
178
+ config.merge(lower: false)
179
+ expect(config.letters.include? "a").to be_false
180
+ end
181
+
182
+ it "return except for the upper case" do
183
+ config.merge(upper: false)
184
+ expect(config.letters.include? "A").to be_false
185
+ end
186
+
187
+ it "return except for the number case" do
188
+ config.merge(number: false)
189
+ expect(config.letters.include? "0").to be_false
190
+ end
191
+
192
+ it "raise error if letters is empty" do
193
+ config.merge(lower: false, upper: false, number: false)
194
+ expect {
195
+ config.letters
196
+ }.to raise_error
197
+ end
198
+ end
199
+
200
+ describe "#reset" do
201
+ before {
202
+ config.configure do |c|
203
+ c.length = 20
204
+ c.lower = false
205
+ c.upper = false
206
+ c.number = false
207
+ c.letters_lower = ["a"]
208
+ c.letters_upper = ["A"]
209
+ c.letters_number = ["0"]
210
+ end
211
+ config.reset
212
+ }
213
+
214
+ it "length should be a default" do
215
+ expect(config.length).to eq(8)
216
+ end
217
+
218
+ it "lower should be a default" do
219
+ expect(config.lower).to be_true
220
+ end
221
+
222
+ it "upper should be a default" do
223
+ expect(config.upper).to be_true
224
+ end
225
+
226
+ it "number should be a default" do
227
+ expect(config.number).to be_true
228
+ end
229
+
230
+ it "letters_lower should be a default" do
231
+ expect(config.letters_lower).to eq(("a".."z").to_a)
232
+ end
233
+
234
+ it "letters_upper should be a default" do
235
+ expect(config.letters_upper).to eq(("A".."Z").to_a)
236
+ end
237
+
238
+ it "letters_number should be a default" do
239
+ expect(config.letters_number).to eq(("0".."9").to_a)
240
+ end
241
+ end
242
+ end
@@ -3,7 +3,6 @@
3
3
  require "spec_helper"
4
4
 
5
5
  describe Passwd::Password do
6
- let(:default) {@default}
7
6
  let(:password) {Passwd::Password.new}
8
7
 
9
8
  describe "#initialize" do
@@ -21,7 +20,7 @@ describe Passwd::Password do
21
20
  }
22
21
 
23
22
  it "@text should be a random password" do
24
- expect(password.text.size).to eq(default[:length])
23
+ expect(password.text.size).to eq(8)
25
24
  expect(password.text).to eq(password_text)
26
25
  end
27
26
 
data/spec/passwd_spec.rb CHANGED
@@ -3,45 +3,13 @@
3
3
  require "spec_helper"
4
4
 
5
5
  describe Passwd do
6
- let(:default) {@default}
7
-
8
- describe "default settings" do
9
- let(:config) {Passwd.config}
10
-
11
- it "length should be a default" do
12
- expect(config[:length]).to eq(default[:length])
13
- end
14
-
15
- it "lower should be a default" do
16
- expect(config[:lower]).to eq(default[:lower])
17
- end
18
-
19
- it "upper should be a default" do
20
- expect(config[:upper]).to eq(default[:upper])
21
- end
22
-
23
- it "number should be a default" do
24
- expect(config[:number]).to eq(default[:number])
25
- end
26
-
27
- it "letters_lower should be a default" do
28
- expect(config[:letters_lower]).to eq(default[:letters_lower])
29
- end
30
-
31
- it "letters_upper should be a default" do
32
- expect(config[:letters_upper]).to eq(default[:letters_upper])
33
- end
34
-
35
- it "letters_number should be a default" do
36
- expect(config[:letters_number]).to eq(default[:letters_number])
37
- end
38
- end
6
+ let(:default) {Passwd::Configuration.new}
39
7
 
40
8
  describe ".create" do
41
9
  it "create random password" do
42
10
  password = Passwd.create
43
11
  expect(password.is_a? String).to be_true
44
- expect(password.size).to eq(default[:length])
12
+ expect(password.size).to eq(default.length)
45
13
  end
46
14
 
47
15
  it "password was created specified characters" do
@@ -50,17 +18,17 @@ describe Passwd do
50
18
 
51
19
  it "password create without lower case" do
52
20
  password = Passwd.create lower: false
53
- expect(default[:letters_lower].include? password).to be_false
21
+ expect(default.letters_lower.include? password).to be_false
54
22
  end
55
23
 
56
24
  it "password create without upper case" do
57
25
  password = Passwd.create upper: false
58
- expect(default[:letters_upper].include? password).to be_false
26
+ expect(default.letters_upper.include? password).to be_false
59
27
  end
60
28
 
61
29
  it "password create without number" do
62
30
  password = Passwd.create(number: false)
63
- expect(default[:letters_number].include? password).to be_false
31
+ expect(default.letters_number.include? password).to be_false
64
32
  end
65
33
  end
66
34
 
@@ -96,42 +64,74 @@ describe Passwd do
96
64
  end
97
65
  end
98
66
 
99
- describe ".config" do
100
- after {Passwd.config(default)}
67
+ describe ".configure" do
68
+ after {Passwd.reset_config}
101
69
 
102
- it "return config hash" do
103
- expect(Passwd.config.is_a? Hash).to be_true
70
+ it "return configuration object" do
71
+ expect(Passwd.configure.is_a? Passwd::Configuration).to be_true
104
72
  end
105
73
 
106
- it "set config value" do
107
- Passwd.config(length: 10)
108
- expect(Passwd.config[:length]).not_to eq(default[:length])
109
- expect(Passwd.config[:lower]).to eq(default[:lower])
74
+ it "set config value from block" do
75
+ Passwd.configure do |c|
76
+ c.length = 10
77
+ end
78
+ expect(Passwd.configure.length).not_to eq(default.length)
79
+ expect(Passwd.configure.length).to eq(10)
110
80
  end
111
- end
112
81
 
113
- describe ".get_retters" do
114
- it "return letters" do
115
- letters = Passwd.send(:get_retters, default)
116
- expect(letters.is_a? Array).to be_true
117
- expect(letters.select{|s| s.is_a? String}).to eq(letters)
118
- expect(letters).to eq(default[:letters_lower] + default[:letters_upper] + default[:letters_number])
82
+ it "set config value from hash" do
83
+ Passwd.configure length: 20
84
+ expect(Passwd.config.length).not_to eq(default.length)
85
+ expect(Passwd.config.length).to eq(20)
119
86
  end
120
87
 
121
- it "should create exception if not specified argument" do
122
- expect(proc{Passwd.send(:get_retters)}).to raise_error
88
+ it "alias of configure as config" do
89
+ expect(Passwd.configure.object_id).to eq(Passwd.config.object_id)
123
90
  end
124
91
  end
125
92
 
126
- describe ".config_validator" do
127
- it "convert to symbol the key" do
128
- config = default.inject({}){|r, (k, v)| r.store(k.to_s, v); r}
129
- expect(Passwd.send(:config_validator, config)).to eq(default)
93
+ describe ".reset_config" do
94
+ let(:config) {Passwd.config}
95
+
96
+ before {
97
+ config.configure do |c|
98
+ c.length = 20
99
+ c.lower = false
100
+ c.upper = false
101
+ c.number = false
102
+ c.letters_lower = ["a"]
103
+ c.letters_upper = ["A"]
104
+ c.letters_number = ["0"]
105
+ end
106
+ config.reset
107
+ }
108
+
109
+ it "length should be a default" do
110
+ expect(config.length).to eq(8)
111
+ end
112
+
113
+ it "lower should be a default" do
114
+ expect(config.lower).to be_true
115
+ end
116
+
117
+ it "upper should be a default" do
118
+ expect(config.upper).to be_true
119
+ end
120
+
121
+ it "number should be a default" do
122
+ expect(config.number).to be_true
130
123
  end
131
124
 
132
- it "delete not defined parameters" do
133
- config = default.merge(invalid_parameter: true)
134
- expect(Passwd.send(:config_validator, config)).to eq(default)
125
+ it "letters_lower should be a default" do
126
+ expect(config.letters_lower).to eq(("a".."z").to_a)
127
+ end
128
+
129
+ it "letters_upper should be a default" do
130
+ expect(config.letters_upper).to eq(("A".."Z").to_a)
131
+ end
132
+
133
+ it "letters_number should be a default" do
134
+ expect(config.letters_number).to eq(("0".."9").to_a)
135
135
  end
136
136
  end
137
137
  end
data/spec/spec_helper.rb CHANGED
@@ -1,19 +1,15 @@
1
- require "passwd"
2
-
1
+ require "simplecov"
3
2
  require "coveralls"
4
3
  Coveralls.wear!
5
4
 
5
+ # SimpleCov.formatter = SimpleCov::Formatter::HTMLFormatter
6
+ SimpleCov.start do
7
+ add_filter "spec"
8
+ add_filter ".bundle"
9
+ end
10
+
11
+ require "passwd"
12
+
6
13
  RSpec.configure do |config|
7
14
  config.order = "random"
8
- config.before do
9
- @default = {
10
- length: 8,
11
- lower: true,
12
- upper: true,
13
- number: true,
14
- letters_lower: ('a'..'z').to_a,
15
- letters_upper: ('A'..'Z').to_a,
16
- letters_number: ('0'..'9').to_a
17
- }
18
- end
19
15
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: passwd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
5
- prerelease:
4
+ version: 0.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - i2bskn
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-05-29 00:00:00.000000000 Z
11
+ date: 2013-06-22 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,33 +27,29 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  description: The various utilities on password
@@ -75,46 +68,42 @@ files:
75
68
  - Rakefile
76
69
  - lib/passwd.rb
77
70
  - lib/passwd/active_record.rb
71
+ - lib/passwd/configuration.rb
78
72
  - lib/passwd/password.rb
79
73
  - lib/passwd/version.rb
80
74
  - passwd.gemspec
81
75
  - spec/passwd/active_record_spec.rb
76
+ - spec/passwd/configuration_spec.rb
82
77
  - spec/passwd/password_spec.rb
83
78
  - spec/passwd_spec.rb
84
79
  - spec/spec_helper.rb
85
80
  homepage: https://github.com/i2bskn/passwd
86
81
  licenses:
87
82
  - MIT
83
+ metadata: {}
88
84
  post_install_message:
89
85
  rdoc_options: []
90
86
  require_paths:
91
87
  - lib
92
88
  required_ruby_version: !ruby/object:Gem::Requirement
93
- none: false
94
89
  requirements:
95
- - - ! '>='
90
+ - - '>='
96
91
  - !ruby/object:Gem::Version
97
92
  version: '0'
98
- segments:
99
- - 0
100
- hash: 35413922955959980
101
93
  required_rubygems_version: !ruby/object:Gem::Requirement
102
- none: false
103
94
  requirements:
104
- - - ! '>='
95
+ - - '>='
105
96
  - !ruby/object:Gem::Version
106
97
  version: '0'
107
- segments:
108
- - 0
109
- hash: 35413922955959980
110
98
  requirements: []
111
99
  rubyforge_project:
112
- rubygems_version: 1.8.25
100
+ rubygems_version: 2.0.0
113
101
  signing_key:
114
- specification_version: 3
102
+ specification_version: 4
115
103
  summary: Password utility
116
104
  test_files:
117
105
  - spec/passwd/active_record_spec.rb
106
+ - spec/passwd/configuration_spec.rb
118
107
  - spec/passwd/password_spec.rb
119
108
  - spec/passwd_spec.rb
120
109
  - spec/spec_helper.rb