rake-pipeline 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +18 -0
- data/.rspec +1 -0
- data/.yardopts +2 -0
- data/Gemfile +10 -0
- data/LICENSE +20 -0
- data/README.markdown +4 -0
- data/README.yard +149 -0
- data/Rakefile +12 -0
- data/bin/rakep +27 -0
- data/lib/rake-pipeline.rb +365 -0
- data/lib/rake-pipeline/dsl.rb +146 -0
- data/lib/rake-pipeline/error.rb +17 -0
- data/lib/rake-pipeline/file_wrapper.rb +173 -0
- data/lib/rake-pipeline/filter.rb +209 -0
- data/lib/rake-pipeline/filters.rb +1 -0
- data/lib/rake-pipeline/filters/concat.rb +63 -0
- data/lib/rake-pipeline/matcher.rb +106 -0
- data/lib/rake-pipeline/middleware.rb +70 -0
- data/lib/rake-pipeline/rails_plugin.rb +8 -0
- data/lib/rake-pipeline/railtie.rb +17 -0
- data/lib/rake-pipeline/version.rb +6 -0
- data/rails/init.rb +2 -0
- data/rake-pipeline.gemspec +22 -0
- data/spec/concat_filter_spec.rb +60 -0
- data/spec/dsl_spec.rb +86 -0
- data/spec/encoding_spec.rb +106 -0
- data/spec/file_wrapper_spec.rb +105 -0
- data/spec/filter_spec.rb +216 -0
- data/spec/matcher_spec.rb +105 -0
- data/spec/middleware_spec.rb +149 -0
- data/spec/pipeline_spec.rb +160 -0
- data/spec/rake_acceptance_spec.rb +240 -0
- data/spec/spec_helper.rb +74 -0
- metadata +123 -0
@@ -0,0 +1,106 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
if "".respond_to?(:encode)
|
4
|
+
class String
|
5
|
+
def strip_heredoc
|
6
|
+
indent = scan(/^[ \t]*(?=\S)/).min
|
7
|
+
indent = indent ? indent.size : 0
|
8
|
+
gsub(/^[ \t]{#{indent}}/, '')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
inputs = {
|
13
|
+
"app/javascripts/jquery.js" => <<-HERE.strip_heredoc,
|
14
|
+
var jQuery = { japanese: "こんにちは" };
|
15
|
+
HERE
|
16
|
+
|
17
|
+
"app/javascripts/sproutcore.js" => <<-HERE.strip_heredoc,
|
18
|
+
var SC = {};
|
19
|
+
assert(SC);
|
20
|
+
SC.hi = function() { console.log("こんにちは"); };
|
21
|
+
HERE
|
22
|
+
}
|
23
|
+
|
24
|
+
expected_output = <<-HERE.strip_heredoc
|
25
|
+
var jQuery = { japanese: "こんにちは" };
|
26
|
+
var SC = {};
|
27
|
+
|
28
|
+
SC.hi = function() { console.log("こんにちは"); };
|
29
|
+
HERE
|
30
|
+
|
31
|
+
describe "the pipeline's encoding handling" do
|
32
|
+
Filters = Rake::Pipeline::SpecHelpers::Filters
|
33
|
+
|
34
|
+
let(:inputs) { inputs }
|
35
|
+
|
36
|
+
def output_should_exist(expected, encoding="UTF-8")
|
37
|
+
output = File.join(tmp, "public/javascripts/application.js")
|
38
|
+
|
39
|
+
File.exists?(output).should be_true
|
40
|
+
output = File.read(output, :encoding => encoding)
|
41
|
+
output.should == expected
|
42
|
+
output.should be_valid_encoding
|
43
|
+
end
|
44
|
+
|
45
|
+
def create_files
|
46
|
+
inputs.each do |name, contents|
|
47
|
+
filename = File.join(tmp, name)
|
48
|
+
mkdir_p File.dirname(filename)
|
49
|
+
|
50
|
+
File.open(filename, "w:#{encoding}") do |file|
|
51
|
+
file.write contents.encode(encoding)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
before do
|
57
|
+
create_files
|
58
|
+
|
59
|
+
@pipeline = Rake::Pipeline.build do
|
60
|
+
tmpdir "temporary"
|
61
|
+
input tmp, "app/javascripts/*.js"
|
62
|
+
filter Filters::ConcatFilter, "javascripts/application.js"
|
63
|
+
filter Filters::StripAssertsFilter
|
64
|
+
output "public"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "when the input is UTF-8" do
|
69
|
+
let(:encoding) { "UTF-8" }
|
70
|
+
|
71
|
+
it "creates the correct file" do
|
72
|
+
@pipeline.invoke
|
73
|
+
output_should_exist(expected_output)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "when the input is not UTF-8" do
|
78
|
+
let(:encoding) { "EUC-JP" }
|
79
|
+
|
80
|
+
it "raises an exception" do
|
81
|
+
lambda { @pipeline.invoke }.should raise_error(Rake::Pipeline::EncodingError, /not valid UTF-8/)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "when dealing with only BINARY-type filters" do
|
86
|
+
let(:encoding) { "EUC-JP" }
|
87
|
+
|
88
|
+
it "does not raise an exception" do
|
89
|
+
pipeline = Rake::Pipeline.build do
|
90
|
+
tmpdir "temporary"
|
91
|
+
input tmp, "app/javascripts/*.js"
|
92
|
+
filter Filters::ConcatFilter, "javascripts/application.js"
|
93
|
+
output "public"
|
94
|
+
end
|
95
|
+
|
96
|
+
pipeline.invoke
|
97
|
+
|
98
|
+
expected = inputs.map do |filename, contents|
|
99
|
+
contents.encode("EUC-JP")
|
100
|
+
end.join
|
101
|
+
|
102
|
+
output_should_exist(expected.force_encoding("BINARY"), "BINARY")
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
describe "Rake::Pipeline::FileWrapper" do
|
2
|
+
let(:file) { Rake::Pipeline::FileWrapper.new }
|
3
|
+
let(:root) { File.expand_path("app/assets") }
|
4
|
+
let(:jquery) { File.join(root, "javascripts/jquery.js") }
|
5
|
+
|
6
|
+
before do
|
7
|
+
file.root = root
|
8
|
+
file.path = "javascripts/jquery.js"
|
9
|
+
end
|
10
|
+
|
11
|
+
it "is equal to another FileWrapper if the root and path are the same" do
|
12
|
+
other = Rake::Pipeline::FileWrapper.new
|
13
|
+
other.root = root
|
14
|
+
other.path = "javascripts/jquery.js"
|
15
|
+
|
16
|
+
file.should == other
|
17
|
+
file.hash.should == other.hash
|
18
|
+
end
|
19
|
+
|
20
|
+
it "is not equal to another FileWrapper if the root is the same but the path is different" do
|
21
|
+
other = Rake::Pipeline::FileWrapper.new
|
22
|
+
other.root = root
|
23
|
+
other.path = "javascripts/jquery2.js"
|
24
|
+
|
25
|
+
file.should_not == other
|
26
|
+
end
|
27
|
+
|
28
|
+
it "is not equal to another FileWrapper if the root is different but the path is the same" do
|
29
|
+
other = Rake::Pipeline::FileWrapper.new
|
30
|
+
other.root = "/"
|
31
|
+
other.path = "javascripts/jquery.js"
|
32
|
+
|
33
|
+
file.should_not == other
|
34
|
+
end
|
35
|
+
|
36
|
+
it "has a fullpath" do
|
37
|
+
file.fullpath.should == jquery
|
38
|
+
end
|
39
|
+
|
40
|
+
it "it knows it doesn't exist when the file doesn't exist" do
|
41
|
+
file.exists?.should == false
|
42
|
+
end
|
43
|
+
|
44
|
+
it "knows it exists when the file exists" do
|
45
|
+
touch_p jquery
|
46
|
+
file.exists?.should == true
|
47
|
+
end
|
48
|
+
|
49
|
+
it "raises an exception if trying to #read a file that doesn't exist" do
|
50
|
+
lambda { file.read }.should raise_error(Errno::ENOENT)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "returns the file's body when invoking #read on a file that does exist" do
|
54
|
+
touch_p jquery
|
55
|
+
body = "This. Is. jQuery!"
|
56
|
+
File.open(jquery, "w") { |file| file.write body }
|
57
|
+
|
58
|
+
file.read.should == body
|
59
|
+
end
|
60
|
+
|
61
|
+
it "creates a file with #create" do
|
62
|
+
new_file = file.create
|
63
|
+
new_file.should be_kind_of File
|
64
|
+
|
65
|
+
File.exists?(jquery).should == true
|
66
|
+
|
67
|
+
new_file.close
|
68
|
+
end
|
69
|
+
|
70
|
+
it "complains if trying to close an unopened file" do
|
71
|
+
lambda { file.close }.should raise_error(IOError)
|
72
|
+
end
|
73
|
+
|
74
|
+
it "closes a file created using #create with #close" do
|
75
|
+
new_file = file.create
|
76
|
+
new_file.closed?.should == false
|
77
|
+
|
78
|
+
file.close
|
79
|
+
new_file.closed?.should == true
|
80
|
+
|
81
|
+
lambda { file.close }.should raise_error(IOError)
|
82
|
+
end
|
83
|
+
|
84
|
+
it "complains if trying to write to a file that was not created" do
|
85
|
+
lambda { file.write "This. Is. jQuery" }.should raise_error(Rake::Pipeline::UnopenedFile)
|
86
|
+
end
|
87
|
+
|
88
|
+
it "supports a block form of create that closes the file at the end" do
|
89
|
+
file.create do |f|
|
90
|
+
f.write "HI"
|
91
|
+
end
|
92
|
+
|
93
|
+
File.exists?(jquery).should == true
|
94
|
+
File.read(jquery).should == "HI"
|
95
|
+
file.closed?.should == true
|
96
|
+
end
|
97
|
+
|
98
|
+
it "writes to the file system if the file was created" do
|
99
|
+
new_file = file.create
|
100
|
+
file.write "This. Is. jQuery"
|
101
|
+
new_file.close
|
102
|
+
|
103
|
+
file.read.should == "This. Is. jQuery"
|
104
|
+
end
|
105
|
+
end
|
data/spec/filter_spec.rb
ADDED
@@ -0,0 +1,216 @@
|
|
1
|
+
describe "Rake::Pipeline::Filter" do
|
2
|
+
def input_file(path, file_root=input_root)
|
3
|
+
Rake::Pipeline::FileWrapper.new(file_root, path)
|
4
|
+
end
|
5
|
+
|
6
|
+
def output_file(path, file_root=output_root)
|
7
|
+
Rake::Pipeline::FileWrapper.new(file_root, path)
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:filter) { Rake::Pipeline::Filter.new }
|
11
|
+
let(:input_root) { File.join(tmp, "app/assets") }
|
12
|
+
let(:output_root) { File.join(tmp, "filter1/app/assets") }
|
13
|
+
let(:input_files) do
|
14
|
+
%w(jquery.js jquery-ui.js sproutcore.js).map { |f| input_file(f) }
|
15
|
+
end
|
16
|
+
|
17
|
+
it "accepts a series of FileWrapper objects for the input" do
|
18
|
+
filter.input_files = input_files
|
19
|
+
filter.input_files.should == input_files
|
20
|
+
end
|
21
|
+
|
22
|
+
it "accepts a root directory for the outputs" do
|
23
|
+
path = File.expand_path(tmp, "filter1/app/assets")
|
24
|
+
filter.output_root = path
|
25
|
+
filter.output_root.should == path
|
26
|
+
end
|
27
|
+
|
28
|
+
it "accepts a Rake::Application to install tasks into" do
|
29
|
+
app = Rake::Application.new
|
30
|
+
filter.rake_application = app
|
31
|
+
filter.rake_application.should == app
|
32
|
+
end
|
33
|
+
|
34
|
+
it "makes Rake.application the default rake_application" do
|
35
|
+
filter.rake_application.should == Rake.application
|
36
|
+
end
|
37
|
+
|
38
|
+
it "accepts a proc to convert the input name into an output name" do
|
39
|
+
conversion = proc { |input| input }
|
40
|
+
filter.output_name_generator = conversion
|
41
|
+
filter.output_name_generator.should == conversion
|
42
|
+
end
|
43
|
+
|
44
|
+
it "accepts a block constructor argument to convert the input name into an output name" do
|
45
|
+
conversion = proc { |input| "application.js" }
|
46
|
+
new_filter = Rake::Pipeline::Filter.new(&conversion)
|
47
|
+
new_filter.output_name_generator.should == conversion
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "using the output_name proc to converting the input names into a hash" do
|
51
|
+
before do
|
52
|
+
filter.output_root = output_root
|
53
|
+
filter.input_files = input_files
|
54
|
+
end
|
55
|
+
|
56
|
+
it "with a simple output_name proc that outputs to a single file" do
|
57
|
+
output_name_generator = proc { |input| "application.js" }
|
58
|
+
filter.output_name_generator = output_name_generator
|
59
|
+
|
60
|
+
filter.outputs.should == {
|
61
|
+
output_file("application.js") => input_files
|
62
|
+
}
|
63
|
+
|
64
|
+
filter.output_files.should == [output_file("application.js")]
|
65
|
+
end
|
66
|
+
|
67
|
+
it "with a 1:1 output_name proc" do
|
68
|
+
output_name_generator = proc { |input| input }
|
69
|
+
filter.output_name_generator = output_name_generator
|
70
|
+
outputs = filter.outputs
|
71
|
+
|
72
|
+
outputs.keys.sort.should == input_files.map { |f| output_file(f.path) }.sort
|
73
|
+
outputs.values.flatten.sort.should == input_files.sort
|
74
|
+
|
75
|
+
filter.output_files.should == input_files.map { |file| output_file(file.path) }
|
76
|
+
end
|
77
|
+
|
78
|
+
it "with a more complicated proc" do
|
79
|
+
output_name_generator = proc { |input| input.split(/[-.]/, 2).first + ".js" }
|
80
|
+
filter.output_name_generator = output_name_generator
|
81
|
+
outputs = filter.outputs
|
82
|
+
|
83
|
+
outputs.keys.should == [output_file("jquery.js"), output_file("sproutcore.js")]
|
84
|
+
outputs.values.should == [[input_file("jquery.js"), input_file("jquery-ui.js")], [input_file("sproutcore.js")]]
|
85
|
+
|
86
|
+
filter.output_files.should == [output_file("jquery.js"), output_file("sproutcore.js")]
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe "generates rake tasks" do
|
91
|
+
class TestFilter < Rake::Pipeline::Filter
|
92
|
+
attr_accessor :generate_output_block
|
93
|
+
|
94
|
+
def generate_output(inputs, output)
|
95
|
+
generate_output_block.call(inputs, output)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
let(:filter) { TestFilter.new }
|
100
|
+
let(:input_root) { File.join(tmp, "app/assets") }
|
101
|
+
let(:output_root) { File.join(tmp, "filter1/app/assets") }
|
102
|
+
let(:input_files) do
|
103
|
+
%w(jquery.js jquery-ui.js sproutcore.js).map do |file|
|
104
|
+
input_file("javascripts/#{file}")
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
before do
|
109
|
+
Rake.application = Rake::Application.new
|
110
|
+
filter.output_root = output_root
|
111
|
+
filter.input_files = input_files
|
112
|
+
end
|
113
|
+
|
114
|
+
def output_task(path, app=Rake.application)
|
115
|
+
app.define_task(Rake::FileTask, File.join(output_root, path))
|
116
|
+
end
|
117
|
+
|
118
|
+
def input_task(path)
|
119
|
+
Rake::FileTask.define_task(File.join(input_root, path))
|
120
|
+
end
|
121
|
+
|
122
|
+
it "does not generate Rake tasks onto Rake.application if an alternate application is supplied" do
|
123
|
+
app = Rake::Application.new
|
124
|
+
filter.rake_application = app
|
125
|
+
filter.output_name_generator = proc { |input| input }
|
126
|
+
filter.generate_rake_tasks
|
127
|
+
tasks = filter.rake_tasks
|
128
|
+
|
129
|
+
input_files.each do |file|
|
130
|
+
task = output_task(file.path, app)
|
131
|
+
tasks.include?(task).should == true
|
132
|
+
Rake.application.tasks.include?(task).should == false
|
133
|
+
app.tasks.include?(task).should == true
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
it "with a simple output_name proc that outputs to a single file" do
|
138
|
+
filter_runs = 0
|
139
|
+
|
140
|
+
filter.output_name_generator = proc { |input| "javascripts/application.js" }
|
141
|
+
filter.generate_output_block = proc do |inputs, output|
|
142
|
+
inputs.should == input_files
|
143
|
+
output.should == output_file("javascripts/application.js")
|
144
|
+
|
145
|
+
filter_runs += 1
|
146
|
+
end
|
147
|
+
|
148
|
+
filter.generate_rake_tasks
|
149
|
+
tasks = filter.rake_tasks
|
150
|
+
tasks.should == [output_task("javascripts/application.js")]
|
151
|
+
tasks[0].prerequisites.should == input_files.map { |i| i.fullpath }
|
152
|
+
|
153
|
+
tasks.each(&:invoke)
|
154
|
+
|
155
|
+
filter_runs.should == 1
|
156
|
+
end
|
157
|
+
|
158
|
+
it "with a 1:1 output_name proc" do
|
159
|
+
filter_runs = 0
|
160
|
+
|
161
|
+
filter.output_name_generator = proc { |input| input }
|
162
|
+
filter.generate_output_block = proc do |inputs, output|
|
163
|
+
inputs.should == [input_file(output.path)]
|
164
|
+
|
165
|
+
filter_runs += 1
|
166
|
+
end
|
167
|
+
|
168
|
+
filter.generate_rake_tasks
|
169
|
+
tasks = filter.rake_tasks
|
170
|
+
tasks.sort.should == input_files.map { |file| output_task(file.path) }.sort
|
171
|
+
tasks.each do |task|
|
172
|
+
name = task.name.sub(/^#{Regexp.escape(output_root)}/, '')
|
173
|
+
prereq = File.join(input_root, name)
|
174
|
+
task.prerequisites.should == [prereq]
|
175
|
+
end
|
176
|
+
|
177
|
+
tasks.each(&:invoke)
|
178
|
+
|
179
|
+
filter_runs.should == 3
|
180
|
+
end
|
181
|
+
|
182
|
+
it "with a more complicated proc" do
|
183
|
+
filter_runs = 0
|
184
|
+
|
185
|
+
filter.output_name_generator = proc { |input| input.match(%r{javascripts/[^-.]*})[0] + ".js" }
|
186
|
+
filter.generate_output_block = proc do |inputs, output|
|
187
|
+
if output.path == "javascripts/jquery.js"
|
188
|
+
inputs.should == [input_file("javascripts/jquery.js"), input_file("javascripts/jquery-ui.js")]
|
189
|
+
output.should == output_file("javascripts/jquery.js")
|
190
|
+
elsif output.path == "javascripts/sproutcore.js"
|
191
|
+
inputs.should == [input_file("javascripts/sproutcore.js")]
|
192
|
+
output.should == output_file("javascripts/sproutcore.js")
|
193
|
+
else
|
194
|
+
flunk
|
195
|
+
end
|
196
|
+
|
197
|
+
filter_runs += 1
|
198
|
+
end
|
199
|
+
|
200
|
+
filter.generate_rake_tasks
|
201
|
+
tasks = filter.rake_tasks
|
202
|
+
tasks.sort.should == [output_task("javascripts/jquery.js"), output_task("javascripts/sproutcore.js")].sort
|
203
|
+
|
204
|
+
tasks.sort[0].prerequisites.should == [
|
205
|
+
File.join(input_root, "javascripts/jquery.js"),
|
206
|
+
File.join(input_root, "javascripts/jquery-ui.js")
|
207
|
+
]
|
208
|
+
|
209
|
+
tasks.sort[1].prerequisites.should == [File.join(input_root, "javascripts/sproutcore.js")]
|
210
|
+
|
211
|
+
tasks.each(&:invoke)
|
212
|
+
|
213
|
+
filter_runs.should == 2
|
214
|
+
end
|
215
|
+
end
|
216
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
describe "a matcher" do
|
2
|
+
sep = File::SEPARATOR
|
3
|
+
|
4
|
+
before do
|
5
|
+
@matcher = Rake::Pipeline::Matcher.new
|
6
|
+
@files = %w(jquery.js sproutcore.js sproutcore.css).map do |file|
|
7
|
+
file_wrapper(file)
|
8
|
+
end
|
9
|
+
|
10
|
+
@matcher.input_files = @files
|
11
|
+
end
|
12
|
+
|
13
|
+
def file_wrapper(file, options={})
|
14
|
+
root = options[:root] || tmp
|
15
|
+
encoding = options[:encoding] || "UTF-8"
|
16
|
+
Rake::Pipeline::FileWrapper.new(root, file, encoding)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "accepts input files" do
|
20
|
+
@matcher.input_files.should == @files
|
21
|
+
end
|
22
|
+
|
23
|
+
it "can access its glob" do
|
24
|
+
@matcher.glob = "*.js"
|
25
|
+
@matcher.glob.should == "*.js"
|
26
|
+
end
|
27
|
+
|
28
|
+
it "only processes files matching the matcher" do
|
29
|
+
@matcher.glob = "*.js"
|
30
|
+
@matcher.output_root = "tmp1"
|
31
|
+
|
32
|
+
concat = Rake::Pipeline::ConcatFilter.new
|
33
|
+
concat.output_name_generator = proc { |input| "app.js" }
|
34
|
+
@matcher.add_filter concat
|
35
|
+
|
36
|
+
@matcher.setup
|
37
|
+
|
38
|
+
concat.input_files.should == [
|
39
|
+
file_wrapper("jquery.js", :encoding => "BINARY"),
|
40
|
+
file_wrapper("sproutcore.js", :encoding => "BINARY")
|
41
|
+
]
|
42
|
+
|
43
|
+
@matcher.output_files.should == [
|
44
|
+
file_wrapper("app.js", :root => File.join(tmp, "tmp1")),
|
45
|
+
file_wrapper("sproutcore.css")
|
46
|
+
]
|
47
|
+
end
|
48
|
+
|
49
|
+
def should_match_glob(glob, files)
|
50
|
+
@matcher.glob = glob
|
51
|
+
@matcher.output_root = "tmp1"
|
52
|
+
|
53
|
+
concat = Rake::Pipeline::ConcatFilter.new
|
54
|
+
concat.output_name_generator = proc { |input| input }
|
55
|
+
@matcher.add_filter concat
|
56
|
+
|
57
|
+
@matcher.setup
|
58
|
+
|
59
|
+
@matcher.output_files.should == files
|
60
|
+
end
|
61
|
+
|
62
|
+
it "understands */* style globs" do
|
63
|
+
@matcher.input_files << file_wrapper("javascripts/backbone.js")
|
64
|
+
|
65
|
+
should_match_glob "*/*.js", [
|
66
|
+
file_wrapper("javascripts/backbone.js", :encoding => "BINARY", :root => File.join(tmp, "tmp1")),
|
67
|
+
file_wrapper("jquery.js"),
|
68
|
+
file_wrapper("sproutcore.js"),
|
69
|
+
file_wrapper("sproutcore.css")
|
70
|
+
]
|
71
|
+
|
72
|
+
should_match_glob "proutcore*.js", [
|
73
|
+
file_wrapper("jquery.js"),
|
74
|
+
file_wrapper("sproutcore.js"),
|
75
|
+
file_wrapper("sproutcore.css"),
|
76
|
+
file_wrapper("javascripts/backbone.js")
|
77
|
+
]
|
78
|
+
end
|
79
|
+
|
80
|
+
it "understands **/* style globs" do
|
81
|
+
@matcher.input_files << file_wrapper("javascripts/backbone.js")
|
82
|
+
|
83
|
+
output_root = File.join(tmp, "tmp1")
|
84
|
+
|
85
|
+
should_match_glob "**/*.js", [
|
86
|
+
file_wrapper("jquery.js", :encoding => "BINARY", :root => output_root),
|
87
|
+
file_wrapper("sproutcore.js", :encoding => "BINARY", :root => output_root),
|
88
|
+
file_wrapper("javascripts/backbone.js", :encoding => "BINARY", :root => output_root),
|
89
|
+
file_wrapper("sproutcore.css")
|
90
|
+
]
|
91
|
+
end
|
92
|
+
|
93
|
+
it "understands {foo,bar}/* style globs" do
|
94
|
+
@matcher.input_files << file_wrapper("javascripts/backbone.js")
|
95
|
+
|
96
|
+
output_root = File.join(tmp, "tmp1")
|
97
|
+
|
98
|
+
should_match_glob "{jquery,sproutcore}.js", [
|
99
|
+
file_wrapper("jquery.js", :encoding => "BINARY", :root => output_root),
|
100
|
+
file_wrapper("sproutcore.js", :encoding => "BINARY", :root => output_root),
|
101
|
+
file_wrapper("sproutcore.css"),
|
102
|
+
file_wrapper("javascripts/backbone.js")
|
103
|
+
]
|
104
|
+
end
|
105
|
+
end
|