Skip to content

Commit 522afc7

Browse files
committedApr 13, 2015
Merge pull request #775 from opal/sprockets-3
Restore Sprockets 3 support
2 parents b5235f4 + 9f522f9 commit 522afc7

File tree

7 files changed

+32
-12
lines changed

7 files changed

+32
-12
lines changed
 

‎.travis.yml

+3
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ matrix:
1212
- rvm: 2.2
1313
env: RUN=default TZ="/usr/share/zoneinfo/Pacific/Fiji"
1414

15+
- rvm: 2.2
16+
env: RUN=default SPROCKETS_VERSION="~> 2.12.3"
17+
1518
- rvm: 2.1
1619
env: RUN=rspec
1720

‎Gemfile

+3
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,6 @@ unless ENV['CI']
2525
end
2626

2727
gem 'mspec', github: 'rubyspec/mspec'
28+
29+
sprockets_version = ENV['SPROCKETS_VERSION']
30+
gem 'sprockets', sprockets_version if sprockets_version

‎lib/opal/sprockets/path_reader.rb

+3-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ def read path
2020
end
2121

2222
def expand path
23-
env.resolve(path)
23+
env.resolve(path) or
24+
# Sprockets 3 just returns nil for unknown paths
25+
raise ::Sprockets::FileNotFound, path.inspect
2426
end
2527

2628
def paths

‎lib/opal/sprockets/processor.rb

+9-7
Original file line numberDiff line numberDiff line change
@@ -99,24 +99,26 @@ def compiler_options
9999
end
100100

101101
def self.load_asset_code(sprockets, name)
102-
asset = sprockets[name.sub(/(\.js)?$/, '.js')]
102+
asset = sprockets[name.sub(/(\.(js|rb|opal))*$/, '.js')]
103103
return '' if asset.nil?
104104

105+
opal_extnames = sprockets.engines.map do |ext, engine|
106+
ext if engine <= ::Opal::Processor
107+
end.compact
108+
105109
module_name = -> asset { asset.logical_path.sub(/\.js$/, '') }
110+
path_extnames = -> path { File.basename(path).scan(/\.[^.]+/) }
106111
mark_as_loaded = -> path { "Opal.mark_as_loaded(#{path.inspect});" }
107-
processed_by_opal = -> asset, sprockets {
108-
attributes = ::Sprockets::AssetAttributes.new(sprockets, asset.pathname)
109-
attributes.engines.any? { |engine| engine <= ::Opal::Processor }
110-
}
112+
processed_by_opal = -> asset { (path_extnames[asset.pathname] & opal_extnames).any? }
111113

112114
non_opal_assets = ([asset]+asset.dependencies)
113-
.select { |asset| not(processed_by_opal[asset, sprockets]) }
115+
.select { |asset| not(processed_by_opal[asset]) }
114116
.map { |asset| module_name[asset] }
115117

116118
mark_as_loaded = (['opal'] + non_opal_assets + stubbed_files.to_a)
117119
.map { |path| mark_as_loaded[path] }
118120

119-
if processed_by_opal[asset, sprockets]
121+
if processed_by_opal[asset]
120122
load_asset_code = "Opal.load(#{module_name[asset].inspect});"
121123
end
122124

‎spec/lib/sprockets/processor_spec.rb

+4-2
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33

44
describe Opal::Processor do
55
let(:pathname) { Pathname("/Code/app/mylib/opal/foo.#{ext}") }
6-
let(:environment) { double('environment',
6+
let(:environment) { double(Sprockets::Environment,
77
cache: nil,
88
:[] => nil,
99
resolve: pathname.expand_path.to_s,
1010
) }
11-
let(:sprockets_context) { double('context',
11+
let(:sprockets_context) { double(Sprockets::Context,
1212
logical_path: "foo.#{ext}",
1313
environment: environment,
1414
pathname: pathname,
@@ -55,6 +55,8 @@
5555
described_class.stub_file stubbed_file
5656
asset = double(dependencies: [], pathname: Pathname('bar'), logical_path: 'bar')
5757
environment.stub(:[]).with('bar.js') { asset }
58+
environment.stub(:engines) { {'.rb' => described_class, '.opal' => described_class} }
59+
5860
code = described_class.load_asset_code(environment, 'bar')
5961
code.should match stubbed_file
6062
end

‎spec/lib/sprockets/server_spec.rb

+10-2
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,22 @@ def app
2222
end
2323

2424
it 'serves assets with complex sprockets requires' do
25-
assets = app.sprockets['complex_sprockets'].to_a.map(&:logical_path)
25+
asset = app.sprockets['complex_sprockets']
26+
expect(asset).to be_truthy
27+
28+
assets = asset.to_a.map do |sub_asset|
29+
sub_asset.logical_path.gsub(/\.self\.js$/, '.js')
30+
end
31+
2632
%w[
2733
no_requires.js
2834
jst_file.js
2935
required_tree_test/required_file1.js
3036
required_tree_test/required_file2.js
3137
file_with_directives.js
32-
].each { |logical_path| expect(assets).to include(logical_path) }
38+
].each do |logical_path|
39+
expect(assets).to include(logical_path)
40+
end
3341
end
3442

3543
describe 'source maps' do

0 commit comments

Comments
 (0)