Skip to content

Commit

Permalink
Add /lib to the pipeline
Browse files Browse the repository at this point in the history
  • Loading branch information
twinturbo committed Dec 9, 2012
1 parent e061478 commit a41f662
Show file tree
Hide file tree
Showing 7 changed files with 63 additions and 20 deletions.
Empty file.
5 changes: 5 additions & 0 deletions lib/iridium/engine.rb
Expand Up @@ -13,6 +13,7 @@ def paths
@paths ||= begin
set = Hydrogen::PathSet.new root
set[:app].add "app"
set[:lib].add "lib"

set[:config].add "app/config"
set[:initializers].add "app/config/initializers"
Expand Down Expand Up @@ -50,6 +51,10 @@ def app_path
paths[:app].expanded.first
end

def lib_path
paths[:lib].expanded.first
end

def site_path
paths[:site].expanded.first
end
Expand Down
1 change: 1 addition & 0 deletions lib/iridium/generators/application_generator.rb
Expand Up @@ -27,6 +27,7 @@ def application
self.destination_root = File.expand_path app_path, destination_root

directory "app"
directory "lib"
directory "site"
directory "test"
directory "vendor"
Expand Down
27 changes: 22 additions & 5 deletions lib/iridium/pipeline/Assetfile
Expand Up @@ -110,7 +110,24 @@ input app.all_paths[:locales].expanded do
end
end

# 5. Compile application code
# 5. Compile library code
input app.lib_path do
match "**/*.coffee" do
coffee_script
end

match "**/*.js" do
minispade :rewrite_requires => true,
:string => (app.config.minispade.module_format == :string),
:module_id_generator => proc { |input|
input.path.gsub /\.js$/, ''
}

concat "lib.js"
end
end

# 6. Compile application code
Iridium::Engine.subclasses.each do |engine|
input engine.paths[:javascripts].expanded do
match "**/*.coffee" do
Expand All @@ -135,12 +152,12 @@ Iridium::Engine.subclasses.each do |engine|
"#{engine.name.demodulize.underscore}/#{input.path.gsub(/\.js$/, '')}"
}

concat "lib.js"
concat "app.js"
end
end
end

# 6. Compile handlebars templates
# 7. Compile handlebars templates
Iridium::Engine.subclasses.each do |engine|
input engine.paths[:templates].expanded do
match "**/*.{handlebars,hbs}" do
Expand All @@ -155,14 +172,14 @@ Iridium::Engine.subclasses.each do |engine|
end
end

# 7. Concatentate all the javascripts from the previous steps
# 8. Concatentate all the javascripts from the previous steps
# in the proper order. build_path/javascript now contains
# the unoptimized application.js
#
output app.build_path.join("preoptimization")
input app.build_path.join("javascript") do
match "*.js" do
concat ["vendor.js", "env.js", "init.js", "i18n.js", "lib.js", "templates.js"] , "application.js"
concat ["vendor.js", "lib.js", "env.js", "init.js", "i18n.js", "app.js", "templates.js"] , "application.js"
end
end

Expand Down
2 changes: 2 additions & 0 deletions test/generators/application_generator_test.rb
Expand Up @@ -26,6 +26,8 @@ def tests_generates_an_app_skeleton

assert_file 'todos', 'app', 'templates'

assert_file 'todos', 'lib'

assert_file 'todos', 'vendor', 'javascripts'
assert_file 'todos', 'vendor', 'stylesheets'

Expand Down
46 changes: 31 additions & 15 deletions test/integration/asset_pipeline_test.rb
Expand Up @@ -118,6 +118,28 @@ def tests_compiles_coffee_script
assert_includes content, %Q{square = function}
end

def test_compiles_lib_js_files_into_minispade_modules
create_file "lib/foo/bar.js", "LIB"

compile ; assert_file "site/application.js"

content = read "site/application.js"

assert_includes content, "LIB"
assert_minispade content, "foo/bar"
end

def test_compiles_lib_cs_files_into_minispade_modules
create_file "lib/foo/bar.coffee", "a = 'LIB'"

compile ; assert_file "site/application.js"

content = read "site/application.js"

assert_includes content, "LIB"
assert_minispade content, "foo/bar"
end

def test_combines_css_into_one_file
create_file "app/stylesheets/main.css", ".main"
create_file "app/stylesheets/secondary.css", ".secondary;"
Expand Down Expand Up @@ -679,29 +701,23 @@ def test_non_env_files_are_not_included
ENV['IRIDIUM_ENV'] = 'test'
end

def test_build_order
def test_js_pipeline_build_order
create_file "vendor/javascripts/foo.js", "VENDOR"
create_file "app/config/initializers/bar.js", "INITIALIZER"
create_file "lib/foo.js", "LIB"
create_file "app/config/initializers/bar.js", "INIT"
create_file "app/config/test.js", "ENV"
create_file "app/javascripts/app.js", "APP"
create_file "app/templates/foo.hbs", "TEMPLATE"

compile ; assert_file "site/application.js"

content = read "site/application.js"

assert_includes content, "VENDOR", "Vendored code not loaded!"
assert_includes content, "INITIALIZER", "Init code not loaded!"
assert_includes content, "ENV", "Env code not loaded!"
assert_includes content, "APP", "App code not loaded!"

assert_before content, "VENDOR", "ENV",
"Vendored code must be loaded before environment initialization!"

assert_before content, "ENV", "INITIALIZER",
"Environment must be prepared for initialization!"

assert_before content, "INITIALIZER", "APP",
"App code must be loaded after initialization"
assert_before content, "VENDOR", "LIB"
assert_before content, "LIB", "ENV"
assert_before content, "ENV", "INIT"
assert_before content, "INIT", "APP"
assert_before content, "APP", "TEMPLATE"
end

def test_sprites_are_compiled
Expand Down
2 changes: 2 additions & 0 deletions test/test_helper.rb
Expand Up @@ -36,6 +36,7 @@ def setup
Iridium.application = TestApp.instance

FileUtils.mkdir_p Iridium.application.app_path
FileUtils.mkdir_p Iridium.application.lib_path
FileUtils.mkdir_p Iridium.application.site_path
FileUtils.mkdir_p Iridium.application.tmp_path
FileUtils.mkdir_p Iridium.application.vendor_path.join("javascripts")
Expand All @@ -56,6 +57,7 @@ def teardown
Iridium.application.config.optimization_pipelines.clear

FileUtils.rm_rf Iridium.application.app_path
FileUtils.rm_rf Iridium.application.lib_path
FileUtils.rm_rf Iridium.application.root.join("config")
FileUtils.rm_rf Iridium.application.site_path
FileUtils.rm_rf Iridium.application.tmp_path
Expand Down

0 comments on commit a41f662

Please sign in to comment.