bpm 0.1.4 → 1.0.0.beta.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +20 -0
- data/README.md +1 -1
- data/TODO.md +90 -2
- data/bpm.gemspec +3 -3
- data/lib/bpm/cli/base.rb +103 -52
- data/lib/bpm/errors.rb +51 -0
- data/lib/bpm/init_generator.rb +1 -8
- data/lib/bpm/libgems_ext/libgems.rb +9 -0
- data/lib/bpm/local.rb +6 -11
- data/lib/bpm/package.rb +272 -178
- data/lib/bpm/pipeline/generated_asset.rb +88 -28
- data/lib/bpm/pipeline/plugin_asset.rb +8 -2
- data/lib/bpm/pipeline/source_url_processor.rb +16 -0
- data/lib/bpm/pipeline/transport_processor.rb +5 -3
- data/lib/bpm/pipeline.rb +33 -23
- data/lib/bpm/project.rb +492 -167
- data/lib/bpm/project_generator.rb +14 -1
- data/lib/bpm/remote.rb +6 -4
- data/lib/bpm/server.rb +4 -15
- data/lib/bpm/version.rb +2 -1
- data/lib/bpm.rb +2 -0
- data/man/bpm-add.1.ronn +22 -0
- data/man/bpm-build.1.ronn +22 -0
- data/man/bpm-compile.1.ronn +23 -0
- data/man/bpm-config.7.ronn +21 -0
- data/man/bpm-fetch.1.ronn +22 -0
- data/man/bpm-fetched.1.ronn +22 -0
- data/man/bpm-init.1.ronn +22 -0
- data/man/bpm-list.1.ronn +22 -0
- data/man/bpm-login.1.ronn +22 -0
- data/man/bpm-new.1.ronn +22 -0
- data/man/bpm-owner.1.ronn +22 -0
- data/man/bpm-preview.1.ronn +22 -0
- data/man/bpm-push.1.ronn +22 -0
- data/man/bpm-remove.1.ronn +22 -0
- data/man/bpm-unpack.1.ronn +22 -0
- data/man/bpm-yank.1.ronn +22 -0
- data/man/bpm.1.ronn +31 -0
- data/spec/cli/add_spec.rb +26 -7
- data/spec/cli/fetch_spec.rb +15 -6
- data/spec/cli/init_spec.rb +165 -25
- data/spec/cli/{build_spec.rb → pack_spec.rb} +9 -10
- data/spec/cli/push_spec.rb +4 -4
- data/spec/cli/rebuild_spec.rb +181 -0
- data/spec/cli/remove_spec.rb +3 -4
- data/spec/cli/unpack_spec.rb +6 -6
- data/spec/fixtures/gems/core-test-0.4.9.bpkg +0 -0
- data/spec/fixtures/{core-test-0.4.9.bpkg → gems/uglify-js-1.0.4.bpkg} +0 -0
- data/spec/fixtures/packages/core-test/extras/extra_file.html +3 -0
- data/spec/fixtures/packages/core-test/index.html +3 -0
- data/spec/fixtures/{core-test → packages/core-test}/package.json +9 -3
- data/spec/fixtures/packages/invalid_json/package.json +3 -0
- data/spec/fixtures/packages/uglify-js/README.html +825 -0
- data/spec/fixtures/packages/uglify-js/README.org +431 -0
- data/spec/fixtures/packages/uglify-js/bin/uglifyjs +305 -0
- data/spec/fixtures/packages/uglify-js/docstyle.css +75 -0
- data/spec/fixtures/packages/uglify-js/lib/parse-js.js +1 -0
- data/spec/fixtures/packages/uglify-js/lib/process.js +1 -0
- data/spec/fixtures/packages/uglify-js/lib/squeeze-more.js +1 -0
- data/spec/fixtures/packages/uglify-js/package.json +27 -0
- data/spec/fixtures/packages/uglify-js/plugins/minifier.js +6 -0
- data/spec/fixtures/packages/uglify-js/uglify-js.js +17 -0
- data/spec/fixtures/projects/hello2/README.md +21 -0
- data/{templates/init → spec/fixtures/projects/hello2}/assets/bpm_packages.js +6 -1
- data/{templates/init → spec/fixtures/projects/hello2}/assets/bpm_styles.css +1 -1
- data/spec/fixtures/projects/hello2/hello2.json +16 -0
- data/spec/fixtures/projects/hello2/index.html +13 -0
- data/spec/fixtures/projects/hello2/packages/a/lib/main.js +2 -0
- data/spec/fixtures/projects/hello2/packages/a/package.json +17 -0
- data/spec/fixtures/projects/hello2/packages/b/lib/main.js +2 -0
- data/spec/fixtures/projects/hello2/packages/b/package.json +17 -0
- data/spec/fixtures/projects/hello2/packages/c/lib/main.js +2 -0
- data/spec/fixtures/projects/hello2/packages/c/package.json +16 -0
- data/spec/fixtures/projects/hello_dev/LICENSE +19 -0
- data/spec/fixtures/projects/hello_dev/README.md +21 -0
- data/spec/fixtures/projects/hello_dev/app/main.js +6 -0
- data/spec/fixtures/projects/hello_dev/assets/bpm_libs.js +5 -0
- data/spec/fixtures/projects/hello_dev/assets/bpm_styles.css +6 -0
- data/spec/fixtures/projects/hello_dev/css/main.css +1 -0
- data/spec/fixtures/projects/hello_dev/hello_dev.json +25 -0
- data/spec/fixtures/projects/hello_dev/index.html +14 -0
- data/spec/fixtures/projects/hello_dev/packages/style_package/css/some_style.css +3 -0
- data/spec/fixtures/{minitest/minitest.json → projects/hello_dev/packages/style_package/package.json} +5 -9
- data/spec/fixtures/projects/hello_world/LICENSE +19 -0
- data/spec/fixtures/projects/hello_world/assets/bpm_packages.js +1 -0
- data/spec/fixtures/projects/hello_world/assets/bpm_styles.css +1 -0
- data/spec/fixtures/projects/hello_world/custom_dir/custom.js +1 -0
- data/spec/fixtures/projects/hello_world/hello_world.json +41 -0
- data/spec/fixtures/projects/hello_world/lib/another.js +1 -0
- data/spec/fixtures/{hello_world → projects/hello_world}/packages/custom_package/package.json +5 -2
- data/spec/fixtures/projects/hello_world/vendor/lib/something.js +1 -0
- data/spec/fixtures/projects/init_app/assets/bpm_libs.js +6 -0
- data/spec/fixtures/projects/init_app/assets/bpm_styles.css +5 -0
- data/spec/fixtures/projects/init_app/assets/new_project/bpm_libs.js +6 -0
- data/spec/fixtures/projects/init_app/assets/new_project/bpm_styles.css +5 -0
- data/spec/fixtures/projects/init_app/new_project.json +27 -0
- data/spec/fixtures/projects/init_default/assets/bpm_libs.js +6 -0
- data/spec/fixtures/projects/init_default/assets/bpm_styles.css +5 -0
- data/spec/fixtures/projects/init_default/new_project.json +15 -0
- data/spec/fixtures/projects/minitest/minitest.json +26 -0
- data/spec/fixtures/{minitest → projects/minitest}/packages/uglyduck/package.json +1 -1
- data/spec/fixtures/projects/needs_rake/needs_rake.json +7 -0
- data/spec/fixtures/{transporter → projects/transporter}/packages/transport/package.json +1 -1
- data/spec/package_spec.rb +343 -315
- data/spec/pipeline_spec.rb +89 -71
- data/spec/plugins/minifier_spec.rb +25 -16
- data/spec/plugins/transport_spec.rb +1 -1
- data/spec/project_spec.rb +97 -34
- data/spec/spec_helper.rb +41 -0
- data/spec/support/fake_gem_server.rb +8 -4
- data/spec/support/path.rb +8 -0
- data/spec/support/project.rb +50 -17
- data/templates/init/project.json +12 -14
- data/templates/project/LICENSE +1 -1
- data/templates/project/app/main.js +6 -0
- data/templates/project/css/main.css +1 -0
- data/templates/project/index.html +4 -3
- data/vendor/sprockets/.travis.yml +3 -2
- data/vendor/sprockets/Gemfile +0 -6
- data/vendor/sprockets/lib/sprockets/asset.rb +7 -12
- data/vendor/sprockets/lib/sprockets/asset_attributes.rb +70 -53
- data/vendor/sprockets/lib/sprockets/base.rb +1 -14
- data/vendor/sprockets/lib/sprockets/bundled_asset.rb +72 -45
- data/vendor/sprockets/lib/sprockets/caching.rb +28 -23
- data/vendor/sprockets/lib/sprockets/context.rb +56 -26
- data/vendor/sprockets/lib/sprockets/directive_processor.rb +21 -4
- data/vendor/sprockets/lib/sprockets/eco_template.rb +3 -4
- data/vendor/sprockets/lib/sprockets/ejs_template.rb +3 -4
- data/vendor/sprockets/lib/sprockets/engines.rb +26 -1
- data/vendor/sprockets/lib/sprockets/environment.rb +2 -1
- data/vendor/sprockets/lib/sprockets/index.rb +1 -0
- data/vendor/sprockets/lib/sprockets/mime.rb +38 -0
- data/vendor/sprockets/lib/sprockets/processing.rb +4 -45
- data/vendor/sprockets/lib/sprockets/static_asset.rb +5 -6
- data/vendor/sprockets/lib/sprockets/static_compilation.rb +4 -12
- data/vendor/sprockets/lib/sprockets/trail.rb +2 -1
- data/vendor/sprockets/test/fixtures/default/blank.gif +0 -0
- data/vendor/sprockets/test/fixtures/default/with_data_uri.css.erb +3 -0
- data/vendor/sprockets/test/test_asset.rb +121 -15
- data/vendor/sprockets/test/test_asset_attributes.rb +85 -21
- data/vendor/sprockets/test/test_environment.rb +13 -36
- metadata +564 -444
- data/spec/cli/new_spec.rb +0 -118
- data/spec/fixtures/hello_world/assets/bpm_packages.js +0 -13
- data/spec/fixtures/hello_world/assets/bpm_styles.css +0 -14
- data/spec/fixtures/hello_world/hello_world.json +0 -20
- /data/spec/fixtures/{badrake-0.8.7.bpkg → gems/badrake-0.8.7.bpkg} +0 -0
- /data/spec/fixtures/{builder-3.0.0.bpkg → gems/builder-3.0.0.bpkg} +0 -0
- /data/spec/fixtures/{bundler-1.1.pre.bpkg → gems/bundler-1.1.pre.bpkg} +0 -0
- /data/spec/fixtures/{coffee-1.0.1.pre.bpkg → gems/coffee-1.0.1.pre.bpkg} +0 -0
- /data/spec/fixtures/{custom_generator-1.0.bpkg → gems/custom_generator-1.0.bpkg} +0 -0
- /data/spec/fixtures/{highline-1.6.1.bpkg → gems/highline-1.6.1.bpkg} +0 -0
- /data/spec/fixtures/{ivory-0.0.1.bpkg → gems/ivory-0.0.1.bpkg} +0 -0
- /data/spec/fixtures/{jquery-1.4.3.bpkg → gems/jquery-1.4.3.bpkg} +0 -0
- /data/spec/fixtures/{optparse-1.0.1.bpkg → gems/optparse-1.0.1.bpkg} +0 -0
- /data/spec/fixtures/{rake-0.8.6.bpkg → gems/rake-0.8.6.bpkg} +0 -0
- /data/spec/fixtures/{rake-0.8.7.bpkg → gems/rake-0.8.7.bpkg} +0 -0
- /data/spec/fixtures/{spade-0.5.0.bpkg → gems/spade-0.5.0.bpkg} +0 -0
- /data/spec/fixtures/{src → packages}/README.txt +0 -0
- /data/spec/fixtures/{src → packages}/bundler-1.1.pre/.gitignore +0 -0
- /data/spec/fixtures/{src → packages}/bundler-1.1.pre/CHANGELOG.md +0 -0
- /data/spec/fixtures/{src → packages}/bundler-1.1.pre/ISSUES.md +0 -0
- /data/spec/fixtures/{src → packages}/bundler-1.1.pre/LICENSE +0 -0
- /data/spec/fixtures/{src → packages}/bundler-1.1.pre/README.md +0 -0
- /data/spec/fixtures/{src → packages}/bundler-1.1.pre/UPGRADING.md +0 -0
- /data/spec/fixtures/{src → packages}/bundler-1.1.pre/bin/bundle +0 -0
- /data/spec/fixtures/{src → packages}/bundler-1.1.pre/lib/bundler/definition.js +0 -0
- /data/spec/fixtures/{src → packages}/bundler-1.1.pre/lib/bundler/dependency.js +0 -0
- /data/spec/fixtures/{src → packages}/bundler-1.1.pre/lib/bundler/dsl.js +0 -0
- /data/spec/fixtures/{src → packages}/bundler-1.1.pre/lib/bundler/ui.js +0 -0
- /data/spec/fixtures/{src → packages}/bundler-1.1.pre/lib/bundler.js +0 -0
- /data/spec/fixtures/{src → packages}/bundler-1.1.pre/man/bundle-config.ronn +0 -0
- /data/spec/fixtures/{src → packages}/bundler-1.1.pre/man/bundle-exec.ronn +0 -0
- /data/spec/fixtures/{src → packages}/bundler-1.1.pre/man/bundle-install.ronn +0 -0
- /data/spec/fixtures/{src → packages}/bundler-1.1.pre/man/bundle-package.ronn +0 -0
- /data/spec/fixtures/{src → packages}/bundler-1.1.pre/man/bundle-update.ronn +0 -0
- /data/spec/fixtures/{src → packages}/bundler-1.1.pre/man/bundle.ronn +0 -0
- /data/spec/fixtures/{src → packages}/bundler-1.1.pre/man/gemfile.5.ronn +0 -0
- /data/spec/fixtures/{src → packages}/bundler-1.1.pre/man/index.txt +0 -0
- /data/spec/fixtures/{src → packages}/bundler-1.1.pre/package.json +0 -0
- /data/spec/fixtures/{src → packages}/coffee-1.0.1.pre/bin/cake +0 -0
- /data/spec/fixtures/{src → packages}/coffee-1.0.1.pre/bin/coffee +0 -0
- /data/spec/fixtures/{src → packages}/coffee-1.0.1.pre/lib/coffee/base.js +0 -0
- /data/spec/fixtures/{src → packages}/coffee-1.0.1.pre/lib/coffee/mocha/chai.js +0 -0
- /data/spec/fixtures/{src → packages}/coffee-1.0.1.pre/lib/coffee.js +0 -0
- /data/spec/fixtures/{src → packages}/coffee-1.0.1.pre/package.json +0 -0
- /data/spec/fixtures/{src → packages}/coffee-1.0.1.pre/qunit/coffee/test.js +0 -0
- /data/spec/fixtures/{src → packages}/coffee-1.0.1.pre/qunit/test.js +0 -0
- /data/spec/fixtures/{core-test → packages/core-test}/bin/cot +0 -0
- /data/spec/fixtures/{core-test → packages/core-test}/lib/main.js +0 -0
- /data/spec/fixtures/{core-test → packages/core-test}/resources/runner.css +0 -0
- /data/spec/fixtures/{core-test → packages/core-test}/tests/test.js +0 -0
- /data/spec/fixtures/{custom_generator → packages/custom_generator}/lib/main.js +0 -0
- /data/spec/fixtures/{custom_generator → packages/custom_generator}/package.json +0 -0
- /data/spec/fixtures/{custom_generator → packages/custom_generator}/templates/init/project.json +0 -0
- /data/spec/fixtures/{custom_generator → packages/custom_generator}/templates/project/app.js +0 -0
- /data/spec/fixtures/{custom_generator → packages/custom_generator}/templates/project/lib/main.js +0 -0
- /data/spec/fixtures/{custom_generator → packages/custom_generator}/templates/project_generator.rb +0 -0
- /data/spec/fixtures/{src → packages}/jquery/lib/main.js +0 -0
- /data/spec/fixtures/{src → packages}/jquery/package.json +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/CHANGES +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/MIT-LICENSE +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/README +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/Rakefile +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/TODO +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/bin/rake +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/command_line_usage.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/example/Rakefile1 +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/example/Rakefile2 +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/example/a.c +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/example/b.c +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/example/main.c +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/glossary.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/jamis.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/proto_rake.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/rake.1.gz +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/rakefile.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/rational.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/release_notes/rake-0.4.14.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/release_notes/rake-0.4.15.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/release_notes/rake-0.5.0.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/release_notes/rake-0.5.3.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/release_notes/rake-0.5.4.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/release_notes/rake-0.6.0.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/release_notes/rake-0.7.0.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/release_notes/rake-0.7.1.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/release_notes/rake-0.7.2.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/release_notes/rake-0.7.3.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/release_notes/rake-0.8.0.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/release_notes/rake-0.8.2.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/release_notes/rake-0.8.3.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/release_notes/rake-0.8.4.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/release_notes/rake-0.8.5.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/doc/release_notes/rake-0.8.6.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/install.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/lib/rake/alt_system.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/lib/rake/classic_namespace.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/lib/rake/clean.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/lib/rake/contrib/compositepublisher.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/lib/rake/contrib/ftptools.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/lib/rake/contrib/publisher.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/lib/rake/contrib/rubyforgepublisher.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/lib/rake/contrib/sshpublisher.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/lib/rake/contrib/sys.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/lib/rake/gempackagetask.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/lib/rake/loaders/makefile.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/lib/rake/packagetask.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/lib/rake/rake_test_loader.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/lib/rake/rdoctask.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/lib/rake/ruby182_test_unit_fix.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/lib/rake/runtest.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/lib/rake/tasklib.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/lib/rake/testtask.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/lib/rake/win32.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/lib/rake.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/package.json +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.6/test/capture_stdout.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/CHANGES +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/MIT-LICENSE +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/README +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/Rakefile +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/TODO +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/bin/rake +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/command_line_usage.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/example/Rakefile1 +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/example/Rakefile2 +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/example/a.c +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/example/b.c +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/example/main.c +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/glossary.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/jamis.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/proto_rake.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/rake.1.gz +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/rakefile.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/rational.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/release_notes/rake-0.4.14.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/release_notes/rake-0.4.15.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/release_notes/rake-0.5.0.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/release_notes/rake-0.5.3.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/release_notes/rake-0.5.4.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/release_notes/rake-0.6.0.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/release_notes/rake-0.7.0.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/release_notes/rake-0.7.1.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/release_notes/rake-0.7.2.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/release_notes/rake-0.7.3.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/release_notes/rake-0.8.0.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/release_notes/rake-0.8.2.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/release_notes/rake-0.8.3.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/release_notes/rake-0.8.4.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/release_notes/rake-0.8.5.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/release_notes/rake-0.8.6.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/doc/release_notes/rake-0.8.7.rdoc +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/install.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/lib/rake/alt_system.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/lib/rake/classic_namespace.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/lib/rake/clean.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/lib/rake/contrib/compositepublisher.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/lib/rake/contrib/ftptools.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/lib/rake/contrib/publisher.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/lib/rake/contrib/rubyforgepublisher.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/lib/rake/contrib/sshpublisher.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/lib/rake/contrib/sys.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/lib/rake/gempackagetask.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/lib/rake/loaders/makefile.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/lib/rake/packagetask.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/lib/rake/rake_test_loader.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/lib/rake/rdoctask.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/lib/rake/ruby182_test_unit_fix.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/lib/rake/runtest.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/lib/rake/tasklib.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/lib/rake/testtask.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/lib/rake/win32.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/lib/rake.rb +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/package.json +0 -0
- /data/spec/fixtures/{src → packages}/rake-0.8.7/test/capture_stdout.rb +0 -0
- /data/spec/fixtures/{src → packages}/spade/lib/main.js +0 -0
- /data/spec/fixtures/{src → packages}/spade/package.json +0 -0
- /data/spec/fixtures/{custom_name → projects/custom_name}/MyProject.json +0 -0
- /data/spec/fixtures/{hello_world → projects/hello2}/LICENSE +0 -0
- /data/{templates/project → spec/fixtures/projects/hello2}/app.js +0 -0
- /data/spec/fixtures/{hello_world → projects/hello_world}/README.md +0 -0
- /data/spec/fixtures/{hello_world → projects/hello_world}/assets/papa-smurf.jpg +0 -0
- /data/spec/fixtures/{hello_world → projects/hello_world}/css/dummy.css +0 -0
- /data/spec/fixtures/{hello_world → projects/hello_world}/lib/main.js +0 -0
- /data/spec/fixtures/{hello_world → projects/hello_world}/packages/custom_package/assets/dummy.txt +0 -0
- /data/spec/fixtures/{hello_world → projects/hello_world}/packages/custom_package/css/sample_styles.css +0 -0
- /data/spec/fixtures/{hello_world → projects/hello_world}/packages/custom_package/custom_dir/basic-module.js +0 -0
- /data/spec/fixtures/{hello_world → projects/hello_world}/packages/custom_package/lib/main.js +0 -0
- /data/spec/fixtures/{hello_world → projects/hello_world}/tests/main-test.js +0 -0
- /data/spec/fixtures/{minitest → projects/minitest}/assets/bpm_packages.js +0 -0
- /data/spec/fixtures/{minitest → projects/minitest}/assets/bpm_styles.css +0 -0
- /data/spec/fixtures/{minitest → projects/minitest}/assets/minitest/app_package.js +0 -0
- /data/spec/fixtures/{minitest → projects/minitest}/lib/main.js +0 -0
- /data/spec/fixtures/{minitest → projects/minitest}/packages/uglyduck/lib/main.js +0 -0
- /data/spec/fixtures/{minitest → projects/minitest}/packages/uglyduck/minifier/main.js +0 -0
- /data/spec/fixtures/{simple_hello/assets/bpm_packages.js → projects/simple_hello/assets/bpm_libs.js} +0 -0
- /data/spec/fixtures/{simple_hello → projects/simple_hello}/lib/main.js +0 -0
- /data/spec/fixtures/{transporter → projects/transporter}/lib/main.js +0 -0
- /data/spec/fixtures/{transporter → projects/transporter}/packages/transport/lib/main.js +0 -0
- /data/spec/fixtures/{transporter → projects/transporter}/packages/transport/transports/wrapper.js +0 -0
- /data/spec/fixtures/{transporter → projects/transporter}/transporter.json +0 -0
@@ -8,6 +8,11 @@ module Sprockets
|
|
8
8
|
# `BundledAsset`s are used for files that need to be processed and
|
9
9
|
# concatenated with other assets. Use for `.js` and `.css` files.
|
10
10
|
class BundledAsset < Asset
|
11
|
+
# Define extra attributes to be serialized.
|
12
|
+
def self.serialized_attributes
|
13
|
+
super + %w( content_type mtime )
|
14
|
+
end
|
15
|
+
|
11
16
|
def initialize(environment, logical_path, pathname, options)
|
12
17
|
super(environment, logical_path, pathname)
|
13
18
|
@options = options || {}
|
@@ -15,21 +20,20 @@ module Sprockets
|
|
15
20
|
|
16
21
|
# Initialize `BundledAsset` from serialized `Hash`.
|
17
22
|
def init_with(environment, coder)
|
18
|
-
super
|
19
|
-
|
20
23
|
@options = {}
|
21
24
|
|
25
|
+
super
|
26
|
+
|
22
27
|
@body = coder['body']
|
23
|
-
@source = coder['source']
|
24
28
|
@assets = coder['asset_paths'].map { |p|
|
25
29
|
p = expand_root_path(p)
|
26
30
|
p == pathname.to_s ? self : environment[p, @options]
|
27
31
|
}
|
28
32
|
|
29
|
-
@
|
33
|
+
@dependency_paths = coder['dependency_paths'].map { |h|
|
30
34
|
h.merge('path' => expand_root_path(h['path']))
|
31
35
|
}
|
32
|
-
@
|
36
|
+
@dependency_paths.each do |dep|
|
33
37
|
dep['mtime'] = Time.parse(dep['mtime']) if dep['mtime'].is_a?(String)
|
34
38
|
end
|
35
39
|
end
|
@@ -39,9 +43,8 @@ module Sprockets
|
|
39
43
|
super
|
40
44
|
|
41
45
|
coder['body'] = body
|
42
|
-
coder['source'] = to_s
|
43
46
|
coder['asset_paths'] = to_a.map { |a| relativize_root_path(a.pathname) }
|
44
|
-
coder['
|
47
|
+
coder['dependency_paths'] = dependency_paths.map { |h|
|
45
48
|
h.merge('path' => relativize_root_path(h['path']))
|
46
49
|
}
|
47
50
|
end
|
@@ -50,22 +53,22 @@ module Sprockets
|
|
50
53
|
# dependencies but does run any processors or engines on the
|
51
54
|
# original file.
|
52
55
|
def body
|
53
|
-
@body ||=
|
56
|
+
@body ||= build_dependency_context_and_body[1]
|
54
57
|
end
|
55
58
|
|
56
59
|
# Get latest mtime of all its dependencies.
|
57
60
|
def mtime
|
58
|
-
@mtime ||=
|
61
|
+
@mtime ||= dependency_paths.map { |h| h['mtime'] }.max
|
59
62
|
end
|
60
63
|
|
61
64
|
# Get size of concatenated source.
|
62
65
|
def length
|
63
|
-
@length ||=
|
66
|
+
@length ||= build_source['length']
|
64
67
|
end
|
65
68
|
|
66
69
|
# Compute digest of concatenated source.
|
67
70
|
def digest
|
68
|
-
@digest ||=
|
71
|
+
@digest ||= build_source['digest']
|
69
72
|
end
|
70
73
|
|
71
74
|
# Return an `Array` of `Asset` files that are declared dependencies.
|
@@ -75,24 +78,19 @@ module Sprockets
|
|
75
78
|
|
76
79
|
# Expand asset into an `Array` of parts.
|
77
80
|
def to_a
|
78
|
-
@assets ||=
|
81
|
+
@assets ||= build_dependencies_paths_and_assets[1]
|
79
82
|
end
|
80
83
|
|
81
84
|
# Checks if Asset is stale by comparing the actual mtime and
|
82
85
|
# digest to the inmemory model.
|
83
86
|
def fresh?
|
84
|
-
# Check if environment has changed first
|
85
|
-
if environment.digest.hexdigest != environment_hexdigest
|
86
|
-
return false
|
87
|
-
end
|
88
|
-
|
89
87
|
# Check freshness of all declared dependencies
|
90
|
-
|
88
|
+
dependency_paths.all? { |h| dependency_fresh?(h) }
|
91
89
|
end
|
92
90
|
|
93
91
|
# Return `String` of concatenated source.
|
94
92
|
def to_s
|
95
|
-
@source ||= build_source
|
93
|
+
@source ||= build_source['source']
|
96
94
|
end
|
97
95
|
|
98
96
|
# Save asset to disk.
|
@@ -131,24 +129,16 @@ module Sprockets
|
|
131
129
|
environment.context_class.new(environment, logical_path.to_s, pathname)
|
132
130
|
end
|
133
131
|
|
134
|
-
def dependency_context_and_body
|
135
|
-
@dependency_context_and_body ||= build_dependency_context_and_body
|
136
|
-
end
|
137
|
-
|
138
132
|
# Get `Context` after processors have been ran on it. This
|
139
133
|
# trackes any dependencies that processors have added to it.
|
140
134
|
def dependency_context
|
141
|
-
|
135
|
+
@dependency_context ||= build_dependency_context_and_body[0]
|
142
136
|
end
|
143
137
|
|
144
|
-
# All
|
138
|
+
# All paths that this asset depends on. This list may include
|
145
139
|
# non-assets like directories.
|
146
|
-
def
|
147
|
-
@
|
148
|
-
{ 'path' => path,
|
149
|
-
'mtime' => environment.stat(path).mtime,
|
150
|
-
'hexdigest' => environment.file_digest(path).hexdigest }
|
151
|
-
end
|
140
|
+
def dependency_paths
|
141
|
+
@dependency_paths ||= build_dependencies_paths_and_assets[0]
|
152
142
|
end
|
153
143
|
|
154
144
|
private
|
@@ -174,24 +164,15 @@ module Sprockets
|
|
174
164
|
# Runs all processors on `Context`
|
175
165
|
body = context.evaluate(pathname, :data => data)
|
176
166
|
|
177
|
-
|
178
|
-
end
|
167
|
+
@dependency_context, @body = context, body
|
179
168
|
|
180
|
-
|
181
|
-
data = ""
|
182
|
-
|
183
|
-
# Explode Asset into parts and gather the dependency bodies
|
184
|
-
to_a.each { |dependency| data << dependency.body }
|
185
|
-
|
186
|
-
# Run bundle processors on concatenated source
|
187
|
-
blank_context.evaluate(pathname, :data => data,
|
188
|
-
:processors => environment.bundle_processors(content_type))
|
169
|
+
return context, body
|
189
170
|
end
|
190
171
|
|
191
|
-
def
|
172
|
+
def build_dependencies_paths_and_assets
|
192
173
|
check_circular_dependency!
|
193
174
|
|
194
|
-
assets = []
|
175
|
+
paths, assets = {}, []
|
195
176
|
|
196
177
|
# Define an `add_dependency` helper
|
197
178
|
add_dependency = lambda do |asset|
|
@@ -216,7 +197,53 @@ module Sprockets
|
|
216
197
|
# Ensure self is added to the dependency list
|
217
198
|
add_dependency.call(self)
|
218
199
|
|
219
|
-
|
200
|
+
dependency_context._dependency_paths.each do |path|
|
201
|
+
paths[path] ||= {
|
202
|
+
'path' => path,
|
203
|
+
'mtime' => environment.stat(path).mtime,
|
204
|
+
'hexdigest' => environment.file_digest(path).hexdigest
|
205
|
+
}
|
206
|
+
end
|
207
|
+
|
208
|
+
dependency_context._dependency_assets.each do |path|
|
209
|
+
# Skip if depending on self
|
210
|
+
next if path == pathname.to_s
|
211
|
+
|
212
|
+
# Recursively lookup required asset
|
213
|
+
environment[path, @options].to_a.each do |asset|
|
214
|
+
asset.dependency_paths.each do |dep|
|
215
|
+
paths[dep['path']] ||= dep
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
@dependency_paths, @assets = paths.values, assets
|
221
|
+
|
222
|
+
return @dependency_paths, @assets
|
223
|
+
end
|
224
|
+
|
225
|
+
def build_source
|
226
|
+
hash = environment.cache_hash("#{pathname}:source", id) do
|
227
|
+
data = ""
|
228
|
+
|
229
|
+
# Explode Asset into parts and gather the dependency bodies
|
230
|
+
to_a.each { |dependency| data << dependency.body }
|
231
|
+
|
232
|
+
# Run bundle processors on concatenated source
|
233
|
+
data = blank_context.evaluate(pathname, :data => data,
|
234
|
+
:processors => environment.bundle_processors(content_type))
|
235
|
+
|
236
|
+
{ 'length' => Rack::Utils.bytesize(data),
|
237
|
+
'digest' => environment.digest.update(data).hexdigest,
|
238
|
+
'source' => data }
|
239
|
+
end
|
240
|
+
hash['length'] = Integer(hash['length']) if hash['length'].is_a?(String)
|
241
|
+
|
242
|
+
@length = hash['length']
|
243
|
+
@digest = hash['digest']
|
244
|
+
@source = hash['source']
|
245
|
+
|
246
|
+
hash
|
220
247
|
end
|
221
248
|
end
|
222
249
|
end
|
@@ -7,6 +7,7 @@ module Sprockets
|
|
7
7
|
module Caching
|
8
8
|
# Return `Asset` instance for serialized `Hash`.
|
9
9
|
def asset_from_hash(hash)
|
10
|
+
return unless hash.is_a?(Hash)
|
10
11
|
case hash['class']
|
11
12
|
when 'BundledAsset'
|
12
13
|
BundledAsset.from_hash(self, hash)
|
@@ -17,6 +18,17 @@ module Sprockets
|
|
17
18
|
end
|
18
19
|
end
|
19
20
|
|
21
|
+
def cache_hash(key, version)
|
22
|
+
if cache.nil?
|
23
|
+
yield
|
24
|
+
elsif hash = cache_get_hash(key, version)
|
25
|
+
hash
|
26
|
+
elsif hash = yield
|
27
|
+
cache_set_hash(key, version, hash)
|
28
|
+
hash
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
20
32
|
protected
|
21
33
|
# Cache helper method. Takes a `path` argument which maybe a
|
22
34
|
# logical path or fully expanded path. The `&block` is passed
|
@@ -27,18 +39,21 @@ module Sprockets
|
|
27
39
|
yield
|
28
40
|
|
29
41
|
# Check cache for `path`
|
30
|
-
elsif asset =
|
42
|
+
elsif (asset = asset_from_hash(cache_get_hash(path.to_s, digest.hexdigest))) && asset.fresh?
|
31
43
|
asset
|
32
44
|
|
33
45
|
# Otherwise yield block that slowly finds and builds the asset
|
34
46
|
elsif asset = yield
|
47
|
+
hash = {}
|
48
|
+
asset.encode_with(hash)
|
49
|
+
|
35
50
|
# Save the asset to at its path
|
36
|
-
|
51
|
+
cache_set_hash(path.to_s, digest.hexdigest, hash)
|
37
52
|
|
38
53
|
# Since path maybe a logical or full pathname, save the
|
39
54
|
# asset its its full path too
|
40
55
|
if path.to_s != asset.pathname.to_s
|
41
|
-
|
56
|
+
cache_set_hash(asset.pathname.to_s, digest.hexdigest, hash)
|
42
57
|
end
|
43
58
|
|
44
59
|
asset
|
@@ -52,31 +67,21 @@ module Sprockets
|
|
52
67
|
|
53
68
|
# Removes `Environment#root` from key and prepends
|
54
69
|
# `Environment#cache_key_namespace`.
|
55
|
-
def cache_key_for(
|
56
|
-
File.join(cache_key_namespace,
|
70
|
+
def cache_key_for(key)
|
71
|
+
File.join(cache_key_namespace, key.sub(root, ''))
|
57
72
|
end
|
58
73
|
|
59
|
-
|
60
|
-
|
61
|
-
hash
|
62
|
-
|
63
|
-
if hash.is_a?(Hash)
|
64
|
-
asset = asset_from_hash(hash)
|
65
|
-
|
66
|
-
if asset.fresh?
|
67
|
-
asset
|
68
|
-
end
|
69
|
-
else
|
70
|
-
nil
|
74
|
+
def cache_get_hash(key, version)
|
75
|
+
hash = cache_get(cache_key_for(key))
|
76
|
+
if hash.is_a?(Hash) && version == hash['_version']
|
77
|
+
hash
|
71
78
|
end
|
72
79
|
end
|
73
80
|
|
74
|
-
|
75
|
-
|
76
|
-
hash
|
77
|
-
|
78
|
-
cache_set(cache_key_for(path), hash)
|
79
|
-
asset
|
81
|
+
def cache_set_hash(key, version, hash)
|
82
|
+
hash['_version'] = version
|
83
|
+
cache_set(cache_key_for(key), hash)
|
84
|
+
hash
|
80
85
|
end
|
81
86
|
|
82
87
|
# Low level cache getter for `key`. Checks a number of supported
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'base64'
|
2
|
+
require 'rack/utils'
|
1
3
|
require 'sprockets/errors'
|
2
4
|
require 'sprockets/utils'
|
3
5
|
require 'pathname'
|
@@ -20,7 +22,7 @@ module Sprockets
|
|
20
22
|
# assets. See `DirectiveProcessor` for an example of this.
|
21
23
|
class Context
|
22
24
|
attr_reader :environment, :pathname
|
23
|
-
attr_reader :_required_paths, :_dependency_paths
|
25
|
+
attr_reader :_required_paths, :_dependency_paths, :_dependency_assets
|
24
26
|
attr_writer :__LINE__
|
25
27
|
|
26
28
|
def initialize(environment, logical_path, pathname)
|
@@ -29,8 +31,9 @@ module Sprockets
|
|
29
31
|
@pathname = pathname
|
30
32
|
@__LINE__ = nil
|
31
33
|
|
32
|
-
@_required_paths
|
33
|
-
@_dependency_paths
|
34
|
+
@_required_paths = []
|
35
|
+
@_dependency_paths = Set.new([pathname.to_s])
|
36
|
+
@_dependency_assets = Set.new
|
34
37
|
end
|
35
38
|
|
36
39
|
# Returns the environment path that contains the file.
|
@@ -108,6 +111,44 @@ module Sprockets
|
|
108
111
|
# source file.
|
109
112
|
def depend_on(path)
|
110
113
|
@_dependency_paths << resolve(path).to_s
|
114
|
+
nil
|
115
|
+
end
|
116
|
+
|
117
|
+
# `depend_on_asset` allows you to state an asset dependency
|
118
|
+
# without including it.
|
119
|
+
#
|
120
|
+
# This is used for caching purposes. Any changes that would
|
121
|
+
# invalidate the dependency asset will invalidate the source
|
122
|
+
# file. Unlike `depend_on`, this will include recursively include
|
123
|
+
# the target asset's dependencies.
|
124
|
+
def depend_on_asset(path)
|
125
|
+
filename = resolve(path).to_s
|
126
|
+
@_dependency_assets << filename
|
127
|
+
nil
|
128
|
+
end
|
129
|
+
|
130
|
+
# `require_asset` declares `path` as a dependency of the file. The
|
131
|
+
# dependency will be inserted before the file and will only be
|
132
|
+
# included once.
|
133
|
+
#
|
134
|
+
# If ERB processing is enabled, you can use it to dynamically
|
135
|
+
# require assets.
|
136
|
+
#
|
137
|
+
# <%= require_asset "#{framework}.js" %>
|
138
|
+
#
|
139
|
+
def require_asset(path)
|
140
|
+
pathname = resolve(path, :content_type => :self)
|
141
|
+
depend_on_asset(pathname)
|
142
|
+
@_required_paths << pathname.to_s
|
143
|
+
nil
|
144
|
+
end
|
145
|
+
|
146
|
+
# Tests if target path is able to be safely required into the
|
147
|
+
# current concatenation.
|
148
|
+
def asset_requirable?(path)
|
149
|
+
pathname = resolve(path)
|
150
|
+
content_type = environment.content_type_of(pathname)
|
151
|
+
pathname.file? && (self.content_type.nil? || self.content_type == content_type)
|
111
152
|
end
|
112
153
|
|
113
154
|
# Reads `path` and runs processors on the file.
|
@@ -145,32 +186,21 @@ module Sprockets
|
|
145
186
|
result
|
146
187
|
end
|
147
188
|
|
148
|
-
#
|
149
|
-
#
|
150
|
-
|
151
|
-
pathname = resolve(path)
|
152
|
-
content_type = environment.content_type_of(pathname)
|
153
|
-
pathname.file? && (self.content_type.nil? || self.content_type == content_type)
|
154
|
-
end
|
155
|
-
|
156
|
-
# `require_asset` declares `path` as a dependency of the file. The
|
157
|
-
# dependency will be inserted before the file and will only be
|
158
|
-
# included once.
|
189
|
+
# Returns a Base64-encoded `data:` URI with the contents of the
|
190
|
+
# asset at the specified path, and marks that path as a dependency
|
191
|
+
# of the current file.
|
159
192
|
#
|
160
|
-
#
|
161
|
-
# require assets.
|
193
|
+
# Use `asset_data_uri` from ERB with CSS or JavaScript assets:
|
162
194
|
#
|
163
|
-
# <%=
|
195
|
+
# #logo { background: url(<%= asset_data_uri 'logo.png' %>) }
|
164
196
|
#
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
pathname
|
197
|
+
# $('<img>').attr('src', '<%= asset_data_uri 'avatar.jpg' %>')
|
198
|
+
#
|
199
|
+
def asset_data_uri(path)
|
200
|
+
depend_on(path)
|
201
|
+
asset = environment.find_asset(path)
|
202
|
+
base64 = Base64.encode64(asset.to_s).gsub(/\s+/, "")
|
203
|
+
"data:#{asset.content_type};base64,#{Rack::Utils.escape(base64)}"
|
174
204
|
end
|
175
205
|
|
176
206
|
private
|
@@ -270,7 +270,9 @@ module Sprockets
|
|
270
270
|
# //= include "header"
|
271
271
|
#
|
272
272
|
def process_include_directive(path)
|
273
|
-
|
273
|
+
pathname = context.resolve(path)
|
274
|
+
context.depend_on_asset(pathname)
|
275
|
+
included_pathnames << pathname
|
274
276
|
end
|
275
277
|
|
276
278
|
# `require_directory` requires all the files inside a single
|
@@ -326,7 +328,7 @@ module Sprockets
|
|
326
328
|
# including it.
|
327
329
|
#
|
328
330
|
# This is used for caching purposes. Any changes made to
|
329
|
-
# the dependency file
|
331
|
+
# the dependency file will invalidate the cache of the
|
330
332
|
# source file.
|
331
333
|
#
|
332
334
|
# This is useful if you are using ERB and File.read to pull
|
@@ -335,7 +337,22 @@ module Sprockets
|
|
335
337
|
# //= depend_on "foo.png"
|
336
338
|
#
|
337
339
|
def process_depend_on_directive(path)
|
338
|
-
context.depend_on(
|
340
|
+
context.depend_on(path)
|
341
|
+
end
|
342
|
+
|
343
|
+
# Allows you to state a dependency on an asset without including
|
344
|
+
# it.
|
345
|
+
#
|
346
|
+
# This is used for caching purposes. Any changes that would
|
347
|
+
# invalid the asset dependency will invalidate the cache our the
|
348
|
+
# source file.
|
349
|
+
#
|
350
|
+
# Unlike `depend_on`, the path must be a requirable asset.
|
351
|
+
#
|
352
|
+
# //= depend_on_asset "bar.js"
|
353
|
+
#
|
354
|
+
def process_depend_on_asset_directive(path)
|
355
|
+
context.depend_on_asset(path)
|
339
356
|
end
|
340
357
|
|
341
358
|
# Enable Sprockets 1.x compat mode.
|
@@ -376,5 +393,5 @@ module Sprockets
|
|
376
393
|
def relative?(path)
|
377
394
|
path =~ /^\.($|\.?\/)/
|
378
395
|
end
|
379
|
-
|
396
|
+
end
|
380
397
|
end
|
@@ -9,10 +9,9 @@ module Sprockets
|
|
9
9
|
# https://github.com/sstephenson/eco
|
10
10
|
#
|
11
11
|
class EcoTemplate < Tilt::Template
|
12
|
-
#
|
13
|
-
|
14
|
-
|
15
|
-
'application/javascript'
|
12
|
+
# Check to see if Eco is loaded
|
13
|
+
def self.engine_initialized?
|
14
|
+
defined? ::Eco
|
16
15
|
end
|
17
16
|
|
18
17
|
# Autoload eco library. If the library isn't loaded, Tilt will produce
|
@@ -8,10 +8,9 @@ module Sprockets
|
|
8
8
|
# https://github.com/sstephenson/ruby-ejs
|
9
9
|
#
|
10
10
|
class EjsTemplate < Tilt::Template
|
11
|
-
#
|
12
|
-
|
13
|
-
|
14
|
-
'application/javascript'
|
11
|
+
# Check to see if EJS is loaded
|
12
|
+
def self.engine_initialized?
|
13
|
+
defined? ::EJS
|
15
14
|
end
|
16
15
|
|
17
16
|
# Autoload ejs library. If the library isn't loaded, Tilt will produce
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'sprockets/eco_template'
|
2
2
|
require 'sprockets/ejs_template'
|
3
3
|
require 'sprockets/jst_processor'
|
4
|
+
require 'sprockets/mime'
|
4
5
|
require 'sprockets/utils'
|
5
6
|
require 'tilt'
|
6
7
|
|
@@ -47,6 +48,15 @@ module Sprockets
|
|
47
48
|
end
|
48
49
|
end
|
49
50
|
|
51
|
+
def engine_formats(ext = nil)
|
52
|
+
if ext
|
53
|
+
ext = Sprockets::Utils.normalize_extension(ext)
|
54
|
+
@engine_formats[ext]
|
55
|
+
else
|
56
|
+
deep_copy_hash(@engine_formats)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
50
60
|
# Returns an `Array` of engine extension `String`s.
|
51
61
|
#
|
52
62
|
# environment.engine_extensions
|
@@ -62,13 +72,28 @@ module Sprockets
|
|
62
72
|
#
|
63
73
|
def register_engine(ext, klass)
|
64
74
|
ext = Sprockets::Utils.normalize_extension(ext)
|
65
|
-
@engines ||= {}
|
66
75
|
@engines[ext] = klass
|
76
|
+
|
77
|
+
if klass.respond_to?(:default_mime_type) && klass.default_mime_type
|
78
|
+
if format_ext = extension_for_mime_type(klass.default_mime_type)
|
79
|
+
@engine_formats[format_ext] << ext
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
klass
|
67
84
|
end
|
85
|
+
|
86
|
+
private
|
87
|
+
def deep_copy_hash(hash)
|
88
|
+
initial = Hash.new { |h, k| h[k] = [] }
|
89
|
+
hash.inject(initial) { |h, (k, a)| h[k] = a.dup; h }
|
90
|
+
end
|
68
91
|
end
|
69
92
|
|
70
93
|
# Extend Sprockets module to provide global registry
|
71
94
|
extend Engines
|
95
|
+
@engines = {}
|
96
|
+
@engine_formats = Hash.new { |h, k| h[k] = [] }
|
72
97
|
|
73
98
|
# Cherry pick the default Tilt engines that make sense for
|
74
99
|
# Sprockets. We don't need ones that only generate html like HAML.
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'rack/mime'
|
2
|
+
|
3
|
+
module Sprockets
|
4
|
+
module Mime
|
5
|
+
# Returns a `Hash` of registered mime types registered on the
|
6
|
+
# environment and those part of `Rack::Mime`.
|
7
|
+
#
|
8
|
+
# If an `ext` is given, it will lookup the mime type for that extension.
|
9
|
+
def mime_types(ext = nil)
|
10
|
+
if ext.nil?
|
11
|
+
Rack::Mime::MIME_TYPES.merge(@mime_types)
|
12
|
+
else
|
13
|
+
ext = Sprockets::Utils.normalize_extension(ext)
|
14
|
+
@mime_types[ext] || Rack::Mime::MIME_TYPES[ext]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
if {}.respond_to?(:key)
|
19
|
+
def extension_for_mime_type(type)
|
20
|
+
mime_types.key(type)
|
21
|
+
end
|
22
|
+
else
|
23
|
+
def extension_for_mime_type(type)
|
24
|
+
mime_types.index(type)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Register a new mime type.
|
29
|
+
def register_mime_type(mime_type, ext)
|
30
|
+
ext = Sprockets::Utils.normalize_extension(ext)
|
31
|
+
@mime_types[ext] = mime_type
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Extend Sprockets module to provide global registry
|
36
|
+
extend Mime
|
37
|
+
@mime_types = {}
|
38
|
+
end
|
@@ -1,33 +1,20 @@
|
|
1
1
|
require 'sprockets/engines'
|
2
|
+
require 'sprockets/mime'
|
2
3
|
require 'sprockets/processor'
|
3
4
|
require 'sprockets/utils'
|
4
|
-
require 'rack/mime'
|
5
5
|
|
6
6
|
module Sprockets
|
7
7
|
# `Processing` is an internal mixin whose public methods are exposed on
|
8
8
|
# the `Environment` and `Index` classes.
|
9
9
|
module Processing
|
10
|
-
include Engines
|
11
|
-
|
12
|
-
# Returns a `Hash` of registered mime types registered on the
|
13
|
-
# environment and those part of `Rack::Mime`.
|
14
|
-
#
|
15
|
-
# If an `ext` is given, it will lookup the mime type for that extension.
|
16
|
-
def mime_types(ext = nil)
|
17
|
-
if ext.nil?
|
18
|
-
Rack::Mime::MIME_TYPES.merge(@mime_types)
|
19
|
-
else
|
20
|
-
ext = Sprockets::Utils.normalize_extension(ext)
|
21
|
-
@mime_types[ext] || Rack::Mime::MIME_TYPES[ext]
|
22
|
-
end
|
23
|
-
end
|
10
|
+
include Engines, Mime
|
24
11
|
|
25
12
|
# Register a new mime type.
|
26
13
|
def register_mime_type(mime_type, ext)
|
14
|
+
# Overrides the global behavior to expire the index
|
27
15
|
expire_index!
|
28
|
-
ext = Sprockets::Utils.normalize_extension(ext)
|
29
16
|
@trail.extensions << ext
|
30
|
-
|
17
|
+
super
|
31
18
|
end
|
32
19
|
|
33
20
|
# Returns an `Array` of format extension `String`s.
|
@@ -278,33 +265,5 @@ module Sprockets
|
|
278
265
|
compressor.compress(data)
|
279
266
|
end
|
280
267
|
end
|
281
|
-
|
282
|
-
protected
|
283
|
-
def compute_digest
|
284
|
-
digest = super
|
285
|
-
|
286
|
-
# Add mime types to environment digest
|
287
|
-
digest << @mime_types.keys.join(',')
|
288
|
-
|
289
|
-
# Add engines to environment digest
|
290
|
-
digest << @engines.map { |e, k| "#{e}:#{k.name}" }.join(',')
|
291
|
-
|
292
|
-
# Add preprocessors to environment digest
|
293
|
-
digest << @preprocessors.map { |m, a| "#{m}:#{a.map(&:name)}" }.join(',')
|
294
|
-
|
295
|
-
# Add postprocessors to environment digest
|
296
|
-
digest << @postprocessors.map { |m, a| "#{m}:#{a.map(&:name)}" }.join(',')
|
297
|
-
|
298
|
-
# Add bundle processors to environment digest
|
299
|
-
digest << @bundle_processors.map { |m, a| "#{m}:#{a.map(&:name)}" }.join(',')
|
300
|
-
|
301
|
-
digest
|
302
|
-
end
|
303
|
-
|
304
|
-
private
|
305
|
-
def deep_copy_hash(hash)
|
306
|
-
initial = Hash.new { |h, k| h[k] = [] }
|
307
|
-
hash.inject(initial) { |h, (k, a)| h[k] = a.dup; h }
|
308
|
-
end
|
309
268
|
end
|
310
269
|
end
|