passwd 0.1.0 → 0.1.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8d747281623609db763e8bbefa99fc1fb14cdad2
4
- data.tar.gz: fa857ec1c64e9fc4f0967fd963a435793e1050b5
3
+ metadata.gz: a92e0fc9b057332f70b4adde83c0d52d39c837ad
4
+ data.tar.gz: fd0514c01725a3312fcc8b64591aa881a2584371
5
5
  SHA512:
6
- metadata.gz: 21df8d0e09673b322a47834202f2663e0a687a10c28665283c832a35b857f37575a19bbf25a66110eb7ffe8b67f3e4546930676e25ed816f6ab33beea5b7bdef
7
- data.tar.gz: b2672f8d1c14d48b0b7f0171eee41a6c9aeead396e61af1c6a058592876c3da106214888c134c1ec9c4ecd54dac049ce37adeb827257e777696534422132fbf7
6
+ metadata.gz: 040c613b3fe930cd550cacc68a47977ab7e6a56a02870135e897a4dacc76699aadf1ae8479b2efac63401c742e56719b560b0f2d613b6b3ce39aee1484e29a61
7
+ data.tar.gz: 3e475498013103b4d9bf6f5a0c35b9395ed92eb7d32df93ebbe151c4f605220dd336fc2098eb1574114723217d55444cc5a2756dedd71d3e1eeffe7ad1cb5da1
data/.travis.yml CHANGED
@@ -5,11 +5,6 @@ rvm:
5
5
  gemfile:
6
6
  - Gemfile
7
7
  script: bundle exec rake spec
8
- branches:
9
- only:
10
- - master
11
8
  notifications:
12
9
  mails:
13
10
  - i2bskn@gmail.com
14
- on_sucess: always
15
- on_failure: always
data/README.md CHANGED
@@ -49,7 +49,7 @@ Default config is stored in the class instance variable.
49
49
  Changing the default configs are as follows:
50
50
 
51
51
  ```ruby
52
- Passwd.config => Get config hash.
52
+ Passwd.config => Get config object.
53
53
  Passwd.config(length: 10) => Change to the default length.
54
54
 
55
55
  Passwd.configure do |c|
data/lib/passwd.rb CHANGED
@@ -3,44 +3,6 @@
3
3
  require "digest/sha1"
4
4
 
5
5
  require "passwd/version"
6
+ require "passwd/base"
6
7
  require "passwd/password"
7
8
  require "passwd/active_record"
8
- require "passwd/configuration"
9
-
10
- module Passwd
11
- @config = Configuration.new
12
-
13
- class << self
14
- def create(options={})
15
- config = @config.dup
16
- config.merge options
17
- Array.new(config.length){config.letters[rand(config.letters.size)]}.join
18
- end
19
-
20
- def auth(password_text, salt_hash, password_hash)
21
- enc_pass = Passwd.hashing("#{salt_hash}#{password_text}")
22
- password_hash == enc_pass
23
- end
24
-
25
- def hashing(plain)
26
- Digest::SHA1.hexdigest plain
27
- end
28
-
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
38
- end
39
- end
40
- alias :config :configure
41
-
42
- def reset_config
43
- @config.reset
44
- end
45
- end
46
- end
@@ -4,9 +4,9 @@ module Passwd
4
4
  module ActiveRecord
5
5
  module ClassMethods
6
6
  def define_column(options={})
7
- id_name = options[:id] || :email
8
- salt_name = options[:salt] || :salt
9
- password_name = options[:password] || :password
7
+ id_name = options.fetch(:id, :email)
8
+ salt_name = options.fetch(:salt, :salt)
9
+ password_name = options.fetch(:password, :password)
10
10
 
11
11
  define_singleton_auth(id_name, salt_name, password_name)
12
12
  define_instance_auth(id_name, salt_name, password_name)
@@ -0,0 +1,47 @@
1
+ # coding: utf-8
2
+
3
+ require "passwd/configuration/config"
4
+ require "passwd/configuration/tmp_config"
5
+
6
+ module Passwd
7
+ @config = Config.instance
8
+
9
+ module Base
10
+ def create(options={})
11
+ if options.empty?
12
+ config = @config
13
+ else
14
+ config = TmpConfig.new(@config, options)
15
+ end
16
+ Array.new(config.length){config.letters[rand(config.letters.size)]}.join
17
+ end
18
+
19
+ def auth(password_text, salt_hash, password_hash)
20
+ enc_pass = Passwd.hashing("#{salt_hash}#{password_text}")
21
+ password_hash == enc_pass
22
+ end
23
+
24
+ def hashing(plain)
25
+ Digest::SHA1.hexdigest plain
26
+ end
27
+
28
+ def configure(options={}, &block)
29
+ if block_given?
30
+ @config.configure &block
31
+ else
32
+ if options.empty?
33
+ @config
34
+ else
35
+ @config.merge options
36
+ end
37
+ end
38
+ end
39
+ alias :config :configure
40
+
41
+ def reset_config
42
+ @config.reset
43
+ end
44
+ end
45
+
46
+ extend Base
47
+ end
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
 
3
3
  module Passwd
4
- class Configuration
4
+ class AbstractConfig
5
5
  VALID_OPTIONS_KEYS = [
6
6
  :length,
7
7
  :lower,
@@ -14,10 +14,6 @@ module Passwd
14
14
 
15
15
  attr_accessor *VALID_OPTIONS_KEYS
16
16
 
17
- def initialize
18
- reset
19
- end
20
-
21
17
  def configure
22
18
  yield self
23
19
  end
@@ -36,15 +32,5 @@ module Passwd
36
32
  raise "letters is empty" if chars.empty?
37
33
  chars
38
34
  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
35
  end
50
36
  end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+
3
+ require "singleton"
4
+
5
+ require "passwd/configuration/abstract_config"
6
+
7
+ module Passwd
8
+ class Config < AbstractConfig
9
+ include Singleton
10
+
11
+ def initialize
12
+ reset
13
+ end
14
+
15
+ def reset
16
+ self.length = 8
17
+ self.lower = true
18
+ self.upper = true
19
+ self.number = true
20
+ self.letters_lower = ("a".."z").to_a
21
+ self.letters_upper = ("A".."Z").to_a
22
+ self.letters_number = ("0".."9").to_a
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,18 @@
1
+ # coding: utf-8
2
+
3
+ require "passwd/configuration/abstract_config"
4
+
5
+ module Passwd
6
+ class TmpConfig < AbstractConfig
7
+ def initialize(config, options)
8
+ config.instance_variables.each do |v|
9
+ key = v.to_s.sub(/^@/, "").to_sym
10
+ if options.has_key? key
11
+ instance_variable_set v, options[key]
12
+ else
13
+ instance_variable_set v, config.instance_variable_get(v)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -5,8 +5,8 @@ module Passwd
5
5
  attr_reader :text, :hash, :salt_text, :salt_hash
6
6
 
7
7
  def initialize(options={})
8
- @text = options[:password] || Passwd.create
9
- @salt_text = options[:salt_text] || Time.now.to_s
8
+ @text = options.fetch(:password, Passwd.create)
9
+ @salt_text = options.fetch(:salt_text, Time.now.to_s)
10
10
  @salt_hash = Passwd.hashing(@salt_text)
11
11
  @hash = Passwd.hashing("#{@salt_hash}#{@text}")
12
12
  end
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  module Passwd
2
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
3
5
  end
@@ -0,0 +1,151 @@
1
+ # coding: utf-8
2
+
3
+ require "spec_helper"
4
+
5
+ describe Passwd do
6
+ describe "extended Base" do
7
+ describe "#create" do
8
+ context "without arguments" do
9
+ let(:password) {Passwd.create}
10
+
11
+ it "TmpConfig should not be generated" do
12
+ Passwd::TmpConfig.should_not_receive(:new)
13
+ expect{password}.not_to raise_error
14
+ end
15
+
16
+ it "created password should be String object" do
17
+ expect(password.is_a? String).to be_true
18
+ end
19
+
20
+ it "created password length should be default length" do
21
+ expect(password.size).to eq(8)
22
+ end
23
+ end
24
+
25
+ context "with arguments" do
26
+ it "TmpConfig should be generated" do
27
+ tmp_config = double("tmp_config mock", length: 8, letters: ["a", "b"])
28
+ Passwd::TmpConfig.should_receive(:new).and_return(tmp_config)
29
+ expect{Passwd.create(length: 10)}.not_to raise_error
30
+ end
31
+
32
+ it "password was created specified characters" do
33
+ expect(Passwd.create(length: 10).size).to eq(10)
34
+ end
35
+
36
+ it "password create without lower case" do
37
+ expect(("a".."z").to_a.include? Passwd.create(lower: false)).to be_false
38
+ end
39
+
40
+ it "password create without upper case" do
41
+ expect(("A".."Z").to_a.include? Passwd.create(upper: false)).to be_false
42
+ end
43
+
44
+ it "password create without number" do
45
+ expect(("0".."9").to_a.include? Passwd.create(number: false)).to be_false
46
+ end
47
+ end
48
+ end
49
+
50
+ describe "#auth" do
51
+ let!(:password) do
52
+ password = Passwd.create
53
+ salt_hash = Passwd.hashing(Time.now.to_s)
54
+ password_hash = Passwd.hashing("#{salt_hash}#{password}")
55
+ {text: password, salt: salt_hash, hash: password_hash}
56
+ end
57
+
58
+ it "return true with valid password" do
59
+ expect(Passwd.auth(password[:text], password[:salt], password[:hash])).to be_true
60
+ end
61
+
62
+ it "return false with invalid password" do
63
+ expect(Passwd.auth("invalid", password[:salt], password[:hash])).to be_false
64
+ end
65
+
66
+ it "should create exception if not specified arguments" do
67
+ expect(proc{Passwd.auth}).to raise_error
68
+ end
69
+ end
70
+
71
+ describe "#hashing" do
72
+ it "return hashed password" do
73
+ Digest::SHA1.should_receive(:hexdigest).with("secret").and_return("hash")
74
+ expect(Passwd.hashing("secret")).to eq("hash")
75
+ end
76
+
77
+ it "should create exception if not specified argument" do
78
+ expect(proc{Passwd.hashing}).to raise_error
79
+ end
80
+ end
81
+
82
+ describe "#configure" do
83
+ it "return configuration object" do
84
+ expect(Passwd.configure.is_a? Passwd::Config).to be_true
85
+ end
86
+
87
+ it "set config value from block" do
88
+ Passwd.configure do |c|
89
+ c.length = 10
90
+ end
91
+ expect(Passwd.configure.length).not_to eq(8)
92
+ expect(Passwd.configure.length).to eq(10)
93
+ end
94
+
95
+ it "set config value from hash" do
96
+ Passwd.configure length: 20
97
+ expect(Passwd.config.length).not_to eq(8)
98
+ expect(Passwd.config.length).to eq(20)
99
+ end
100
+
101
+ it "alias of configure as config" do
102
+ expect(Passwd.configure.object_id).to eq(Passwd.config.object_id)
103
+ end
104
+ end
105
+
106
+ describe "#reset_config" do
107
+ let(:config) {Passwd::Config.instance}
108
+
109
+ before {
110
+ config.configure do |c|
111
+ c.length = 20
112
+ c.lower = false
113
+ c.upper = false
114
+ c.number = false
115
+ c.letters_lower = ["a"]
116
+ c.letters_upper = ["A"]
117
+ c.letters_number = ["0"]
118
+ end
119
+ Passwd.reset_config
120
+ }
121
+
122
+ it "length should be a default" do
123
+ expect(config.length).to eq(8)
124
+ end
125
+
126
+ it "lower should be a default" do
127
+ expect(config.lower).to be_true
128
+ end
129
+
130
+ it "upper should be a default" do
131
+ expect(config.upper).to be_true
132
+ end
133
+
134
+ it "number should be a default" do
135
+ expect(config.number).to be_true
136
+ end
137
+
138
+ it "letters_lower should be a default" do
139
+ expect(config.letters_lower).to eq(("a".."z").to_a)
140
+ end
141
+
142
+ it "letters_upper should be a default" do
143
+ expect(config.letters_upper).to eq(("A".."Z").to_a)
144
+ end
145
+
146
+ it "letters_number should be a default" do
147
+ expect(config.letters_number).to eq(("0".."9").to_a)
148
+ end
149
+ end
150
+ end
151
+ end
@@ -2,8 +2,8 @@
2
2
 
3
3
  require "spec_helper"
4
4
 
5
- describe Passwd::Configuration do
6
- let(:config) {Passwd::Configuration.new}
5
+ describe Passwd::Config do
6
+ let(:config) {Passwd::Config.instance}
7
7
 
8
8
  describe "defined accessors" do
9
9
  it "defined length" do
@@ -0,0 +1,257 @@
1
+ # coding: utf-8
2
+
3
+ require "spec_helper"
4
+
5
+ describe Passwd::TmpConfig do
6
+ let(:config) {Passwd::Config.instance}
7
+
8
+ def tmp_config(options={})
9
+ Passwd::TmpConfig.new(Passwd::Config.instance, options)
10
+ end
11
+
12
+ describe "defined accessors" do
13
+ it "defined length" do
14
+ expect(tmp_config.respond_to? :length).to be_true
15
+ end
16
+
17
+ it "defined lower" do
18
+ expect(tmp_config.respond_to? :lower).to be_true
19
+ end
20
+
21
+ it "defined upper" do
22
+ expect(tmp_config.respond_to? :upper).to be_true
23
+ end
24
+
25
+ it "defined number" do
26
+ expect(tmp_config.respond_to? :number).to be_true
27
+ end
28
+
29
+ it "defined letters_lower" do
30
+ expect(tmp_config.respond_to? :letters_lower).to be_true
31
+ end
32
+
33
+ it "defined letters_upper" do
34
+ expect(tmp_config.respond_to? :letters_upper).to be_true
35
+ end
36
+
37
+ it "defined letters_number" do
38
+ expect(tmp_config.respond_to? :letters_number).to be_true
39
+ end
40
+ end
41
+
42
+ describe "#initialize" do
43
+ context "with empty options" do
44
+ it "length should be a default" do
45
+ expect(tmp_config.length).to eq(8)
46
+ end
47
+
48
+ it "lower should be a default" do
49
+ expect(tmp_config.lower).to be_true
50
+ end
51
+
52
+ it "upper should be a default" do
53
+ expect(tmp_config.upper).to be_true
54
+ end
55
+
56
+ it "number should be a default" do
57
+ expect(tmp_config.number).to be_true
58
+ end
59
+
60
+ it "letters_lower should be a default" do
61
+ expect(tmp_config.letters_lower).to eq(("a".."z").to_a)
62
+ end
63
+
64
+ it "letters_upper should be a default" do
65
+ expect(tmp_config.letters_upper).to eq(("A".."Z").to_a)
66
+ end
67
+
68
+ it "letters_number should be a default" do
69
+ expect(tmp_config.letters_number).to eq(("0".."9").to_a)
70
+ end
71
+ end
72
+
73
+ context "with options" do
74
+ it "length should be a specified params" do
75
+ expect(tmp_config(length: 10).length).to eq(10)
76
+ expect(config.length).to eq(8)
77
+ end
78
+
79
+ it "lower should be a specified params" do
80
+ expect(tmp_config(lower: false).lower).to be_false
81
+ expect(config.lower).to be_true
82
+ end
83
+
84
+ it "upper should be a specified params" do
85
+ expect(tmp_config(upper: false).upper).to be_false
86
+ expect(config.upper).to be_true
87
+ end
88
+
89
+ it "number should be a specified params" do
90
+ expect(tmp_config(number: false).number).to be_false
91
+ expect(config.number).to be_true
92
+ end
93
+
94
+ it "letters_lower should be a specified params" do
95
+ expect(tmp_config(letters_lower: ["a"]).letters_lower).to eq(["a"])
96
+ expect(config.letters_lower).to eq(("a".."z").to_a)
97
+ end
98
+
99
+ it "letters_upper should be a specified params" do
100
+ expect(tmp_config(letters_upper: ["A"]).letters_upper).to eq(["A"])
101
+ expect(config.letters_upper).to eq(("A".."Z").to_a)
102
+ end
103
+
104
+ it "letters_number should be a specified params" do
105
+ expect(tmp_config(letters_number: ["0"]).letters_number).to eq(["0"])
106
+ expect(config.letters_number).to eq(("0".."9").to_a)
107
+ end
108
+ end
109
+ end
110
+
111
+ describe "#configure" do
112
+ let(:changed_tmp_config) do
113
+ tconf = tmp_config
114
+ tconf.configure do |c|
115
+ c.length = 20
116
+ c.lower = false
117
+ c.upper = false
118
+ c.number = false
119
+ c.letters_lower = ["a"]
120
+ c.letters_upper = ["A"]
121
+ c.letters_number = ["0"]
122
+ end
123
+ tconf
124
+ end
125
+
126
+ it "set length from block" do
127
+ expect(changed_tmp_config.length).to eq(20)
128
+ expect(config.length).to eq(8)
129
+ end
130
+
131
+ it "set lower from block" do
132
+ expect(changed_tmp_config.lower).to be_false
133
+ expect(config.lower).to be_true
134
+ end
135
+
136
+ it "set upper from block" do
137
+ expect(changed_tmp_config.upper).to be_false
138
+ expect(config.upper).to be_true
139
+ end
140
+
141
+ it "set number from block" do
142
+ expect(changed_tmp_config.number).to be_false
143
+ expect(config.number).to be_true
144
+ end
145
+
146
+ it "set letters_lower from block" do
147
+ expect(changed_tmp_config.letters_lower).to eq(["a"])
148
+ expect(config.letters_lower).to eq(("a".."z").to_a)
149
+ end
150
+
151
+ it "set letters_upper from block" do
152
+ expect(changed_tmp_config.letters_upper).to eq(["A"])
153
+ expect(config.letters_upper).to eq(("A".."Z").to_a)
154
+ end
155
+
156
+ it "set letters_number from block" do
157
+ expect(changed_tmp_config.letters_number).to eq(["0"])
158
+ expect(config.letters_number).to eq(("0".."9").to_a)
159
+ end
160
+
161
+ it "raise error unknown setting" do
162
+ expect {
163
+ tmp_config.configure do |c|
164
+ c.unknown = true
165
+ end
166
+ }.to raise_error
167
+ end
168
+ end
169
+
170
+ describe "#merge" do
171
+ let(:default_tmp_config) {tmp_config}
172
+
173
+ it "set length from hash" do
174
+ default_tmp_config.merge(length: 10)
175
+ expect(default_tmp_config.length).to eq(10)
176
+ expect(config.length).to eq(8)
177
+ end
178
+
179
+ it "set lower from hash" do
180
+ default_tmp_config.merge(lower: false)
181
+ expect(default_tmp_config.lower).to be_false
182
+ expect(config.lower).to be_true
183
+ end
184
+
185
+ it "set upper from hash" do
186
+ default_tmp_config.merge(upper: false)
187
+ expect(default_tmp_config.upper).to be_false
188
+ expect(config.upper).to be_true
189
+ end
190
+
191
+ it "set number from hash" do
192
+ default_tmp_config.merge(number: false)
193
+ expect(default_tmp_config.number).to be_false
194
+ expect(config.number).to be_true
195
+ end
196
+
197
+ it "set letters_lower from hash" do
198
+ default_tmp_config.merge(letters_lower: ["a"])
199
+ expect(default_tmp_config.letters_lower).to eq(["a"])
200
+ expect(config.letters_lower).to eq(("a".."z").to_a)
201
+ end
202
+
203
+ it "set letters_upper from hash" do
204
+ default_tmp_config.merge(letters_upper: ["A"])
205
+ expect(default_tmp_config.letters_upper).to eq(["A"])
206
+ expect(config.letters_upper).to eq(("A".."Z").to_a)
207
+ end
208
+
209
+ it "set letters_number from hash" do
210
+ default_tmp_config.merge(letters_number: ["0"])
211
+ expect(default_tmp_config.letters_number).to eq(["0"])
212
+ expect(config.letters_number).to eq(("0".."9").to_a)
213
+ end
214
+
215
+ it "raise error unknown setting" do
216
+ expect {
217
+ tmp_config.merge(unknown: true)
218
+ }.to raise_error
219
+ end
220
+ end
221
+
222
+ describe "#letters" do
223
+ it "return Array object" do
224
+ expect(tmp_config.letters.is_a? Array).to be_true
225
+ end
226
+
227
+ it "all elements of the string" do
228
+ tmp_config.letters.each do |l|
229
+ expect(l.is_a? String).to be_true
230
+ end
231
+ end
232
+
233
+ it "return all letters" do
234
+ all_letters = ("a".."z").to_a.concat(("A".."Z").to_a).concat(("0".."9").to_a)
235
+ expect(tmp_config.letters).to eq(all_letters)
236
+ end
237
+
238
+ it "return except for the lower case" do
239
+ expect(tmp_config(lower: false).letters.include? "a").to be_false
240
+ end
241
+
242
+ it "return except for the upper case" do
243
+ expect(tmp_config(upper: false).letters.include? "A").to be_false
244
+ end
245
+
246
+ it "return except for the number case" do
247
+ expect(tmp_config(number: false).letters.include? "0").to be_false
248
+ end
249
+
250
+ it "raise error if letters is empty" do
251
+ tconf = tmp_config(lower: false, upper: false, number: false)
252
+ expect {
253
+ tconf.letters
254
+ }.to raise_error
255
+ end
256
+ end
257
+ end
data/spec/spec_helper.rb CHANGED
@@ -12,4 +12,7 @@ require "passwd"
12
12
 
13
13
  RSpec.configure do |config|
14
14
  config.order = "random"
15
+ config.after do
16
+ Passwd::Config.instance.reset
17
+ end
15
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: passwd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - i2bskn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-22 00:00:00.000000000 Z
11
+ date: 2013-07-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -68,14 +68,18 @@ files:
68
68
  - Rakefile
69
69
  - lib/passwd.rb
70
70
  - lib/passwd/active_record.rb
71
- - lib/passwd/configuration.rb
71
+ - lib/passwd/base.rb
72
+ - lib/passwd/configuration/abstract_config.rb
73
+ - lib/passwd/configuration/config.rb
74
+ - lib/passwd/configuration/tmp_config.rb
72
75
  - lib/passwd/password.rb
73
76
  - lib/passwd/version.rb
74
77
  - passwd.gemspec
75
78
  - spec/passwd/active_record_spec.rb
76
- - spec/passwd/configuration_spec.rb
79
+ - spec/passwd/base_spec.rb
80
+ - spec/passwd/configuration/config_spec.rb
81
+ - spec/passwd/configuration/tmp_config_spec.rb
77
82
  - spec/passwd/password_spec.rb
78
- - spec/passwd_spec.rb
79
83
  - spec/spec_helper.rb
80
84
  homepage: https://github.com/i2bskn/passwd
81
85
  licenses:
@@ -103,7 +107,8 @@ specification_version: 4
103
107
  summary: Password utility
104
108
  test_files:
105
109
  - spec/passwd/active_record_spec.rb
106
- - spec/passwd/configuration_spec.rb
110
+ - spec/passwd/base_spec.rb
111
+ - spec/passwd/configuration/config_spec.rb
112
+ - spec/passwd/configuration/tmp_config_spec.rb
107
113
  - spec/passwd/password_spec.rb
108
- - spec/passwd_spec.rb
109
114
  - spec/spec_helper.rb
data/spec/passwd_spec.rb DELETED
@@ -1,137 +0,0 @@
1
- # coding: utf-8
2
-
3
- require "spec_helper"
4
-
5
- describe Passwd do
6
- let(:default) {Passwd::Configuration.new}
7
-
8
- describe ".create" do
9
- it "create random password" do
10
- password = Passwd.create
11
- expect(password.is_a? String).to be_true
12
- expect(password.size).to eq(default.length)
13
- end
14
-
15
- it "password was created specified characters" do
16
- expect(Passwd.create(length: 10).size).to eq(10)
17
- end
18
-
19
- it "password create without lower case" do
20
- password = Passwd.create lower: false
21
- expect(default.letters_lower.include? password).to be_false
22
- end
23
-
24
- it "password create without upper case" do
25
- password = Passwd.create upper: false
26
- expect(default.letters_upper.include? password).to be_false
27
- end
28
-
29
- it "password create without number" do
30
- password = Passwd.create(number: false)
31
- expect(default.letters_number.include? password).to be_false
32
- end
33
- end
34
-
35
- describe ".auth" do
36
- let!(:password) do
37
- password = Passwd.create
38
- salt_hash = Passwd.hashing(Time.now.to_s)
39
- password_hash = Passwd.hashing("#{salt_hash}#{password}")
40
- {text: password, salt: salt_hash, hash: password_hash}
41
- end
42
-
43
- it "return true with valid password" do
44
- expect(Passwd.auth(password[:text], password[:salt], password[:hash])).to be_true
45
- end
46
-
47
- it "return false with invalid password" do
48
- expect(Passwd.auth("invalid", password[:salt], password[:hash])).to be_false
49
- end
50
-
51
- it "should create exception if not specified arguments" do
52
- expect(proc{Passwd.auth}).to raise_error
53
- end
54
- end
55
-
56
- describe ".hashing" do
57
- it "return hashed password" do
58
- Digest::SHA1.should_receive(:hexdigest).with("secret").and_return("hash")
59
- expect(Passwd.hashing("secret")).to eq("hash")
60
- end
61
-
62
- it "should create exception if not specified argument" do
63
- expect(proc{Passwd.hashing}).to raise_error
64
- end
65
- end
66
-
67
- describe ".configure" do
68
- after {Passwd.reset_config}
69
-
70
- it "return configuration object" do
71
- expect(Passwd.configure.is_a? Passwd::Configuration).to be_true
72
- end
73
-
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)
80
- end
81
-
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)
86
- end
87
-
88
- it "alias of configure as config" do
89
- expect(Passwd.configure.object_id).to eq(Passwd.config.object_id)
90
- end
91
- end
92
-
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
123
- end
124
-
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
- end
136
- end
137
- end