scout_realtime 0.5.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.
- data/.gitignore +21 -0
- data/CHANGELOG.md +7 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +37 -0
- data/Rakefile +16 -0
- data/Vagrantfile +7 -0
- data/bin/scout_realtime +117 -0
- data/lib/scout_realtime/lib/aggregator.rb +8 -0
- data/lib/scout_realtime/lib/metric.rb +36 -0
- data/lib/scout_realtime/lib/multi_aggregator.rb +12 -0
- data/lib/scout_realtime/lib/ring_buffer.rb +25 -0
- data/lib/scout_realtime/lib/trollop.rb +782 -0
- data/lib/scout_realtime/main.rb +76 -0
- data/lib/scout_realtime/models/cpu.rb +21 -0
- data/lib/scout_realtime/models/disk.rb +21 -0
- data/lib/scout_realtime/models/memory.rb +17 -0
- data/lib/scout_realtime/models/network.rb +14 -0
- data/lib/scout_realtime/models/processes.rb +13 -0
- data/lib/scout_realtime/runner.rb +34 -0
- data/lib/scout_realtime/version.rb +5 -0
- data/lib/scout_realtime/web/favicon.ico +0 -0
- data/lib/scout_realtime/web/images/logo.png +0 -0
- data/lib/scout_realtime/web/images/pause.png +0 -0
- data/lib/scout_realtime/web/images/play.png +0 -0
- data/lib/scout_realtime/web/javascripts/application.js +265 -0
- data/lib/scout_realtime/web/javascripts/bootstrap.min.js +7 -0
- data/lib/scout_realtime/web/javascripts/charts.js +189 -0
- data/lib/scout_realtime/web/javascripts/d3.barchart.js +210 -0
- data/lib/scout_realtime/web/javascripts/d3.linechart.js +168 -0
- data/lib/scout_realtime/web/javascripts/d3.v3.min.js +5 -0
- data/lib/scout_realtime/web/javascripts/handlebars-v1.1.0.js +2563 -0
- data/lib/scout_realtime/web/javascripts/jquery.js +3010 -0
- data/lib/scout_realtime/web/javascripts/metrics_for_development.js +6 -0
- data/lib/scout_realtime/web/stylesheets/bootstrap-theme.min.css +7 -0
- data/lib/scout_realtime/web/stylesheets/bootstrap.min.css +7 -0
- data/lib/scout_realtime/web/stylesheets/styles.css +254 -0
- data/lib/scout_realtime/web/views/graph.erb +6 -0
- data/lib/scout_realtime/web/views/header.erb +8 -0
- data/lib/scout_realtime/web/views/index.erb +21 -0
- data/lib/scout_realtime/web/views/layout.erb +33 -0
- data/lib/scout_realtime/web/views/overview_charts.erb +30 -0
- data/lib/scout_realtime/web/views/processes.erb +31 -0
- data/lib/scout_realtime/web/views/sidebar.erb +19 -0
- data/lib/scout_realtime/web_app.rb +59 -0
- data/lib/scout_realtime.rb +58 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/argf/bytes.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/argf/chars.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/argf/each.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/argf/each_byte.rb +9 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/argf/each_char.rb +35 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/argf/each_line.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/argf/getbyte.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/argf/lines.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/argf/readbyte.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/argf.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/collect.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/combination.rb +24 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/cycle.rb +16 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/delete_if.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/each.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/each_index.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/find_index.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/flatten.rb +47 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/index.rb +15 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/map.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/permutation.rb +30 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/pop.rb +15 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/product.rb +32 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/reject.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/reverse_each.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/rindex.rb +15 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/select.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/shift.rb +13 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array/shuffle.rb +17 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/array.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/binding/eval.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/binding.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/dir/each.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/dir/foreach.rb +9 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/dir.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/count.rb +17 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/cycle.rb +24 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/detect.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/drop.rb +13 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/drop_while.rb +16 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/each_cons.rb +4 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/each_slice.rb +4 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/each_with_index.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/entries.rb +11 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/find.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/find_all.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/find_index.rb +21 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/first.rb +21 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/group_by.rb +14 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/inject.rb +14 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/max_by.rb +16 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/min_by.rb +16 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/minmax.rb +21 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/minmax_by.rb +19 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/none.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/one.rb +23 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/partition.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/reduce.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/reject.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/reverse_each.rb +12 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/select.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/sort_by.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/take.rb +9 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/take_while.rb +14 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable/to_a.rb +12 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerable.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerator/each.rb +6 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerator/next.rb +15 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerator/rewind.rb +13 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerator/with_index.rb +14 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/enumerator.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/env/delete_if.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/env/each.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/env/each_key.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/env/each_pair.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/env/each_value.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/env/reject.rb +4 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/env/select.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/env.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/fixnum/div.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/fixnum/fdiv.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/fixnum.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/float/fdiv.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/float.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/gc/stress.rb +9 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/gc.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash/constructor.rb +25 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash/delete_if.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash/each.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash/each_key.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash/each_pair.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash/each_value.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash/eql.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash/hash.rb +17 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash/reject.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash/select.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/hash.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/integer/downto.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/integer/even.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/integer/odd.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/integer/ord.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/integer/pred.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/integer/times.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/integer/upto.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/integer.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io/bytes.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io/chars.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io/each.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io/each_byte.rb +6 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io/each_char.rb +34 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io/each_line.rb +6 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io/foreach.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io/getbyte.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io/lines.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io/readbyte.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/io.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/kernel/__method__.rb +8 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/kernel/instance_exec.rb +10 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/kernel/tap.rb +8 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/kernel.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/method/name.rb +49 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/method.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/module/class_exec.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/module/module_exec.rb +11 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/module.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/numeric/step.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/numeric.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/object_space/each_object.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/object_space.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/process/exec.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/process.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/range/each.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/range/step.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/range.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/regexp/union.rb +11 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/regexp.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/stdlib/tmpdir.rb +44 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/stdlib.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/stop_iteration.rb +14 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/bytes.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/bytesize.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/each.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/each_byte.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/each_char.rb +13 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/each_line.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/end_with.rb +12 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/lines.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/partition.rb +20 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/rpartition.rb +19 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/start_with.rb +12 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string/upto.rb +15 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/string.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/struct/each.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/struct/each_pair.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/struct.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/symbol/to_proc.rb +8 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7/symbol.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.7.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.8.rb +2 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.8.rb +2 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/array/sample.rb +19 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/array/try_convert.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/array.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/dir/to_path.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/dir.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/enumerable/each_with_index.rb +14 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/enumerable/each_with_object.rb +9 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/enumerable.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/enumerator/new.rb +40 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/enumerator/with_object.rb +6 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/enumerator.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/env/key.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/env.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/atime.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/basename.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/binary.rb +6 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/blockdev.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/chardev.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/chmod.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/chown.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/ctime.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/delete.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/directory.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/dirname.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/executable.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/executable_real.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/exist.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/exists.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/expand_path.rb +14 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/extname.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/file.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/ftype.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/grpowned.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/join.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/lchmod.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/lchown.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/link.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/lstat.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/mtime.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/new.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/open.rb +23 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/owned.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/pipe.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/readable.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/readable_real.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/readlink.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/rename.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/setgid.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/setuid.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/size.rb +14 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/socket.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/split.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/stat.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/sticky.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/symlink.rb +6 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/to_path.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/truncate.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/unlink.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/writable.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/writable_real.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file/zero.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/file.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/float/round.rb +21 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/float.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/hash/assoc.rb +12 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/hash/default_proc.rb +14 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/hash/key.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/hash/rassoc.rb +9 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/hash/try_convert.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/hash.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/integer/magnitude.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/integer/round.rb +24 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/integer.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/io/binread.rb +10 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/io/open.rb +21 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/io/try_convert.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/io/ungetbyte.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/io.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/kernel/__callee__.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/kernel/define_singleton_method.rb +9 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/kernel/public_method.rb +11 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/kernel/public_send.rb +13 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/kernel/require_relative.rb +14 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/kernel.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/math/log.rb +20 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/math/log2.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/math.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/numeric/round.rb +11 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/numeric.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/proc/case_compare.rb +6 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/proc/curry.rb +24 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/proc/lambda.rb +40 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/proc/yield.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/proc.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/range/cover.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/range.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/regexp/try_convert.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/regexp.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/stdlib/prime.rb +497 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/stdlib.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/string/ascii_only.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/string/chr.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/string/clear.rb +8 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/string/codepoints.rb +8 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/string/each_codepoint.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/string/getbyte.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/string/ord.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/string/setbyte.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/string/try_convert.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/string.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/capitalize.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/casecmp.rb +8 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/comparable.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/comparison.rb +8 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/downcase.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/element_reference.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/empty.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/length.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/match.rb +9 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/next.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/size.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/succ.rb +8 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/swapcase.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol/upcase.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1/symbol.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.1.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/array/keep_if.rb +8 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/array/product.rb +26 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/array/repeated_combination.rb +25 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/array/repeated_permutation.rb +26 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/array/rotate.rb +17 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/array/select.rb +8 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/array/sort_by.rb +9 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/array/uniq.rb +30 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/array.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/complex/to_r.rb +10 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/complex.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/dir/home.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/dir.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/enumerable/chunk.rb +39 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/enumerable/collect_concat.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/enumerable/each_entry.rb +11 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/enumerable/flat_map.rb +11 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/enumerable/slice_before.rb +30 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/enumerable.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/float/infinity.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/float/nan.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/float.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/hash/keep_if.rb +8 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/hash/select.rb +9 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/hash.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/kernel/singleton_class.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/kernel.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/random.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/stdlib/matrix/eigenvalue_decomposition.rb +886 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/stdlib/matrix/lup_decomposition.rb +218 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/stdlib/matrix.rb +1871 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/stdlib/set.rb +13 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2/stdlib.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.2.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.3/file/null.rb +16 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.3/file.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.3/io/advise.rb +24 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.3/io/binwrite.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.3/io/write.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.3/io.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.3/string/byteslice.rb +36 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.3/string/prepend.rb +10 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.3/string.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.3.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/1.9.rb +2 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/array/bsearch.rb +32 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/array.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/enumerable/lazy.rb +216 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/enumerable.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/enumerator/lazy.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/enumerator.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/env/to_h.rb +5 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/env.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/hash/default_proc.rb +16 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/hash/to_h.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/hash.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/nil/to_h.rb +7 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/nil.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/range/bsearch.rb +49 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/range.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/stdlib/abbrev.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/stdlib/fake_stdlib_lib.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/stdlib/ostruct.rb +27 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/stdlib.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/struct/to_h.rb +9 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0/struct.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.0.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/2.0.rb +2 -0
- data/lib/vendor/backports-3.3.5/lib/backports/basic_object.rb +53 -0
- data/lib/vendor/backports-3.3.5/lib/backports/extra/random/MT19937.rb +76 -0
- data/lib/vendor/backports-3.3.5/lib/backports/extra/random/bits_and_bytes.rb +91 -0
- data/lib/vendor/backports-3.3.5/lib/backports/extra/random/implementation.rb +93 -0
- data/lib/vendor/backports-3.3.5/lib/backports/extra/random/load.rb +17 -0
- data/lib/vendor/backports-3.3.5/lib/backports/force/array_map.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/force/enumerable_map.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports/force/hash_select.rb +9 -0
- data/lib/vendor/backports-3.3.5/lib/backports/force/string_length.rb +10 -0
- data/lib/vendor/backports-3.3.5/lib/backports/force/string_size.rb +1 -0
- data/lib/vendor/backports-3.3.5/lib/backports/rails/array.rb +6 -0
- data/lib/vendor/backports-3.3.5/lib/backports/rails/enumerable.rb +12 -0
- data/lib/vendor/backports-3.3.5/lib/backports/rails/hash.rb +31 -0
- data/lib/vendor/backports-3.3.5/lib/backports/rails/kernel.rb +6 -0
- data/lib/vendor/backports-3.3.5/lib/backports/rails/module.rb +6 -0
- data/lib/vendor/backports-3.3.5/lib/backports/rails/string.rb +42 -0
- data/lib/vendor/backports-3.3.5/lib/backports/rails.rb +4 -0
- data/lib/vendor/backports-3.3.5/lib/backports/tools.rb +343 -0
- data/lib/vendor/backports-3.3.5/lib/backports/version.rb +3 -0
- data/lib/vendor/backports-3.3.5/lib/backports.rb +4 -0
- data/lib/vendor/dante-0.2.0/lib/dante/runner.rb +275 -0
- data/lib/vendor/dante-0.2.0/lib/dante/version.rb +3 -0
- data/lib/vendor/dante-0.2.0/lib/dante.rb +26 -0
- data/lib/vendor/rack-1.5.2/lib/rack/auth/abstract/handler.rb +37 -0
- data/lib/vendor/rack-1.5.2/lib/rack/auth/abstract/request.rb +43 -0
- data/lib/vendor/rack-1.5.2/lib/rack/auth/basic.rb +58 -0
- data/lib/vendor/rack-1.5.2/lib/rack/auth/digest/md5.rb +129 -0
- data/lib/vendor/rack-1.5.2/lib/rack/auth/digest/nonce.rb +51 -0
- data/lib/vendor/rack-1.5.2/lib/rack/auth/digest/params.rb +53 -0
- data/lib/vendor/rack-1.5.2/lib/rack/auth/digest/request.rb +41 -0
- data/lib/vendor/rack-1.5.2/lib/rack/backports/uri/common_18.rb +56 -0
- data/lib/vendor/rack-1.5.2/lib/rack/backports/uri/common_192.rb +52 -0
- data/lib/vendor/rack-1.5.2/lib/rack/backports/uri/common_193.rb +29 -0
- data/lib/vendor/rack-1.5.2/lib/rack/body_proxy.rb +39 -0
- data/lib/vendor/rack-1.5.2/lib/rack/builder.rb +149 -0
- data/lib/vendor/rack-1.5.2/lib/rack/cascade.rb +52 -0
- data/lib/vendor/rack-1.5.2/lib/rack/chunked.rb +58 -0
- data/lib/vendor/rack-1.5.2/lib/rack/commonlogger.rb +64 -0
- data/lib/vendor/rack-1.5.2/lib/rack/conditionalget.rb +67 -0
- data/lib/vendor/rack-1.5.2/lib/rack/config.rb +20 -0
- data/lib/vendor/rack-1.5.2/lib/rack/content_length.rb +33 -0
- data/lib/vendor/rack-1.5.2/lib/rack/content_type.rb +29 -0
- data/lib/vendor/rack-1.5.2/lib/rack/deflater.rb +116 -0
- data/lib/vendor/rack-1.5.2/lib/rack/directory.rb +161 -0
- data/lib/vendor/rack-1.5.2/lib/rack/etag.rb +64 -0
- data/lib/vendor/rack-1.5.2/lib/rack/file.rb +138 -0
- data/lib/vendor/rack-1.5.2/lib/rack/handler/cgi.rb +61 -0
- data/lib/vendor/rack-1.5.2/lib/rack/handler/evented_mongrel.rb +8 -0
- data/lib/vendor/rack-1.5.2/lib/rack/handler/fastcgi.rb +98 -0
- data/lib/vendor/rack-1.5.2/lib/rack/handler/lsws.rb +61 -0
- data/lib/vendor/rack-1.5.2/lib/rack/handler/mongrel.rb +100 -0
- data/lib/vendor/rack-1.5.2/lib/rack/handler/scgi.rb +67 -0
- data/lib/vendor/rack-1.5.2/lib/rack/handler/swiftiplied_mongrel.rb +8 -0
- data/lib/vendor/rack-1.5.2/lib/rack/handler/thin.rb +27 -0
- data/lib/vendor/rack-1.5.2/lib/rack/handler/webrick.rb +81 -0
- data/lib/vendor/rack-1.5.2/lib/rack/handler.rb +107 -0
- data/lib/vendor/rack-1.5.2/lib/rack/head.rb +22 -0
- data/lib/vendor/rack-1.5.2/lib/rack/lint.rb +699 -0
- data/lib/vendor/rack-1.5.2/lib/rack/lobster.rb +65 -0
- data/lib/vendor/rack-1.5.2/lib/rack/lock.rb +26 -0
- data/lib/vendor/rack-1.5.2/lib/rack/logger.rb +18 -0
- data/lib/vendor/rack-1.5.2/lib/rack/methodoverride.rb +31 -0
- data/lib/vendor/rack-1.5.2/lib/rack/mime.rb +677 -0
- data/lib/vendor/rack-1.5.2/lib/rack/mock.rb +190 -0
- data/lib/vendor/rack-1.5.2/lib/rack/multipart/generator.rb +93 -0
- data/lib/vendor/rack-1.5.2/lib/rack/multipart/parser.rb +176 -0
- data/lib/vendor/rack-1.5.2/lib/rack/multipart/uploaded_file.rb +34 -0
- data/lib/vendor/rack-1.5.2/lib/rack/multipart.rb +34 -0
- data/lib/vendor/rack-1.5.2/lib/rack/nulllogger.rb +18 -0
- data/lib/vendor/rack-1.5.2/lib/rack/recursive.rb +61 -0
- data/lib/vendor/rack-1.5.2/lib/rack/reloader.rb +109 -0
- data/lib/vendor/rack-1.5.2/lib/rack/request.rb +380 -0
- data/lib/vendor/rack-1.5.2/lib/rack/response.rb +155 -0
- data/lib/vendor/rack-1.5.2/lib/rack/rewindable_input.rb +104 -0
- data/lib/vendor/rack-1.5.2/lib/rack/runtime.rb +27 -0
- data/lib/vendor/rack-1.5.2/lib/rack/sendfile.rb +155 -0
- data/lib/vendor/rack-1.5.2/lib/rack/server.rb +362 -0
- data/lib/vendor/rack-1.5.2/lib/rack/session/abstract/id.rb +398 -0
- data/lib/vendor/rack-1.5.2/lib/rack/session/cookie.rb +178 -0
- data/lib/vendor/rack-1.5.2/lib/rack/session/memcache.rb +93 -0
- data/lib/vendor/rack-1.5.2/lib/rack/session/pool.rb +79 -0
- data/lib/vendor/rack-1.5.2/lib/rack/showexceptions.rb +378 -0
- data/lib/vendor/rack-1.5.2/lib/rack/showstatus.rb +113 -0
- data/lib/vendor/rack-1.5.2/lib/rack/static.rb +153 -0
- data/lib/vendor/rack-1.5.2/lib/rack/urlmap.rb +76 -0
- data/lib/vendor/rack-1.5.2/lib/rack/utils/okjson.rb +599 -0
- data/lib/vendor/rack-1.5.2/lib/rack/utils.rb +628 -0
- data/lib/vendor/rack-1.5.2/lib/rack.rb +87 -0
- data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/authenticity_token.rb +31 -0
- data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/base.rb +119 -0
- data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/escaped_params.rb +87 -0
- data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/form_token.rb +23 -0
- data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/frame_options.rb +37 -0
- data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/http_origin.rb +32 -0
- data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/ip_spoofing.rb +23 -0
- data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/json_csrf.rb +35 -0
- data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/path_traversal.rb +47 -0
- data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/remote_referrer.rb +20 -0
- data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/remote_token.rb +22 -0
- data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/session_hijacking.rb +36 -0
- data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/version.rb +16 -0
- data/lib/vendor/rack-protection-1.5.1/lib/rack/protection/xss_header.rb +25 -0
- data/lib/vendor/rack-protection-1.5.1/lib/rack/protection.rb +40 -0
- data/lib/vendor/rack-protection-1.5.1/lib/rack-protection.rb +1 -0
- data/lib/vendor/sinatra-1.4.4/.yardopts +5 -0
- data/lib/vendor/sinatra-1.4.4/lib/sinatra/base.rb +2034 -0
- data/lib/vendor/sinatra-1.4.4/lib/sinatra/images/404.png +0 -0
- data/lib/vendor/sinatra-1.4.4/lib/sinatra/images/500.png +0 -0
- data/lib/vendor/sinatra-1.4.4/lib/sinatra/main.rb +34 -0
- data/lib/vendor/sinatra-1.4.4/lib/sinatra/show_exceptions.rb +345 -0
- data/lib/vendor/sinatra-1.4.4/lib/sinatra/version.rb +3 -0
- data/lib/vendor/sinatra-1.4.4/lib/sinatra.rb +4 -0
- data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/capture.rb +124 -0
- data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/config_file.rb +167 -0
- data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/content_for.rb +125 -0
- data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/contrib/all.rb +2 -0
- data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/contrib/setup.rb +53 -0
- data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/contrib/version.rb +17 -0
- data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/contrib.rb +39 -0
- data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/cookies.rb +331 -0
- data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/decompile.rb +121 -0
- data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/engine_tracking.rb +96 -0
- data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/extension.rb +95 -0
- data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/json.rb +131 -0
- data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/link_header.rb +132 -0
- data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/multi_route.rb +87 -0
- data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/namespace.rb +284 -0
- data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/reloader.rb +394 -0
- data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/respond_with.rb +247 -0
- data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/streaming.rb +243 -0
- data/lib/vendor/sinatra-contrib-1.4.1/lib/sinatra/test_helpers.rb +87 -0
- data/lib/vendor/tilt-1.4.1/lib/tilt/asciidoc.rb +34 -0
- data/lib/vendor/tilt-1.4.1/lib/tilt/builder.rb +40 -0
- data/lib/vendor/tilt-1.4.1/lib/tilt/coffee.rb +54 -0
- data/lib/vendor/tilt-1.4.1/lib/tilt/css.rb +80 -0
- data/lib/vendor/tilt-1.4.1/lib/tilt/csv.rb +71 -0
- data/lib/vendor/tilt-1.4.1/lib/tilt/erb.rb +110 -0
- data/lib/vendor/tilt-1.4.1/lib/tilt/etanni.rb +27 -0
- data/lib/vendor/tilt-1.4.1/lib/tilt/haml.rb +64 -0
- data/lib/vendor/tilt-1.4.1/lib/tilt/liquid.rb +45 -0
- data/lib/vendor/tilt-1.4.1/lib/tilt/markaby.rb +52 -0
- data/lib/vendor/tilt-1.4.1/lib/tilt/markdown.rb +214 -0
- data/lib/vendor/tilt-1.4.1/lib/tilt/nokogiri.rb +43 -0
- data/lib/vendor/tilt-1.4.1/lib/tilt/plain.rb +20 -0
- data/lib/vendor/tilt-1.4.1/lib/tilt/radius.rb +55 -0
- data/lib/vendor/tilt-1.4.1/lib/tilt/rdoc.rb +47 -0
- data/lib/vendor/tilt-1.4.1/lib/tilt/string.rb +21 -0
- data/lib/vendor/tilt-1.4.1/lib/tilt/template.rb +292 -0
- data/lib/vendor/tilt-1.4.1/lib/tilt/textile.rb +30 -0
- data/lib/vendor/tilt-1.4.1/lib/tilt/wiki.rb +58 -0
- data/lib/vendor/tilt-1.4.1/lib/tilt/yajl.rb +94 -0
- data/lib/vendor/tilt-1.4.1/lib/tilt.rb +204 -0
- data/scout_realtime.gemspec +30 -0
- data/test/data_for_testing.rb +1 -0
- data/test/lib/metric_test.rb +48 -0
- data/test/models/cpu_test.rb +24 -0
- data/test/models/disk_test.rb +24 -0
- data/test/models/memory_test.rb +24 -0
- data/test/models/network_test.rb +24 -0
- data/test/models/processes_test.rb +24 -0
- data/test/runner_test.rb +30 -0
- data/test/test_helper.rb +4 -0
- metadata +730 -0
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
# AUTHOR: blink <blinketje@gmail.com>; blink#ruby-lang@irc.freenode.net
|
|
2
|
+
# bugrep: Andreas Zehnder
|
|
3
|
+
|
|
4
|
+
require 'time'
|
|
5
|
+
require 'rack/request'
|
|
6
|
+
require 'rack/response'
|
|
7
|
+
begin
|
|
8
|
+
require 'securerandom'
|
|
9
|
+
rescue LoadError
|
|
10
|
+
# We just won't get securerandom
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
module Rack
|
|
14
|
+
|
|
15
|
+
module Session
|
|
16
|
+
|
|
17
|
+
module Abstract
|
|
18
|
+
ENV_SESSION_KEY = 'rack.session'.freeze
|
|
19
|
+
ENV_SESSION_OPTIONS_KEY = 'rack.session.options'.freeze
|
|
20
|
+
|
|
21
|
+
# SessionHash is responsible to lazily load the session from store.
|
|
22
|
+
|
|
23
|
+
class SessionHash
|
|
24
|
+
include Enumerable
|
|
25
|
+
attr_writer :id
|
|
26
|
+
|
|
27
|
+
def self.find(env)
|
|
28
|
+
env[ENV_SESSION_KEY]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def self.set(env, session)
|
|
32
|
+
env[ENV_SESSION_KEY] = session
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.set_options(env, options)
|
|
36
|
+
env[ENV_SESSION_OPTIONS_KEY] = options.dup
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def initialize(store, env)
|
|
40
|
+
@store = store
|
|
41
|
+
@env = env
|
|
42
|
+
@loaded = false
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def id
|
|
46
|
+
return @id if @loaded or instance_variable_defined?(:@id)
|
|
47
|
+
@id = @store.send(:extract_session_id, @env)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def options
|
|
51
|
+
@env[ENV_SESSION_OPTIONS_KEY]
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def each(&block)
|
|
55
|
+
load_for_read!
|
|
56
|
+
@data.each(&block)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def [](key)
|
|
60
|
+
load_for_read!
|
|
61
|
+
@data[key.to_s]
|
|
62
|
+
end
|
|
63
|
+
alias :fetch :[]
|
|
64
|
+
|
|
65
|
+
def has_key?(key)
|
|
66
|
+
load_for_read!
|
|
67
|
+
@data.has_key?(key.to_s)
|
|
68
|
+
end
|
|
69
|
+
alias :key? :has_key?
|
|
70
|
+
alias :include? :has_key?
|
|
71
|
+
|
|
72
|
+
def []=(key, value)
|
|
73
|
+
load_for_write!
|
|
74
|
+
@data[key.to_s] = value
|
|
75
|
+
end
|
|
76
|
+
alias :store :[]=
|
|
77
|
+
|
|
78
|
+
def clear
|
|
79
|
+
load_for_write!
|
|
80
|
+
@data.clear
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def destroy
|
|
84
|
+
clear
|
|
85
|
+
@id = @store.send(:destroy_session, @env, id, options)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def to_hash
|
|
89
|
+
load_for_read!
|
|
90
|
+
@data.dup
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def update(hash)
|
|
94
|
+
load_for_write!
|
|
95
|
+
@data.update(stringify_keys(hash))
|
|
96
|
+
end
|
|
97
|
+
alias :merge! :update
|
|
98
|
+
|
|
99
|
+
def replace(hash)
|
|
100
|
+
load_for_write!
|
|
101
|
+
@data.replace(stringify_keys(hash))
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def delete(key)
|
|
105
|
+
load_for_write!
|
|
106
|
+
@data.delete(key.to_s)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def inspect
|
|
110
|
+
if loaded?
|
|
111
|
+
@data.inspect
|
|
112
|
+
else
|
|
113
|
+
"#<#{self.class}:0x#{self.object_id.to_s(16)} not yet loaded>"
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def exists?
|
|
118
|
+
return @exists if instance_variable_defined?(:@exists)
|
|
119
|
+
@data = {}
|
|
120
|
+
@exists = @store.send(:session_exists?, @env)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def loaded?
|
|
124
|
+
@loaded
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def empty?
|
|
128
|
+
load_for_read!
|
|
129
|
+
@data.empty?
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def keys
|
|
133
|
+
@data.keys
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def values
|
|
137
|
+
@data.values
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
private
|
|
141
|
+
|
|
142
|
+
def load_for_read!
|
|
143
|
+
load! if !loaded? && exists?
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def load_for_write!
|
|
147
|
+
load! unless loaded?
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def load!
|
|
151
|
+
@id, session = @store.send(:load_session, @env)
|
|
152
|
+
@data = stringify_keys(session)
|
|
153
|
+
@loaded = true
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def stringify_keys(other)
|
|
157
|
+
hash = {}
|
|
158
|
+
other.each do |key, value|
|
|
159
|
+
hash[key.to_s] = value
|
|
160
|
+
end
|
|
161
|
+
hash
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
# ID sets up a basic framework for implementing an id based sessioning
|
|
166
|
+
# service. Cookies sent to the client for maintaining sessions will only
|
|
167
|
+
# contain an id reference. Only #get_session and #set_session are
|
|
168
|
+
# required to be overwritten.
|
|
169
|
+
#
|
|
170
|
+
# All parameters are optional.
|
|
171
|
+
# * :key determines the name of the cookie, by default it is
|
|
172
|
+
# 'rack.session'
|
|
173
|
+
# * :path, :domain, :expire_after, :secure, and :httponly set the related
|
|
174
|
+
# cookie options as by Rack::Response#add_cookie
|
|
175
|
+
# * :skip will not a set a cookie in the response nor update the session state
|
|
176
|
+
# * :defer will not set a cookie in the response but still update the session
|
|
177
|
+
# state if it is used with a backend
|
|
178
|
+
# * :renew (implementation dependent) will prompt the generation of a new
|
|
179
|
+
# session id, and migration of data to be referenced at the new id. If
|
|
180
|
+
# :defer is set, it will be overridden and the cookie will be set.
|
|
181
|
+
# * :sidbits sets the number of bits in length that a generated session
|
|
182
|
+
# id will be.
|
|
183
|
+
#
|
|
184
|
+
# These options can be set on a per request basis, at the location of
|
|
185
|
+
# env['rack.session.options']. Additionally the id of the session can be
|
|
186
|
+
# found within the options hash at the key :id. It is highly not
|
|
187
|
+
# recommended to change its value.
|
|
188
|
+
#
|
|
189
|
+
# Is Rack::Utils::Context compatible.
|
|
190
|
+
#
|
|
191
|
+
# Not included by default; you must require 'rack/session/abstract/id'
|
|
192
|
+
# to use.
|
|
193
|
+
|
|
194
|
+
class ID
|
|
195
|
+
DEFAULT_OPTIONS = {
|
|
196
|
+
:key => 'rack.session',
|
|
197
|
+
:path => '/',
|
|
198
|
+
:domain => nil,
|
|
199
|
+
:expire_after => nil,
|
|
200
|
+
:secure => false,
|
|
201
|
+
:httponly => true,
|
|
202
|
+
:defer => false,
|
|
203
|
+
:renew => false,
|
|
204
|
+
:sidbits => 128,
|
|
205
|
+
:cookie_only => true,
|
|
206
|
+
:secure_random => (::SecureRandom rescue false)
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
attr_reader :key, :default_options
|
|
210
|
+
|
|
211
|
+
def initialize(app, options={})
|
|
212
|
+
@app = app
|
|
213
|
+
@default_options = self.class::DEFAULT_OPTIONS.merge(options)
|
|
214
|
+
@key = @default_options.delete(:key)
|
|
215
|
+
@cookie_only = @default_options.delete(:cookie_only)
|
|
216
|
+
initialize_sid
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
def call(env)
|
|
220
|
+
context(env)
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
def context(env, app=@app)
|
|
224
|
+
prepare_session(env)
|
|
225
|
+
status, headers, body = app.call(env)
|
|
226
|
+
commit_session(env, status, headers, body)
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
private
|
|
230
|
+
|
|
231
|
+
def initialize_sid
|
|
232
|
+
@sidbits = @default_options[:sidbits]
|
|
233
|
+
@sid_secure = @default_options[:secure_random]
|
|
234
|
+
@sid_length = @sidbits / 4
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
# Generate a new session id using Ruby #rand. The size of the
|
|
238
|
+
# session id is controlled by the :sidbits option.
|
|
239
|
+
# Monkey patch this to use custom methods for session id generation.
|
|
240
|
+
|
|
241
|
+
def generate_sid(secure = @sid_secure)
|
|
242
|
+
if secure
|
|
243
|
+
secure.hex(@sid_length)
|
|
244
|
+
else
|
|
245
|
+
"%0#{@sid_length}x" % Kernel.rand(2**@sidbits - 1)
|
|
246
|
+
end
|
|
247
|
+
rescue NotImplementedError
|
|
248
|
+
generate_sid(false)
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
# Sets the lazy session at 'rack.session' and places options and session
|
|
252
|
+
# metadata into 'rack.session.options'.
|
|
253
|
+
|
|
254
|
+
def prepare_session(env)
|
|
255
|
+
session_was = env[ENV_SESSION_KEY]
|
|
256
|
+
env[ENV_SESSION_KEY] = session_class.new(self, env)
|
|
257
|
+
env[ENV_SESSION_OPTIONS_KEY] = @default_options.dup
|
|
258
|
+
env[ENV_SESSION_KEY].merge! session_was if session_was
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
# Extracts the session id from provided cookies and passes it and the
|
|
262
|
+
# environment to #get_session.
|
|
263
|
+
|
|
264
|
+
def load_session(env)
|
|
265
|
+
sid = current_session_id(env)
|
|
266
|
+
sid, session = get_session(env, sid)
|
|
267
|
+
[sid, session || {}]
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
# Extract session id from request object.
|
|
271
|
+
|
|
272
|
+
def extract_session_id(env)
|
|
273
|
+
request = Rack::Request.new(env)
|
|
274
|
+
sid = request.cookies[@key]
|
|
275
|
+
sid ||= request.params[@key] unless @cookie_only
|
|
276
|
+
sid
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
# Returns the current session id from the SessionHash.
|
|
280
|
+
|
|
281
|
+
def current_session_id(env)
|
|
282
|
+
env[ENV_SESSION_KEY].id
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
# Check if the session exists or not.
|
|
286
|
+
|
|
287
|
+
def session_exists?(env)
|
|
288
|
+
value = current_session_id(env)
|
|
289
|
+
value && !value.empty?
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
# Session should be commited if it was loaded, any of specific options like :renew, :drop
|
|
293
|
+
# or :expire_after was given and the security permissions match. Skips if skip is given.
|
|
294
|
+
|
|
295
|
+
def commit_session?(env, session, options)
|
|
296
|
+
if options[:skip]
|
|
297
|
+
false
|
|
298
|
+
else
|
|
299
|
+
has_session = loaded_session?(session) || forced_session_update?(session, options)
|
|
300
|
+
has_session && security_matches?(env, options)
|
|
301
|
+
end
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
def loaded_session?(session)
|
|
305
|
+
!session.is_a?(session_class) || session.loaded?
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
def forced_session_update?(session, options)
|
|
309
|
+
force_options?(options) && session && !session.empty?
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
def force_options?(options)
|
|
313
|
+
options.values_at(:renew, :drop, :defer, :expire_after).any?
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
def security_matches?(env, options)
|
|
317
|
+
return true unless options[:secure]
|
|
318
|
+
request = Rack::Request.new(env)
|
|
319
|
+
request.ssl?
|
|
320
|
+
end
|
|
321
|
+
|
|
322
|
+
# Acquires the session from the environment and the session id from
|
|
323
|
+
# the session options and passes them to #set_session. If successful
|
|
324
|
+
# and the :defer option is not true, a cookie will be added to the
|
|
325
|
+
# response with the session's id.
|
|
326
|
+
|
|
327
|
+
def commit_session(env, status, headers, body)
|
|
328
|
+
session = env[ENV_SESSION_KEY]
|
|
329
|
+
options = session.options
|
|
330
|
+
|
|
331
|
+
if options[:drop] || options[:renew]
|
|
332
|
+
session_id = destroy_session(env, session.id || generate_sid, options)
|
|
333
|
+
return [status, headers, body] unless session_id
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
return [status, headers, body] unless commit_session?(env, session, options)
|
|
337
|
+
|
|
338
|
+
session.send(:load!) unless loaded_session?(session)
|
|
339
|
+
session_id ||= session.id
|
|
340
|
+
session_data = session.to_hash.delete_if { |k,v| v.nil? }
|
|
341
|
+
|
|
342
|
+
if not data = set_session(env, session_id, session_data, options)
|
|
343
|
+
env["rack.errors"].puts("Warning! #{self.class.name} failed to save session. Content dropped.")
|
|
344
|
+
elsif options[:defer] and not options[:renew]
|
|
345
|
+
env["rack.errors"].puts("Defering cookie for #{session_id}") if $VERBOSE
|
|
346
|
+
else
|
|
347
|
+
cookie = Hash.new
|
|
348
|
+
cookie[:value] = data
|
|
349
|
+
cookie[:expires] = Time.now + options[:expire_after] if options[:expire_after]
|
|
350
|
+
set_cookie(env, headers, cookie.merge!(options))
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
[status, headers, body]
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
# Sets the cookie back to the client with session id. We skip the cookie
|
|
357
|
+
# setting if the value didn't change (sid is the same) or expires was given.
|
|
358
|
+
|
|
359
|
+
def set_cookie(env, headers, cookie)
|
|
360
|
+
request = Rack::Request.new(env)
|
|
361
|
+
if request.cookies[@key] != cookie[:value] || cookie[:expires]
|
|
362
|
+
Utils.set_cookie_header!(headers, @key, cookie)
|
|
363
|
+
end
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
# Allow subclasses to prepare_session for different Session classes
|
|
367
|
+
|
|
368
|
+
def session_class
|
|
369
|
+
SessionHash
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
# All thread safety and session retrival proceedures should occur here.
|
|
373
|
+
# Should return [session_id, session].
|
|
374
|
+
# If nil is provided as the session id, generation of a new valid id
|
|
375
|
+
# should occur within.
|
|
376
|
+
|
|
377
|
+
def get_session(env, sid)
|
|
378
|
+
raise '#get_session not implemented.'
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
# All thread safety and session storage proceedures should occur here.
|
|
382
|
+
# Must return the session id if the session was saved successfully, or
|
|
383
|
+
# false if the session could not be saved.
|
|
384
|
+
|
|
385
|
+
def set_session(env, sid, session, options)
|
|
386
|
+
raise '#set_session not implemented.'
|
|
387
|
+
end
|
|
388
|
+
|
|
389
|
+
# All thread safety and session destroy proceedures should occur here.
|
|
390
|
+
# Should return a new session id or nil if options[:drop]
|
|
391
|
+
|
|
392
|
+
def destroy_session(env, sid, options)
|
|
393
|
+
raise '#destroy_session not implemented'
|
|
394
|
+
end
|
|
395
|
+
end
|
|
396
|
+
end
|
|
397
|
+
end
|
|
398
|
+
end
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
require 'openssl'
|
|
2
|
+
require 'rack/request'
|
|
3
|
+
require 'rack/response'
|
|
4
|
+
require 'rack/session/abstract/id'
|
|
5
|
+
|
|
6
|
+
module Rack
|
|
7
|
+
|
|
8
|
+
module Session
|
|
9
|
+
|
|
10
|
+
# Rack::Session::Cookie provides simple cookie based session management.
|
|
11
|
+
# By default, the session is a Ruby Hash stored as base64 encoded marshalled
|
|
12
|
+
# data set to :key (default: rack.session). The object that encodes the
|
|
13
|
+
# session data is configurable and must respond to +encode+ and +decode+.
|
|
14
|
+
# Both methods must take a string and return a string.
|
|
15
|
+
#
|
|
16
|
+
# When the secret key is set, cookie data is checked for data integrity.
|
|
17
|
+
# The old secret key is also accepted and allows graceful secret rotation.
|
|
18
|
+
#
|
|
19
|
+
# Example:
|
|
20
|
+
#
|
|
21
|
+
# use Rack::Session::Cookie, :key => 'rack.session',
|
|
22
|
+
# :domain => 'foo.com',
|
|
23
|
+
# :path => '/',
|
|
24
|
+
# :expire_after => 2592000,
|
|
25
|
+
# :secret => 'change_me',
|
|
26
|
+
# :old_secret => 'also_change_me'
|
|
27
|
+
#
|
|
28
|
+
# All parameters are optional.
|
|
29
|
+
#
|
|
30
|
+
# Example of a cookie with no encoding:
|
|
31
|
+
#
|
|
32
|
+
# Rack::Session::Cookie.new(application, {
|
|
33
|
+
# :coder => Rack::Session::Cookie::Identity.new
|
|
34
|
+
# })
|
|
35
|
+
#
|
|
36
|
+
# Example of a cookie with custom encoding:
|
|
37
|
+
#
|
|
38
|
+
# Rack::Session::Cookie.new(application, {
|
|
39
|
+
# :coder => Class.new {
|
|
40
|
+
# def encode(str); str.reverse; end
|
|
41
|
+
# def decode(str); str.reverse; end
|
|
42
|
+
# }.new
|
|
43
|
+
# })
|
|
44
|
+
#
|
|
45
|
+
|
|
46
|
+
class Cookie < Abstract::ID
|
|
47
|
+
# Encode session cookies as Base64
|
|
48
|
+
class Base64
|
|
49
|
+
def encode(str)
|
|
50
|
+
[str].pack('m')
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def decode(str)
|
|
54
|
+
str.unpack('m').first
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Encode session cookies as Marshaled Base64 data
|
|
58
|
+
class Marshal < Base64
|
|
59
|
+
def encode(str)
|
|
60
|
+
super(::Marshal.dump(str))
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def decode(str)
|
|
64
|
+
return unless str
|
|
65
|
+
::Marshal.load(super(str)) rescue nil
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# N.B. Unlike other encoding methods, the contained objects must be a
|
|
70
|
+
# valid JSON composite type, either a Hash or an Array.
|
|
71
|
+
class JSON < Base64
|
|
72
|
+
def encode(obj)
|
|
73
|
+
super(::Rack::Utils::OkJson.encode(obj))
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def decode(str)
|
|
77
|
+
return unless str
|
|
78
|
+
::Rack::Utils::OkJson.decode(super(str)) rescue nil
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Use no encoding for session cookies
|
|
84
|
+
class Identity
|
|
85
|
+
def encode(str); str; end
|
|
86
|
+
def decode(str); str; end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Reverse string encoding. (trollface)
|
|
90
|
+
class Reverse
|
|
91
|
+
def encode(str); str.reverse; end
|
|
92
|
+
def decode(str); str.reverse; end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
attr_reader :coder
|
|
96
|
+
|
|
97
|
+
def initialize(app, options={})
|
|
98
|
+
@secrets = options.values_at(:secret, :old_secret).compact
|
|
99
|
+
warn <<-MSG unless @secrets.size >= 1
|
|
100
|
+
SECURITY WARNING: No secret option provided to Rack::Session::Cookie.
|
|
101
|
+
This poses a security threat. It is strongly recommended that you
|
|
102
|
+
provide a secret to prevent exploits that may be possible from crafted
|
|
103
|
+
cookies. This will not be supported in future versions of Rack, and
|
|
104
|
+
future versions will even invalidate your existing user cookies.
|
|
105
|
+
|
|
106
|
+
Called from: #{caller[0]}.
|
|
107
|
+
MSG
|
|
108
|
+
@coder = options[:coder] ||= Base64::Marshal.new
|
|
109
|
+
super(app, options.merge!(:cookie_only => true))
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
private
|
|
113
|
+
|
|
114
|
+
def get_session(env, sid)
|
|
115
|
+
data = unpacked_cookie_data(env)
|
|
116
|
+
data = persistent_session_id!(data)
|
|
117
|
+
[data["session_id"], data]
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def extract_session_id(env)
|
|
121
|
+
unpacked_cookie_data(env)["session_id"]
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def unpacked_cookie_data(env)
|
|
125
|
+
env["rack.session.unpacked_cookie_data"] ||= begin
|
|
126
|
+
request = Rack::Request.new(env)
|
|
127
|
+
session_data = request.cookies[@key]
|
|
128
|
+
|
|
129
|
+
if @secrets.size > 0 && session_data
|
|
130
|
+
session_data, digest = session_data.split("--")
|
|
131
|
+
session_data = nil unless digest_match?(session_data, digest)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
coder.decode(session_data) || {}
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def persistent_session_id!(data, sid=nil)
|
|
139
|
+
data ||= {}
|
|
140
|
+
data["session_id"] ||= sid || generate_sid
|
|
141
|
+
data
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def set_session(env, session_id, session, options)
|
|
145
|
+
session = session.merge("session_id" => session_id)
|
|
146
|
+
session_data = coder.encode(session)
|
|
147
|
+
|
|
148
|
+
if @secrets.first
|
|
149
|
+
session_data << "--#{generate_hmac(session_data, @secrets.first)}"
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
if session_data.size > (4096 - @key.size)
|
|
153
|
+
env["rack.errors"].puts("Warning! Rack::Session::Cookie data size exceeds 4K.")
|
|
154
|
+
nil
|
|
155
|
+
else
|
|
156
|
+
session_data
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def destroy_session(env, session_id, options)
|
|
161
|
+
# Nothing to do here, data is in the client
|
|
162
|
+
generate_sid unless options[:drop]
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def digest_match?(data, digest)
|
|
166
|
+
return unless data && digest
|
|
167
|
+
@secrets.any? do |secret|
|
|
168
|
+
Rack::Utils.secure_compare(digest, generate_hmac(data, secret))
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def generate_hmac(data, secret)
|
|
173
|
+
OpenSSL::HMAC.hexdigest(OpenSSL::Digest::SHA1.new, secret, data)
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# AUTHOR: blink <blinketje@gmail.com>; blink#ruby-lang@irc.freenode.net
|
|
2
|
+
|
|
3
|
+
require 'rack/session/abstract/id'
|
|
4
|
+
require 'memcache'
|
|
5
|
+
|
|
6
|
+
module Rack
|
|
7
|
+
module Session
|
|
8
|
+
# Rack::Session::Memcache provides simple cookie based session management.
|
|
9
|
+
# Session data is stored in memcached. The corresponding session key is
|
|
10
|
+
# maintained in the cookie.
|
|
11
|
+
# You may treat Session::Memcache as you would Session::Pool with the
|
|
12
|
+
# following caveats.
|
|
13
|
+
#
|
|
14
|
+
# * Setting :expire_after to 0 would note to the Memcache server to hang
|
|
15
|
+
# onto the session data until it would drop it according to it's own
|
|
16
|
+
# specifications. However, the cookie sent to the client would expire
|
|
17
|
+
# immediately.
|
|
18
|
+
#
|
|
19
|
+
# Note that memcache does drop data before it may be listed to expire. For
|
|
20
|
+
# a full description of behaviour, please see memcache's documentation.
|
|
21
|
+
|
|
22
|
+
class Memcache < Abstract::ID
|
|
23
|
+
attr_reader :mutex, :pool
|
|
24
|
+
|
|
25
|
+
DEFAULT_OPTIONS = Abstract::ID::DEFAULT_OPTIONS.merge \
|
|
26
|
+
:namespace => 'rack:session',
|
|
27
|
+
:memcache_server => 'localhost:11211'
|
|
28
|
+
|
|
29
|
+
def initialize(app, options={})
|
|
30
|
+
super
|
|
31
|
+
|
|
32
|
+
@mutex = Mutex.new
|
|
33
|
+
mserv = @default_options[:memcache_server]
|
|
34
|
+
mopts = @default_options.reject{|k,v| !MemCache::DEFAULT_OPTIONS.include? k }
|
|
35
|
+
|
|
36
|
+
@pool = options[:cache] || MemCache.new(mserv, mopts)
|
|
37
|
+
unless @pool.active? and @pool.servers.any?{|c| c.alive? }
|
|
38
|
+
raise 'No memcache servers'
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def generate_sid
|
|
43
|
+
loop do
|
|
44
|
+
sid = super
|
|
45
|
+
break sid unless @pool.get(sid, true)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def get_session(env, sid)
|
|
50
|
+
with_lock(env, [nil, {}]) do
|
|
51
|
+
unless sid and session = @pool.get(sid)
|
|
52
|
+
sid, session = generate_sid, {}
|
|
53
|
+
unless /^STORED/ =~ @pool.add(sid, session)
|
|
54
|
+
raise "Session collision on '#{sid.inspect}'"
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
[sid, session]
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def set_session(env, session_id, new_session, options)
|
|
62
|
+
expiry = options[:expire_after]
|
|
63
|
+
expiry = expiry.nil? ? 0 : expiry + 1
|
|
64
|
+
|
|
65
|
+
with_lock(env, false) do
|
|
66
|
+
@pool.set session_id, new_session, expiry
|
|
67
|
+
session_id
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def destroy_session(env, session_id, options)
|
|
72
|
+
with_lock(env) do
|
|
73
|
+
@pool.delete(session_id)
|
|
74
|
+
generate_sid unless options[:drop]
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def with_lock(env, default=nil)
|
|
79
|
+
@mutex.lock if env['rack.multithread']
|
|
80
|
+
yield
|
|
81
|
+
rescue MemCache::MemCacheError, Errno::ECONNREFUSED
|
|
82
|
+
if $VERBOSE
|
|
83
|
+
warn "#{self} is unable to find memcached server."
|
|
84
|
+
warn $!.inspect
|
|
85
|
+
end
|
|
86
|
+
default
|
|
87
|
+
ensure
|
|
88
|
+
@mutex.unlock if @mutex.locked?
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|