Skip to content

Commit

Permalink
Defer to EmberCLI build pipeline
Browse files Browse the repository at this point in the history
Closes [#30].

Depends on [rondale-sc/ember-cli-rails-addon#17][#17].

* Symlink `dist/` directly to Asset Pipeline
* Merge EmberCLI-generated `manifest.json` into Sprocket's
* `manifest.json`. Since we now defer to EmberCLI, we no longer need to
  manually resolve asset URLs.
* Deletes `EmberCli::AssetResolver`
* Improve `bin/setup`, resolve errors.

[#30]: #30
[#17]: rondale-sc/ember-cli-rails-addon#17
  • Loading branch information
seanpdoyle committed Nov 8, 2015
1 parent 2c25935 commit cab4fa4
Show file tree
Hide file tree
Showing 14 changed files with 206 additions and 161 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.md
@@ -1,6 +1,13 @@
master
------

* Symlink `dist/` directly to Asset Pipeline [#250]
* Merge EmberCLI-generated `manifest.json` into Sprocket's [#250]
* `manifest.json`. Since we now defer to EmberCLI, we no longer need to
manually resolve asset URLs. [#250]

[#250]: https://github.com/thoughtbot/ember-cli-rails/pull/250

0.4.3
-----

Expand Down
3 changes: 0 additions & 3 deletions bin/bundle

This file was deleted.

6 changes: 6 additions & 0 deletions bin/clean
@@ -0,0 +1,6 @@
#!/bin/sh

set -e

rm -rf spec/dummy/my-app
rm -rf spec/dummy/tmp
1 change: 1 addition & 0 deletions bin/setup
Expand Up @@ -27,6 +27,7 @@ root="$(pwd)"

cd ${root}/spec/dummy/my-app &&
npm install --save-dev ember-cli-rails-addon &&
npm install &&
bower install

cd ${root}/spec/dummy && bundle exec rake ember:install
1 change: 1 addition & 0 deletions ember-cli-rails.gemspec
Expand Up @@ -13,5 +13,6 @@ Gem::Specification.new do |spec|
spec.required_ruby_version = ">= 2.1.0"

spec.add_dependency "railties", ">= 3.2", "< 5"
spec.add_dependency "non-stupid-digest-assets", "~> 1.0.0"
spec.add_dependency "sprockets", ">= 2.0"
end
50 changes: 39 additions & 11 deletions lib/ember-cli/app.rb
@@ -1,6 +1,8 @@
require "timeout"
require "non-stupid-digest-assets"
require "ember-cli/html_page"
require "ember-cli/asset_resolver"
require "ember-cli/manifest"
require "ember-cli/manifest_merger"

module EmberCli
class App
Expand Down Expand Up @@ -76,12 +78,7 @@ def stop
end

def index_html(sprockets:, head:, body:)
asset_resolver = AssetResolver.new(
app: self,
sprockets: sprockets,
)
html_page = HtmlPage.new(
asset_resolver: asset_resolver,
content: index_file.read,
head: head,
body: body,
Expand All @@ -96,11 +93,11 @@ def exposed_js_assets
alias exposed_css_assets exposed_js_assets

def vendor_assets
"#{name}/vendor"
"#{name}/assets/vendor"
end

def application_assets
"#{name}/#{ember_app_name}"
"#{name}/assets/#{ember_app_name}"
end

def wait
Expand Down Expand Up @@ -201,6 +198,7 @@ def prepare
check_ember_cli_version!
reset_build_error!
symlink_to_assets_root
merge_manifests
add_assets_to_precompile_list
true
end
Expand Down Expand Up @@ -268,14 +266,45 @@ def index_file
end

def symlink_to_assets_root
assets_path.make_symlink dist_path.join("assets")
assets_path.make_symlink dist_path
rescue Errno::EEXIST
# Sometimes happens when starting multiple Unicorn workers.
# Ignoring...
end

def merge_manifests
ManifestMerger.new(from: ember_manifest, into: rails_manifest).merge!
end

def ember_manifest
@ember_manifest ||= begin
if ember_manifest_path.exist?
sprockets_manifest = Sprockets::Manifest.new(
Rails.env,
ember_manifest_path,
)

Manifest.new(
app_name: name,
manifest: sprockets_manifest,
).tap(&:fixup!)
else
Manifest::Null.new
end
end
end

def ember_manifest_path
Pathname(Dir[assets_path.join("manifest*.json")].first || "")
end

def rails_manifest
Rails.application.assets_manifest
end

def add_assets_to_precompile_list
Rails.configuration.assets.precompile << /\A#{name}\//
Rails.configuration.assets.precompile << %r{\A#{name}/}
NonStupidDigestAssets.whitelist += [%r{\A#{name}/}]
end

def command(watch: false)
Expand Down Expand Up @@ -342,7 +371,6 @@ def excluded_ember_deps
def env_hash
ENV.to_h.tap do |vars|
vars["RAILS_ENV"] = Rails.env
vars["DISABLE_FINGERPRINTING"] = "true"
vars["EXCLUDE_EMBER_ASSETS"] = excluded_ember_deps
vars["BUNDLE_GEMFILE"] = gemfile_path.to_s if gemfile_path.exist?
end
Expand Down
54 changes: 0 additions & 54 deletions lib/ember-cli/asset_resolver.rb

This file was deleted.

23 changes: 8 additions & 15 deletions lib/ember-cli/html_page.rb
@@ -1,8 +1,7 @@
module EmberCli
class HtmlPage
def initialize(content:, asset_resolver:, head: "", body: "")
def initialize(content:, head: "", body: "")
@content = content
@asset_resolver = asset_resolver
@head = head
@body = body
end
Expand All @@ -16,11 +15,13 @@ def render
insert_body_content
end

html
content
end

private

attr_reader :content

def has_head_tag?
head_tag_index >= 0
end
Expand All @@ -30,27 +31,19 @@ def has_body_tag?
end

def insert_head_content
html.insert(head_tag_index, @head.to_s)
content.insert(head_tag_index, @head.to_s)
end

def insert_body_content
html.insert(body_tag_index, @body.to_s)
end

def html
@html ||= resolved_html
content.insert(body_tag_index, @body.to_s)
end

def head_tag_index
html.index("</head") || -1
content.index("</head") || -1
end

def body_tag_index
html.index("</body") || -1
end

def resolved_html
@asset_resolver.resolve_urls(@content)
content.index("</body") || -1
end
end
end
55 changes: 55 additions & 0 deletions lib/ember-cli/manifest.rb
@@ -0,0 +1,55 @@
module EmberCli
class Manifest
class Null
def fixup!
end

def files
{}
end

def assets
{}
end
end

def initialize(manifest:, app_name:)
@app_name = app_name
@manifest = manifest
@assets = {}
@files = {}
end

def fixup!
fixup_files!
fixup_assets!

self
end

def files
@files
end

def assets
@assets
end

private

def fixup_files!
@manifest.files.each do |(file, info)|
fixed_info = info.merge(
"logical_path" => "#{@app_name}/#{info["logical_path"]}"
)
files["#{@app_name}/assets/#{file}"] = fixed_info
end
end

def fixup_assets!
@manifest.assets.each do |(file, fingerprinted_file)|
assets["#{@app_name}/assets/#{file}"] = "#{@app_name}/#{fingerprinted_file}"
end
end
end
end
15 changes: 15 additions & 0 deletions lib/ember-cli/manifest_merger.rb
@@ -0,0 +1,15 @@
module EmberCli
class ManifestMerger
def initialize(from:, into:)
@from = from
@into = into
end

def merge!
@into.assets.merge!(@from.assets)
@into.files.merge!(@from.files)

@into
end
end
end
65 changes: 0 additions & 65 deletions spec/ember-cli/asset_resolver_spec.rb

This file was deleted.

0 comments on commit cab4fa4

Please sign in to comment.