blackbox 3.2.0 → 3.3.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.
@@ -428,7 +428,7 @@ version?</p>
428
428
  </div>
429
429
 
430
430
  <div id="footer">
431
- Generated on Mon Jun 13 02:13:50 2016 by
431
+ Generated on Sat Jul 30 17:08:31 2016 by
432
432
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
433
433
  0.8.7.6 (ruby-2.3.1).
434
434
  </div>
@@ -432,7 +432,7 @@ BB::Hash.flatten_prop_style(input)
432
432
  </div>
433
433
 
434
434
  <div id="footer">
435
- Generated on Mon Jun 13 02:13:50 2016 by
435
+ Generated on Sat Jul 30 17:08:31 2016 by
436
436
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
437
437
  0.8.7.6 (ruby-2.3.1).
438
438
  </div>
@@ -447,8 +447,7 @@ the format in the <code>options</code> hash.</p>
447
447
  80
448
448
  81
449
449
  82
450
- 83
451
- 84</pre>
450
+ 83</pre>
452
451
  </td>
453
452
  <td>
454
453
  <pre class="code"><span class="info file"># File 'lib/blackbox/number.rb', line 46</span>
@@ -484,8 +483,7 @@ the format in the <code>options</code> hash.</p>
484
483
  <span class='id identifier rubyid_formatted_number'>formatted_number</span> <span class='op'>=</span> <span class='id identifier rubyid_with_precision'>with_precision</span><span class='lparen'>(</span><span class='id identifier rubyid_number'>number</span><span class='comma'>,</span>
485
484
  <span class='label'>precision:</span> <span class='id identifier rubyid_precision'>precision</span><span class='comma'>,</span>
486
485
  <span class='label'>separator:</span> <span class='id identifier rubyid_separator'>separator</span><span class='comma'>,</span>
487
- <span class='label'>delimiter:</span> <span class='id identifier rubyid_delimiter'>delimiter</span>
488
- <span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_sub'>sub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>(</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_escaped_separator'>escaped_separator</span><span class='embexpr_end'>}</span><span class='tstring_content'>)(\d*[1-9])?0+\z</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>\1\2</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_sub'>sub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_escaped_separator'>escaped_separator</span><span class='embexpr_end'>}</span><span class='tstring_content'>\z</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
486
+ <span class='label'>delimiter:</span> <span class='id identifier rubyid_delimiter'>delimiter</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_sub'>sub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>(</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_escaped_separator'>escaped_separator</span><span class='embexpr_end'>}</span><span class='tstring_content'>)(\d*[1-9])?0+\z</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>\1\2</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_sub'>sub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_escaped_separator'>escaped_separator</span><span class='embexpr_end'>}</span><span class='tstring_content'>\z</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
489
487
  <span class='id identifier rubyid_storage_units_format'>storage_units_format</span><span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>%n</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='id identifier rubyid_formatted_number'>formatted_number</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>%u</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='id identifier rubyid_unit'>unit</span><span class='rparen'>)</span>
490
488
  <span class='kw'>end</span>
491
489
  <span class='kw'>rescue</span>
@@ -649,6 +647,7 @@ the format in the <code>options</code> hash.</p>
649
647
  <pre class="lines">
650
648
 
651
649
 
650
+ 160
652
651
  161
653
652
  162
654
653
  163
@@ -666,11 +665,10 @@ the format in the <code>options</code> hash.</p>
666
665
  175
667
666
  176
668
667
  177
669
- 178
670
- 179</pre>
668
+ 178</pre>
671
669
  </td>
672
670
  <td>
673
- <pre class="code"><span class="info file"># File 'lib/blackbox/number.rb', line 161</span>
671
+ <pre class="code"><span class="info file"># File 'lib/blackbox/number.rb', line 160</span>
674
672
 
675
673
  <span class='kw'>def</span> <span class='id identifier rubyid_with_delimiter'>with_delimiter</span><span class='lparen'>(</span><span class='id identifier rubyid_number'>number</span><span class='comma'>,</span> <span class='id identifier rubyid_args'>args</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
676
674
  <span class='kw'>begin</span>
@@ -864,6 +862,7 @@ can customize the format in the <code>options</code> hash.</p>
864
862
  <pre class="lines">
865
863
 
866
864
 
865
+ 112
867
866
  113
868
867
  114
869
868
  115
@@ -884,11 +883,10 @@ can customize the format in the <code>options</code> hash.</p>
884
883
  130
885
884
  131
886
885
  132
887
- 133
888
- 134</pre>
886
+ 133</pre>
889
887
  </td>
890
888
  <td>
891
- <pre class="code"><span class="info file"># File 'lib/blackbox/number.rb', line 113</span>
889
+ <pre class="code"><span class="info file"># File 'lib/blackbox/number.rb', line 112</span>
892
890
 
893
891
  <span class='kw'>def</span> <span class='id identifier rubyid_with_precision'>with_precision</span><span class='lparen'>(</span><span class='id identifier rubyid_number'>number</span><span class='comma'>,</span> <span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span>
894
892
  <span class='kw'>begin</span>
@@ -922,7 +920,7 @@ can customize the format in the <code>options</code> hash.</p>
922
920
  </div>
923
921
 
924
922
  <div id="footer">
925
- Generated on Mon Jun 13 02:13:50 2016 by
923
+ Generated on Sat Jul 30 17:08:31 2016 by
926
924
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
927
925
  0.8.7.6 (ruby-2.3.1).
928
926
  </div>
@@ -231,7 +231,7 @@
231
231
  </div>
232
232
 
233
233
  <div id="footer">
234
- Generated on Mon Jun 13 02:13:50 2016 by
234
+ Generated on Sat Jul 30 17:08:31 2016 by
235
235
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
236
236
  0.8.7.6 (ruby-2.3.1).
237
237
  </div>
@@ -411,7 +411,7 @@
411
411
  </div>
412
412
 
413
413
  <div id="footer">
414
- Generated on Mon Jun 13 02:13:50 2016 by
414
+ Generated on Sat Jul 30 17:08:31 2016 by
415
415
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
416
416
  0.8.7.6 (ruby-2.3.1).
417
417
  </div>
@@ -97,6 +97,13 @@
97
97
  <li class="letter">C</li>
98
98
  <ul>
99
99
 
100
+ <li>
101
+ <span class='object_link'><a href="BB/Crypto/ControlToken.html" title="BB::Crypto::ControlToken (class)">ControlToken</a></span>
102
+
103
+ <small>(BB::Crypto)</small>
104
+
105
+ </li>
106
+
100
107
  <li>
101
108
  <span class='object_link'><a href="BB/Crypto.html" title="BB::Crypto (module)">Crypto</a></span>
102
109
 
@@ -191,7 +198,7 @@
191
198
  </div>
192
199
 
193
200
  <div id="footer">
194
- Generated on Mon Jun 13 02:13:49 2016 by
201
+ Generated on Sat Jul 30 17:08:30 2016 by
195
202
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
196
203
  0.8.7.6 (ruby-2.3.1).
197
204
  </div>
@@ -50,7 +50,7 @@
50
50
 
51
51
  <ul id="full_list" class="class">
52
52
  <li><span class='object_link'><a href="top-level-namespace.html" title="Top Level Namespace (root)">Top Level Namespace</a></span></li>
53
- <li><a class='toggle'></a> <span class='object_link'><a href="BB.html" title="BB (module)">BB</a></span><small class='search_info'>Top Level Namespace</small></li><ul><li><span class='object_link'><a href="BB/Crypto.html" title="BB::Crypto (module)">Crypto</a></span><small class='search_info'>BB</small></li><li><span class='object_link'><a href="BB/Gem.html" title="BB::Gem (module)">Gem</a></span><small class='search_info'>BB</small></li><li><span class='object_link'><a href="BB/Hash.html" title="BB::Hash (module)">Hash</a></span><small class='search_info'>BB</small></li><li><span class='object_link'><a href="BB/Number.html" title="BB::Number (module)">Number</a></span><small class='search_info'>BB</small></li><li><span class='object_link'><a href="BB/String.html" title="BB::String (module)">String</a></span><small class='search_info'>BB</small></li><li><span class='object_link'><a href="BB/Unix.html" title="BB::Unix (module)">Unix</a></span><small class='search_info'>BB</small></li></ul>
53
+ <li><a class='toggle'></a> <span class='object_link'><a href="BB.html" title="BB (module)">BB</a></span><small class='search_info'>Top Level Namespace</small></li><ul><li><a class='toggle'></a> <span class='object_link'><a href="BB/Crypto.html" title="BB::Crypto (module)">Crypto</a></span><small class='search_info'>BB</small></li><ul><li><span class='object_link'><a href="BB/Crypto/ControlToken.html" title="BB::Crypto::ControlToken (class)">ControlToken</a></span> &lt; Object<small class='search_info'>BB::Crypto</small></li></ul><li><span class='object_link'><a href="BB/Gem.html" title="BB::Gem (module)">Gem</a></span><small class='search_info'>BB</small></li><li><span class='object_link'><a href="BB/Hash.html" title="BB::Hash (module)">Hash</a></span><small class='search_info'>BB</small></li><li><span class='object_link'><a href="BB/Number.html" title="BB::Number (module)">Number</a></span><small class='search_info'>BB</small></li><li><span class='object_link'><a href="BB/String.html" title="BB::String (module)">String</a></span><small class='search_info'>BB</small></li><li><span class='object_link'><a href="BB/Unix.html" title="BB::Unix (module)">Unix</a></span><small class='search_info'>BB</small></li></ul>
54
54
 
55
55
  </ul>
56
56
  </div>
@@ -95,7 +95,7 @@ BB::String.strip_ansi( ... )
95
95
  </div></div>
96
96
 
97
97
  <div id="footer">
98
- Generated on Mon Jun 13 02:13:49 2016 by
98
+ Generated on Sat Jul 30 17:08:30 2016 by
99
99
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
100
100
  0.8.7.6 (ruby-2.3.1).
101
101
  </div>
@@ -95,7 +95,7 @@ BB::String.strip_ansi( ... )
95
95
  </div></div>
96
96
 
97
97
  <div id="footer">
98
- Generated on Mon Jun 13 02:13:49 2016 by
98
+ Generated on Sat Jul 30 17:08:30 2016 by
99
99
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
100
100
  0.8.7.6 (ruby-2.3.1).
101
101
  </div>
@@ -52,47 +52,59 @@
52
52
 
53
53
 
54
54
  <li class="r1 ">
55
+ <span class='object_link'><a href="BB/Crypto/ControlToken.html#create-class_method" title="BB::Crypto::ControlToken.create (method)">create</a></span>
56
+ <small>BB::Crypto::ControlToken</small>
57
+ </li>
58
+
59
+
60
+ <li class="r2 ">
55
61
  <span class='object_link'><a href="BB/Crypto.html#decrypt-class_method" title="BB::Crypto.decrypt (method)">decrypt</a></span>
56
62
  <small>BB::Crypto</small>
57
63
  </li>
58
64
 
59
65
 
60
- <li class="r2 ">
66
+ <li class="r1 ">
61
67
  <span class='object_link'><a href="BB/Crypto.html#decrypt_base64-class_method" title="BB::Crypto.decrypt_base64 (method)">decrypt_base64</a></span>
62
68
  <small>BB::Crypto</small>
63
69
  </li>
64
70
 
65
71
 
66
- <li class="r1 ">
72
+ <li class="r2 ">
67
73
  <span class='object_link'><a href="BB/Crypto.html#decrypt_urlsafe_base64-class_method" title="BB::Crypto.decrypt_urlsafe_base64 (method)">decrypt_urlsafe_base64</a></span>
68
74
  <small>BB::Crypto</small>
69
75
  </li>
70
76
 
71
77
 
72
- <li class="r2 ">
78
+ <li class="r1 ">
73
79
  <span class='object_link'><a href="BB/Crypto.html#encrypt-class_method" title="BB::Crypto.encrypt (method)">encrypt</a></span>
74
80
  <small>BB::Crypto</small>
75
81
  </li>
76
82
 
77
83
 
78
- <li class="r1 ">
84
+ <li class="r2 ">
79
85
  <span class='object_link'><a href="BB/Crypto.html#encrypt_base64-class_method" title="BB::Crypto.encrypt_base64 (method)">encrypt_base64</a></span>
80
86
  <small>BB::Crypto</small>
81
87
  </li>
82
88
 
83
89
 
84
- <li class="r2 ">
90
+ <li class="r1 ">
85
91
  <span class='object_link'><a href="BB/Crypto.html#encrypt_urlsafe_base64-class_method" title="BB::Crypto.encrypt_urlsafe_base64 (method)">encrypt_urlsafe_base64</a></span>
86
92
  <small>BB::Crypto</small>
87
93
  </li>
88
94
 
89
95
 
90
- <li class="r1 ">
96
+ <li class="r2 ">
91
97
  <span class='object_link'><a href="BB/Hash.html#flatten_prop_style-class_method" title="BB::Hash.flatten_prop_style (method)">flatten_prop_style</a></span>
92
98
  <small>BB::Hash</small>
93
99
  </li>
94
100
 
95
101
 
102
+ <li class="r1 ">
103
+ <span class='object_link'><a href="BB/Crypto/ControlToken.html#parse-class_method" title="BB::Crypto::ControlToken.parse (method)">parse</a></span>
104
+ <small>BB::Crypto::ControlToken</small>
105
+ </li>
106
+
107
+
96
108
  <li class="r2 ">
97
109
  <span class='object_link'><a href="BB/Unix.html#run_each-class_method" title="BB::Unix.run_each (method)">run_each</a></span>
98
110
  <small>BB::Unix</small>
@@ -103,7 +103,7 @@
103
103
  </div>
104
104
 
105
105
  <div id="footer">
106
- Generated on Mon Jun 13 02:13:49 2016 by
106
+ Generated on Sat Jul 30 17:08:30 2016 by
107
107
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
108
108
  0.8.7.6 (ruby-2.3.1).
109
109
  </div>
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  require 'openssl'
3
3
  require 'base64'
4
+ require 'chronic_duration'
4
5
 
5
6
  module BB
6
7
  # Crypto utilities.
@@ -93,5 +94,48 @@ module BB
93
94
  decrypt(Base64.urlsafe_decode64(ciphertext), key, cipher_type, iv)
94
95
  end
95
96
  end
96
- end
97
+
98
+ # Secure Control Token.
99
+ class ControlToken
100
+ class << self
101
+ # Encode and encrypt an urlsafe ControlToken.
102
+ #
103
+ # @param [String] op Operation id
104
+ # @param [Array] args Arguments (Strings)
105
+ # @param [Fixnum] expire_in
106
+ # @param [String] key Encryption key
107
+ # @param [String] cipher_type OpenSSL cipher
108
+ # @return [String] ControlToken (urlsafe base64)
109
+ def create(op, args, expire_in = 900, key = ENV['CONTROLTOKEN_SECRET'], cipher_type = 'aes-256-cbc')
110
+ raise ArgumentError, 'key can not be blank' if key.nil? || key.empty?
111
+ # If you're reading this in the year 2038: Hi there! :-)
112
+ [Time.now.to_i + expire_in].pack('l<')
113
+ body = ([[Time.now.to_i + expire_in].pack('l<'), op] + args).join("\x00")
114
+ BB::Crypto.encrypt_urlsafe_base64(body, key, cipher_type)
115
+ end
116
+
117
+ # Decrypt and parse an urlsafe ControlToken.
118
+ #
119
+ # @param [String] token Input String (urlsafe base64)
120
+ # @param [String] key Encryption key
121
+ # @param [Boolean] force Decode expired token (suppress ArgumentError)
122
+ # @param [String] cipher_type OpenSSL cipher
123
+ # @return [Hash] Token payload
124
+ def parse(token, key = ENV['CONTROLTOKEN_SECRET'], force = false, cipher_type = 'aes-256-cbc')
125
+ raise ArgumentError, 'key can not be blank' if key.nil? || key.empty?
126
+ body = BB::Crypto.decrypt_urlsafe_base64(token, key, cipher_type)
127
+ valid_until, op, *args = body.split("\x00")
128
+ valid_until = valid_until.unpack('l<')[0]
129
+ expired = Time.now.to_i > valid_until
130
+ if expired && !force
131
+ raise ArgumentError, "Token expired at #{Time.at(valid_until)} (#{ChronicDuration.output(Time.now.to_i - valid_until)} ago)"
132
+ end
133
+ { valid_until: valid_until,
134
+ op: op,
135
+ args: args,
136
+ expired: expired }
137
+ end
138
+ end
139
+ end # /BB::Crypto::Token
140
+ end # /BB::Crypto
97
141
  end
@@ -74,8 +74,7 @@ module BB
74
74
  formatted_number = with_precision(number,
75
75
  precision: precision,
76
76
  separator: separator,
77
- delimiter: delimiter
78
- ).sub(/(#{escaped_separator})(\d*[1-9])?0+\z/, '\1\2').sub(/#{escaped_separator}\z/, '')
77
+ delimiter: delimiter).sub(/(#{escaped_separator})(\d*[1-9])?0+\z/, '\1\2').sub(/#{escaped_separator}\z/, '')
79
78
  storage_units_format.gsub(/%n/, formatted_number).gsub(/%u/, unit)
80
79
  end
81
80
  rescue
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module BB
3
- VERSION = '3.2.0'
3
+ VERSION = '3.3.0'
4
4
  end
@@ -3,15 +3,15 @@ require 'spec_helper'
3
3
  require 'blackbox/crypto'
4
4
  require 'base64'
5
5
 
6
- OPENSSL_CIPHERS = %w(aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc) +
7
- %w(aes-256-ecb bf bf-cbc bf-cfb) +
8
- %w(bf-ecb bf-ofb cast cast-cbc cast5-cbc) +
9
- %w(cast5-cfb cast5-ecb cast5-ofb des des-cbc) +
10
- %w(des-cfb des-ecb des-ede des-ede-cbc des-ede-cfb) +
11
- %w(des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb) +
12
- %w(des-ofb des3 desx rc2 rc2-40-cbc) +
13
- %w(rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb) +
14
- %w(rc4 rc4-40)
6
+ OPENSSL_CIPHERS = %w(aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc) +
7
+ %w(aes-256-ecb bf bf-cbc bf-cfb) +
8
+ %w(bf-ecb bf-ofb cast cast-cbc cast5-cbc) +
9
+ %w(cast5-cfb cast5-ecb cast5-ofb des des-cbc) +
10
+ %w(des-cfb des-ecb des-ede des-ede-cbc des-ede-cfb) +
11
+ %w(des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb) +
12
+ %w(des-ofb des3 desx rc2 rc2-40-cbc) +
13
+ %w(rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb) +
14
+ %w(rc4 rc4-40)
15
15
 
16
16
  TEST_KEY = '12345678901234567890123456789012'
17
17
  TEST_IV = 'x234567890123456789012345678901x'
@@ -67,4 +67,44 @@ describe BB::Crypto do
67
67
  end
68
68
  end
69
69
  end
70
+
71
+ describe BB::Crypto::ControlToken do
72
+ TEST_KEY = '12345678901234567890123456789012'
73
+ it "raises an Exception when no key is given and ENV['CONTROLTOKEN_SECRET'] is blank" do
74
+ expect do
75
+ subject.class.create('foo', [])
76
+ end.to raise_error(ArgumentError)
77
+ end
78
+
79
+ it 'raises an Exception when key is too short (via parameter)' do
80
+ expect do
81
+ subject.class.create('foo', [], 911, 'key')
82
+ end.to raise_error(OpenSSL::Cipher::CipherError)
83
+ end
84
+
85
+ it 'raises an Exception when key is too short (via ENV)' do
86
+ expect do
87
+ ENV['CONTROLTOKEN_SECRET'] = 'x'
88
+ subject.class.create('foo', [], 911)
89
+ end.to raise_error(OpenSSL::Cipher::CipherError)
90
+ end
91
+
92
+ it 'decodes all elements of token payload as Strings' do
93
+ v = subject.class.parse(subject.class.create('foo', ['a', 2, :c], 5, TEST_KEY), TEST_KEY)
94
+ expect(v[:op]).to eq('foo')
95
+ expect(v[:args]).to eq(%w(a 2 c))
96
+ expect(v[:expired]).to eq(false)
97
+ end
98
+
99
+ it 'raises an Exception when parsing expired Token with force=false' do
100
+ expect do
101
+ subject.class.parse(subject.class.create('foo', ['a', 2, :c], -1, TEST_KEY), TEST_KEY)
102
+ end.to raise_error(ArgumentError)
103
+ end
104
+
105
+ it 'returns token with expired=true when parsing expired Token with force=true' do
106
+ v = subject.class.parse(subject.class.create('foo', ['a', 2, :c], -1, TEST_KEY), TEST_KEY, true)
107
+ expect(v[:expired]).to eq(true)
108
+ end
109
+ end
70
110
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blackbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 3.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Moe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-13 00:00:00.000000000 Z
11
+ date: 2016-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -168,44 +168,58 @@ dependencies:
168
168
  name: gem_update_checker
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - ">="
171
+ - - "~>"
172
172
  - !ruby/object:Gem::Version
173
- version: '0'
173
+ version: 0.2.0
174
174
  type: :runtime
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
- - - ">="
178
+ - - "~>"
179
179
  - !ruby/object:Gem::Version
180
- version: '0'
180
+ version: 0.2.0
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: lolcat
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
- - - ">="
185
+ - - "~>"
186
186
  - !ruby/object:Gem::Version
187
- version: '0'
187
+ version: 42.1.43
188
188
  type: :runtime
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
- - - ">="
192
+ - - "~>"
193
193
  - !ruby/object:Gem::Version
194
- version: '0'
194
+ version: 42.1.43
195
195
  - !ruby/object:Gem::Dependency
196
196
  name: rainbow
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
- - - ">="
199
+ - - "~>"
200
200
  - !ruby/object:Gem::Version
201
- version: '0'
201
+ version: 2.1.0
202
202
  type: :runtime
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
- - - ">="
206
+ - - "~>"
207
207
  - !ruby/object:Gem::Version
208
- version: '0'
208
+ version: 2.1.0
209
+ - !ruby/object:Gem::Dependency
210
+ name: chronic_duration
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - "~>"
214
+ - !ruby/object:Gem::Version
215
+ version: 0.10.6
216
+ type: :runtime
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - "~>"
221
+ - !ruby/object:Gem::Version
222
+ version: 0.10.6
209
223
  description: Various little helpers
210
224
  email:
211
225
  - moe@busyloop.net
@@ -296,6 +310,7 @@ files:
296
310
  - coverage/index.html
297
311
  - doc/BB.html
298
312
  - doc/BB/Crypto.html
313
+ - doc/BB/Crypto/ControlToken.html
299
314
  - doc/BB/Gem.html
300
315
  - doc/BB/Hash.html
301
316
  - doc/BB/Number.html