distil 0.10.4 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +2 -1
- data/VERSION +1 -1
- data/assets/distil.js +359 -0
- data/bin/distil +33 -10
- data/distil.gemspec +35 -24
- data/lib/distil/configurable/file-set.rb +86 -0
- data/lib/distil/configurable/interpolated.rb +36 -0
- data/lib/distil/configurable/output-path.rb +25 -0
- data/lib/distil/configurable/project-path.rb +25 -0
- data/lib/distil/configurable.rb +164 -0
- data/lib/distil/error-reporter.rb +63 -0
- data/lib/distil/product/concatenated.rb +85 -0
- data/lib/distil/product/css-product.rb +37 -0
- data/lib/distil/product/debug.rb +34 -0
- data/lib/distil/product/javascript-base-product.rb +35 -0
- data/lib/distil/product/javascript-doc-product.rb +61 -0
- data/lib/distil/product/javascript-product.rb +131 -0
- data/lib/distil/product/minified.rb +32 -0
- data/lib/distil/product.rb +97 -0
- data/lib/distil/project/distil-project.rb +99 -0
- data/lib/distil/project/external-project.rb +53 -0
- data/lib/distil/project.rb +78 -0
- data/lib/distil/source-file/css-file.rb +14 -0
- data/lib/distil/source-file/html-file.rb +14 -0
- data/lib/distil/source-file/javascript-file.rb +17 -0
- data/lib/distil/source-file/json-file.rb +16 -0
- data/lib/distil/source-file.rb +172 -0
- data/lib/distil/target.rb +235 -0
- data/lib/distil/task/css-dependency-task.rb +64 -0
- data/lib/distil/task/jsl-dependency-task.rb +49 -0
- data/lib/distil/task/nib-task.rb +72 -0
- data/lib/distil/task/validate-js-task.rb +75 -0
- data/lib/distil/task.rb +50 -0
- data/lib/distil.rb +72 -0
- data/lib/jsl.conf +4 -0
- data/vendor/jsl-0.3.0/src/Makefile.ref +16 -6
- data/vendor/jsl-0.3.0/src/config.mk +32 -2
- data/vendor/jsl-0.3.0/src/fdlibm/Makefile.ref +1 -2
- data/vendor/jsl-0.3.0/src/jsl.c +124 -13
- data/vendor/jsl-0.3.0/src/rules.mk +2 -1
- metadata +49 -28
- data/lib/bootstrap-template.js +0 -58
- data/lib/configurable.rb +0 -161
- data/lib/file-set.rb +0 -49
- data/lib/file-types/css-file.rb +0 -12
- data/lib/file-types/html-file.rb +0 -11
- data/lib/file-types/javascript-file.rb +0 -24
- data/lib/file-types/json-file.rb +0 -17
- data/lib/filter.rb +0 -41
- data/lib/filters/css-filter.rb +0 -58
- data/lib/filters/file-reference-filter.rb +0 -30
- data/lib/filters/jsl-dependency-filter.rb +0 -44
- data/lib/project.rb +0 -174
- data/lib/source-file.rb +0 -197
- data/lib/target.rb +0 -102
- data/lib/task.rb +0 -212
- data/lib/tasks/copy-task.rb +0 -17
- data/lib/tasks/css-task.rb +0 -12
- data/lib/tasks/javascript-task.rb +0 -206
- data/lib/tasks/multiple-output-task.rb +0 -140
- data/lib/tasks/output-task.rb +0 -76
- data/lib/tasks/single-output-task.rb +0 -104
- data/lib/tasks/test-task.rb +0 -280
data/Rakefile
CHANGED
@@ -9,10 +9,11 @@ begin
|
|
9
9
|
gemspec.summary= "A build tool for Javascript and CSS that takes advantage of best-of-breed helper applications Javascript Lint and JSDoc Toolkit"
|
10
10
|
gemspec.homepage= "http://code.google.com/p/distil-js/"
|
11
11
|
gemspec.description= gemspec.summary
|
12
|
-
gemspec.files= Dir['lib/**/*', 'bin/*', '[A-Za-z]*', 'vendor/**/*']
|
12
|
+
gemspec.files= Dir['assets/*', 'lib/**/*', 'bin/*', '[A-Za-z]*', 'vendor/**/*']
|
13
13
|
gemspec.files.reject! { |f| File.directory?(f) }
|
14
14
|
gemspec.executables= ['distil']
|
15
15
|
gemspec.extensions= ['vendor/extconf.rb']
|
16
|
+
gemspec.add_dependency('json', '>= 1.4.3')
|
16
17
|
end
|
17
18
|
|
18
19
|
Jeweler::GemcutterTasks.new
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.11.0
|
data/assets/distil.js
ADDED
@@ -0,0 +1,359 @@
|
|
1
|
+
/*jsl:declare distil*/
|
2
|
+
|
3
|
+
/** A resource module defined in the module that provides the module.
|
4
|
+
*/
|
5
|
+
|
6
|
+
(function(distil, window, document){
|
7
|
+
|
8
|
+
var moduleIndex= {};
|
9
|
+
var fetched= {};
|
10
|
+
var root= document.documentElement;
|
11
|
+
var head= document.getElementsByTagName('head')[0]||root;
|
12
|
+
|
13
|
+
var XHR= window.XMLHttpRequest || (function(){
|
14
|
+
var progIdCandidates= ['Msxml2.XMLHTTP.4.0', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP'];
|
15
|
+
var len= progIdCandidates.length;
|
16
|
+
|
17
|
+
var progId;
|
18
|
+
var xhr;
|
19
|
+
|
20
|
+
function ConstructXhr()
|
21
|
+
{
|
22
|
+
return new window.ActiveXObject(ConstructXhr.progId);
|
23
|
+
}
|
24
|
+
|
25
|
+
while (len--)
|
26
|
+
{
|
27
|
+
try
|
28
|
+
{
|
29
|
+
progId= progIdCandidates[len];
|
30
|
+
xhr= new window.ActiveXObject(progId);
|
31
|
+
// ActiveXObject constructor throws an exception
|
32
|
+
// if the component isn't available.
|
33
|
+
xhr= null;
|
34
|
+
ConstructXhr.progId= progId;
|
35
|
+
return ConstructXhr;
|
36
|
+
}
|
37
|
+
catch (e)
|
38
|
+
{
|
39
|
+
// Ignore the error
|
40
|
+
}
|
41
|
+
}
|
42
|
+
throw new Error('No XMLHttpRequest implementation found');
|
43
|
+
})();
|
44
|
+
|
45
|
+
var noop= function(){};
|
46
|
+
var fetchAsset= function(url, callback, scope, userData)
|
47
|
+
{
|
48
|
+
if (url in fetched)
|
49
|
+
{
|
50
|
+
// The callback will ALWAYS be called after the calling program
|
51
|
+
// finishes executing.
|
52
|
+
window.setTimeout(function(){ callback.call(scope, userData); }, 0);
|
53
|
+
return;
|
54
|
+
}
|
55
|
+
|
56
|
+
var xhr= new XHR();
|
57
|
+
xhr.open('GET', url, true);
|
58
|
+
|
59
|
+
xhr.onreadystatechange= function()
|
60
|
+
{
|
61
|
+
if (4!==xhr.readyState)
|
62
|
+
return;
|
63
|
+
fetched[url]= true;
|
64
|
+
var status= xhr.status;
|
65
|
+
var succeeded= 0==status || (status>=200 && status<300) || 304==status;
|
66
|
+
|
67
|
+
if (!succeeded)
|
68
|
+
throw new Error('Failed to load resource: status=' + status + ' url=' + url);
|
69
|
+
|
70
|
+
callback.call(scope, userData);
|
71
|
+
xhr.onreadystatechange= noop;
|
72
|
+
xhr= null;
|
73
|
+
}
|
74
|
+
xhr.send(null);
|
75
|
+
};
|
76
|
+
|
77
|
+
var SCRIPT_TYPE= 'js';
|
78
|
+
var JSNIB_TYPE= 'jsnib';
|
79
|
+
var CSS_TYPE= 'css';
|
80
|
+
var MODULE_TYPE= 'module';
|
81
|
+
var NO_MODULE_ERROR= 'No module with name: ';
|
82
|
+
|
83
|
+
var injectScript= distil.injectScript= function(url, callback, scope, userData)
|
84
|
+
{
|
85
|
+
var tag= document.createElement('script');
|
86
|
+
|
87
|
+
var complete= function()
|
88
|
+
{
|
89
|
+
if (callback)
|
90
|
+
callback.call(scope, userData);
|
91
|
+
tag.onreadystatechage= noop;
|
92
|
+
tag= null;
|
93
|
+
};
|
94
|
+
|
95
|
+
window.__filename__= url;
|
96
|
+
|
97
|
+
tag.onreadystatechange= function()
|
98
|
+
{
|
99
|
+
var readyState= tag && tag.readyState;
|
100
|
+
if ('complete'===readyState || 'loaded'===readyState)
|
101
|
+
complete();
|
102
|
+
}
|
103
|
+
tag.onload= complete;
|
104
|
+
tag.type= "text/javascript";
|
105
|
+
tag.src= url;
|
106
|
+
root.insertBefore(tag, root.firstChild);
|
107
|
+
};
|
108
|
+
|
109
|
+
var injectStylesheet= distil.injectStylesheet= function(url, callback, scope, userData)
|
110
|
+
{
|
111
|
+
var link= document.createElement('link');
|
112
|
+
link.type='text/css';
|
113
|
+
link.rel='stylesheet';
|
114
|
+
link.href='url';
|
115
|
+
head.appendChild(link);
|
116
|
+
|
117
|
+
if (callback)
|
118
|
+
callback.call(scope, url, userData);
|
119
|
+
};
|
120
|
+
|
121
|
+
var getRunningScriptSource= function()
|
122
|
+
{
|
123
|
+
var scripts= document.getElementsByTagName("script");
|
124
|
+
if (!scripts || !scripts.length)
|
125
|
+
throw new Error("Could not find script");
|
126
|
+
|
127
|
+
var l= scripts.length;
|
128
|
+
var s, src, lastSlash;
|
129
|
+
|
130
|
+
while (l--)
|
131
|
+
{
|
132
|
+
if ((src= scripts[l].src))
|
133
|
+
return src;
|
134
|
+
}
|
135
|
+
|
136
|
+
throw new Error("No script tags with src attribute.");
|
137
|
+
};
|
138
|
+
|
139
|
+
var ResourceInfo= function(type, url, callback, scope, userData)
|
140
|
+
{
|
141
|
+
if (!type)
|
142
|
+
{
|
143
|
+
var lastDot= url.lastIndexOf('.');
|
144
|
+
type= (-1!==lastDot)?url.substring(lastDot+1):"";
|
145
|
+
type= type.split('?')[0];
|
146
|
+
}
|
147
|
+
|
148
|
+
var lastSlash= url.lastIndexOf('/');
|
149
|
+
if (-1===lastSlash)
|
150
|
+
throw new Error("Couldn't determine path from script src: " + url);
|
151
|
+
|
152
|
+
return {
|
153
|
+
type: type,
|
154
|
+
url: url,
|
155
|
+
callback: callback,
|
156
|
+
scope: scope,
|
157
|
+
userData: userData,
|
158
|
+
loadQueue: [],
|
159
|
+
fetched: false,
|
160
|
+
injected: false,
|
161
|
+
callbacksExecuted: false,
|
162
|
+
path: url.substring(0, lastSlash+1),
|
163
|
+
parent: null
|
164
|
+
};
|
165
|
+
};
|
166
|
+
|
167
|
+
var rootResource= ResourceInfo(SCRIPT_TYPE, getRunningScriptSource());
|
168
|
+
rootResource.fetched= true;
|
169
|
+
rootResource.injected= true;
|
170
|
+
|
171
|
+
/** currentResource is the resource that is currently executing.
|
172
|
+
*/
|
173
|
+
var currentResource= rootResource;
|
174
|
+
|
175
|
+
var injectResource= function(resource)
|
176
|
+
{
|
177
|
+
resource.injected= true;
|
178
|
+
switch (resource.type)
|
179
|
+
{
|
180
|
+
case SCRIPT_TYPE:
|
181
|
+
case JSNIB_TYPE:
|
182
|
+
injectScript(resource.url, injectionComplete, null, resource);
|
183
|
+
break;
|
184
|
+
case CSS_TYPE:
|
185
|
+
injectStylesheet(resource.url, injectionComplete, null, resource);
|
186
|
+
break;
|
187
|
+
default:
|
188
|
+
throw new Error('Unknown resource type: ' + resource.type);
|
189
|
+
}
|
190
|
+
};
|
191
|
+
|
192
|
+
/** The execution complete callback for the script.
|
193
|
+
*/
|
194
|
+
var injectionComplete= function(resource)
|
195
|
+
{
|
196
|
+
while (resource)
|
197
|
+
{
|
198
|
+
if (resource.loadQueue.length)
|
199
|
+
{
|
200
|
+
currentResource= resource= resource.loadQueue.shift();
|
201
|
+
resource.complete= true;
|
202
|
+
if (!resource.fetched)
|
203
|
+
return;
|
204
|
+
if (MODULE_TYPE===resource.type)
|
205
|
+
continue;
|
206
|
+
injectResource(resource);
|
207
|
+
return;
|
208
|
+
}
|
209
|
+
|
210
|
+
resource.callbacksExecuted= true;
|
211
|
+
if (resource.callback)
|
212
|
+
resource.callback.call(resource.scope, resource.userData);
|
213
|
+
|
214
|
+
resource= resource.parent;
|
215
|
+
}
|
216
|
+
|
217
|
+
currentResource= resource ? resource : rootResource;
|
218
|
+
};
|
219
|
+
|
220
|
+
var fetchComplete= function(resource)
|
221
|
+
{
|
222
|
+
resource.fetched= true;
|
223
|
+
var parent= resource.parent;
|
224
|
+
|
225
|
+
if (resource===currentResource)
|
226
|
+
injectResource(resource);
|
227
|
+
};
|
228
|
+
|
229
|
+
var loadResource= function(url, callback, scope, userData, parent)
|
230
|
+
{
|
231
|
+
if (distil.debug)
|
232
|
+
url+= '?'+(new Date()).valueOf();
|
233
|
+
|
234
|
+
var resource= ResourceInfo(null, url, callback, scope, userData);
|
235
|
+
parent= parent||currentResource;
|
236
|
+
resource.parent= parent;
|
237
|
+
parent.loadQueue.push(resource);
|
238
|
+
fetchAsset(url, fetchComplete, null, resource);
|
239
|
+
};
|
240
|
+
|
241
|
+
var loadFiles= function(module)
|
242
|
+
{
|
243
|
+
var files= (module.loadQueue||[]).concat(module.required);
|
244
|
+
var resource= module.resource;
|
245
|
+
var path= module.path;
|
246
|
+
|
247
|
+
for (var i=0, len=files.length; i<len; ++i)
|
248
|
+
loadResource(path + files[i], null, null, null, resource);
|
249
|
+
};
|
250
|
+
|
251
|
+
distil.module= function(name, def)
|
252
|
+
{
|
253
|
+
if (name in moduleIndex)
|
254
|
+
{
|
255
|
+
var module= moduleIndex[name];
|
256
|
+
for (var p in def)
|
257
|
+
module[p]= def[p];
|
258
|
+
|
259
|
+
distil.require(name);
|
260
|
+
return;
|
261
|
+
}
|
262
|
+
|
263
|
+
def.path= currentResource.path + def.folder;
|
264
|
+
if ('/'!==def.path.slice(-1))
|
265
|
+
def.path+='/';
|
266
|
+
|
267
|
+
def.callbacks= [];
|
268
|
+
def.loadQueue= [];
|
269
|
+
|
270
|
+
if (!distil.mainModule)
|
271
|
+
distil.mainModule= def;
|
272
|
+
|
273
|
+
moduleIndex[name]= def;
|
274
|
+
if (def.required && def.required.length)
|
275
|
+
distil.require(name);
|
276
|
+
};
|
277
|
+
|
278
|
+
distil.queue= function(name, fragment)
|
279
|
+
{
|
280
|
+
var module= moduleIndex[name];
|
281
|
+
if (module.resource)
|
282
|
+
loadResource(currentResource.path + fragment, null, null, null, module.resource);
|
283
|
+
else
|
284
|
+
module.loadQueue.push(fragment);
|
285
|
+
};
|
286
|
+
|
287
|
+
distil.onready= function(callback)
|
288
|
+
{
|
289
|
+
if (rootResource.callbacksExecuted)
|
290
|
+
window.setTimeout(callback, 0);
|
291
|
+
else
|
292
|
+
rootResource.callback= callback;
|
293
|
+
}
|
294
|
+
|
295
|
+
distil.complete= function(name)
|
296
|
+
{
|
297
|
+
var module= moduleIndex[name];
|
298
|
+
if (module.loadQueue.length)
|
299
|
+
distil.require(name);
|
300
|
+
}
|
301
|
+
|
302
|
+
distil.require= function(name, callback, scope, userData)
|
303
|
+
{
|
304
|
+
var module= moduleIndex[name];
|
305
|
+
if (!module)
|
306
|
+
throw new Error(NO_MODULE_ERROR + name);
|
307
|
+
|
308
|
+
var complete= function()
|
309
|
+
{
|
310
|
+
if (callback)
|
311
|
+
callback.call(scope, userData);
|
312
|
+
module.loaded= true;
|
313
|
+
module.resource= null;
|
314
|
+
};
|
315
|
+
|
316
|
+
if (module.loaded)
|
317
|
+
{
|
318
|
+
window.setTimeout(complete, 0);
|
319
|
+
return;
|
320
|
+
}
|
321
|
+
|
322
|
+
var resource= module.resource= ResourceInfo(MODULE_TYPE, module.path, complete);
|
323
|
+
resource.parent= currentResource;
|
324
|
+
resource.fetched= true;
|
325
|
+
currentResource.loadQueue.push(resource);
|
326
|
+
|
327
|
+
loadFiles(module);
|
328
|
+
|
329
|
+
if (rootResource===currentResource)
|
330
|
+
injectionComplete(currentResource);
|
331
|
+
}
|
332
|
+
|
333
|
+
distil.kick= function()
|
334
|
+
{
|
335
|
+
if (rootResource===currentResource)
|
336
|
+
injectionComplete(currentResource);
|
337
|
+
}
|
338
|
+
|
339
|
+
distil.urlForAssetWithNameInModule= function(asset, moduleName)
|
340
|
+
{
|
341
|
+
var module= name ? moduleIndex[moduleName] : distil.mainModule;
|
342
|
+
if (!module)
|
343
|
+
throw new Error(NO_MODULE_ERROR + moduleName);
|
344
|
+
if (!module.asset_map)
|
345
|
+
return module.path + asset;
|
346
|
+
return module.path + (module.asset_map[asset]||asset);
|
347
|
+
}
|
348
|
+
|
349
|
+
distil.dataForAssetWithNameInModule= function(asset, moduleName)
|
350
|
+
{
|
351
|
+
var module= name ? moduleIndex[moduleName] : distil.mainModule;
|
352
|
+
if (!module)
|
353
|
+
throw new Error(NO_MODULE_ERROR + moduleName);
|
354
|
+
if (!module.assets)
|
355
|
+
return null;
|
356
|
+
return module.assets[asset]||null;
|
357
|
+
}
|
358
|
+
|
359
|
+
})(window.distil={}, window, document);
|
data/bin/distil
CHANGED
@@ -1,13 +1,16 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
LIB_DIR= File.expand_path(File.join(File.dirname(__FILE__), "..", "lib"))
|
4
|
+
VENDOR_DIR= File.expand_path(File.join(File.dirname(__FILE__), "..", "vendor"))
|
5
|
+
ASSETS_DIR= File.expand_path(File.join(File.dirname(__FILE__), "..", "assets"))
|
6
|
+
APP_NAME= File.basename($0)
|
6
7
|
|
7
|
-
|
8
|
+
$:.unshift(LIB_DIR)
|
9
|
+
|
10
|
+
require "distil"
|
8
11
|
|
9
12
|
arg_settings= {}
|
10
|
-
project_file=
|
13
|
+
project_file= nil
|
11
14
|
args= []
|
12
15
|
|
13
16
|
ARGV.each { |v|
|
@@ -32,13 +35,33 @@ ARGV.each { |v|
|
|
32
35
|
arg_settings[key]= value
|
33
36
|
}
|
34
37
|
|
38
|
+
def find_project_file(dir=nil)
|
39
|
+
dir ||= Dir.pwd
|
40
|
+
|
41
|
+
while dir.length > 1
|
42
|
+
Dir.glob(File.join(dir, '*.jsproj')) { |file|
|
43
|
+
return file if File.basename(dir)===File.basename(file, '.jsproj')
|
44
|
+
}
|
45
|
+
dir = File.dirname(dir)
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
|
35
51
|
# Change working directory to the folder containing the build YML file.
|
36
|
-
project_file
|
52
|
+
project_file||= find_project_file
|
37
53
|
|
38
|
-
if
|
39
|
-
puts "#{
|
54
|
+
if !project_file
|
55
|
+
puts "#{APP_NAME}: can't find project file"
|
40
56
|
exit
|
41
57
|
end
|
42
58
|
|
43
|
-
project=
|
44
|
-
|
59
|
+
project= Distil::DistilProject.new(project_file, arg_settings)
|
60
|
+
|
61
|
+
if 0==args.length
|
62
|
+
args << "build"
|
63
|
+
end
|
64
|
+
|
65
|
+
args.each { |cmd|
|
66
|
+
project.send cmd
|
67
|
+
}
|
data/distil.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{distil}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.11.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jeff Watkins"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-06-06}
|
13
13
|
s.default_executable = %q{distil}
|
14
14
|
s.description = %q{A build tool for Javascript and CSS that takes advantage of best-of-breed helper applications Javascript Lint and JSDoc Toolkit}
|
15
15
|
s.executables = ["distil"]
|
@@ -17,32 +17,40 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.files = [
|
18
18
|
"Rakefile",
|
19
19
|
"VERSION",
|
20
|
+
"assets/distil.js",
|
20
21
|
"bin/distil",
|
21
22
|
"distil.gemspec",
|
22
|
-
"lib/
|
23
|
-
"lib/configurable.rb",
|
24
|
-
"lib/file-set.rb",
|
25
|
-
"lib/
|
26
|
-
"lib/
|
27
|
-
"lib/
|
28
|
-
"lib/
|
29
|
-
"lib/
|
30
|
-
"lib/
|
31
|
-
"lib/
|
32
|
-
"lib/
|
23
|
+
"lib/distil.rb",
|
24
|
+
"lib/distil/configurable.rb",
|
25
|
+
"lib/distil/configurable/file-set.rb",
|
26
|
+
"lib/distil/configurable/interpolated.rb",
|
27
|
+
"lib/distil/configurable/output-path.rb",
|
28
|
+
"lib/distil/configurable/project-path.rb",
|
29
|
+
"lib/distil/error-reporter.rb",
|
30
|
+
"lib/distil/product.rb",
|
31
|
+
"lib/distil/product/concatenated.rb",
|
32
|
+
"lib/distil/product/css-product.rb",
|
33
|
+
"lib/distil/product/debug.rb",
|
34
|
+
"lib/distil/product/javascript-base-product.rb",
|
35
|
+
"lib/distil/product/javascript-doc-product.rb",
|
36
|
+
"lib/distil/product/javascript-product.rb",
|
37
|
+
"lib/distil/product/minified.rb",
|
38
|
+
"lib/distil/project.rb",
|
39
|
+
"lib/distil/project/distil-project.rb",
|
40
|
+
"lib/distil/project/external-project.rb",
|
41
|
+
"lib/distil/source-file.rb",
|
42
|
+
"lib/distil/source-file/css-file.rb",
|
43
|
+
"lib/distil/source-file/html-file.rb",
|
44
|
+
"lib/distil/source-file/javascript-file.rb",
|
45
|
+
"lib/distil/source-file/json-file.rb",
|
46
|
+
"lib/distil/target.rb",
|
47
|
+
"lib/distil/task.rb",
|
48
|
+
"lib/distil/task/css-dependency-task.rb",
|
49
|
+
"lib/distil/task/jsl-dependency-task.rb",
|
50
|
+
"lib/distil/task/nib-task.rb",
|
51
|
+
"lib/distil/task/validate-js-task.rb",
|
33
52
|
"lib/jsdoc.conf",
|
34
53
|
"lib/jsl.conf",
|
35
|
-
"lib/project.rb",
|
36
|
-
"lib/source-file.rb",
|
37
|
-
"lib/target.rb",
|
38
|
-
"lib/task.rb",
|
39
|
-
"lib/tasks/copy-task.rb",
|
40
|
-
"lib/tasks/css-task.rb",
|
41
|
-
"lib/tasks/javascript-task.rb",
|
42
|
-
"lib/tasks/multiple-output-task.rb",
|
43
|
-
"lib/tasks/output-task.rb",
|
44
|
-
"lib/tasks/single-output-task.rb",
|
45
|
-
"lib/tasks/test-task.rb",
|
46
54
|
"lib/test/HtmlTestReporter.js",
|
47
55
|
"lib/test/Test.js",
|
48
56
|
"lib/test/TestReporter.js",
|
@@ -588,9 +596,12 @@ Gem::Specification.new do |s|
|
|
588
596
|
s.specification_version = 3
|
589
597
|
|
590
598
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
599
|
+
s.add_runtime_dependency(%q<json>, [">= 1.4.3"])
|
591
600
|
else
|
601
|
+
s.add_dependency(%q<json>, [">= 1.4.3"])
|
592
602
|
end
|
593
603
|
else
|
604
|
+
s.add_dependency(%q<json>, [">= 1.4.3"])
|
594
605
|
end
|
595
606
|
end
|
596
607
|
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module Distil
|
2
|
+
|
3
|
+
class FileSet
|
4
|
+
include Enumerable
|
5
|
+
include ErrorReporter
|
6
|
+
|
7
|
+
def initialize(value=[], owner=nil)
|
8
|
+
@owner= owner
|
9
|
+
@source_set= value
|
10
|
+
end
|
11
|
+
|
12
|
+
def files
|
13
|
+
return @files if @files
|
14
|
+
@files=[]
|
15
|
+
case
|
16
|
+
when (@source_set.is_a?(String))
|
17
|
+
include_file(@source_set)
|
18
|
+
when (@source_set.is_a?(Array))
|
19
|
+
@source_set.each { |f| include_file(f) }
|
20
|
+
end
|
21
|
+
@files
|
22
|
+
end
|
23
|
+
|
24
|
+
def files=(set)
|
25
|
+
@files= nil
|
26
|
+
@source_set= set
|
27
|
+
end
|
28
|
+
|
29
|
+
def include?(file)
|
30
|
+
files.include?(file)
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.from_options(set, owner)
|
34
|
+
self.new(set, owner)
|
35
|
+
end
|
36
|
+
|
37
|
+
def include_file(file)
|
38
|
+
files if !@files
|
39
|
+
|
40
|
+
if file.is_a?(SourceFile)
|
41
|
+
@files << file if !@files.include?(file)
|
42
|
+
return
|
43
|
+
end
|
44
|
+
|
45
|
+
if @owner
|
46
|
+
full_path= File.expand_path(File.join([@owner.source_folder, file].compact))
|
47
|
+
else
|
48
|
+
full_path= File.expand_path(file)
|
49
|
+
end
|
50
|
+
|
51
|
+
if File.directory?(full_path)
|
52
|
+
Dir.foreach(full_path) { |f|
|
53
|
+
next if f[/^\./]
|
54
|
+
include_file(File.join(file, f))
|
55
|
+
}
|
56
|
+
return
|
57
|
+
end
|
58
|
+
|
59
|
+
files= Dir.glob(full_path)
|
60
|
+
if (files.length>0)
|
61
|
+
files.each { |f|
|
62
|
+
source_file= SourceFile.from_path(f)
|
63
|
+
next if (@files.include?(source_file))
|
64
|
+
@files << source_file
|
65
|
+
}
|
66
|
+
return
|
67
|
+
end
|
68
|
+
|
69
|
+
# file not found by globbing (would also find explicit reference)
|
70
|
+
source_file= @owner.find_file(file) if @owner
|
71
|
+
if !source_file
|
72
|
+
puts "full_path=#{full_path}\nsource_folder=#{@owner.source_folder}"
|
73
|
+
error("Unable to locate file: #{file}")
|
74
|
+
return
|
75
|
+
end
|
76
|
+
return if (@files.include?(source_file))
|
77
|
+
@files << source_file
|
78
|
+
end
|
79
|
+
|
80
|
+
def each
|
81
|
+
files.each { |f| yield f }
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Distil
|
2
|
+
|
3
|
+
class Interpolated
|
4
|
+
|
5
|
+
def initialize(value, owner=nil)
|
6
|
+
@value=value
|
7
|
+
@owner=owner
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.from_options(set, owner)
|
11
|
+
self.new(set, owner)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.value_of(value, owner)
|
15
|
+
return value if !owner
|
16
|
+
|
17
|
+
value.gsub(/\$\((\w+)\)/) { |match|
|
18
|
+
v= case
|
19
|
+
when owner.respond_to?($1)
|
20
|
+
owner.send $1
|
21
|
+
when owner.is_a?(Configurable)
|
22
|
+
owner.get_option($1)
|
23
|
+
end
|
24
|
+
|
25
|
+
v || "$(#{$1})"
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
def value_of(owner=nil)
|
30
|
+
owner||=@owner
|
31
|
+
self.class.value_of(@value, owner)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'distil/configurable/project-path'
|
2
|
+
|
3
|
+
module Distil
|
4
|
+
|
5
|
+
class OutputPath < Interpolated
|
6
|
+
|
7
|
+
def self.value_of(value, owner)
|
8
|
+
return value if !owner
|
9
|
+
|
10
|
+
value= super(value, owner)
|
11
|
+
|
12
|
+
return value if 0==value.index(File::SEPARATOR)
|
13
|
+
return value if !owner.is_a?(Configurable)
|
14
|
+
|
15
|
+
path= owner.get_option("output_folder")
|
16
|
+
return value if !path || path.empty?
|
17
|
+
|
18
|
+
return value if value!=path && 0==value.index(path)
|
19
|
+
|
20
|
+
File.join(path, value)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'distil/configurable/interpolated'
|
2
|
+
|
3
|
+
module Distil
|
4
|
+
|
5
|
+
class ProjectPath < Interpolated
|
6
|
+
|
7
|
+
def self.value_of(value, owner)
|
8
|
+
return value if !owner
|
9
|
+
|
10
|
+
value= super(value, owner)
|
11
|
+
|
12
|
+
return value if 0==value.index(File::SEPARATOR)
|
13
|
+
return value if !owner.is_a?(Configurable)
|
14
|
+
|
15
|
+
path= owner.get_option("path")
|
16
|
+
return value if !path || path.empty?
|
17
|
+
|
18
|
+
return value if value!=path && 0==value.index(path)
|
19
|
+
|
20
|
+
File.join(path, value)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|