jsus 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +10 -0
- data/README +59 -4
- data/VERSION +1 -1
- data/bin/jsus +42 -16
- data/features/command-line/postproc.feature +75 -0
- data/features/command-line/replacements.feature +72 -0
- data/features/data/Postprocessing/MootoolsCompat12/Source/Core.js +25 -0
- data/features/data/Postprocessing/MootoolsCompat12/package.yml +8 -0
- data/features/data/Postprocessing/MootoolsLtIE8/Source/Core.js +25 -0
- data/features/data/Postprocessing/MootoolsLtIE8/package.yml +8 -0
- data/features/data/Replacements/Mootools/Source/Core.js +16 -0
- data/features/data/Replacements/Mootools/package.yml +8 -0
- data/features/data/Replacements/MootoolsFork/Replacements/MootoolsCore.js +19 -0
- data/features/data/Replacements/MootoolsFork/package.yml +8 -0
- data/features/data/Replacements/Source/Library/Color.js +19 -0
- data/features/data/Replacements/package.yml +8 -0
- data/features/step_definitions/cli_steps.rb +7 -0
- data/jsus.gemspec +16 -2
- data/lib/jsus/package.rb +6 -3
- data/lib/jsus/pool.rb +23 -16
- data/lib/jsus/source_file.rb +8 -0
- data/spec/data/ClassReplacement/Source/Class.js +14 -0
- data/spec/data/ClassReplacement/package.yml +8 -0
- data/spec/jsus/package_spec.rb +12 -0
- data/spec/jsus/pool_spec.rb +12 -1
- metadata +18 -4
data/CHANGELOG
CHANGED
@@ -1,4 +1,14 @@
|
|
1
1
|
= Jsus Changelog
|
2
|
+
== Version 0.2.4
|
3
|
+
* Replacements feature
|
4
|
+
* Postprocessing feature
|
5
|
+
See jsus-examples repo or features dir for more information.
|
6
|
+
|
7
|
+
== Version 0.2.3
|
8
|
+
* Minor CLI reworkings:
|
9
|
+
* Deprecated -i and -o options (use plain arguments now)
|
10
|
+
* Restored generate-includes customizable root option
|
11
|
+
|
2
12
|
== Version 0.2.2
|
3
13
|
* Fixed dupes in structure json files
|
4
14
|
|
data/README
CHANGED
@@ -1,6 +1,61 @@
|
|
1
|
-
|
1
|
+
What is it?
|
2
|
+
=============
|
3
|
+
|
2
4
|
Ruby implementation of javascript packager / dependency resolver.
|
3
|
-
More info at: http://github.com/Inviz/Javascript-bundler
|
4
5
|
|
5
|
-
|
6
|
-
|
6
|
+
Why?
|
7
|
+
====
|
8
|
+
|
9
|
+
As a javascript programmer, you often need to split your code into
|
10
|
+
multiple files. When you have 50+ different modules / libraries, you
|
11
|
+
need some way to resolve complex dependencies and package all you need
|
12
|
+
and nil you don't. Jsus is an utility that allows you to do just that:
|
13
|
+
package your libraries into one piece with all dependencies included.
|
14
|
+
|
15
|
+
Features
|
16
|
+
========
|
17
|
+
|
18
|
+
* Jsus works with mootools-style packages. That means you specify a
|
19
|
+
package.yml / package.json file with package structure for every
|
20
|
+
library/bigger module you have. Source files should also have special
|
21
|
+
headers denoting their requirements and what they provide.
|
22
|
+
* Jsus automatically resolves dependencies, so you don't have to worry about
|
23
|
+
order issues or anything else.
|
24
|
+
* Jsus allows you to make "extensions". Extension is a monkey-patch you can
|
25
|
+
apply to any other library. Because sometimes you want to make project-specific
|
26
|
+
change to a library you don't have control over and you want to be able to
|
27
|
+
update this library without applying manual patches from their source.
|
28
|
+
* Jsus uses [murdoc](https://github.com/markiz/murdoc) for doccu style docs
|
29
|
+
generation.
|
30
|
+
* Jsus generates special json files denoting source and resulting project
|
31
|
+
structure which can be useful for later introspection.
|
32
|
+
* Jsus can also generate a special js file with loader for your dependencies,
|
33
|
+
so that you don't need to repackage everything during development cycle.
|
34
|
+
|
35
|
+
Examples
|
36
|
+
========
|
37
|
+
|
38
|
+
* For simple examples, take a look at: https://github.com/markiz/jsus-examples
|
39
|
+
* You can try it yourself on mootools-core:
|
40
|
+
* Get mootools-core from https://github.com/mootools/mootools-core
|
41
|
+
* `cd mootools-core`
|
42
|
+
* `jsus . Output`
|
43
|
+
* Look at what Output directory contains
|
44
|
+
|
45
|
+
Plans
|
46
|
+
=====
|
47
|
+
|
48
|
+
These are rather long-term, for when I get to have time and mood to do those:
|
49
|
+
* Rails integration
|
50
|
+
* npm packages support
|
51
|
+
|
52
|
+
NB:
|
53
|
+
* I don't have any particular roadmap or plans for more features
|
54
|
+
* However, I am open for any suggestions
|
55
|
+
* Bonus points for suggestions with pull-requests
|
56
|
+
|
57
|
+
|
58
|
+
License
|
59
|
+
=======
|
60
|
+
|
61
|
+
Public Domain, details in UNLICENSE file.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.4
|
data/bin/jsus
CHANGED
@@ -16,26 +16,26 @@ start_time = Time.now
|
|
16
16
|
options = {}
|
17
17
|
cli = OptionParser.new do |opts|
|
18
18
|
opts.banner = "jsus #{Jsus.version}. Usage: jsus [options] <input_dir> <output_dir>"
|
19
|
-
|
19
|
+
|
20
20
|
opts.on('-i', '--input-directory [DIR]', '[DEPRECATED] path to input directory ') do |dir|
|
21
21
|
$stderr.puts "DEPRECATION NOTICE: please do not use -i command-line argument"
|
22
22
|
options[:input_dir] = dir
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
opts.on('-o', '--input-directory [DIR]', '[DEPRECATED] path to output directory ') do |dir|
|
26
26
|
$stderr.puts "DEPRECATION NOTICE: please do not use -o command-line argument"
|
27
27
|
options[:output_dir] = dir
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
opts.on('-d', '--with-dependencies [DEPS]', 'path to directory containing dependency packages') do |dir|
|
31
31
|
options[:deps_dir] = dir
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
opts.on('-g', '--generate-includes [ROOT]', 'generates includes.js file that you may use for ad-hoc requiring of dependencies, defaults to output directory') do |dir|
|
35
35
|
options[:generate_includes] = true
|
36
36
|
options[:includes_root] = dir
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
opts.on('--generate-docs [*CLASSES]', Array, "generate docs for some of the sources. When given empty array, defaults to /**/*") do |docs|
|
40
40
|
if !docs
|
41
41
|
options[:documented_classes] = ["/**/*"]
|
@@ -43,15 +43,19 @@ cli = OptionParser.new do |opts|
|
|
43
43
|
options[:documented_classes] = docs
|
44
44
|
end
|
45
45
|
end
|
46
|
-
|
46
|
+
|
47
47
|
opts.on('--no-syntax-highlight', 'if you turned on docs generation, it will use syntax highlighting by default. This option prevents it') do
|
48
48
|
options[:no_syntax_highlight] = true
|
49
49
|
end
|
50
|
-
|
50
|
+
|
51
51
|
opts.on('--validate-with [*VALIDATORS]', Array, 'performs a check against some of the validators. Available validators: mooforge') do |validators|
|
52
52
|
options[:validators] = (validators || []).map {|v| v.downcase }
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
|
+
opts.on('--postproc [*PROCESSORS]', Array, 'performs postprocessing. Available postprocs:\n* moocompat12 -- removes mootools 1.2compat tags and their contents\n* mooltIE8 -- removes mootools ltIE8 compat tags and their contents') do |postprocs|
|
56
|
+
options[:postproc] = postprocs
|
57
|
+
end
|
58
|
+
|
55
59
|
opts.on_tail('-v', '--verbose', 'verbose mode, shows various debug messages') do
|
56
60
|
options[:verbose] = true
|
57
61
|
end
|
@@ -59,17 +63,17 @@ cli = OptionParser.new do |opts|
|
|
59
63
|
opts.on_tail('-b', '--benchmark', 'shows time spent on various stages') do
|
60
64
|
options[:benchmark] = true
|
61
65
|
end
|
62
|
-
|
66
|
+
|
63
67
|
opts.on_tail('--without-scripts-info', 'do not generate scripts.json') do
|
64
68
|
options[:without_scripts_info] = true
|
65
69
|
end
|
66
|
-
|
70
|
+
|
67
71
|
opts.on_tail('--without-tree-info', 'do not generate tree.json') do
|
68
72
|
options[:without_tree_info] = true
|
69
73
|
end
|
70
|
-
|
71
|
-
|
72
|
-
|
74
|
+
|
75
|
+
|
76
|
+
|
73
77
|
opts.on_tail('-h', '--help', 'Show this message') do
|
74
78
|
puts opts
|
75
79
|
exit
|
@@ -86,9 +90,9 @@ if !(options[:input_dir] && options[:output_dir])
|
|
86
90
|
end
|
87
91
|
|
88
92
|
compile_start_time = Time.now
|
89
|
-
|
93
|
+
|
90
94
|
Jsus.verbose = options[:verbose]
|
91
|
-
|
95
|
+
|
92
96
|
pool_load_start_time = Time.now
|
93
97
|
pool = if options[:deps_dir]
|
94
98
|
Jsus::Pool.new(options[:deps_dir])
|
@@ -100,7 +104,27 @@ pool_load_finish_time = Time.now
|
|
100
104
|
package = Jsus::Package.new(options[:input_dir], :pool => pool)
|
101
105
|
package.include_dependencies!
|
102
106
|
output_dir = options[:output_dir]
|
103
|
-
|
107
|
+
|
108
|
+
package_content = package.compile(nil)
|
109
|
+
|
110
|
+
if options[:postproc]
|
111
|
+
options[:postproc].each do |processor|
|
112
|
+
case processor.strip
|
113
|
+
when /^moocompat12$/i
|
114
|
+
package_content.gsub!(/\/\/<1.2compat>.*?\/\/<\/1.2compat>/m, '')
|
115
|
+
package_content.gsub!(/\/\*<1.2compat>\*\/.*?\/\*<\/1.2compat>\*\//m, '')
|
116
|
+
when /^mooltie8$/i
|
117
|
+
package_content.gsub!(/\/\/<ltIE8>.*?\/\/<\/ltIE8>/m, '')
|
118
|
+
package_content.gsub!(/\/\*<ltIE8>\*\/.*?\/\*<\/ltIE8>\*\//m, '')
|
119
|
+
else
|
120
|
+
$stderr.puts "Unknown post-processor: #{processor}"
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
FileUtils.mkdir_p(output_dir)
|
125
|
+
package_filename = File.join(output_dir, package.filename)
|
126
|
+
File.open(package_filename, 'w') {|f| f << package_content }
|
127
|
+
|
104
128
|
package.generate_scripts_info(output_dir) unless options[:without_scripts_info]
|
105
129
|
package.generate_tree(output_dir) unless options[:without_tree_info]
|
106
130
|
|
@@ -118,6 +142,8 @@ validators_map = {"mooforge" => Jsus::Validator::Mooforge}
|
|
118
142
|
end
|
119
143
|
end
|
120
144
|
|
145
|
+
# Postprocs, sort of hack
|
146
|
+
|
121
147
|
# Hack, hack, hack >:E
|
122
148
|
if options[:generate_includes]
|
123
149
|
includes_root = options[:includes_root] || output_dir
|
@@ -0,0 +1,75 @@
|
|
1
|
+
Feature: postprocessing
|
2
|
+
In order to leave unneccessary compatibility code out, I should be able to
|
3
|
+
use postprocessing feature.
|
4
|
+
|
5
|
+
Scenario: compat12
|
6
|
+
When I run "jsus Postprocessing/MootoolsCompat12 tmp --postproc moocompat12"
|
7
|
+
Then the following files should exist:
|
8
|
+
| tmp/package.js |
|
9
|
+
And file "tmp/package.js" should contain
|
10
|
+
"""
|
11
|
+
/*
|
12
|
+
---
|
13
|
+
|
14
|
+
script: Core.js
|
15
|
+
|
16
|
+
description: Mootools fake core
|
17
|
+
|
18
|
+
license: MIT-style license
|
19
|
+
|
20
|
+
authors:
|
21
|
+
- Valerio Proietti
|
22
|
+
|
23
|
+
provides: [Core]
|
24
|
+
|
25
|
+
...
|
26
|
+
*/
|
27
|
+
"""
|
28
|
+
And file "tmp/package.js" should not contain
|
29
|
+
"""
|
30
|
+
<1.2compat>
|
31
|
+
"""
|
32
|
+
And file "tmp/package.js" should not contain
|
33
|
+
"""
|
34
|
+
var compatible12 = true;
|
35
|
+
"""
|
36
|
+
And file "tmp/package.js" should contain
|
37
|
+
"""
|
38
|
+
var incompatible = true;
|
39
|
+
"""
|
40
|
+
|
41
|
+
Scenario: mooltIE8
|
42
|
+
When I run "jsus Postprocessing/MootoolsLtIE8 tmp --postproc mooltIE8"
|
43
|
+
Then the following files should exist:
|
44
|
+
| tmp/package.js |
|
45
|
+
And file "tmp/package.js" should contain
|
46
|
+
"""
|
47
|
+
/*
|
48
|
+
---
|
49
|
+
|
50
|
+
script: Core.js
|
51
|
+
|
52
|
+
description: Mootools fake core
|
53
|
+
|
54
|
+
license: MIT-style license
|
55
|
+
|
56
|
+
authors:
|
57
|
+
- Valerio Proietti
|
58
|
+
|
59
|
+
provides: [Core]
|
60
|
+
|
61
|
+
...
|
62
|
+
*/
|
63
|
+
"""
|
64
|
+
And file "tmp/package.js" should not contain
|
65
|
+
"""
|
66
|
+
<ltIE8>
|
67
|
+
"""
|
68
|
+
And file "tmp/package.js" should not contain
|
69
|
+
"""
|
70
|
+
var compatibleIE8 = true;
|
71
|
+
"""
|
72
|
+
And file "tmp/package.js" should contain
|
73
|
+
"""
|
74
|
+
var incompatible = true;
|
75
|
+
"""
|
@@ -0,0 +1,72 @@
|
|
1
|
+
Feature: replacements
|
2
|
+
In order to monkeypatch other libraries, I should be able to replace some
|
3
|
+
of the files.
|
4
|
+
|
5
|
+
Scenario: monkeypatch for external dependency
|
6
|
+
When I run "jsus Replacements tmp -d Replacements"
|
7
|
+
Then the following files should exist:
|
8
|
+
| tmp/package.js |
|
9
|
+
And file "tmp/package.js" should contain
|
10
|
+
"""
|
11
|
+
/*
|
12
|
+
---
|
13
|
+
|
14
|
+
script: MootooolsCore.js
|
15
|
+
|
16
|
+
description: Replaced mootools core
|
17
|
+
|
18
|
+
license: MIT-style license
|
19
|
+
|
20
|
+
authors:
|
21
|
+
- Mark Abramov
|
22
|
+
|
23
|
+
provides:
|
24
|
+
- More
|
25
|
+
|
26
|
+
replaces: Mootools/Core
|
27
|
+
|
28
|
+
...
|
29
|
+
*/
|
30
|
+
"""
|
31
|
+
And file "tmp/package.js" should contain
|
32
|
+
"""
|
33
|
+
/*
|
34
|
+
---
|
35
|
+
|
36
|
+
script: Color.js
|
37
|
+
|
38
|
+
description: A library to work with colors
|
39
|
+
|
40
|
+
license: MIT-style license
|
41
|
+
|
42
|
+
authors:
|
43
|
+
- Valerio Proietti
|
44
|
+
|
45
|
+
requires:
|
46
|
+
- Mootools/Core
|
47
|
+
|
48
|
+
provides: [Color]
|
49
|
+
|
50
|
+
...
|
51
|
+
*/
|
52
|
+
"""
|
53
|
+
And file "tmp/package.js" should not contain
|
54
|
+
"""
|
55
|
+
/*
|
56
|
+
---
|
57
|
+
|
58
|
+
script: Core.js
|
59
|
+
|
60
|
+
description: Mootools fake core
|
61
|
+
|
62
|
+
license: MIT-style license
|
63
|
+
|
64
|
+
authors:
|
65
|
+
- Valerio Proietti
|
66
|
+
|
67
|
+
provides: [Core]
|
68
|
+
|
69
|
+
...
|
70
|
+
*/
|
71
|
+
"""
|
72
|
+
And file "tmp/package.js" should have "MootooolsCore.js" before "script: Color.js"
|
@@ -0,0 +1,25 @@
|
|
1
|
+
/*
|
2
|
+
---
|
3
|
+
|
4
|
+
script: Core.js
|
5
|
+
|
6
|
+
description: Mootools fake core
|
7
|
+
|
8
|
+
license: MIT-style license
|
9
|
+
|
10
|
+
authors:
|
11
|
+
- Valerio Proietti
|
12
|
+
|
13
|
+
provides: [Core]
|
14
|
+
|
15
|
+
...
|
16
|
+
*/
|
17
|
+
|
18
|
+
|
19
|
+
//<1.2compat>
|
20
|
+
var compatible12 = true;
|
21
|
+
var a, b;
|
22
|
+
if (a < b) window.alert("Bugaga");
|
23
|
+
//</1.2compat>
|
24
|
+
|
25
|
+
var incompatible = true;
|
@@ -0,0 +1,8 @@
|
|
1
|
+
name: Mootools
|
2
|
+
filename: package.js
|
3
|
+
web: http://github.com/markiz/jsus
|
4
|
+
description: Mootools fork which is going to be postprocessed. This one has its compat features removed.
|
5
|
+
license: Public Domain, http://unlicense.org/UNLICENSE
|
6
|
+
authors: Mark Abramov (http://github.com/markiz)
|
7
|
+
sources:
|
8
|
+
- "Source/Core.js"
|
@@ -0,0 +1,25 @@
|
|
1
|
+
/*
|
2
|
+
---
|
3
|
+
|
4
|
+
script: Core.js
|
5
|
+
|
6
|
+
description: Mootools fake core
|
7
|
+
|
8
|
+
license: MIT-style license
|
9
|
+
|
10
|
+
authors:
|
11
|
+
- Valerio Proietti
|
12
|
+
|
13
|
+
provides: [Core]
|
14
|
+
|
15
|
+
...
|
16
|
+
*/
|
17
|
+
|
18
|
+
|
19
|
+
//<ltIE8>
|
20
|
+
var compatibleIE8 = true;
|
21
|
+
var a, b;
|
22
|
+
if (a < b) window.alert("Bugaga");
|
23
|
+
//</ltIE8>
|
24
|
+
|
25
|
+
var incompatible = true;
|
@@ -0,0 +1,8 @@
|
|
1
|
+
name: Mootools
|
2
|
+
filename: package.js
|
3
|
+
web: http://github.com/markiz/jsus
|
4
|
+
description: Mootools fork which is going to be postprocessed. This one has its ltIE8 features removed.
|
5
|
+
license: Public Domain, http://unlicense.org/UNLICENSE
|
6
|
+
authors: Mark Abramov (http://github.com/markiz)
|
7
|
+
sources:
|
8
|
+
- "Source/Core.js"
|
@@ -0,0 +1,8 @@
|
|
1
|
+
name: Mootools Fork
|
2
|
+
filename: moofork.js
|
3
|
+
web: http://github.com/markiz/jsus
|
4
|
+
description: Mootools fork containing replacement files
|
5
|
+
license: Public Domain, http://unlicense.org/UNLICENSE
|
6
|
+
authors: Mark Abramov (http://github.com/markiz)
|
7
|
+
sources:
|
8
|
+
- "Replacements/MootoolsCore.js"
|
@@ -0,0 +1,8 @@
|
|
1
|
+
name: Package
|
2
|
+
filename: package.js
|
3
|
+
web: http://github.com/markiz/jsus
|
4
|
+
description: Jsus package linked to externally replaced library
|
5
|
+
license: Public Domain, http://unlicense.org/UNLICENSE
|
6
|
+
authors: Mark Abramov (http://github.com/markiz)
|
7
|
+
sources:
|
8
|
+
- "Source/Library/Color.js"
|
@@ -19,6 +19,13 @@ Then /^file "(.*?)" should contain$/ do |filename, content|
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
+
|
23
|
+
Then /^file "(.*?)" should not contain$/ do |filename, content|
|
24
|
+
Dir.chdir DATA_DIR do
|
25
|
+
File.read(filename).should_not include(content)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
22
29
|
Then /^file "(.*?)" should contain valid JSON$/i do |filename|
|
23
30
|
Dir.chdir DATA_DIR do
|
24
31
|
json = nil
|
data/jsus.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{jsus}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Mark Abramov"]
|
12
|
-
s.date = %q{2011-02-
|
12
|
+
s.date = %q{2011-02-20}
|
13
13
|
s.default_executable = %q{jsus}
|
14
14
|
s.description = %q{Javascript packager and dependency resolver}
|
15
15
|
s.email = %q{markizko@gmail.com}
|
@@ -37,6 +37,8 @@ Gem::Specification.new do |s|
|
|
37
37
|
"features/command-line/extensions.feature",
|
38
38
|
"features/command-line/external_dependency_resolution.feature",
|
39
39
|
"features/command-line/json_package.feature",
|
40
|
+
"features/command-line/postproc.feature",
|
41
|
+
"features/command-line/replacements.feature",
|
40
42
|
"features/command-line/structure_json.feature",
|
41
43
|
"features/data/Basic/Source/Library/Color.js",
|
42
44
|
"features/data/Basic/Source/Widget/Input/Input.Color.js",
|
@@ -64,6 +66,16 @@ Gem::Specification.new do |s|
|
|
64
66
|
"features/data/JsonPackage/Source/Library/Color.js",
|
65
67
|
"features/data/JsonPackage/Source/Widget/Input/Input.Color.js",
|
66
68
|
"features/data/JsonPackage/package.json",
|
69
|
+
"features/data/Postprocessing/MootoolsCompat12/Source/Core.js",
|
70
|
+
"features/data/Postprocessing/MootoolsCompat12/package.yml",
|
71
|
+
"features/data/Postprocessing/MootoolsLtIE8/Source/Core.js",
|
72
|
+
"features/data/Postprocessing/MootoolsLtIE8/package.yml",
|
73
|
+
"features/data/Replacements/Mootools/Source/Core.js",
|
74
|
+
"features/data/Replacements/Mootools/package.yml",
|
75
|
+
"features/data/Replacements/MootoolsFork/Replacements/MootoolsCore.js",
|
76
|
+
"features/data/Replacements/MootoolsFork/package.yml",
|
77
|
+
"features/data/Replacements/Source/Library/Color.js",
|
78
|
+
"features/data/Replacements/package.yml",
|
67
79
|
"features/data/tmp2/package.js",
|
68
80
|
"features/data/tmp2/scripts.json",
|
69
81
|
"features/data/tmp2/tree.json",
|
@@ -97,6 +109,8 @@ Gem::Specification.new do |s|
|
|
97
109
|
"spec/data/ChainDependencies/app/javascripts/Hash/package.yml",
|
98
110
|
"spec/data/ChainDependencies/app/javascripts/Mash/Source/Mash.js",
|
99
111
|
"spec/data/ChainDependencies/app/javascripts/Mash/package.yml",
|
112
|
+
"spec/data/ClassReplacement/Source/Class.js",
|
113
|
+
"spec/data/ClassReplacement/package.yml",
|
100
114
|
"spec/data/DependenciesWildcards/app/javascripts/Class/Source/Class.js",
|
101
115
|
"spec/data/DependenciesWildcards/app/javascripts/Class/package.yml",
|
102
116
|
"spec/data/DependenciesWildcards/app/javascripts/Hash/Source/Hash.js",
|
data/lib/jsus/package.rb
CHANGED
@@ -116,7 +116,8 @@ module Jsus
|
|
116
116
|
|
117
117
|
# Compiles source files and linked external source files into a given category.
|
118
118
|
def compile(directory = ".")
|
119
|
-
|
119
|
+
fn = directory ? File.join(directory, filename) : nil
|
120
|
+
Packager.new(*(source_files.to_a + linked_external_dependencies.to_a)).pack(fn)
|
120
121
|
end
|
121
122
|
|
122
123
|
# Generates tree structure for files in package into a json file.
|
@@ -148,8 +149,10 @@ module Jsus
|
|
148
149
|
# Looks up all the external dependencies in the pool.
|
149
150
|
def include_dependencies!
|
150
151
|
source_files.each do |source|
|
151
|
-
|
152
|
-
|
152
|
+
if pool
|
153
|
+
deps = pool.lookup_dependencies(source).to_a - @source_files.to_a
|
154
|
+
linked_external_dependencies << deps
|
155
|
+
end
|
153
156
|
end
|
154
157
|
end
|
155
158
|
|
data/lib/jsus/pool.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# * Resolve dependencies
|
5
5
|
# * Look up extensions
|
6
6
|
#
|
7
|
-
#
|
7
|
+
#
|
8
8
|
|
9
9
|
|
10
10
|
module Jsus
|
@@ -15,7 +15,7 @@ module Jsus
|
|
15
15
|
#
|
16
16
|
# Basic constructor.
|
17
17
|
#
|
18
|
-
# Accepts an optional directory argument, when it is set, it looks up for
|
18
|
+
# Accepts an optional directory argument, when it is set, it looks up for
|
19
19
|
# packages from the given directory and if it finds any, adds them to the pool.
|
20
20
|
#
|
21
21
|
# Directory is considered a Package directory if it contains +package.yml+ file.
|
@@ -28,9 +28,9 @@ module Jsus
|
|
28
28
|
end
|
29
29
|
flush_cache!
|
30
30
|
end
|
31
|
-
|
32
|
-
|
33
|
-
#
|
31
|
+
|
32
|
+
|
33
|
+
#
|
34
34
|
# An array containing all the packages in the pool. Unordered.
|
35
35
|
#
|
36
36
|
def packages
|
@@ -38,7 +38,7 @@ module Jsus
|
|
38
38
|
end
|
39
39
|
|
40
40
|
#
|
41
|
-
# Container with all the sources in the pool. It is actually ordered in case you
|
41
|
+
# Container with all the sources in the pool. It is actually ordered in case you
|
42
42
|
# want to include ALL the source files from the pool.
|
43
43
|
#
|
44
44
|
def sources
|
@@ -46,16 +46,17 @@ module Jsus
|
|
46
46
|
end
|
47
47
|
|
48
48
|
#
|
49
|
-
# Looks up for a file providing given tag or tag key.
|
49
|
+
# Looks up for a file replacing or providing given tag or tag key.
|
50
|
+
# Replacement file gets priority.
|
50
51
|
#
|
51
52
|
# If given a source file, returns the input.
|
52
53
|
#
|
53
54
|
def lookup(source_or_key)
|
54
55
|
case source_or_key
|
55
56
|
when String
|
56
|
-
|
57
|
+
lookup(Tag[source_or_key])
|
57
58
|
when Tag
|
58
|
-
provides_map[source_or_key]
|
59
|
+
replacement_map[source_or_key] || provides_map[source_or_key]
|
59
60
|
when SourceFile
|
60
61
|
source_or_key
|
61
62
|
else
|
@@ -63,7 +64,7 @@ module Jsus
|
|
63
64
|
"given #{source_or_key.inspect}, an instance of #{source_or_key.class.name}."
|
64
65
|
end
|
65
66
|
end
|
66
|
-
|
67
|
+
|
67
68
|
|
68
69
|
#
|
69
70
|
# Looks up for dependencies for given file recursively.
|
@@ -118,6 +119,8 @@ module Jsus
|
|
118
119
|
end
|
119
120
|
provides_map[p] = source
|
120
121
|
end
|
122
|
+
|
123
|
+
replacement_map[source.replaces] = source if source.replaces if source.replaces
|
121
124
|
end
|
122
125
|
when source_or_sources_or_package.kind_of?(Package)
|
123
126
|
package = source_or_sources_or_package
|
@@ -140,13 +143,13 @@ module Jsus
|
|
140
143
|
|
141
144
|
(Array.instance_methods - self.instance_methods).each {|m| delegate m, :to => :sources }
|
142
145
|
# Private API
|
143
|
-
|
144
|
-
#
|
146
|
+
|
147
|
+
#
|
145
148
|
# Looks up direct dependencies for the given source_file or provides tag.
|
146
149
|
# You probably will find yourself using #include_dependencies instead.
|
147
150
|
# This method caches results locally, use flush_cache! to drop.
|
148
151
|
#
|
149
|
-
def lookup_direct_dependencies(source_or_source_key)
|
152
|
+
def lookup_direct_dependencies(source_or_source_key)
|
150
153
|
source = lookup(source_or_source_key)
|
151
154
|
@cached_dependencies[source] ||= lookup_direct_dependencies!(source)
|
152
155
|
end
|
@@ -162,7 +165,7 @@ module Jsus
|
|
162
165
|
puts "#{source.filename} is missing #{dependency.is_a?(SourceFile) ? dependency.filename : dependency.to_s}"
|
163
166
|
end
|
164
167
|
result
|
165
|
-
end.flatten
|
168
|
+
end.flatten.map {|tag| lookup(tag) }
|
166
169
|
else
|
167
170
|
[]
|
168
171
|
end
|
@@ -173,7 +176,7 @@ module Jsus
|
|
173
176
|
# Returs a tree, containing all the sources
|
174
177
|
#
|
175
178
|
def source_tree
|
176
|
-
@source_tree ||= Tree.new
|
179
|
+
@source_tree ||= Tree.new
|
177
180
|
end
|
178
181
|
|
179
182
|
#
|
@@ -194,7 +197,7 @@ module Jsus
|
|
194
197
|
source_tree.insert("/" + File.basename(source.filename), source)
|
195
198
|
end
|
196
199
|
source.provides.each do |tag|
|
197
|
-
provides_tree.insert("/" + tag.to_s,
|
200
|
+
provides_tree.insert("/" + tag.to_s, tag)
|
198
201
|
end
|
199
202
|
end
|
200
203
|
|
@@ -207,5 +210,9 @@ module Jsus
|
|
207
210
|
def extensions_map # :nodoc:
|
208
211
|
@extensions_map ||= Hash.new{|hash, key| hash[key] = [] }
|
209
212
|
end
|
213
|
+
|
214
|
+
def replacement_map # :nodoc:
|
215
|
+
@replacement_map ||= {}
|
216
|
+
end
|
210
217
|
end
|
211
218
|
end
|
data/lib/jsus/source_file.rb
CHANGED
@@ -128,6 +128,13 @@ module Jsus
|
|
128
128
|
provides.map {|p| p.name(options)}
|
129
129
|
end
|
130
130
|
|
131
|
+
#
|
132
|
+
# Returns a tag for replaced file, if any
|
133
|
+
#
|
134
|
+
def replaces
|
135
|
+
@replaces
|
136
|
+
end
|
137
|
+
|
131
138
|
|
132
139
|
#
|
133
140
|
# Returns a tag for source file, which this one is an extension for.
|
@@ -213,6 +220,7 @@ module Jsus
|
|
213
220
|
@provides = [@header["provides"] || []].flatten
|
214
221
|
@provides.map! {|tag_name| Tag.new(tag_name, :package => package) }
|
215
222
|
@extends = (@header["extends"] && !@header["extends"].empty?) ? Tag.new(@header["extends"]) : nil
|
223
|
+
@replaces = @header["replaces"] ? Tag.new(@header["replaces"]) : nil
|
216
224
|
end
|
217
225
|
|
218
226
|
def content=(new_value) # :nodoc:
|
data/spec/jsus/package_spec.rb
CHANGED
@@ -61,6 +61,18 @@ describe Jsus::Package do
|
|
61
61
|
required_files = Dir["#{input_dir}/**/*.js"].map {|f| IO.read(f) }
|
62
62
|
required_files.each {|f| compiled_content.should include(f)}
|
63
63
|
end
|
64
|
+
|
65
|
+
context "when given nil" do
|
66
|
+
it "should not raise errors" do
|
67
|
+
lambda { subject.compile(nil) }.should_not raise_error
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should return a string with compiled content" do
|
71
|
+
compiled_content = subject.compile(nil)
|
72
|
+
required_files = Dir["#{input_dir}/**/*.js"].map {|f| IO.read(f) }
|
73
|
+
required_files.each {|f| compiled_content.should include(f)}
|
74
|
+
end
|
75
|
+
end
|
64
76
|
end
|
65
77
|
|
66
78
|
describe "#generate_scripts_info" do
|
data/spec/jsus/pool_spec.rb
CHANGED
@@ -66,6 +66,13 @@ describe Jsus::Pool do
|
|
66
66
|
it "should allow tags" do
|
67
67
|
subject.lookup(Jsus::Tag["Class/Class"]).should == sources[1]
|
68
68
|
end
|
69
|
+
|
70
|
+
it "should return replacements whenever possible" do
|
71
|
+
pkg = Jsus::Package.new("spec/data/ClassReplacement", :pool => subject)
|
72
|
+
subject << pkg.source_files
|
73
|
+
subject.lookup("Class/Class").should == pkg.source_files[0]
|
74
|
+
subject.lookup(Jsus::Tag["Class/Class"]).should == pkg.source_files[0]
|
75
|
+
end
|
69
76
|
end
|
70
77
|
|
71
78
|
describe "#lookup_direct_dependencies" do
|
@@ -154,7 +161,11 @@ describe Jsus::Pool do
|
|
154
161
|
subject { Jsus::Pool.new(input_dir) }
|
155
162
|
|
156
163
|
it "should return a tree with all the source elements in it" do
|
157
|
-
subject.provides_tree.glob("/Core/Class")[0].value.should
|
164
|
+
subject.provides_tree.glob("/Core/Class")[0].value.should == Jsus::Tag["Core/Class"]
|
165
|
+
end
|
166
|
+
|
167
|
+
it "should allow wildcards" do
|
168
|
+
subject.provides_tree.glob("/Core/*")[0].value.should == Jsus::Tag["Core/Class"]
|
158
169
|
end
|
159
170
|
end
|
160
171
|
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 0.2.
|
8
|
+
- 4
|
9
|
+
version: 0.2.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Mark Abramov
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-02-
|
17
|
+
date: 2011-02-20 00:00:00 -05:00
|
18
18
|
default_executable: jsus
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -149,6 +149,8 @@ files:
|
|
149
149
|
- features/command-line/extensions.feature
|
150
150
|
- features/command-line/external_dependency_resolution.feature
|
151
151
|
- features/command-line/json_package.feature
|
152
|
+
- features/command-line/postproc.feature
|
153
|
+
- features/command-line/replacements.feature
|
152
154
|
- features/command-line/structure_json.feature
|
153
155
|
- features/data/Basic/Source/Library/Color.js
|
154
156
|
- features/data/Basic/Source/Widget/Input/Input.Color.js
|
@@ -176,6 +178,16 @@ files:
|
|
176
178
|
- features/data/JsonPackage/Source/Library/Color.js
|
177
179
|
- features/data/JsonPackage/Source/Widget/Input/Input.Color.js
|
178
180
|
- features/data/JsonPackage/package.json
|
181
|
+
- features/data/Postprocessing/MootoolsCompat12/Source/Core.js
|
182
|
+
- features/data/Postprocessing/MootoolsCompat12/package.yml
|
183
|
+
- features/data/Postprocessing/MootoolsLtIE8/Source/Core.js
|
184
|
+
- features/data/Postprocessing/MootoolsLtIE8/package.yml
|
185
|
+
- features/data/Replacements/Mootools/Source/Core.js
|
186
|
+
- features/data/Replacements/Mootools/package.yml
|
187
|
+
- features/data/Replacements/MootoolsFork/Replacements/MootoolsCore.js
|
188
|
+
- features/data/Replacements/MootoolsFork/package.yml
|
189
|
+
- features/data/Replacements/Source/Library/Color.js
|
190
|
+
- features/data/Replacements/package.yml
|
179
191
|
- features/data/tmp2/package.js
|
180
192
|
- features/data/tmp2/scripts.json
|
181
193
|
- features/data/tmp2/tree.json
|
@@ -209,6 +221,8 @@ files:
|
|
209
221
|
- spec/data/ChainDependencies/app/javascripts/Hash/package.yml
|
210
222
|
- spec/data/ChainDependencies/app/javascripts/Mash/Source/Mash.js
|
211
223
|
- spec/data/ChainDependencies/app/javascripts/Mash/package.yml
|
224
|
+
- spec/data/ClassReplacement/Source/Class.js
|
225
|
+
- spec/data/ClassReplacement/package.yml
|
212
226
|
- spec/data/DependenciesWildcards/app/javascripts/Class/Source/Class.js
|
213
227
|
- spec/data/DependenciesWildcards/app/javascripts/Class/package.yml
|
214
228
|
- spec/data/DependenciesWildcards/app/javascripts/Hash/Source/Hash.js
|
@@ -285,7 +299,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
285
299
|
requirements:
|
286
300
|
- - ">="
|
287
301
|
- !ruby/object:Gem::Version
|
288
|
-
hash:
|
302
|
+
hash: 1044450339509570766
|
289
303
|
segments:
|
290
304
|
- 0
|
291
305
|
version: "0"
|