rubysl-cgi-session 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: be8113d5777dcd44f19953df53b5930ced231f2a
4
- data.tar.gz: ae27543b310806b0b8eaca6657b8058d9d5d8b12
3
+ metadata.gz: 4789df406231c3e8a7bfa32f2f03bbcd88016c0b
4
+ data.tar.gz: 93dcf411efbe9cb4ed3177fb1a6265ee5a643b09
5
5
  SHA512:
6
- metadata.gz: 2a60a0678b8889e13337d81ceac3215d7bb85894c3ddf3725af681ae167f91865e830ba2de81a33888985151c089446f795597276dd2e70dc8ede4085cf1fadc
7
- data.tar.gz: 630f5f071410e7a963567fa319fa561cccdb2b91726529468a900411061354ce661ba55804dbb09f83d40a9587332e68db049c49b31ecb505f2e61c55ff4e708
6
+ metadata.gz: c2cc342d9538cd0d82d5441082d8d4d19f307bb269728ffa068fd192dd0622750f06c50893a8b47b5a262a742248bc3cb98e9c98a388efe1b6374ed354074b7e
7
+ data.tar.gz: 4114b261866635d2c6d540d18da5c7f6f04db324028aea4338869b4eb742374b8d7d3c1b33b28f67c18cc5b5e11880f7e9924e1b5df786d089d4ea53963699cd
data/.gitignore CHANGED
@@ -15,4 +15,3 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
- .rbx
data/.travis.yml CHANGED
@@ -1,8 +1,7 @@
1
1
  language: ruby
2
- before_install:
3
- - gem update --system
4
- - gem --version
5
- - gem install rubysl-bundler
6
- script: bundle exec mspec spec
2
+ env:
3
+ - RUBYLIB=lib
4
+ script: bundle exec mspec
7
5
  rvm:
8
- - rbx-nightly-18mode
6
+ - 1.9.3
7
+ - rbx-nightly-19mode
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # RubySL::Cgi::Session
1
+ # Rubysl::Cgi::Session
2
2
 
3
3
  TODO: Write a gem description
4
4
 
@@ -24,6 +24,6 @@ TODO: Write usage instructions here
24
24
 
25
25
  1. Fork it
26
26
  2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Added some feature'`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
28
  4. Push to the branch (`git push origin my-new-feature`)
29
29
  5. Create new Pull Request
data/Rakefile CHANGED
@@ -1,2 +1 @@
1
- #!/usr/bin/env rake
2
1
  require "bundler/gem_tasks"
@@ -2,7 +2,7 @@
2
2
  # cgi/session/pstore.rb - persistent storage of marshalled session data
3
3
  #
4
4
  # Documentation: William Webber (william@williamwebber.com)
5
- #
5
+ #
6
6
  # == Overview
7
7
  #
8
8
  # This file provides the CGI::Session::PStore class, which builds
@@ -29,7 +29,7 @@ class CGI
29
29
  # created. The session id must only contain alphanumeric
30
30
  # characters; automatically generated session ids observe
31
31
  # this requirement.
32
- #
32
+ #
33
33
  # +option+ is a hash of options for the initializer. The
34
34
  # following options are recognised:
35
35
  #
@@ -43,55 +43,55 @@ class CGI
43
43
  # This session's PStore file will be created if it does
44
44
  # not exist, or opened if it does.
45
45
  def initialize(session, option={})
46
- dir = option['tmpdir'] || Dir::tmpdir
47
- prefix = option['prefix'] || ''
48
- id = session.session_id
46
+ dir = option['tmpdir'] || Dir::tmpdir
47
+ prefix = option['prefix'] || ''
48
+ id = session.session_id
49
49
  require 'digest/md5'
50
50
  md5 = Digest::MD5.hexdigest(id)[0,16]
51
- path = dir+"/"+prefix+md5
52
- path.untaint
53
- if File::exist?(path)
54
- @hash = nil
55
- else
51
+ path = dir+"/"+prefix+md5
52
+ path.untaint
53
+ if File::exist?(path)
54
+ @hash = nil
55
+ else
56
56
  unless session.new_session
57
57
  raise CGI::Session::NoSession, "uninitialized session"
58
58
  end
59
- @hash = {}
60
- end
61
- @p = ::PStore.new(path)
62
- @p.transaction do |p|
63
- File.chmod(0600, p.path)
64
- end
59
+ @hash = {}
60
+ end
61
+ @p = ::PStore.new(path)
62
+ @p.transaction do |p|
63
+ File.chmod(0600, p.path)
64
+ end
65
65
  end
66
66
 
67
67
  # Restore session state from the session's PStore file.
68
68
  #
69
69
  # Returns the session state as a hash.
70
70
  def restore
71
- unless @hash
72
- @p.transaction do
73
- @hash = @p['hash'] || {}
74
- end
75
- end
76
- @hash
71
+ unless @hash
72
+ @p.transaction do
73
+ @hash = @p['hash'] || {}
74
+ end
75
+ end
76
+ @hash
77
77
  end
78
78
 
79
79
  # Save session state to the session's PStore file.
80
- def update
81
- @p.transaction do
82
- @p['hash'] = @hash
83
- end
80
+ def update
81
+ @p.transaction do
82
+ @p['hash'] = @hash
83
+ end
84
84
  end
85
85
 
86
86
  # Update and close the session's PStore file.
87
87
  def close
88
- update
88
+ update
89
89
  end
90
90
 
91
91
  # Close and delete the session's PStore file.
92
92
  def delete
93
- path = @p.path
94
- File::unlink path
93
+ path = @p.path
94
+ File::unlink path
95
95
  end
96
96
 
97
97
  end
@@ -8,28 +8,22 @@
8
8
  # Author: Yukihiro "Matz" Matsumoto
9
9
  #
10
10
  # Documentation: William Webber (william@williamwebber.com)
11
- #
12
- # == Overview
13
- #
14
- # This file provides the +CGI::Session+ class, which provides session
15
- # support for CGI scripts. A session is a sequence of HTTP requests
16
- # and responses linked together and associated with a single client.
17
- # Information associated with the session is stored
18
- # on the server between requests. A session id is passed between client
19
- # and server with every request and response, transparently
20
- # to the user. This adds state information to the otherwise stateless
21
- # HTTP request/response protocol.
22
- #
23
- # See the documentation to the +CGI::Session+ class for more details
24
- # and examples of usage. See cgi.rb for the +CGI+ class itself.
25
11
 
26
12
  require 'cgi'
27
13
  require 'tmpdir'
28
14
 
29
15
  class CGI
30
16
 
31
- # Class representing an HTTP session. See documentation for the file
32
- # cgi/session.rb for an introduction to HTTP sessions.
17
+ # == Overview
18
+ #
19
+ # This file provides the CGI::Session class, which provides session
20
+ # support for CGI scripts. A session is a sequence of HTTP requests
21
+ # and responses linked together and associated with a single client.
22
+ # Information associated with the session is stored
23
+ # on the server between requests. A session id is passed between client
24
+ # and server with every request and response, transparently
25
+ # to the user. This adds state information to the otherwise stateless
26
+ # HTTP request/response protocol.
33
27
  #
34
28
  # == Lifecycle
35
29
  #
@@ -47,7 +41,7 @@ class CGI
47
41
  # == Setting and retrieving session data.
48
42
  #
49
43
  # The Session class associates data with a session as key-value pairs.
50
- # This data can be set and retrieved by indexing the Session instance
44
+ # This data can be set and retrieved by indexing the Session instance
51
45
  # using '[]', much the same as hashes (although other hash methods
52
46
  # are not supported).
53
47
  #
@@ -60,21 +54,21 @@ class CGI
60
54
  #
61
55
  # == Storing session state
62
56
  #
63
- # The caller can specify what form of storage to use for the session's
57
+ # The caller can specify what form of storage to use for the session's
64
58
  # data with the +database_manager+ option to CGI::Session::new. The
65
59
  # following storage classes are provided as part of the standard library:
66
60
  #
67
- # CGI::Session::FileStore:: stores data as plain text in a flat file. Only
68
- # works with String data. This is the default
61
+ # CGI::Session::FileStore:: stores data as plain text in a flat file. Only
62
+ # works with String data. This is the default
69
63
  # storage type.
70
- # CGI::Session::MemoryStore:: stores data in an in-memory hash. The data
71
- # only persists for as long as the current ruby
64
+ # CGI::Session::MemoryStore:: stores data in an in-memory hash. The data
65
+ # only persists for as long as the current ruby
72
66
  # interpreter instance does.
73
67
  # CGI::Session::PStore:: stores data in Marshalled format. Provided by
74
- # cgi/session/pstore.rb. Supports data of any type,
68
+ # cgi/session/pstore.rb. Supports data of any type,
75
69
  # and provides file-locking and transaction support.
76
70
  #
77
- # Custom storage types can also be created by defining a class with
71
+ # Custom storage types can also be created by defining a class with
78
72
  # the following methods:
79
73
  #
80
74
  # new(session, options)
@@ -99,14 +93,14 @@ class CGI
99
93
  # The simplest way to do this is via cookies. The CGI::Session class
100
94
  # provides transparent support for session id communication via cookies
101
95
  # if the client has cookies enabled.
102
- #
96
+ #
103
97
  # If the client has cookies disabled, the session id must be included
104
98
  # as a parameter of all requests sent by the client to the server. The
105
99
  # CGI::Session class in conjunction with the CGI class will transparently
106
100
  # add the session id as a hidden input field to all forms generated
107
101
  # using the CGI#form() HTML generation method. No built-in support is
108
102
  # provided for other mechanisms, such as URL re-writing. The caller is
109
- # responsible for extracting the session id from the session_id
103
+ # responsible for extracting the session id from the session_id
110
104
  # attribute and manually encoding it in URLs and adding it as a hidden
111
105
  # input to HTML forms created by other mechanisms. Also, session expiry
112
106
  # is not automatically handled.
@@ -124,10 +118,10 @@ class CGI
124
118
  # session = CGI::Session.new(cgi,
125
119
  # 'database_manager' => CGI::Session::PStore, # use PStore
126
120
  # 'session_key' => '_rb_sess_id', # custom session key
127
- # 'session_expires' => Time.now + 30 * 60, # 30 minute timeout
121
+ # 'session_expires' => Time.now + 30 * 60, # 30 minute timeout
128
122
  # 'prefix' => 'pstore_sid_') # PStore option
129
123
  # if cgi.has_key?('user_name') and cgi['user_name'] != ''
130
- # # coerce to String: cgi[] returns the
124
+ # # coerce to String: cgi[] returns the
131
125
  # # string-like CGI::QueryExtension::Value
132
126
  # session['user_name'] = cgi['user_name'].to_s
133
127
  # elsif !session['user_name']
@@ -143,11 +137,11 @@ class CGI
143
137
  # cgi = CGI.new("html4")
144
138
  #
145
139
  # # We make sure to delete an old session if one exists,
146
- # # not just to free resources, but to prevent the session
140
+ # # not just to free resources, but to prevent the session
147
141
  # # from being maliciously hijacked later on.
148
142
  # begin
149
- # session = CGI::Session.new(cgi, 'new_session' => false)
150
- # session.delete
143
+ # session = CGI::Session.new(cgi, 'new_session' => false)
144
+ # session.delete
151
145
  # rescue ArgumentError # if no old session
152
146
  # end
153
147
  # session = CGI::Session.new(cgi, 'new_session' => true)
@@ -163,7 +157,7 @@ class CGI
163
157
 
164
158
  def Session::callback(dbman) #:nodoc:
165
159
  Proc.new{
166
- dbman[0].close unless dbman.empty?
160
+ dbman[0].close unless dbman.empty?
167
161
  }
168
162
  end
169
163
 
@@ -172,7 +166,7 @@ class CGI
172
166
  # The session id is an MD5 hash based upon the time,
173
167
  # a random number, and a constant string. This routine
174
168
  # is used internally for automatically generated
175
- # session ids.
169
+ # session ids.
176
170
  def create_new_id
177
171
  require 'securerandom'
178
172
  begin
@@ -205,7 +199,7 @@ class CGI
205
199
  # it is retrieved from the +session_key+ parameter
206
200
  # of the request, or automatically generated for
207
201
  # a new session.
208
- # new_session:: if true, force creation of a new session. If not set,
202
+ # new_session:: if true, force creation of a new session. If not set,
209
203
  # a new session is only created if none currently
210
204
  # exists. If false, a new session is never created,
211
205
  # and if none currently exists and the +session_id+
@@ -220,7 +214,7 @@ class CGI
220
214
  # The following options are also recognised, but only apply if the
221
215
  # session id is stored in a cookie.
222
216
  #
223
- # session_expires:: the time the current session expires, as a
217
+ # session_expires:: the time the current session expires, as a
224
218
  # +Time+ object. If not set, the session will terminate
225
219
  # when the user's browser is closed.
226
220
  # session_domain:: the hostname domain for which this session is valid.
@@ -232,10 +226,10 @@ class CGI
232
226
  # +option+ is also passed on to the session storage class initializer; see
233
227
  # the documentation for each session storage class for the options
234
228
  # they support.
235
- #
229
+ #
236
230
  # The retrieved or created session is automatically added to +request+
237
231
  # as a cookie, and also to its +output_hidden+ table, which is used
238
- # to add hidden input elements to forms.
232
+ # to add hidden input elements to forms.
239
233
  #
240
234
  # *WARNING* the +output_hidden+
241
235
  # fields are surrounded by a <fieldset> tag in HTML 4 generation, which
@@ -253,26 +247,26 @@ class CGI
253
247
  session_key = option['session_key'] || '_session_id'
254
248
  session_id = option['session_id']
255
249
  unless session_id
256
- if option['new_session']
257
- session_id = create_new_id
258
- @new_session = true
259
- end
250
+ if option['new_session']
251
+ session_id = create_new_id
252
+ @new_session = true
253
+ end
260
254
  end
261
255
  unless session_id
262
- if request.key?(session_key)
263
- session_id = request[session_key]
264
- session_id = session_id.read if session_id.respond_to?(:read)
265
- end
266
- unless session_id
267
- session_id, = request.cookies[session_key]
268
- end
269
- unless session_id
270
- unless option.fetch('new_session', true)
271
- raise ArgumentError, "session_key `%s' should be supplied"%session_key
272
- end
273
- session_id = create_new_id
274
- @new_session = true
275
- end
256
+ if request.key?(session_key)
257
+ session_id = request[session_key]
258
+ session_id = session_id.read if session_id.respond_to?(:read)
259
+ end
260
+ unless session_id
261
+ session_id, = request.cookies[session_key]
262
+ end
263
+ unless session_id
264
+ unless option.fetch('new_session', true)
265
+ raise ArgumentError, "session_key `%s' should be supplied"%session_key
266
+ end
267
+ session_id = create_new_id
268
+ @new_session = true
269
+ end
276
270
  end
277
271
  @session_id = session_id
278
272
  dbman = option['database_manager'] || FileStore
@@ -283,24 +277,25 @@ class CGI
283
277
  raise ArgumentError, "invalid session_id `%s'"%session_id
284
278
  end
285
279
  session_id = @session_id = create_new_id unless session_id
286
- @new_session = true
280
+ @new_session=true
287
281
  retry
288
282
  end
289
283
  request.instance_eval do
290
- @output_hidden = {session_key => session_id} unless option['no_hidden']
291
- @output_cookies = [
284
+ @output_hidden = {session_key => session_id} unless option['no_hidden']
285
+ @output_cookies = [
292
286
  Cookie::new("name" => session_key,
293
- "value" => session_id,
294
- "expires" => option['session_expires'],
295
- "domain" => option['session_domain'],
296
- "secure" => option['session_secure'],
297
- "path" => if option['session_path'] then
298
- option['session_path']
299
- elsif ENV["SCRIPT_NAME"] then
300
- File::dirname(ENV["SCRIPT_NAME"])
301
- else
302
- ""
303
- end)
287
+ "value" => session_id,
288
+ "expires" => option['session_expires'],
289
+ "domain" => option['session_domain'],
290
+ "secure" => option['session_secure'],
291
+ "path" =>
292
+ if option['session_path']
293
+ option['session_path']
294
+ elsif ENV["SCRIPT_NAME"]
295
+ File::dirname(ENV["SCRIPT_NAME"])
296
+ else
297
+ ""
298
+ end)
304
299
  ] unless option['no_cookies']
305
300
  end
306
301
  @dbprot = [@dbman]
@@ -313,7 +308,7 @@ class CGI
313
308
  @data[key]
314
309
  end
315
310
 
316
- # Set the session date for key +key+.
311
+ # Set the session data for key +key+.
317
312
  def []=(key, val)
318
313
  @write_lock ||= true
319
314
  @data ||= @dbman.restore
@@ -322,11 +317,11 @@ class CGI
322
317
 
323
318
  # Store session data on the server. For some session storage types,
324
319
  # this is a no-op.
325
- def update
320
+ def update
326
321
  @dbman.update
327
322
  end
328
323
 
329
- # Store session data on the server and close the session storage.
324
+ # Store session data on the server and close the session storage.
330
325
  # For some session storage types, this is a no-op.
331
326
  def close
332
327
  @dbman.close
@@ -358,7 +353,7 @@ class CGI
358
353
  # created. The session id must only contain alphanumeric
359
354
  # characters; automatically generated session ids observe
360
355
  # this requirement.
361
- #
356
+ #
362
357
  # +option+ is a hash of options for the initializer. The
363
358
  # following options are recognised:
364
359
  #
@@ -367,7 +362,7 @@ class CGI
367
362
  # on Unix systems).
368
363
  # prefix:: the prefix to add to the session id when generating
369
364
  # the filename for this session's FileStore file.
370
- # Defaults to the empty string.
365
+ # Defaults to "cgi_sid_".
371
366
  # suffix:: the prefix to add to the session id when generating
372
367
  # the filename for this session's FileStore file.
373
368
  # Defaults to the empty string.
@@ -375,56 +370,56 @@ class CGI
375
370
  # This session's FileStore file will be created if it does
376
371
  # not exist, or opened if it does.
377
372
  def initialize(session, option={})
378
- dir = option['tmpdir'] || Dir::tmpdir
379
- prefix = option['prefix'] || ''
380
- suffix = option['suffix'] || ''
381
- id = session.session_id
373
+ dir = option['tmpdir'] || Dir::tmpdir
374
+ prefix = option['prefix'] || 'cgi_sid_'
375
+ suffix = option['suffix'] || ''
376
+ id = session.session_id
382
377
  require 'digest/md5'
383
378
  md5 = Digest::MD5.hexdigest(id)[0,16]
384
- @path = dir+"/"+prefix+md5+suffix
385
- if File::exist? @path
386
- @hash = nil
387
- else
379
+ @path = dir+"/"+prefix+md5+suffix
380
+ if File::exist? @path
381
+ @hash = nil
382
+ else
388
383
  unless session.new_session
389
384
  raise CGI::Session::NoSession, "uninitialized session"
390
385
  end
391
- @hash = {}
392
- end
386
+ @hash = {}
387
+ end
393
388
  end
394
389
 
395
390
  # Restore session state from the session's FileStore file.
396
391
  #
397
392
  # Returns the session state as a hash.
398
393
  def restore
399
- unless @hash
400
- @hash = {}
394
+ unless @hash
395
+ @hash = {}
401
396
  begin
402
397
  lockf = File.open(@path+".lock", "r")
403
398
  lockf.flock File::LOCK_SH
404
- f = File.open(@path, 'r')
405
- for line in f
406
- line.chomp!
407
- k, v = line.split('=',2)
408
- @hash[CGI::unescape(k)] = CGI::unescape(v)
409
- end
399
+ f = File.open(@path, 'r')
400
+ for line in f
401
+ line.chomp!
402
+ k, v = line.split('=',2)
403
+ @hash[CGI::unescape(k)] = Marshal.restore(CGI::unescape(v))
404
+ end
410
405
  ensure
411
- f.close unless f.nil?
406
+ f.close unless f.nil?
412
407
  lockf.close if lockf
413
408
  end
414
- end
415
- @hash
409
+ end
410
+ @hash
416
411
  end
417
412
 
418
413
  # Save session state to the session's FileStore file.
419
414
  def update
420
- return unless @hash
415
+ return unless @hash
421
416
  begin
422
417
  lockf = File.open(@path+".lock", File::CREAT|File::RDWR, 0600)
423
- lockf.flock File::LOCK_EX
418
+ lockf.flock File::LOCK_EX
424
419
  f = File.open(@path+".new", File::CREAT|File::TRUNC|File::WRONLY, 0600)
425
- for k,v in @hash
426
- f.printf "%s=%s\n", CGI::escape(k), CGI::escape(String(v))
427
- end
420
+ for k,v in @hash
421
+ f.printf "%s=%s\n", CGI::escape(k), CGI::escape(String(Marshal.dump(v)))
422
+ end
428
423
  f.close
429
424
  File.rename @path+".new", @path
430
425
  ensure
@@ -435,22 +430,21 @@ class CGI
435
430
 
436
431
  # Update and close the session's FileStore file.
437
432
  def close
438
- update
433
+ update
439
434
  end
440
435
 
441
436
  # Close and delete the session's FileStore file.
442
437
  def delete
443
438
  File::unlink @path+".lock" rescue nil
444
439
  File::unlink @path+".new" rescue nil
445
- File::unlink @path
446
- rescue Errno::ENOENT
440
+ File::unlink @path rescue Errno::ENOENT
447
441
  end
448
442
  end
449
443
 
450
444
  # In-memory session storage class.
451
445
  #
452
446
  # Implements session storage as a global in-memory hash. Session
453
- # data will only persist for as long as the ruby interpreter
447
+ # data will only persist for as long as the ruby interpreter
454
448
  # instance does.
455
449
  class MemoryStore
456
450
  GLOBAL_HASH_TABLE = {} #:nodoc:
@@ -461,7 +455,7 @@ class CGI
461
455
  # +option+ is a list of initialisation options. None are
462
456
  # currently recognised.
463
457
  def initialize(session, option=nil)
464
- @session_id = session.session_id
458
+ @session_id = session.session_id
465
459
  unless GLOBAL_HASH_TABLE.key?(@session_id)
466
460
  unless session.new_session
467
461
  raise CGI::Session::NoSession, "uninitialized session"
@@ -474,26 +468,63 @@ class CGI
474
468
  #
475
469
  # Returns session data as a hash.
476
470
  def restore
477
- GLOBAL_HASH_TABLE[@session_id]
471
+ GLOBAL_HASH_TABLE[@session_id]
472
+ end
473
+
474
+ # Update session state.
475
+ #
476
+ # A no-op.
477
+ def update
478
+ # don't need to update; hash is shared
479
+ end
480
+
481
+ # Close session storage.
482
+ #
483
+ # A no-op.
484
+ def close
485
+ # don't need to close
486
+ end
487
+
488
+ # Delete the session state.
489
+ def delete
490
+ GLOBAL_HASH_TABLE.delete(@session_id)
491
+ end
492
+ end
493
+
494
+ # Dummy session storage class.
495
+ #
496
+ # Implements session storage place holder. No actual storage
497
+ # will be done.
498
+ class NullStore
499
+ # Create a new NullStore instance.
500
+ #
501
+ # +session+ is the session this instance is associated with.
502
+ # +option+ is a list of initialisation options. None are
503
+ # currently recognised.
504
+ def initialize(session, option=nil)
505
+ end
506
+
507
+ # Restore (empty) session state.
508
+ def restore
509
+ {}
478
510
  end
479
511
 
480
512
  # Update session state.
481
513
  #
482
514
  # A no-op.
483
515
  def update
484
- # don't need to update; hash is shared
485
516
  end
486
517
 
487
518
  # Close session storage.
488
519
  #
489
520
  # A no-op.
490
521
  def close
491
- # don't need to close
492
522
  end
493
523
 
494
524
  # Delete the session state.
525
+ #
526
+ # A no-op.
495
527
  def delete
496
- GLOBAL_HASH_TABLE.delete(@session_id)
497
528
  end
498
529
  end
499
530
  end
@@ -1,7 +1,7 @@
1
1
  module RubySL
2
2
  module CGI
3
3
  module Session
4
- VERSION = "1.0.0"
4
+ VERSION = "2.0.0"
5
5
  end
6
6
  end
7
7
  end
@@ -19,5 +19,4 @@ Gem::Specification.new do |spec|
19
19
  spec.add_development_dependency "bundler", "~> 1.3"
20
20
  spec.add_development_dependency "rake", "~> 10.0"
21
21
  spec.add_development_dependency "mspec", "~> 1.5"
22
- spec.add_development_dependency "rubysl-prettyprint", "~> 1.0"
23
22
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubysl-cgi-session
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Shirai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-25 00:00:00.000000000 Z
11
+ date: 2013-09-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,20 +52,6 @@ dependencies:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.5'
55
- - !ruby/object:Gem::Dependency
56
- name: rubysl-prettyprint
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: '1.0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ~>
67
- - !ruby/object:Gem::Version
68
- version: '1.0'
69
55
  description: Ruby standard library cgi-session.
70
56
  email:
71
57
  - brixen@gmail.com