random_token 1.0.2 → 1.1.0

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: 738c05b70d8a4fc3c236ba237e90f131625ac1fc
4
- data.tar.gz: 13d44098afbd728d3cc8390547d42f2dfa04ff82
3
+ metadata.gz: 7f1a3de562e161040be47ea06dc98cbdd4687761
4
+ data.tar.gz: f2b873c14adfaba4e1e93997e39ed24eb979f30f
5
5
  SHA512:
6
- metadata.gz: 846909049c446fa3eaad0af077a273b8a051d9ef4a51d706a656a4ee6a72beedef0102cecaa54ea1f2657f0f4b7d1839c9dc2b1502cfecbb11fb4acba701f372
7
- data.tar.gz: d87701e82fcf89f3dca17c702c7dea13c08d1cedf8c83fba8e6035551f4c140fedf5b399bdae9f8e541e70dd1cad6580cbacff56306f341a583ed0b502bed1d0
6
+ metadata.gz: d324f84c6c13fe3c1273762bdcc8eab135745437eb2305d35e222acf72d8d3e5adabdc36adbfd174787173559a4c6b63f58386949eaddfb85a642b815d76b7d1
7
+ data.tar.gz: 1f62569a4c40fb6af308de659cdd17f1d93772556bb65750fe785006c2819d9c192c6357e86bf9bb92da2993a9e982f6e94d78a476f99a2d59820a26cc418507
data/HISTORY.md CHANGED
@@ -1,4 +1,8 @@
1
- === v1.0.2 / 2014-09-30
1
+ ## v1.1.0 / 2014-10-01
2
+
3
+ * [Feature] Support the byte-length mode
4
+
5
+ ## v1.0.2 / 2014-09-30
2
6
 
3
7
  * [Dependence] Use new unit test syntex for testing, require minitest ~> 5.0
4
8
  * [Change] Use "SecureRandom.random_number" instead of "rand"
data/README.md CHANGED
@@ -191,6 +191,44 @@ With :hex seed, i.e, `s: :h`, the default case is changed to upper-case. You can
191
191
  RandomToken.gen(32, s: :h, c: :d)
192
192
  # "d331ce7dae87f3bb3dcb3975be9c430d"
193
193
 
194
+ ### Byte-Length
195
+
196
+ Use `:b` (or `:byte`) option to enable byte-length mode. When byte-length mode is on, the length unit becomes "bytes". For example:
197
+
198
+ RandomToken.gen(32, s: :h)
199
+ # "066010B727E0619DF90635DBCFBBC9CA"
200
+ # length = 32
201
+
202
+ RandomToken.gen(32, s: :h, b: true)
203
+ # "7D8FC8241CB1E5EE32BFB61212275733485B73F2B25F61F3684411BC77ECE331"
204
+ # length = 32 * 2
205
+
206
+ RandomToken.gen(32, s: :o)
207
+ # "33660161373115273571641666235250"
208
+ # length = 32
209
+
210
+ RandomToken.gen(32, s: :o, b: true)
211
+ # "13247642533766132340045425736322366461201703655601042333031121363007327500236255017153153410577614717424243614637434623101413176"
212
+ # length = 32 * 4
213
+
214
+ RandomToken.gen(32, s: :b)
215
+ # "10110010010011001101011111001011"
216
+ # length = 32
217
+
218
+ RandomToken.gen(32, s: :b, b: true)
219
+ # "00110111000100101100001011010001100100101110011001101000101110110001110111110100010001000011110101011011001001101001001100110110000100111110100011100101101011010111100011001100000010101111000010111101000000110101001100110011011000000111101100110101101111100000000111110000000010010100010110101010001010111010101000100101010100110001101000111110110110111011011111100111000000010010110110011111101110101001101101101001101011111010100101100110100100100100010100110111100010010010100010010000111000010000000110100101"
220
+ # length = 32 * 16
221
+
222
+ Only `:binary`, `:oct`, `:hex` seeds support the byte-length mode.
223
+
224
+ RandomToken.gen(32, b: true)
225
+ RandomToken::RandomTokenError: RandomToken::RandomTokenError
226
+
227
+ The byte-length mode is not supported by format either.
228
+
229
+ RandomToken.gen("%32h", b: true)
230
+ RandomToken::RandomTokenError: RandomToken::RandomTokenError
231
+
194
232
  ## Use Cases
195
233
 
196
234
  ### Case 1
@@ -235,7 +273,7 @@ Uh, I don't think it is cool enough...
235
273
 
236
274
  ## Test
237
275
 
238
- Go to random_token gem folder and run
276
+ Go to random_token gem folder and run (Note that you need minitest ~> 5.0 to run these tests)
239
277
 
240
278
  ruby ./test/test_all.rb
241
279
 
data/lib/random_token.rb CHANGED
@@ -28,11 +28,13 @@ module RandomToken
28
28
  :seed => [NUMBERS, ALPHABETS],
29
29
  :support_friendly => true,
30
30
  :support_case => true,
31
- :default_case => :mixed
31
+ :default_case => :mixed,
32
+ :support_byte => false,
33
+ :byte_mult => 1
32
34
  },
33
35
  :alphabet => {
34
36
  :abbr => [:letter, :a, :l],
35
- :seed => [ALPHABETS],
37
+ :seed => [ALPHABETS]
36
38
  },
37
39
  :number => {
38
40
  :abbr => [:n, 1, 10],
@@ -43,19 +45,25 @@ module RandomToken
43
45
  :abbr => [:b, 2],
44
46
  :seed => [('0'..'1')],
45
47
  :support_case => false,
46
- :support_friendly => false
48
+ :support_friendly => false,
49
+ :support_byte => true,
50
+ :byte_mult => 16
47
51
  },
48
52
  :oct => {
49
53
  :abbr => [:o, 8],
50
54
  :seed => [('0'..'7')],
51
55
  :support_case => false,
52
- :support_friendly => false
56
+ :support_friendly => false,
57
+ :support_byte => true,
58
+ :byte_mult => 4
53
59
  },
54
60
  :hex => {
55
61
  :abbr => [:h, 16],
56
62
  :seed => [NUMBERS, ('A'..'F')],
57
63
  :support_friendly => false,
58
- :default_case => :up
64
+ :default_case => :up,
65
+ :support_byte => true,
66
+ :byte_mult => 2
59
67
  }
60
68
  }
61
69
 
@@ -74,6 +82,10 @@ module RandomToken
74
82
  :friendly => {
75
83
  :abbr => :f,
76
84
  :value => [true, false]
85
+ },
86
+ :byte => {
87
+ :abbr => :b,
88
+ :value => [true, false]
77
89
  }
78
90
  }
79
91
 
@@ -186,7 +198,9 @@ module RandomToken
186
198
  # Generate/count token with a given length.
187
199
  def run_by_length(length, options)
188
200
  if block_given?
189
- seeds = gen_seeds(options)[:seed]
201
+ final_opt = gen_seeds(options)
202
+ seeds = final_opt[:seed]
203
+ length = length * final_opt[:byte_mult] if final_opt[:byte]
190
204
  yield(length, seeds)
191
205
  else
192
206
  raise RandomTokenError.new(
@@ -200,6 +214,9 @@ module RandomToken
200
214
  raise RandomTokenError.new(
201
215
  "No block is given when calling run_by_pattern.")
202
216
  end
217
+ if options[:byte]
218
+ raise RandomTokenError.new(:format_not_support_byte, options)
219
+ end
203
220
  in_arg = false
204
221
  result = []
205
222
  length = ''
@@ -314,6 +331,9 @@ module RandomToken
314
331
  end
315
332
  end
316
333
  raise RandomTokenError.new(:mask_remove_all_seeds, opt) if opt[:seed] == []
334
+ if opt[:support_byte] == false && opt[:byte] != nil
335
+ raise RandomTokenError.new(:not_support_byte, opt)
336
+ end
317
337
  opt
318
338
  end
319
339
  end
@@ -41,6 +41,14 @@ module RandomToken
41
41
  :value => 9,
42
42
  :msg => "The given option value is invalid."
43
43
  },
44
+ :format_not_support_byte => {
45
+ :value => 10,
46
+ :msg => "The byte-length is not supported in the format mode."
47
+ },
48
+ :not_support_byte => {
49
+ :value => 11,
50
+ :msg => "The byte-length feature is not supported in this case, but the byte option is true."
51
+ },
44
52
  }
45
53
 
46
54
  attr_reader :code, :value, :msg, :info
@@ -1,3 +1,3 @@
1
1
  module RandomToken
2
- VERSION = '1.0.2'
2
+ VERSION = '1.1.0'
3
3
  end
@@ -0,0 +1,63 @@
1
+ require "minitest/autorun"
2
+ require "random_token"
3
+
4
+ class TestByte < Minitest::Test
5
+ def test_gen_should_create_a_random_with_16xlength_with_binary_seed
6
+ length = 32
7
+ token = RandomToken.gen(length, :seed => :binary, :byte => true)
8
+ assert_match(/^[0-1]{#{length*16}}$/, token)
9
+ token = RandomToken.gen(length, :seed => :binary, :b => true)
10
+ assert_match(/^[0-1]{#{length*16}}$/, token)
11
+ end
12
+
13
+ def test_gen_should_create_a_random_with_4xlength_with_oct_seed
14
+ length = 32
15
+ token = RandomToken.gen(length, :seed => :oct, :byte => true)
16
+ assert_match(/^[0-7]{#{length*4}}$/, token)
17
+ token = RandomToken.gen(length, :seed => :oct, :b => true)
18
+ assert_match(/^[0-7]{#{length*4}}$/, token)
19
+ end
20
+
21
+ def test_gen_should_create_a_random_with_2xlength_with_hex_seed
22
+ length = 32
23
+ token = RandomToken.gen(length, :seed => :hex, :byte => true)
24
+ assert_match(/^[A-Z0-9]{#{length*2}}$/, token)
25
+ token = RandomToken.gen(length, :seed => :hex, :b => true)
26
+ assert_match(/^[A-Z0-9]{#{length*2}}$/, token)
27
+ end
28
+
29
+ def test_gen_should_not_support_byte_feature_when_use_format
30
+ e = assert_raises(RandomToken::RandomTokenError) { RandomToken.gen("%b", :byte => true) }
31
+ assert(e.code == :format_not_support_byte)
32
+ end
33
+
34
+ def test_gen_should_not_support_byte_feature_when_creating_alphabet_number_random
35
+ length = 10000
36
+ e = assert_raises(RandomToken::RandomTokenError) { RandomToken.gen(length, :byte => true) }
37
+ assert(e.code == :not_support_byte)
38
+ end
39
+
40
+ def test_gen_should_not_support_byte_feature_when_creating_alphabet_random
41
+ length = 10000
42
+ e = assert_raises(RandomToken::RandomTokenError) { RandomToken.gen(length, :seed => :a, :byte => true) }
43
+ assert(e.code == :not_support_byte)
44
+ end
45
+
46
+ def test_gen_should_not_support_byte_feature_when_creating_number_random
47
+ length = 10000
48
+ e = assert_raises(RandomToken::RandomTokenError) { RandomToken.gen(length, :seed => :n, :byte => true) }
49
+ assert(e.code == :not_support_byte)
50
+ end
51
+
52
+ def test_gen_should_not_support_byte_feature_when_creating_random_with_seed_array
53
+ length = 10000
54
+ e = assert_raises(RandomToken::RandomTokenError) { RandomToken.gen(length, :seed => ['a', 'b'], :byte => true) }
55
+ assert(e.code == :not_support_byte)
56
+ end
57
+
58
+ def test_gen_should_not_support_byte_feature_when_creating_random_with_seed_hash
59
+ length = 10000
60
+ e = assert_raises(RandomToken::RandomTokenError) { RandomToken.gen(length, :seed => {'a' => 1, 'b' => 2}, :byte => true) }
61
+ assert(e.code == :not_support_byte)
62
+ end
63
+ end
@@ -5,89 +5,89 @@ class TestSeed < Minitest::Test
5
5
  def test_gen_should_create_a_random_with_alphabets_only
6
6
  length = 10000
7
7
  token = RandomToken.gen(length, :seed => :a)
8
- assert_match(/^[A-Za-z]*$/, token)
8
+ assert_match(/^[A-Za-z]{#{length}}$/, token)
9
9
  token = RandomToken.gen(length, :seed => :alphabet)
10
- assert_match(/^[A-Za-z]*$/, token)
10
+ assert_match(/^[A-Za-z]{#{length}}$/, token)
11
11
  token = RandomToken.gen(length, :seed => :l)
12
- assert_match(/^[A-Za-z]*$/, token)
12
+ assert_match(/^[A-Za-z]{#{length}}$/, token)
13
13
  token = RandomToken.gen(length, :seed => :letter)
14
- assert_match(/^[A-Za-z]*$/, token)
14
+ assert_match(/^[A-Za-z]{#{length}}$/, token)
15
15
  token = RandomToken.gen(length, :s => :a)
16
- assert_match(/^[A-Za-z]*$/, token)
16
+ assert_match(/^[A-Za-z]{#{length}}$/, token)
17
17
  token = RandomToken.gen(length, :s => :alphabet)
18
- assert_match(/^[A-Za-z]*$/, token)
18
+ assert_match(/^[A-Za-z]{#{length}}$/, token)
19
19
  token = RandomToken.gen(length, :s => :l)
20
- assert_match(/^[A-Za-z]*$/, token)
20
+ assert_match(/^[A-Za-z]{#{length}}$/, token)
21
21
  token = RandomToken.gen(length, :s => :letter)
22
- assert_match(/^[A-Za-z]*$/, token)
22
+ assert_match(/^[A-Za-z]{#{length}}$/, token)
23
23
  end
24
24
 
25
25
  def test_gen_should_create_a_random_with_numbers_only
26
26
  length = 10000
27
27
  token = RandomToken.gen(length, :seed => :n)
28
- assert_match(/^[0-9]*$/, token)
28
+ assert_match(/^[0-9]{#{length}}$/, token)
29
29
  token = RandomToken.gen(length, :seed => :number)
30
- assert_match(/^[0-9]*$/, token)
30
+ assert_match(/^[0-9]{#{length}}$/, token)
31
31
  token = RandomToken.gen(length, :seed => 1)
32
- assert_match(/^[0-9]*$/, token)
32
+ assert_match(/^[0-9]{#{length}}$/, token)
33
33
  token = RandomToken.gen(length, :seed => 10)
34
- assert_match(/^[0-9]*$/, token)
34
+ assert_match(/^[0-9]{#{length}}$/, token)
35
35
  token = RandomToken.gen(length, :s => :n)
36
- assert_match(/^[0-9]*$/, token)
36
+ assert_match(/^[0-9]{#{length}}$/, token)
37
37
  token = RandomToken.gen(length, :s => :number)
38
- assert_match(/^[0-9]*$/, token)
38
+ assert_match(/^[0-9]{#{length}}$/, token)
39
39
  token = RandomToken.gen(length, :s => 1)
40
- assert_match(/^[0-9]*$/, token)
40
+ assert_match(/^[0-9]{#{length}}$/, token)
41
41
  token = RandomToken.gen(length, :s => 10)
42
- assert_match(/^[0-9]*$/, token)
42
+ assert_match(/^[0-9]{#{length}}$/, token)
43
43
  end
44
44
 
45
45
  def test_gen_should_create_a_random_with_0_and_1_only
46
46
  length = 10000
47
47
  token = RandomToken.gen(length, :seed => :b)
48
- assert_match(/^[01]*$/, token)
48
+ assert_match(/^[01]{#{length}}$/, token)
49
49
  token = RandomToken.gen(length, :seed => :binary)
50
- assert_match(/^[01]*$/, token)
50
+ assert_match(/^[01]{#{length}}$/, token)
51
51
  token = RandomToken.gen(length, :seed => 2)
52
- assert_match(/^[01]*$/, token)
52
+ assert_match(/^[01]{#{length}}$/, token)
53
53
  token = RandomToken.gen(length, :s => :b)
54
- assert_match(/^[01]*$/, token)
54
+ assert_match(/^[01]{#{length}}$/, token)
55
55
  token = RandomToken.gen(length, :s => :binary)
56
- assert_match(/^[01]*$/, token)
56
+ assert_match(/^[01]{#{length}}$/, token)
57
57
  token = RandomToken.gen(length, :s => 2)
58
- assert_match(/^[01]*$/, token)
58
+ assert_match(/^[01]{#{length}}$/, token)
59
59
  end
60
60
 
61
61
  def test_gen_should_create_a_random_with_octal_digits
62
62
  length = 10000
63
63
  token = RandomToken.gen(length, :seed => :o)
64
- assert_match(/^[0-7]*$/, token)
64
+ assert_match(/^[0-7]{#{length}}$/, token)
65
65
  token = RandomToken.gen(length, :seed => :oct)
66
- assert_match(/^[0-7]*$/, token)
66
+ assert_match(/^[0-7]{#{length}}$/, token)
67
67
  token = RandomToken.gen(length, :seed => 8)
68
- assert_match(/^[0-7]*$/, token)
68
+ assert_match(/^[0-7]{#{length}}$/, token)
69
69
  token = RandomToken.gen(length, :s => :o)
70
- assert_match(/^[0-7]*$/, token)
70
+ assert_match(/^[0-7]{#{length}}$/, token)
71
71
  token = RandomToken.gen(length, :s => :oct)
72
- assert_match(/^[0-7]*$/, token)
72
+ assert_match(/^[0-7]{#{length}}$/, token)
73
73
  token = RandomToken.gen(length, :s => 8)
74
- assert_match(/^[0-7]*$/, token)
74
+ assert_match(/^[0-7]{#{length}}$/, token)
75
75
  end
76
76
 
77
77
  def test_gen_should_create_a_random_with_hexadecimal_digits
78
78
  length = 10000
79
79
  token = RandomToken.gen(length, :seed => :h)
80
- assert_match(/^[0-9A-F]*$/, token)
80
+ assert_match(/^[0-9A-F]{#{length}}$/, token)
81
81
  token = RandomToken.gen(length, :seed => :hex)
82
- assert_match(/^[0-9A-F]*$/, token)
82
+ assert_match(/^[0-9A-F]{#{length}}$/, token)
83
83
  token = RandomToken.gen(length, :seed => 16)
84
- assert_match(/^[0-9A-F]*$/, token)
84
+ assert_match(/^[0-9A-F]{#{length}}$/, token)
85
85
  token = RandomToken.gen(length, :s => :h)
86
- assert_match(/^[0-9A-F]*$/, token)
86
+ assert_match(/^[0-9A-F]{#{length}}$/, token)
87
87
  token = RandomToken.gen(length, :s => :hex)
88
- assert_match(/^[0-9A-F]*$/, token)
88
+ assert_match(/^[0-9A-F]{#{length}}$/, token)
89
89
  token = RandomToken.gen(length, :s => 16)
90
- assert_match(/^[0-9A-F]*$/, token)
90
+ assert_match(/^[0-9A-F]{#{length}}$/, token)
91
91
  end
92
92
 
93
93
  def test_gen_should_create_a_random_with_given_seeds
@@ -98,9 +98,9 @@ class TestSeed < Minitest::Test
98
98
  '.', '>', '/', '?', '`', '~']
99
99
  token = RandomToken.gen(length, :seed => seeds)
100
100
  targets = "[#{Regexp.escape(seeds.join)}]"
101
- assert_match(/^#{targets}*$/, token)
101
+ assert_match(/^#{targets}{#{length}}$/, token)
102
102
  token = RandomToken.gen(length, :s => seeds)
103
103
  targets = "[#{Regexp.escape(seeds.join)}]"
104
- assert_match(/^#{targets}*$/, token)
104
+ assert_match(/^#{targets}{#{length}}$/, token)
105
105
  end
106
106
  end
data/test/test_gen.rb CHANGED
@@ -9,6 +9,7 @@ require "length/test_friendly"
9
9
  require "length/test_seed"
10
10
  require "length/test_mask"
11
11
  require "length/test_hash_seed"
12
+ require "length/test_byte"
12
13
  require "format/test_pattern"
13
14
  require "format/test_percent"
14
15
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: random_token
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sibevin Wang
@@ -46,6 +46,7 @@ files:
46
46
  - test/get/test_length.rb
47
47
  - test/get/test_mask.rb
48
48
  - test/get/test_seed.rb
49
+ - test/length/test_byte.rb
49
50
  - test/length/test_case.rb
50
51
  - test/length/test_friendly.rb
51
52
  - test/length/test_hash_seed.rb
@@ -96,6 +97,7 @@ test_files:
96
97
  - test/get/test_length.rb
97
98
  - test/get/test_mask.rb
98
99
  - test/get/test_seed.rb
100
+ - test/length/test_byte.rb
99
101
  - test/length/test_case.rb
100
102
  - test/length/test_friendly.rb
101
103
  - test/length/test_hash_seed.rb