sprokovuln 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +8 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +26 -0
- data/README.md +35 -0
- data/Rakefile +2 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/sprokovuln/version.rb +3 -0
- data/lib/sprokovuln.rb +5 -0
- data/sprokovuln.gemspec +26 -0
- data/vendor/ruby/bin/rackup +27 -0
- data/vendor/ruby/bin/rake +27 -0
- data/vendor/ruby/bin/sprockets +27 -0
- data/vendor/ruby/cache/concurrent-ruby-1.0.5.gem +0 -0
- data/vendor/ruby/cache/rack-2.0.5.gem +0 -0
- data/vendor/ruby/cache/rake-10.5.0.gem +0 -0
- data/vendor/ruby/cache/sprockets-3.7.1.gem +0 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/CHANGELOG.md +387 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/LICENSE.txt +21 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/README.md +247 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/agent.rb +587 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/array.rb +39 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/async.rb +445 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atom.rb +222 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/abstract_thread_local_var.rb +66 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/atomic_boolean.rb +122 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/atomic_fixnum.rb +139 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/atomic_reference.rb +51 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/count_down_latch.rb +100 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/cyclic_barrier.rb +128 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/event.rb +109 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/java_count_down_latch.rb +39 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/java_thread_local_var.rb +37 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/mutex_atomic_boolean.rb +60 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/mutex_atomic_fixnum.rb +75 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/mutex_count_down_latch.rb +43 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/mutex_semaphore.rb +115 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/read_write_lock.rb +253 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/reentrant_read_write_lock.rb +377 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/ruby_thread_local_var.rb +161 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/semaphore.rb +145 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic/thread_local_var.rb +104 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic_reference/concurrent_update_error.rb +8 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic_reference/direct_update.rb +81 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic_reference/jruby+truffle.rb +2 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic_reference/jruby.rb +16 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic_reference/mutex_atomic.rb +61 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic_reference/numeric_cas_wrapper.rb +28 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic_reference/rbx.rb +22 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomic_reference/ruby.rb +32 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/atomics.rb +53 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/collection/copy_on_notify_observer_set.rb +107 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/collection/copy_on_write_observer_set.rb +111 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/collection/java_non_concurrent_priority_queue.rb +84 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/collection/map/atomic_reference_map_backend.rb +927 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/collection/map/mri_map_backend.rb +66 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/collection/map/non_concurrent_map_backend.rb +141 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/collection/map/synchronized_map_backend.rb +82 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/collection/non_concurrent_priority_queue.rb +143 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/collection/ruby_non_concurrent_priority_queue.rb +150 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/concern/deprecation.rb +34 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/concern/dereferenceable.rb +73 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/concern/logging.rb +27 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/concern/obligation.rb +220 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/concern/observable.rb +110 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/configuration.rb +188 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/constants.rb +8 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/dataflow.rb +80 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/delay.rb +197 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/edge.rb +26 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/errors.rb +69 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/exchanger.rb +356 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/abstract_executor_service.rb +134 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/cached_thread_pool.rb +62 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/executor_service.rb +185 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/fixed_thread_pool.rb +206 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/immediate_executor.rb +66 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/indirect_immediate_executor.rb +44 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/java_executor_service.rb +100 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/java_single_thread_executor.rb +29 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/java_thread_pool_executor.rb +120 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/ruby_executor_service.rb +78 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/ruby_single_thread_executor.rb +22 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/ruby_thread_pool_executor.rb +362 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/safe_task_executor.rb +35 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/serial_executor_service.rb +34 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/serialized_execution.rb +107 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/serialized_execution_delegator.rb +28 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/simple_executor_service.rb +100 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/single_thread_executor.rb +56 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/thread_pool_executor.rb +87 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executor/timer_set.rb +175 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/executors.rb +20 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/future.rb +138 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/hash.rb +36 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/immutable_struct.rb +93 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/ivar.rb +208 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/lazy_register.rb +81 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/map.rb +240 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/maybe.rb +229 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/mutable_struct.rb +228 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/mvar.rb +242 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/options.rb +42 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/promise.rb +547 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/scheduled_task.rb +318 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/settable_struct.rb +128 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/abstract_lockable_object.rb +98 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/abstract_object.rb +24 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/abstract_struct.rb +157 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/condition.rb +58 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/jruby_lockable_object.rb +13 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/jruby_object.rb +44 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/lock.rb +34 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/lockable_object.rb +74 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/mri_lockable_object.rb +71 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/mri_object.rb +43 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/object.rb +153 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/rbx_lockable_object.rb +65 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/rbx_object.rb +48 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/truffle_lockable_object.rb +9 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/truffle_object.rb +31 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization/volatile.rb +34 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/synchronization.rb +31 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/thread_safe/synchronized_delegator.rb +50 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/thread_safe/util/adder.rb +74 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/thread_safe/util/array_hash_rbx.rb +30 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/thread_safe/util/cheap_lockable.rb +118 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/thread_safe/util/power_of_two_tuple.rb +38 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/thread_safe/util/striped64.rb +241 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/thread_safe/util/volatile.rb +75 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/thread_safe/util/xor_shift_random.rb +50 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/thread_safe/util.rb +16 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/timer_task.rb +331 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/tuple.rb +86 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/tvar.rb +258 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/utility/at_exit.rb +97 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/utility/engine.rb +56 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/utility/monotonic_time.rb +58 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/utility/native_extension_loader.rb +73 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/utility/native_integer.rb +53 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/utility/processor_counter.rb +160 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent/version.rb +4 -0
- data/vendor/ruby/gems/concurrent-ruby-1.0.5/lib/concurrent.rb +130 -0
- data/vendor/ruby/gems/rack-2.0.5/COPYING +18 -0
- data/vendor/ruby/gems/rack-2.0.5/HISTORY.md +505 -0
- data/vendor/ruby/gems/rack-2.0.5/README.rdoc +302 -0
- data/vendor/ruby/gems/rack-2.0.5/Rakefile +116 -0
- data/vendor/ruby/gems/rack-2.0.5/SPEC +263 -0
- data/vendor/ruby/gems/rack-2.0.5/bin/rackup +4 -0
- data/vendor/ruby/gems/rack-2.0.5/contrib/rack.png +0 -0
- data/vendor/ruby/gems/rack-2.0.5/contrib/rack.svg +150 -0
- data/vendor/ruby/gems/rack-2.0.5/contrib/rack_logo.svg +164 -0
- data/vendor/ruby/gems/rack-2.0.5/contrib/rdoc.css +412 -0
- data/vendor/ruby/gems/rack-2.0.5/example/lobster.ru +4 -0
- data/vendor/ruby/gems/rack-2.0.5/example/protectedlobster.rb +14 -0
- data/vendor/ruby/gems/rack-2.0.5/example/protectedlobster.ru +8 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/auth/abstract/handler.rb +37 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/auth/abstract/request.rb +47 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/auth/basic.rb +58 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/auth/digest/md5.rb +129 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/auth/digest/nonce.rb +51 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/auth/digest/params.rb +52 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/auth/digest/request.rb +41 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/body_proxy.rb +44 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/builder.rb +164 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/cascade.rb +52 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/chunked.rb +69 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/common_logger.rb +72 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/conditional_get.rb +79 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/config.rb +20 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/content_length.rb +37 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/content_type.rb +29 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/deflater.rb +119 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/directory.rb +179 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/etag.rb +74 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/events.rb +154 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/file.rb +176 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/handler/cgi.rb +60 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/handler/fastcgi.rb +100 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/handler/lsws.rb +61 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/handler/scgi.rb +70 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/handler/thin.rb +36 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/handler/webrick.rb +120 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/handler.rb +99 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/head.rb +25 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/lint.rb +760 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/lobster.rb +70 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/lock.rb +31 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/logger.rb +18 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/media_type.rb +38 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/method_override.rb +50 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/mime.rb +677 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/mock.rb +196 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/multipart/generator.rb +93 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/multipart/parser.rb +369 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/multipart/uploaded_file.rb +33 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/multipart.rb +63 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/null_logger.rb +37 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/query_parser.rb +192 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/recursive.rb +62 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/reloader.rb +110 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/request.rb +487 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/response.rb +235 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/rewindable_input.rb +93 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/runtime.rb +32 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/sendfile.rb +158 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/server.rb +395 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/session/abstract/id.rb +445 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/session/cookie.rb +195 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/session/memcache.rb +93 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/session/pool.rb +76 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/show_exceptions.rb +386 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/show_status.rb +113 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/static.rb +175 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/tempfile_reaper.rb +22 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/urlmap.rb +91 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack/utils.rb +620 -0
- data/vendor/ruby/gems/rack-2.0.5/lib/rack.rb +147 -0
- data/vendor/ruby/gems/rack-2.0.5/rack.gemspec +34 -0
- data/vendor/ruby/gems/rack-2.0.5/test/builder/an_underscore_app.rb +5 -0
- data/vendor/ruby/gems/rack-2.0.5/test/builder/anything.rb +5 -0
- data/vendor/ruby/gems/rack-2.0.5/test/builder/comment.ru +4 -0
- data/vendor/ruby/gems/rack-2.0.5/test/builder/end.ru +5 -0
- data/vendor/ruby/gems/rack-2.0.5/test/builder/line.ru +1 -0
- data/vendor/ruby/gems/rack-2.0.5/test/builder/options.ru +2 -0
- data/vendor/ruby/gems/rack-2.0.5/test/cgi/assets/folder/test.js +1 -0
- data/vendor/ruby/gems/rack-2.0.5/test/cgi/assets/fonts/font.eot +1 -0
- data/vendor/ruby/gems/rack-2.0.5/test/cgi/assets/images/image.png +1 -0
- data/vendor/ruby/gems/rack-2.0.5/test/cgi/assets/index.html +1 -0
- data/vendor/ruby/gems/rack-2.0.5/test/cgi/assets/javascripts/app.js +1 -0
- data/vendor/ruby/gems/rack-2.0.5/test/cgi/assets/stylesheets/app.css +1 -0
- data/vendor/ruby/gems/rack-2.0.5/test/cgi/lighttpd.conf +26 -0
- data/vendor/ruby/gems/rack-2.0.5/test/cgi/rackup_stub.rb +6 -0
- data/vendor/ruby/gems/rack-2.0.5/test/cgi/sample_rackup.ru +5 -0
- data/vendor/ruby/gems/rack-2.0.5/test/cgi/test +9 -0
- data/vendor/ruby/gems/rack-2.0.5/test/cgi/test+directory/test+file +1 -0
- data/vendor/ruby/gems/rack-2.0.5/test/cgi/test.fcgi +9 -0
- data/vendor/ruby/gems/rack-2.0.5/test/cgi/test.gz +0 -0
- data/vendor/ruby/gems/rack-2.0.5/test/cgi/test.ru +5 -0
- data/vendor/ruby/gems/rack-2.0.5/test/gemloader.rb +10 -0
- data/vendor/ruby/gems/rack-2.0.5/test/helper.rb +34 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/bad_robots +259 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/binary +0 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/content_type_and_no_filename +6 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/empty +10 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/fail_16384_nofile +814 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/file1.txt +1 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/filename_and_modification_param +7 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/filename_and_no_name +6 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/filename_with_encoded_words +7 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/filename_with_escaped_quotes +6 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/filename_with_escaped_quotes_and_modification_param +7 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/filename_with_null_byte +7 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/filename_with_percent_escaped_quotes +6 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/filename_with_single_quote +7 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/filename_with_unescaped_percentages +6 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/filename_with_unescaped_percentages2 +6 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/filename_with_unescaped_percentages3 +6 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/filename_with_unescaped_quotes +6 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/ie +6 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/invalid_character +6 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/mixed_files +21 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/nested +10 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/none +9 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/quoted +15 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/rack-logo.png +0 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/semicolon +6 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/text +15 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/three_files_three_fields +31 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/unity3d_wwwform +11 -0
- data/vendor/ruby/gems/rack-2.0.5/test/multipart/webkit +32 -0
- data/vendor/ruby/gems/rack-2.0.5/test/rackup/config.ru +31 -0
- data/vendor/ruby/gems/rack-2.0.5/test/registering_handler/rack/handler/registering_myself.rb +8 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_auth_basic.rb +89 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_auth_digest.rb +260 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_body_proxy.rb +85 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_builder.rb +233 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_cascade.rb +63 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_cgi.rb +84 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_chunked.rb +103 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_common_logger.rb +95 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_conditional_get.rb +103 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_config.rb +23 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_content_length.rb +86 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_content_type.rb +46 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_deflater.rb +375 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_directory.rb +148 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_etag.rb +108 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_events.rb +133 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_fastcgi.rb +85 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_file.rb +264 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_handler.rb +57 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_head.rb +46 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_lint.rb +515 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_lobster.rb +59 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_lock.rb +204 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_logger.rb +24 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_media_type.rb +42 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_method_override.rb +110 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_mime.rb +51 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_mock.rb +359 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_multipart.rb +722 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_null_logger.rb +21 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_recursive.rb +75 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_request.rb +1393 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_response.rb +510 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_rewindable_input.rb +128 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_runtime.rb +50 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_sendfile.rb +125 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_server.rb +193 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_session_abstract_id.rb +31 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_session_abstract_session_hash.rb +45 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_session_cookie.rb +442 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_session_memcache.rb +320 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_session_pool.rb +210 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_show_exceptions.rb +80 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_show_status.rb +104 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_static.rb +184 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_tempfile_reaper.rb +64 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_thin.rb +96 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_urlmap.rb +237 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_utils.rb +742 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_version.rb +11 -0
- data/vendor/ruby/gems/rack-2.0.5/test/spec_webrick.rb +206 -0
- data/vendor/ruby/gems/rack-2.0.5/test/static/another/index.html +1 -0
- data/vendor/ruby/gems/rack-2.0.5/test/static/foo.html +1 -0
- data/vendor/ruby/gems/rack-2.0.5/test/static/index.html +1 -0
- data/vendor/ruby/gems/rack-2.0.5/test/testrequest.rb +78 -0
- data/vendor/ruby/gems/rack-2.0.5/test/unregistered_handler/rack/handler/unregistered.rb +7 -0
- data/vendor/ruby/gems/rack-2.0.5/test/unregistered_handler/rack/handler/unregistered_long_one.rb +7 -0
- data/vendor/ruby/gems/rake-10.5.0/.autotest +7 -0
- data/vendor/ruby/gems/rake-10.5.0/.rubocop.yml +27 -0
- data/vendor/ruby/gems/rake-10.5.0/.togglerc +7 -0
- data/vendor/ruby/gems/rake-10.5.0/CONTRIBUTING.rdoc +38 -0
- data/vendor/ruby/gems/rake-10.5.0/History.rdoc +659 -0
- data/vendor/ruby/gems/rake-10.5.0/MIT-LICENSE +21 -0
- data/vendor/ruby/gems/rake-10.5.0/Manifest.txt +166 -0
- data/vendor/ruby/gems/rake-10.5.0/README.rdoc +139 -0
- data/vendor/ruby/gems/rake-10.5.0/Rakefile +81 -0
- data/vendor/ruby/gems/rake-10.5.0/bin/rake +33 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/command_line_usage.rdoc +158 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/example/Rakefile1 +38 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/example/Rakefile2 +35 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/example/a.c +6 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/example/b.c +6 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/example/main.c +11 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/glossary.rdoc +42 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/jamis.rb +591 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/proto_rake.rdoc +127 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/rake.1 +141 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/rakefile.rdoc +624 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/rational.rdoc +151 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.4.14.rdoc +23 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.4.15.rdoc +35 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.5.0.rdoc +53 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.5.3.rdoc +78 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.5.4.rdoc +46 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.6.0.rdoc +141 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.7.0.rdoc +119 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.7.1.rdoc +59 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.7.2.rdoc +121 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.7.3.rdoc +47 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.8.0.rdoc +114 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.8.2.rdoc +165 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.8.3.rdoc +112 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.8.4.rdoc +147 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.8.5.rdoc +53 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.8.6.rdoc +37 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.8.7.rdoc +55 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.9.0.rdoc +112 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.9.1.rdoc +52 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.9.2.2.rdoc +55 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.9.2.rdoc +49 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.9.3.rdoc +102 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.9.4.rdoc +60 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.9.5.rdoc +55 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-0.9.6.rdoc +64 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-10.0.0.rdoc +178 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-10.0.1.rdoc +58 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-10.0.2.rdoc +53 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-10.0.3.rdoc +191 -0
- data/vendor/ruby/gems/rake-10.5.0/doc/release_notes/rake-10.1.0.rdoc +61 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/alt_system.rb +110 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/application.rb +790 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/backtrace.rb +23 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/clean.rb +76 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/cloneable.rb +16 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/contrib/.document +1 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/contrib/compositepublisher.rb +21 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/contrib/ftptools.rb +137 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/contrib/publisher.rb +81 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/contrib/rubyforgepublisher.rb +18 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/contrib/sshpublisher.rb +61 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/contrib/sys.rb +4 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/cpu_counter.rb +125 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/default_loader.rb +14 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/dsl_definition.rb +201 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/early_time.rb +21 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/ext/core.rb +25 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/ext/module.rb +2 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/ext/pathname.rb +25 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/ext/string.rb +175 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/ext/time.rb +18 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/file_creation_task.rb +24 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/file_list.rb +428 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/file_task.rb +46 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/file_utils.rb +128 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/file_utils_ext.rb +144 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/gempackagetask.rb +4 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/invocation_chain.rb +56 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/invocation_exception_mixin.rb +16 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/late_time.rb +17 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/linked_list.rb +103 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/loaders/makefile.rb +53 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/multi_task.rb +13 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/name_space.rb +38 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/packagetask.rb +199 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/pathmap.rb +3 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/phony.rb +15 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/private_reader.rb +20 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/promise.rb +99 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/pseudo_status.rb +29 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/rake_module.rb +38 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/rake_test_loader.rb +22 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/rdoctask.rb +4 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/ruby182_test_unit_fix.rb +29 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/rule_recursion_overflow_error.rb +20 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/runtest.rb +27 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/scope.rb +42 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/task.rb +383 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/task_argument_error.rb +7 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/task_arguments.rb +98 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/task_manager.rb +307 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/tasklib.rb +24 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/testtask.rb +213 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/thread_history_display.rb +48 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/thread_pool.rb +164 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/trace_output.rb +22 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/version.rb +7 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake/win32.rb +56 -0
- data/vendor/ruby/gems/rake-10.5.0/lib/rake.rb +79 -0
- data/vendor/ruby/gems/rake-10.5.0/rakelib/publish.rake +20 -0
- data/vendor/ruby/gems/rake-10.5.0/rakelib/test_times.rake +25 -0
- data/vendor/ruby/gems/rake-10.5.0/test/file_creation.rb +34 -0
- data/vendor/ruby/gems/rake-10.5.0/test/helper.rb +129 -0
- data/vendor/ruby/gems/rake-10.5.0/test/support/rakefile_definitions.rb +478 -0
- data/vendor/ruby/gems/rake-10.5.0/test/support/ruby_runner.rb +34 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_private_reader.rb +42 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake.rb +40 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_application.rb +643 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_application_options.rb +468 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_backtrace.rb +119 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_clean.rb +61 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_cpu_counter.rb +68 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_definitions.rb +84 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_directory_task.rb +76 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_dsl.rb +40 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_early_time.rb +31 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_extension.rb +59 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_file_creation_task.rb +56 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_file_list.rb +670 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_file_list_path_map.rb +8 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_file_task.rb +197 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_file_utils.rb +314 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_ftp_file.rb +74 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_functional.rb +482 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_invocation_chain.rb +64 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_late_time.rb +18 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_linked_list.rb +84 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_makefile_loader.rb +46 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_multi_task.rb +64 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_name_space.rb +57 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_package_task.rb +79 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_path_map.rb +168 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_path_map_explode.rb +34 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_path_map_partial.rb +18 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_pathname_extensions.rb +15 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_pseudo_status.rb +21 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_rake_test_loader.rb +20 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_reduce_compat.rb +26 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_require.rb +40 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_rules.rb +388 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_scope.rb +44 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_task.rb +393 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_task_argument_parsing.rb +119 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_task_arguments.rb +127 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_task_lib.rb +9 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_task_manager.rb +178 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_task_manager_argument_resolution.rb +19 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_task_with_arguments.rb +172 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_test_task.rb +146 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_thread_pool.rb +145 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_top_level_functions.rb +71 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_rake_win32.rb +72 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_thread_history_display.rb +101 -0
- data/vendor/ruby/gems/rake-10.5.0/test/test_trace_output.rb +52 -0
- data/vendor/ruby/gems/sprockets-3.7.1/CHANGELOG.md +292 -0
- data/vendor/ruby/gems/sprockets-3.7.1/LICENSE +21 -0
- data/vendor/ruby/gems/sprockets-3.7.1/README.md +509 -0
- data/vendor/ruby/gems/sprockets-3.7.1/bin/sprockets +89 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/rake/sprocketstask.rb +152 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/asset.rb +200 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/autoload/closure.rb +7 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/autoload/coffee_script.rb +7 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/autoload/eco.rb +7 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/autoload/ejs.rb +7 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/autoload/sass.rb +7 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/autoload/uglifier.rb +7 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/autoload/yui.rb +7 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/autoload.rb +11 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/base.rb +110 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/bower.rb +58 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/bundle.rb +69 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/cache/file_store.rb +186 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/cache/memory_store.rb +66 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/cache/null_store.rb +46 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/cache.rb +236 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/cached_environment.rb +69 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/closure_compressor.rb +47 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/coffee_script_processor.rb +25 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/coffee_script_template.rb +17 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/compressing.rb +94 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/configuration.rb +83 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/context.rb +231 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/dependencies.rb +73 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/deprecation.rb +90 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/digest_utils.rb +180 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/directive_processor.rb +404 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/eco_processor.rb +32 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/eco_template.rb +17 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/ejs_processor.rb +31 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/ejs_template.rb +17 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/encoding_utils.rb +261 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/engines.rb +92 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/environment.rb +41 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/erb_processor.rb +30 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/erb_template.rb +11 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/errors.rb +11 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/file_reader.rb +15 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/http_utils.rb +117 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/jst_processor.rb +49 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/legacy.rb +330 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/legacy_proc_processor.rb +35 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/legacy_tilt_processor.rb +29 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/loader.rb +325 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/manifest.rb +335 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/manifest_utils.rb +45 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/mime.rb +130 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/path_dependency_utils.rb +85 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/path_digest_utils.rb +47 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/path_utils.rb +287 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/paths.rb +81 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/processing.rb +258 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/processor_utils.rb +180 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/resolve.rb +211 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/sass_cache_store.rb +34 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/sass_compressor.rb +51 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/sass_functions.rb +2 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/sass_importer.rb +2 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/sass_processor.rb +292 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/sass_template.rb +19 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/server.rb +292 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/transformers.rb +145 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/uglifier_compressor.rb +56 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/unloaded_asset.rb +137 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/uri_tar.rb +98 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/uri_utils.rb +188 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/utils/gzip.rb +67 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/utils.rb +235 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/version.rb +3 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets/yui_compressor.rb +55 -0
- data/vendor/ruby/gems/sprockets-3.7.1/lib/sprockets.rb +169 -0
- data/vendor/ruby/specifications/concurrent-ruby-1.0.5.gemspec +23 -0
- data/vendor/ruby/specifications/rack-2.0.5.gemspec +42 -0
- data/vendor/ruby/specifications/rake-10.5.0.gemspec +43 -0
- data/vendor/ruby/specifications/sprockets-3.7.1.gemspec +78 -0
- metadata +660 -0
@@ -0,0 +1,325 @@
|
|
1
|
+
require 'sprockets/asset'
|
2
|
+
require 'sprockets/digest_utils'
|
3
|
+
require 'sprockets/engines'
|
4
|
+
require 'sprockets/errors'
|
5
|
+
require 'sprockets/file_reader'
|
6
|
+
require 'sprockets/mime'
|
7
|
+
require 'sprockets/path_utils'
|
8
|
+
require 'sprockets/processing'
|
9
|
+
require 'sprockets/processor_utils'
|
10
|
+
require 'sprockets/resolve'
|
11
|
+
require 'sprockets/transformers'
|
12
|
+
require 'sprockets/uri_utils'
|
13
|
+
require 'sprockets/unloaded_asset'
|
14
|
+
|
15
|
+
module Sprockets
|
16
|
+
|
17
|
+
# The loader phase takes a asset URI location and returns a constructed Asset
|
18
|
+
# object.
|
19
|
+
module Loader
|
20
|
+
include DigestUtils, PathUtils, ProcessorUtils, URIUtils
|
21
|
+
include Engines, Mime, Processing, Resolve, Transformers
|
22
|
+
|
23
|
+
|
24
|
+
# Public: Load Asset by Asset URI.
|
25
|
+
#
|
26
|
+
# uri - A String containing complete URI to a file including schema
|
27
|
+
# and full path such as:
|
28
|
+
# "file:///Path/app/assets/js/app.js?type=application/javascript"
|
29
|
+
#
|
30
|
+
#
|
31
|
+
# Returns Asset.
|
32
|
+
def load(uri)
|
33
|
+
unloaded = UnloadedAsset.new(uri, self)
|
34
|
+
if unloaded.params.key?(:id)
|
35
|
+
unless asset = asset_from_cache(unloaded.asset_key)
|
36
|
+
id = unloaded.params.delete(:id)
|
37
|
+
uri_without_id = build_asset_uri(unloaded.filename, unloaded.params)
|
38
|
+
asset = load_from_unloaded(UnloadedAsset.new(uri_without_id, self))
|
39
|
+
if asset[:id] != id
|
40
|
+
@logger.warn "Sprockets load error: Tried to find #{uri}, but latest was id #{asset[:id]}"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
else
|
44
|
+
asset = fetch_asset_from_dependency_cache(unloaded) do |paths|
|
45
|
+
# When asset is previously generated, its "dependencies" are stored in the cache.
|
46
|
+
# The presence of `paths` indicates dependencies were stored.
|
47
|
+
# We can check to see if the dependencies have not changed by "resolving" them and
|
48
|
+
# generating a digest key from the resolved entries. If this digest key has not
|
49
|
+
# changed the asset will be pulled from cache.
|
50
|
+
#
|
51
|
+
# If this `paths` is present but the cache returns nothing then `fetch_asset_from_dependency_cache`
|
52
|
+
# will confusingly be called again with `paths` set to nil where the asset will be
|
53
|
+
# loaded from disk.
|
54
|
+
if paths
|
55
|
+
digest = DigestUtils.digest(resolve_dependencies(paths))
|
56
|
+
if uri_from_cache = cache.get(unloaded.digest_key(digest), true)
|
57
|
+
asset_from_cache(UnloadedAsset.new(uri_from_cache, self).asset_key)
|
58
|
+
end
|
59
|
+
else
|
60
|
+
load_from_unloaded(unloaded)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
Asset.new(self, asset)
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
# Internal: Load asset hash from cache
|
70
|
+
#
|
71
|
+
# key - A String containing lookup information for an asset
|
72
|
+
#
|
73
|
+
# This method converts all "compressed" paths to absolute paths.
|
74
|
+
# Returns a hash of values representing an asset
|
75
|
+
def asset_from_cache(key)
|
76
|
+
asset = cache.get(key, true)
|
77
|
+
if asset
|
78
|
+
asset[:uri] = expand_from_root(asset[:uri])
|
79
|
+
asset[:load_path] = expand_from_root(asset[:load_path])
|
80
|
+
asset[:filename] = expand_from_root(asset[:filename])
|
81
|
+
asset[:metadata][:included].map! { |uri| expand_from_root(uri) } if asset[:metadata][:included]
|
82
|
+
asset[:metadata][:links].map! { |uri| expand_from_root(uri) } if asset[:metadata][:links]
|
83
|
+
asset[:metadata][:stubbed].map! { |uri| expand_from_root(uri) } if asset[:metadata][:stubbed]
|
84
|
+
asset[:metadata][:required].map! { |uri| expand_from_root(uri) } if asset[:metadata][:required]
|
85
|
+
asset[:metadata][:dependencies].map! { |uri| uri.start_with?("file-digest://") ? expand_from_root(uri) : uri } if asset[:metadata][:dependencies]
|
86
|
+
|
87
|
+
asset[:metadata].each_key do |k|
|
88
|
+
next unless k =~ /_dependencies\z/
|
89
|
+
asset[:metadata][k].map! { |uri| expand_from_root(uri) }
|
90
|
+
end
|
91
|
+
end
|
92
|
+
asset
|
93
|
+
end
|
94
|
+
|
95
|
+
# Internal: Loads an asset and saves it to cache
|
96
|
+
#
|
97
|
+
# unloaded - An UnloadedAsset
|
98
|
+
#
|
99
|
+
# This method is only called when the given unloaded asset could not be
|
100
|
+
# successfully pulled from cache.
|
101
|
+
def load_from_unloaded(unloaded)
|
102
|
+
unless file?(unloaded.filename)
|
103
|
+
raise FileNotFound, "could not find file: #{unloaded.filename}"
|
104
|
+
end
|
105
|
+
|
106
|
+
load_path, logical_path = paths_split(config[:paths], unloaded.filename)
|
107
|
+
|
108
|
+
unless load_path
|
109
|
+
raise FileOutsidePaths, "#{unloaded.filename} is no longer under a load path: #{self.paths.join(', ')}"
|
110
|
+
end
|
111
|
+
|
112
|
+
logical_path, file_type, engine_extnames, _ = parse_path_extnames(logical_path)
|
113
|
+
name = logical_path
|
114
|
+
|
115
|
+
if pipeline = unloaded.params[:pipeline]
|
116
|
+
logical_path += ".#{pipeline}"
|
117
|
+
end
|
118
|
+
|
119
|
+
if type = unloaded.params[:type]
|
120
|
+
logical_path += config[:mime_types][type][:extensions].first
|
121
|
+
end
|
122
|
+
|
123
|
+
if type != file_type && !config[:transformers][file_type][type]
|
124
|
+
raise ConversionError, "could not convert #{file_type.inspect} to #{type.inspect}"
|
125
|
+
end
|
126
|
+
|
127
|
+
processors = processors_for(type, file_type, engine_extnames, pipeline)
|
128
|
+
|
129
|
+
processors_dep_uri = build_processors_uri(type, file_type, engine_extnames, pipeline)
|
130
|
+
dependencies = config[:dependencies] + [processors_dep_uri]
|
131
|
+
|
132
|
+
# Read into memory and process if theres a processor pipeline
|
133
|
+
if processors.any?
|
134
|
+
result = call_processors(processors, {
|
135
|
+
environment: self,
|
136
|
+
cache: self.cache,
|
137
|
+
uri: unloaded.uri,
|
138
|
+
filename: unloaded.filename,
|
139
|
+
load_path: load_path,
|
140
|
+
name: name,
|
141
|
+
content_type: type,
|
142
|
+
metadata: { dependencies: dependencies }
|
143
|
+
})
|
144
|
+
validate_processor_result!(result)
|
145
|
+
source = result.delete(:data)
|
146
|
+
metadata = result
|
147
|
+
metadata[:charset] = source.encoding.name.downcase unless metadata.key?(:charset)
|
148
|
+
metadata[:digest] = digest(source)
|
149
|
+
metadata[:length] = source.bytesize
|
150
|
+
else
|
151
|
+
dependencies << build_file_digest_uri(unloaded.filename)
|
152
|
+
metadata = {
|
153
|
+
digest: file_digest(unloaded.filename),
|
154
|
+
length: self.stat(unloaded.filename).size,
|
155
|
+
dependencies: dependencies
|
156
|
+
}
|
157
|
+
end
|
158
|
+
|
159
|
+
asset = {
|
160
|
+
uri: unloaded.uri,
|
161
|
+
load_path: load_path,
|
162
|
+
filename: unloaded.filename,
|
163
|
+
name: name,
|
164
|
+
logical_path: logical_path,
|
165
|
+
content_type: type,
|
166
|
+
source: source,
|
167
|
+
metadata: metadata,
|
168
|
+
dependencies_digest: DigestUtils.digest(resolve_dependencies(metadata[:dependencies]))
|
169
|
+
}
|
170
|
+
|
171
|
+
asset[:id] = pack_hexdigest(digest(asset))
|
172
|
+
asset[:uri] = build_asset_uri(unloaded.filename, unloaded.params.merge(id: asset[:id]))
|
173
|
+
|
174
|
+
# Deprecated: Avoid tracking Asset mtime
|
175
|
+
asset[:mtime] = metadata[:dependencies].map { |u|
|
176
|
+
if u.start_with?("file-digest:")
|
177
|
+
s = self.stat(parse_file_digest_uri(u))
|
178
|
+
s ? s.mtime.to_i : nil
|
179
|
+
else
|
180
|
+
nil
|
181
|
+
end
|
182
|
+
}.compact.max
|
183
|
+
asset[:mtime] ||= self.stat(unloaded.filename).mtime.to_i
|
184
|
+
|
185
|
+
store_asset(asset, unloaded)
|
186
|
+
asset
|
187
|
+
end
|
188
|
+
|
189
|
+
# Internal: Save a given asset to the cache
|
190
|
+
#
|
191
|
+
# asset - A hash containing values of loaded asset
|
192
|
+
# unloaded - The UnloadedAsset used to lookup the `asset`
|
193
|
+
#
|
194
|
+
# This method converts all absolute paths to "compressed" paths
|
195
|
+
# which are relative if they're in the root.
|
196
|
+
def store_asset(asset, unloaded)
|
197
|
+
# Save the asset in the cache under the new URI
|
198
|
+
cached_asset = asset.dup
|
199
|
+
cached_asset[:uri] = compress_from_root(asset[:uri])
|
200
|
+
cached_asset[:filename] = compress_from_root(asset[:filename])
|
201
|
+
cached_asset[:load_path] = compress_from_root(asset[:load_path])
|
202
|
+
|
203
|
+
if cached_asset[:metadata]
|
204
|
+
# Deep dup to avoid modifying `asset`
|
205
|
+
cached_asset[:metadata] = cached_asset[:metadata].dup
|
206
|
+
if cached_asset[:metadata][:included] && !cached_asset[:metadata][:included].empty?
|
207
|
+
cached_asset[:metadata][:included] = cached_asset[:metadata][:included].dup
|
208
|
+
cached_asset[:metadata][:included].map! { |uri| compress_from_root(uri) }
|
209
|
+
end
|
210
|
+
|
211
|
+
if cached_asset[:metadata][:links] && !cached_asset[:metadata][:links].empty?
|
212
|
+
cached_asset[:metadata][:links] = cached_asset[:metadata][:links].dup
|
213
|
+
cached_asset[:metadata][:links].map! { |uri| compress_from_root(uri) }
|
214
|
+
end
|
215
|
+
|
216
|
+
if cached_asset[:metadata][:stubbed] && !cached_asset[:metadata][:stubbed].empty?
|
217
|
+
cached_asset[:metadata][:stubbed] = cached_asset[:metadata][:stubbed].dup
|
218
|
+
cached_asset[:metadata][:stubbed].map! { |uri| compress_from_root(uri) }
|
219
|
+
end
|
220
|
+
|
221
|
+
if cached_asset[:metadata][:required] && !cached_asset[:metadata][:required].empty?
|
222
|
+
cached_asset[:metadata][:required] = cached_asset[:metadata][:required].dup
|
223
|
+
cached_asset[:metadata][:required].map! { |uri| compress_from_root(uri) }
|
224
|
+
end
|
225
|
+
|
226
|
+
if cached_asset[:metadata][:dependencies] && !cached_asset[:metadata][:dependencies].empty?
|
227
|
+
cached_asset[:metadata][:dependencies] = cached_asset[:metadata][:dependencies].dup
|
228
|
+
cached_asset[:metadata][:dependencies].map! do |uri|
|
229
|
+
uri.start_with?("file-digest://".freeze) ? compress_from_root(uri) : uri
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
# compress all _dependencies in metadata like `sass_dependencies`
|
234
|
+
cached_asset[:metadata].each do |key, value|
|
235
|
+
next unless key =~ /_dependencies\z/
|
236
|
+
cached_asset[:metadata][key] = value.dup
|
237
|
+
cached_asset[:metadata][key].map! {|uri| compress_from_root(uri) }
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
# Unloaded asset and stored_asset now have a different URI
|
242
|
+
stored_asset = UnloadedAsset.new(asset[:uri], self)
|
243
|
+
cache.set(stored_asset.asset_key, cached_asset, true)
|
244
|
+
|
245
|
+
# Save the new relative path for the digest key of the unloaded asset
|
246
|
+
cache.set(unloaded.digest_key(asset[:dependencies_digest]), stored_asset.compressed_path, true)
|
247
|
+
end
|
248
|
+
|
249
|
+
|
250
|
+
# Internal: Resolve set of dependency URIs.
|
251
|
+
#
|
252
|
+
# uris - An Array of "dependencies" for example:
|
253
|
+
# ["environment-version", "environment-paths", "processors:type=text/css&file_type=text/css",
|
254
|
+
# "file-digest:///Full/path/app/assets/stylesheets/application.css",
|
255
|
+
# "processors:type=text/css&file_type=text/css&pipeline=self",
|
256
|
+
# "file-digest:///Full/path/app/assets/stylesheets"]
|
257
|
+
#
|
258
|
+
# Returns back array of things that the given uri dpends on
|
259
|
+
# For example the environment version, if you're using a different version of sprockets
|
260
|
+
# then the dependencies should be different, this is used only for generating cache key
|
261
|
+
# for example the "environment-version" may be resolved to "environment-1.0-3.2.0" for
|
262
|
+
# version "3.2.0" of sprockets.
|
263
|
+
#
|
264
|
+
# Any paths that are returned are converted to relative paths
|
265
|
+
#
|
266
|
+
# Returns array of resolved dependencies
|
267
|
+
def resolve_dependencies(uris)
|
268
|
+
uris.map { |uri| resolve_dependency(uri) }
|
269
|
+
end
|
270
|
+
|
271
|
+
# Internal: Retrieves an asset based on its digest
|
272
|
+
#
|
273
|
+
# unloaded - An UnloadedAsset
|
274
|
+
# limit - A Fixnum which sets the maximum number of versions of "histories"
|
275
|
+
# stored in the cache
|
276
|
+
#
|
277
|
+
# This method attempts to retrieve the last `limit` number of histories of an asset
|
278
|
+
# from the cache a "history" which is an array of unresolved "dependencies" that the asset needs
|
279
|
+
# to compile. In this case A dependency can refer to either an asset i.e. index.js
|
280
|
+
# may rely on jquery.js (so jquery.js is a depndency), or other factors that may affect
|
281
|
+
# compilation, such as the VERSION of sprockets (i.e. the environment) and what "processors"
|
282
|
+
# are used.
|
283
|
+
#
|
284
|
+
# For example a history array may look something like this
|
285
|
+
#
|
286
|
+
# [["environment-version", "environment-paths", "processors:type=text/css&file_type=text/css",
|
287
|
+
# "file-digest:///Full/path/app/assets/stylesheets/application.css",
|
288
|
+
# "processors:type=text/css&file_digesttype=text/css&pipeline=self",
|
289
|
+
# "file-digest:///Full/path/app/assets/stylesheets"]]
|
290
|
+
#
|
291
|
+
# Where the first entry is a Set of dependencies for last generated version of that asset.
|
292
|
+
# Multiple versions are stored since sprockets keeps the last `limit` number of assets
|
293
|
+
# generated present in the system.
|
294
|
+
#
|
295
|
+
# If a "history" of dependencies is present in the cache, each version of "history" will be
|
296
|
+
# yielded to the passed block which is responsible for loading the asset. If found, the existing
|
297
|
+
# history will be saved with the dependency that found a valid asset moved to the front.
|
298
|
+
#
|
299
|
+
# If no history is present, or if none of the histories could be resolved to a valid asset then,
|
300
|
+
# the block is yielded to and expected to return a valid asset.
|
301
|
+
# When this happens the dependencies for the returned asset are added to the "history", and older
|
302
|
+
# entries are removed if the "history" is above `limit`.
|
303
|
+
def fetch_asset_from_dependency_cache(unloaded, limit = 3)
|
304
|
+
key = unloaded.dependency_history_key
|
305
|
+
|
306
|
+
history = cache.get(key) || []
|
307
|
+
history.each_with_index do |deps, index|
|
308
|
+
expanded_deps = deps.map do |path|
|
309
|
+
path.start_with?("file-digest://") ? expand_from_root(path) : path
|
310
|
+
end
|
311
|
+
if asset = yield(expanded_deps)
|
312
|
+
cache.set(key, history.rotate!(index)) if index > 0
|
313
|
+
return asset
|
314
|
+
end
|
315
|
+
end
|
316
|
+
|
317
|
+
asset = yield
|
318
|
+
deps = asset[:metadata][:dependencies].dup.map! do |uri|
|
319
|
+
uri.start_with?("file-digest://") ? compress_from_root(uri) : uri
|
320
|
+
end
|
321
|
+
cache.set(key, history.unshift(deps).take(limit))
|
322
|
+
asset
|
323
|
+
end
|
324
|
+
end
|
325
|
+
end
|
@@ -0,0 +1,335 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'time'
|
3
|
+
|
4
|
+
require 'concurrent'
|
5
|
+
|
6
|
+
require 'sprockets/manifest_utils'
|
7
|
+
require 'sprockets/utils/gzip'
|
8
|
+
|
9
|
+
module Sprockets
|
10
|
+
# The Manifest logs the contents of assets compiled to a single directory. It
|
11
|
+
# records basic attributes about the asset for fast lookup without having to
|
12
|
+
# compile. A pointer from each logical path indicates which fingerprinted
|
13
|
+
# asset is the current one.
|
14
|
+
#
|
15
|
+
# The JSON is part of the public API and should be considered stable. This
|
16
|
+
# should make it easy to read from other programming languages and processes
|
17
|
+
# that don't have sprockets loaded. See `#assets` and `#files` for more
|
18
|
+
# infomation about the structure.
|
19
|
+
class Manifest
|
20
|
+
include ManifestUtils
|
21
|
+
|
22
|
+
attr_reader :environment
|
23
|
+
|
24
|
+
# Create new Manifest associated with an `environment`. `filename` is a full
|
25
|
+
# path to the manifest json file. The file may or may not already exist. The
|
26
|
+
# dirname of the `filename` will be used to write compiled assets to.
|
27
|
+
# Otherwise, if the path is a directory, the filename will default a random
|
28
|
+
# ".sprockets-manifest-*.json" file in that directory.
|
29
|
+
#
|
30
|
+
# Manifest.new(environment, "./public/assets/manifest.json")
|
31
|
+
#
|
32
|
+
def initialize(*args)
|
33
|
+
if args.first.is_a?(Base) || args.first.nil?
|
34
|
+
@environment = args.shift
|
35
|
+
end
|
36
|
+
|
37
|
+
@directory, @filename = args[0], args[1]
|
38
|
+
|
39
|
+
# Whether the manifest file is using the old manifest-*.json naming convention
|
40
|
+
@legacy_manifest = false
|
41
|
+
|
42
|
+
# Expand paths
|
43
|
+
@directory = File.expand_path(@directory) if @directory
|
44
|
+
@filename = File.expand_path(@filename) if @filename
|
45
|
+
|
46
|
+
# If filename is given as the second arg
|
47
|
+
if @directory && File.extname(@directory) != ""
|
48
|
+
@directory, @filename = nil, @directory
|
49
|
+
end
|
50
|
+
|
51
|
+
# Default dir to the directory of the filename
|
52
|
+
@directory ||= File.dirname(@filename) if @filename
|
53
|
+
|
54
|
+
# If directory is given w/o filename, pick a random manifest location
|
55
|
+
@rename_filename = nil
|
56
|
+
if @directory && @filename.nil?
|
57
|
+
@filename = find_directory_manifest(@directory)
|
58
|
+
|
59
|
+
# If legacy manifest name autodetected, mark to rename on save
|
60
|
+
if File.basename(@filename).start_with?("manifest")
|
61
|
+
@rename_filename = File.join(@directory, generate_manifest_path)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
unless @directory && @filename
|
66
|
+
raise ArgumentError, "manifest requires output filename"
|
67
|
+
end
|
68
|
+
|
69
|
+
data = {}
|
70
|
+
|
71
|
+
begin
|
72
|
+
if File.exist?(@filename)
|
73
|
+
data = json_decode(File.read(@filename))
|
74
|
+
end
|
75
|
+
rescue JSON::ParserError => e
|
76
|
+
logger.error "#{@filename} is invalid: #{e.class} #{e.message}"
|
77
|
+
end
|
78
|
+
|
79
|
+
@data = data
|
80
|
+
end
|
81
|
+
|
82
|
+
# Returns String path to manifest.json file.
|
83
|
+
attr_reader :filename
|
84
|
+
alias_method :path, :filename
|
85
|
+
|
86
|
+
attr_reader :directory
|
87
|
+
alias_method :dir, :directory
|
88
|
+
|
89
|
+
# Returns internal assets mapping. Keys are logical paths which
|
90
|
+
# map to the latest fingerprinted filename.
|
91
|
+
#
|
92
|
+
# Logical path (String): Fingerprint path (String)
|
93
|
+
#
|
94
|
+
# { "application.js" => "application-2e8e9a7c6b0aafa0c9bdeec90ea30213.js",
|
95
|
+
# "jquery.js" => "jquery-ae0908555a245f8266f77df5a8edca2e.js" }
|
96
|
+
#
|
97
|
+
def assets
|
98
|
+
@data['assets'] ||= {}
|
99
|
+
end
|
100
|
+
|
101
|
+
# Returns internal file directory listing. Keys are filenames
|
102
|
+
# which map to an attributes array.
|
103
|
+
#
|
104
|
+
# Fingerprint path (String):
|
105
|
+
# logical_path: Logical path (String)
|
106
|
+
# mtime: ISO8601 mtime (String)
|
107
|
+
# digest: Base64 hex digest (String)
|
108
|
+
#
|
109
|
+
# { "application-2e8e9a7c6b0aafa0c9bdeec90ea30213.js" =>
|
110
|
+
# { 'logical_path' => "application.js",
|
111
|
+
# 'mtime' => "2011-12-13T21:47:08-06:00",
|
112
|
+
# 'digest' => "2e8e9a7c6b0aafa0c9bdeec90ea30213" } }
|
113
|
+
#
|
114
|
+
def files
|
115
|
+
@data['files'] ||= {}
|
116
|
+
end
|
117
|
+
|
118
|
+
# Public: Find all assets matching pattern set in environment.
|
119
|
+
#
|
120
|
+
# Returns Enumerator of Assets.
|
121
|
+
def find(*args)
|
122
|
+
unless environment
|
123
|
+
raise Error, "manifest requires environment for compilation"
|
124
|
+
end
|
125
|
+
|
126
|
+
return to_enum(__method__, *args) unless block_given?
|
127
|
+
|
128
|
+
paths, filters = args.flatten.partition { |arg| self.class.simple_logical_path?(arg) }
|
129
|
+
filters = filters.map { |arg| self.class.compile_match_filter(arg) }
|
130
|
+
|
131
|
+
environment = self.environment.cached
|
132
|
+
|
133
|
+
paths.each do |path|
|
134
|
+
environment.find_all_linked_assets(path) do |asset|
|
135
|
+
yield asset
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
if filters.any?
|
140
|
+
environment.logical_paths do |logical_path, filename|
|
141
|
+
if filters.any? { |f| f.call(logical_path, filename) }
|
142
|
+
environment.find_all_linked_assets(filename) do |asset|
|
143
|
+
yield asset
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
nil
|
150
|
+
end
|
151
|
+
|
152
|
+
# Public: Find the source of assets by paths.
|
153
|
+
#
|
154
|
+
# Returns Enumerator of assets file content.
|
155
|
+
def find_sources(*args)
|
156
|
+
return to_enum(__method__, *args) unless block_given?
|
157
|
+
|
158
|
+
if environment
|
159
|
+
find(*args).each do |asset|
|
160
|
+
yield asset.source
|
161
|
+
end
|
162
|
+
else
|
163
|
+
args.each do |path|
|
164
|
+
yield File.binread(File.join(dir, assets[path]))
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
# Compile and write asset to directory. The asset is written to a
|
170
|
+
# fingerprinted filename like
|
171
|
+
# `application-2e8e9a7c6b0aafa0c9bdeec90ea30213.js`. An entry is
|
172
|
+
# also inserted into the manifest file.
|
173
|
+
#
|
174
|
+
# compile("application.js")
|
175
|
+
#
|
176
|
+
def compile(*args)
|
177
|
+
unless environment
|
178
|
+
raise Error, "manifest requires environment for compilation"
|
179
|
+
end
|
180
|
+
|
181
|
+
filenames = []
|
182
|
+
concurrent_compressors = []
|
183
|
+
concurrent_writers = []
|
184
|
+
|
185
|
+
find(*args) do |asset|
|
186
|
+
files[asset.digest_path] = {
|
187
|
+
'logical_path' => asset.logical_path,
|
188
|
+
'mtime' => asset.mtime.iso8601,
|
189
|
+
'size' => asset.bytesize,
|
190
|
+
'digest' => asset.hexdigest,
|
191
|
+
|
192
|
+
# Deprecated: Remove beta integrity attribute in next release.
|
193
|
+
# Callers should DigestUtils.hexdigest_integrity_uri to compute the
|
194
|
+
# digest themselves.
|
195
|
+
'integrity' => DigestUtils.hexdigest_integrity_uri(asset.hexdigest)
|
196
|
+
}
|
197
|
+
assets[asset.logical_path] = asset.digest_path
|
198
|
+
|
199
|
+
if alias_logical_path = self.class.compute_alias_logical_path(asset.logical_path)
|
200
|
+
assets[alias_logical_path] = asset.digest_path
|
201
|
+
end
|
202
|
+
|
203
|
+
target = File.join(dir, asset.digest_path)
|
204
|
+
|
205
|
+
if File.exist?(target)
|
206
|
+
logger.debug "Skipping #{target}, already exists"
|
207
|
+
else
|
208
|
+
logger.info "Writing #{target}"
|
209
|
+
write_file = Concurrent::Future.execute { asset.write_to target }
|
210
|
+
concurrent_writers << write_file
|
211
|
+
end
|
212
|
+
filenames << asset.filename
|
213
|
+
|
214
|
+
next if environment.skip_gzip?
|
215
|
+
gzip = Utils::Gzip.new(asset)
|
216
|
+
next if gzip.cannot_compress?(environment.mime_types)
|
217
|
+
|
218
|
+
if File.exist?("#{target}.gz")
|
219
|
+
logger.debug "Skipping #{target}.gz, already exists"
|
220
|
+
else
|
221
|
+
logger.info "Writing #{target}.gz"
|
222
|
+
concurrent_compressors << Concurrent::Future.execute do
|
223
|
+
write_file.wait! if write_file
|
224
|
+
gzip.compress(target)
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
end
|
229
|
+
concurrent_writers.each(&:wait!)
|
230
|
+
concurrent_compressors.each(&:wait!)
|
231
|
+
save
|
232
|
+
|
233
|
+
filenames
|
234
|
+
end
|
235
|
+
|
236
|
+
# Removes file from directory and from manifest. `filename` must
|
237
|
+
# be the name with any directory path.
|
238
|
+
#
|
239
|
+
# manifest.remove("application-2e8e9a7c6b0aafa0c9bdeec90ea30213.js")
|
240
|
+
#
|
241
|
+
def remove(filename)
|
242
|
+
path = File.join(dir, filename)
|
243
|
+
gzip = "#{path}.gz"
|
244
|
+
logical_path = files[filename]['logical_path']
|
245
|
+
|
246
|
+
if assets[logical_path] == filename
|
247
|
+
assets.delete(logical_path)
|
248
|
+
end
|
249
|
+
|
250
|
+
files.delete(filename)
|
251
|
+
FileUtils.rm(path) if File.exist?(path)
|
252
|
+
FileUtils.rm(gzip) if File.exist?(gzip)
|
253
|
+
|
254
|
+
save
|
255
|
+
|
256
|
+
logger.info "Removed #{filename}"
|
257
|
+
|
258
|
+
nil
|
259
|
+
end
|
260
|
+
|
261
|
+
# Cleanup old assets in the compile directory. By default it will
|
262
|
+
# keep the latest version, 2 backups and any created within the past hour.
|
263
|
+
#
|
264
|
+
# Examples
|
265
|
+
#
|
266
|
+
# To force only 1 backup to be kept, set count=1 and age=0.
|
267
|
+
#
|
268
|
+
# To only keep files created within the last 10 minutes, set count=0 and
|
269
|
+
# age=600.
|
270
|
+
#
|
271
|
+
def clean(count = 2, age = 3600)
|
272
|
+
asset_versions = files.group_by { |_, attrs| attrs['logical_path'] }
|
273
|
+
|
274
|
+
asset_versions.each do |logical_path, versions|
|
275
|
+
current = assets[logical_path]
|
276
|
+
|
277
|
+
versions.reject { |path, _|
|
278
|
+
path == current
|
279
|
+
}.sort_by { |_, attrs|
|
280
|
+
# Sort by timestamp
|
281
|
+
Time.parse(attrs['mtime'])
|
282
|
+
}.reverse.each_with_index.drop_while { |(_, attrs), index|
|
283
|
+
_age = [0, Time.now - Time.parse(attrs['mtime'])].max
|
284
|
+
# Keep if under age or within the count limit
|
285
|
+
_age < age || index < count
|
286
|
+
}.each { |(path, _), _|
|
287
|
+
# Remove old assets
|
288
|
+
remove(path)
|
289
|
+
}
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
293
|
+
# Wipe directive
|
294
|
+
def clobber
|
295
|
+
FileUtils.rm_r(directory) if File.exist?(directory)
|
296
|
+
logger.info "Removed #{directory}"
|
297
|
+
nil
|
298
|
+
end
|
299
|
+
|
300
|
+
# Persist manfiest back to FS
|
301
|
+
def save
|
302
|
+
if @rename_filename
|
303
|
+
logger.info "Renaming #{@filename} to #{@rename_filename}"
|
304
|
+
FileUtils.mv(@filename, @rename_filename)
|
305
|
+
@filename = @rename_filename
|
306
|
+
@rename_filename = nil
|
307
|
+
end
|
308
|
+
|
309
|
+
data = json_encode(@data)
|
310
|
+
FileUtils.mkdir_p File.dirname(@filename)
|
311
|
+
PathUtils.atomic_write(@filename) do |f|
|
312
|
+
f.write(data)
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
316
|
+
private
|
317
|
+
def json_decode(obj)
|
318
|
+
JSON.parse(obj, create_additions: false)
|
319
|
+
end
|
320
|
+
|
321
|
+
def json_encode(obj)
|
322
|
+
JSON.generate(obj)
|
323
|
+
end
|
324
|
+
|
325
|
+
def logger
|
326
|
+
if environment
|
327
|
+
environment.logger
|
328
|
+
else
|
329
|
+
logger = Logger.new($stderr)
|
330
|
+
logger.level = Logger::FATAL
|
331
|
+
logger
|
332
|
+
end
|
333
|
+
end
|
334
|
+
end
|
335
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
|
3
|
+
module Sprockets
|
4
|
+
# Public: Manifest utilities.
|
5
|
+
module ManifestUtils
|
6
|
+
extend self
|
7
|
+
|
8
|
+
MANIFEST_RE = /^\.sprockets-manifest-[0-9a-f]{32}.json$/
|
9
|
+
LEGACY_MANIFEST_RE = /^manifest(-[0-9a-f]{32})?.json$/
|
10
|
+
|
11
|
+
# Public: Generate a new random manifest path.
|
12
|
+
#
|
13
|
+
# Manifests are not intended to be accessed publicly, but typically live
|
14
|
+
# alongside public assets for convenience. To avoid being served, the
|
15
|
+
# filename is prefixed with a "." which is usually hidden by web servers
|
16
|
+
# like Apache. To help in other environments that may not control this,
|
17
|
+
# a random hex string is appended to the filename to prevent people from
|
18
|
+
# guessing the location. If directory indexes are enabled on the server,
|
19
|
+
# all bets are off.
|
20
|
+
#
|
21
|
+
# Return String path.
|
22
|
+
def generate_manifest_path
|
23
|
+
".sprockets-manifest-#{SecureRandom.hex(16)}.json"
|
24
|
+
end
|
25
|
+
|
26
|
+
# Public: Find or pick a new manifest filename for target build directory.
|
27
|
+
#
|
28
|
+
# dirname - String dirname
|
29
|
+
#
|
30
|
+
# Examples
|
31
|
+
#
|
32
|
+
# find_directory_manifest("/app/public/assets")
|
33
|
+
# # => "/app/public/assets/.sprockets-manifest-abc123.json"
|
34
|
+
#
|
35
|
+
# Returns String filename.
|
36
|
+
def find_directory_manifest(dirname)
|
37
|
+
entries = File.directory?(dirname) ? Dir.entries(dirname) : []
|
38
|
+
entry = entries.find { |e| e =~ MANIFEST_RE } ||
|
39
|
+
# Deprecated: Will be removed in 4.x
|
40
|
+
entries.find { |e| e =~ LEGACY_MANIFEST_RE } ||
|
41
|
+
generate_manifest_path
|
42
|
+
File.join(dirname, entry)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|