bpm 0.1.4 → 1.0.0.beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/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
|