require_self
This commit is contained in:
parent
4727ad5b7b
commit
7206341768
@ -37,15 +37,26 @@ module Jasmine::Headless
|
|||||||
end
|
end
|
||||||
|
|
||||||
def file_paths
|
def file_paths
|
||||||
(dependencies.collect(&:file_paths) + [ path ]).flatten
|
paths = dependencies.collect(&:file_paths).flatten
|
||||||
|
|
||||||
|
if @insert_after
|
||||||
|
paths.insert(paths.index(@insert_after) + 1, path)
|
||||||
|
else
|
||||||
|
paths << path
|
||||||
|
end
|
||||||
|
|
||||||
|
paths
|
||||||
end
|
end
|
||||||
|
|
||||||
def dependencies
|
def dependencies
|
||||||
return @dependencies if @dependencies
|
return @dependencies if @dependencies
|
||||||
|
|
||||||
processor = Sprockets::DirectiveProcessor.new(path)
|
processor = Sprockets::DirectiveProcessor.new(path)
|
||||||
|
|
||||||
|
last_file_added = nil
|
||||||
|
|
||||||
@dependencies = processor.directives.collect do |line, type, name|
|
@dependencies = processor.directives.collect do |line, type, name|
|
||||||
if name[%r{^\.}]
|
if name && name[%r{^\.}]
|
||||||
name = File.expand_path(File.join(File.dirname(path), name)).gsub(%r{^#{source_root}/}, '')
|
name = File.expand_path(File.join(File.dirname(path), name)).gsub(%r{^#{source_root}/}, '')
|
||||||
else
|
else
|
||||||
raise Sprockets::ArgumentError.new("require_tree needs a relative path: ./#{path}") if type == 'require_tree'
|
raise Sprockets::ArgumentError.new("require_tree needs a relative path: ./#{path}") if type == 'require_tree'
|
||||||
@ -55,14 +66,21 @@ module Jasmine::Headless
|
|||||||
when 'require'
|
when 'require'
|
||||||
[ name ]
|
[ name ]
|
||||||
when 'require_tree'
|
when 'require_tree'
|
||||||
Dir[File.join(source_root, name, '**/*')].find_all { |path|
|
Dir[File.join(source_root, name, '**/*')].find_all { |found_path|
|
||||||
File.file?(path) && path[extension_filter]
|
found_path != path && File.file?(found_path) && found_path[extension_filter]
|
||||||
}.sort.collect { |path| path.gsub(%r{^#{source_root}/}, '') }
|
}.sort.collect { |path| path.gsub(%r{^#{source_root}/}, '') }
|
||||||
|
when 'require_self'
|
||||||
|
@insert_after = last_file_added
|
||||||
|
[]
|
||||||
|
else
|
||||||
|
[]
|
||||||
end
|
end
|
||||||
|
|
||||||
files.collect do |file|
|
files.collect do |file|
|
||||||
if result = path_searcher.find(file)
|
if result = path_searcher.find(file)
|
||||||
self.class.new(*[ result, self ].flatten)
|
new_file = self.class.new(*[ result, self ].flatten)
|
||||||
|
last_file_added = new_file.path
|
||||||
|
new_file
|
||||||
else
|
else
|
||||||
raise Sprockets::FileNotFound.new("Could not find #{file}, referenced from #{path}:#{line}")
|
raise Sprockets::FileNotFound.new("Could not find #{file}, referenced from #{path}:#{line}")
|
||||||
end
|
end
|
||||||
|
@ -134,11 +134,15 @@ describe Jasmine::Headless::RequiredFile do
|
|||||||
let(:path) { path_file }
|
let(:path) { path_file }
|
||||||
let(:path_file) { File.join(dir, 'path.js') }
|
let(:path_file) { File.join(dir, 'path.js') }
|
||||||
let(:req_file) { File.join(dir, "req.js") }
|
let(:req_file) { File.join(dir, "req.js") }
|
||||||
|
let(:other_file) { File.join(dir, "other.js") }
|
||||||
|
|
||||||
|
let(:content) { "//= #{directive} '#{req_name}'\njavascript" }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
FileUtils.mkdir_p dir
|
FileUtils.mkdir_p dir
|
||||||
File.open(path_file, 'wb') { |fh| fh.print "//= #{directive} '#{req_name}'\njavascript" }
|
File.open(path_file, 'wb') { |fh| fh.print content }
|
||||||
File.open(req_file, 'wb')
|
File.open(req_file, 'wb')
|
||||||
|
File.open(other_file, 'wb')
|
||||||
end
|
end
|
||||||
|
|
||||||
subject { file.dependencies }
|
subject { file.dependencies }
|
||||||
@ -194,6 +198,29 @@ describe Jasmine::Headless::RequiredFile do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'require_self' do
|
||||||
|
subject { file.file_paths }
|
||||||
|
|
||||||
|
let(:content) do
|
||||||
|
<<-ENDTXT
|
||||||
|
//= require #{dirname}/req
|
||||||
|
//= require_self
|
||||||
|
//= require #{dirname}/other
|
||||||
|
ENDTXT
|
||||||
|
end
|
||||||
|
|
||||||
|
before do
|
||||||
|
path_searcher.expects(:find).with(File.join(dirname, 'req')).returns([ req_file, source_root ])
|
||||||
|
path_searcher.expects(:find).with(File.join(dirname, 'other')).returns([ other_file, source_root ])
|
||||||
|
end
|
||||||
|
|
||||||
|
it { should == [
|
||||||
|
req_file,
|
||||||
|
path_file,
|
||||||
|
other_file
|
||||||
|
] }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#file_paths' do
|
describe '#file_paths' do
|
||||||
|
Loading…
Reference in New Issue
Block a user