Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use precompiled assets if present #55

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
23 changes: 20 additions & 3 deletions lib/premailer-rails3/css_loaders.rb
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,11 @@ module AssetPipelineLoader
def load(path)
if assets_enabled?
file = file_name(path)
if asset = Rails.application.assets.find_asset(file)
asset.to_s
else
asset = read_asset_from_pipeline(file)
if asset.blank?
request_and_unzip(file)
else
asset
end
end
end
Expand All @@ -49,6 +50,11 @@ def assets_enabled?
Rails.configuration.assets.enabled rescue false
end

def assets_precompiled?
# If on-the-fly asset compilation is disabled, we must be precompiling assets.
!Rails.configuration.assets.compile rescue false
end

def file_name(path)
if path == :default
'email.css'
Expand All @@ -58,6 +64,17 @@ def file_name(path)
end
end

def read_asset_from_pipeline(file)
if assets_precompiled?
# Read the precompiled asset
asset_path = ActionController::Base.helpers.asset_path(file)
File.read(File.join(Rails.public_path, asset_path))
else
# This will compile and return the asset
Rails.application.assets.find_asset(file).to_s
end
end

def request_and_unzip(file)
url = [
Rails.configuration.action_controller.asset_host,
Expand Down
16 changes: 16 additions & 0 deletions spec/premailer-rails3/css_helper_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -127,13 +127,15 @@ def css_for_doc(doc)
end

context 'when Rails asset pipeline is used' do

before {
Rails.configuration.stubs(:assets).returns(
stub(
:enabled => true,
:prefix => '/assets'
)
)
PremailerRails::CSSLoaders::AssetPipelineLoader.stubs(:assets_precompiled?).returns(false)
}

it 'should load email.css when the default CSS is requested' do
Expand Down Expand Up @@ -201,6 +203,20 @@ def css_for_doc(doc)
).should == 'content of base.css'
end
end

context 'when assets are precompiled' do
before {
PremailerRails::CSSLoaders::AssetPipelineLoader.stubs(:assets_precompiled?).returns(true)
}

it 'should load precompiled assets from the filesystem' do
File.expects(:read) \
.with('RAILS_ROOT/public/somewhere/on/the/disk/precompiled.css') \
.returns('content of compiled css')

load_css('precompiled.css').should == 'content of compiled css'
end
end
end

context 'when static stylesheets are used' do
Expand Down
1 change: 1 addition & 0 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
require 'stubs/action_controller'
require 'stubs/action_mailer'
require 'stubs/rails'
require 'stubs/hassle'
Expand Down
14 changes: 14 additions & 0 deletions spec/stubs/action_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# ActionController::Base.helpers.asset_path(file)
module ActionController
module FakeHelpers
def self.asset_path(file)
'somewhere/on/the/disk/' + file
end
end

module Base
def self.helpers
FakeHelpers
end
end
end
4 changes: 4 additions & 0 deletions spec/stubs/rails.rb
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@ def logger
Logger
end

def public_path
File.join(root, 'public')
end

def root
'RAILS_ROOT'
end
Expand Down