modulr 0.5.0 → 0.6.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/README.markdown +13 -6
- data/VERSION +1 -1
- data/bin/modulrize +5 -3
- data/lib/modulr/collector.rb +53 -9
- data/lib/modulr/global_export_collector.rb +32 -11
- data/lib/modulr/sync_collector.rb +12 -9
- data/lib/modulr.rb +6 -2
- metadata +3 -3
data/README.markdown
CHANGED
@@ -41,6 +41,10 @@ To process a JavaScript source file, just run:
|
|
41
41
|
|
42
42
|
$ modulrize filename.js > output.js
|
43
43
|
|
44
|
+
You can also simultaneously process multiples files like so:
|
45
|
+
|
46
|
+
$ modulrize filename.js other_filename.js > output.js
|
47
|
+
|
44
48
|
Options are as follows:
|
45
49
|
|
46
50
|
-o, --output=FILE Write the output to FILE. Defaults to stdout.
|
@@ -48,18 +52,21 @@ Options are as follows:
|
|
48
52
|
--lazy-eval [MODULES] Enable lazy evaluation of all JS modules or of those specified by MODULES.
|
49
53
|
MODULES accepts a comma-separated list of identifiers.
|
50
54
|
--minify Minify output using YUI Compressor.
|
51
|
-
--global-export=GLOBAL_VAR
|
52
|
-
|
55
|
+
--global-export[=GLOBAL_VAR] If GLOBAL_VAR is specified and only one module is being processed, exports it to the GLOBAL_VAR global variable.
|
56
|
+
If GLOBAL_VAR is specified and multiple modules are being processed, exports each one of them as a property of GLOBAL_VAR.
|
57
|
+
If GLOBAL_VAR isn't specified, exports the module to global variables corresponding to their identifier.
|
58
|
+
--sync Load all dependencies synchronously.
|
53
59
|
--dependency-graph[=OUTPUT] Create a dependency graph of the module.
|
54
60
|
-h, --help Show this message.
|
55
61
|
|
56
62
|
Minification options (these are forwarded to YUI Compressor without the "minify-" prefix):
|
57
63
|
|
58
64
|
--minify-disable-optimizations Disable all micro optimizations.
|
59
|
-
--minify-nomunge
|
60
|
-
--minify-verbose
|
61
|
-
--minify-line-break COLUMN
|
62
|
-
--minify-preserve-semi
|
65
|
+
--minify-nomunge Minify only, do not obfuscate.
|
66
|
+
--minify-verbose Display informational messages and warnings.
|
67
|
+
--minify-line-break COLUMN Insert a line break after the specified column number.
|
68
|
+
--minify-preserve-semi Preserve all semicolons.
|
69
|
+
|
63
70
|
|
64
71
|
Specs
|
65
72
|
-----
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.6.0
|
data/bin/modulrize
CHANGED
@@ -31,8 +31,8 @@ opts = OptionParser.new do |opts|
|
|
31
31
|
options[:minify] = minify
|
32
32
|
end
|
33
33
|
|
34
|
-
opts.on('--global-export=GLOBAL_VAR', '
|
35
|
-
options[:global] = global
|
34
|
+
opts.on('--global-export[=GLOBAL_VAR]', 'If GLOBAL_VAR is specified and only one module is being processed, exports it to the GLOBAL_VAR global variable.', 'If GLOBAL_VAR is specified and multiple modules are being processed, exports each one of them as a property of GLOBAL_VAR.', 'If GLOBAL_VAR isn\'t specified, exports the module to global variables corresponding to their identifier.') do |global|
|
35
|
+
options[:global] = global || true
|
36
36
|
end
|
37
37
|
|
38
38
|
opts.on('--sync', 'Load all dependencies synchronously.') do |global|
|
@@ -87,7 +87,9 @@ begin
|
|
87
87
|
if options.delete(:dependency_graph)
|
88
88
|
result = Modulr.graph(ARGV.first, options)
|
89
89
|
else
|
90
|
-
|
90
|
+
args = opts.default_argv.dup
|
91
|
+
args << options
|
92
|
+
result = Modulr.ize(*args)
|
91
93
|
output.print(result)
|
92
94
|
end
|
93
95
|
ensure
|
data/lib/modulr/collector.rb
CHANGED
@@ -1,27 +1,70 @@
|
|
1
1
|
module Modulr
|
2
2
|
class Collector
|
3
|
-
attr_reader :modules, :
|
3
|
+
attr_reader :modules, :top_level_modules
|
4
4
|
|
5
5
|
def initialize(options = {})
|
6
6
|
@root = options[:root]
|
7
7
|
@lazy_eval = options[:lazy_eval]
|
8
8
|
@modules = []
|
9
|
+
@top_level_modules = []
|
9
10
|
end
|
10
11
|
|
11
12
|
def parse_file(path)
|
12
|
-
|
13
|
-
@root ||= File.dirname(path)
|
14
|
-
@main = JSModule.new(File.basename(path, '.js'), @root, path)
|
15
|
-
collect_dependencies(main)
|
13
|
+
parse_files(path)
|
16
14
|
end
|
17
15
|
|
16
|
+
def parse_files(*paths)
|
17
|
+
reset
|
18
|
+
paths.each do |path|
|
19
|
+
add_module_from_path(path)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def reset
|
24
|
+
modules.clear
|
25
|
+
top_level_modules.clear
|
26
|
+
end
|
27
|
+
private :reset
|
28
|
+
|
29
|
+
def module_from_path(path)
|
30
|
+
identifier = File.basename(path, '.js')
|
31
|
+
root = @root || File.dirname(path)
|
32
|
+
JSModule.new(identifier, root, path)
|
33
|
+
end
|
34
|
+
private :module_from_path
|
35
|
+
|
36
|
+
def add_module_from_path(path)
|
37
|
+
js_module = module_from_path(path)
|
38
|
+
top_level_modules << js_module
|
39
|
+
collect_dependencies(js_module)
|
40
|
+
js_module
|
41
|
+
end
|
42
|
+
private :add_module_from_path
|
43
|
+
|
18
44
|
def to_js(buffer = '')
|
19
|
-
buffer <<
|
20
|
-
buffer << "\n(function(
|
45
|
+
buffer << globals
|
46
|
+
buffer << "\n(function() {"
|
47
|
+
buffer << lib
|
21
48
|
buffer << transport
|
22
|
-
buffer <<
|
23
|
-
buffer << "})(
|
49
|
+
buffer << requires
|
50
|
+
buffer << "})();\n"
|
51
|
+
end
|
52
|
+
|
53
|
+
def lib
|
54
|
+
src = File.read(PATH_TO_MODULR_JS)
|
55
|
+
"#{src}\nvar require = modulr.require, module = require.main;\n"
|
56
|
+
end
|
57
|
+
private :lib
|
58
|
+
|
59
|
+
def requires
|
60
|
+
top_level_modules.map { |m| m.ensure }.join("\n")
|
61
|
+
end
|
62
|
+
private :requires
|
63
|
+
|
64
|
+
def globals
|
65
|
+
''
|
24
66
|
end
|
67
|
+
private :globals
|
25
68
|
|
26
69
|
def transport
|
27
70
|
pairs = modules.map do |m|
|
@@ -34,6 +77,7 @@ module Modulr
|
|
34
77
|
end
|
35
78
|
"require.define({#{pairs.join(', ')}\n});"
|
36
79
|
end
|
80
|
+
private :transport
|
37
81
|
|
38
82
|
private
|
39
83
|
def collect_dependencies(js_module)
|
@@ -6,27 +6,48 @@ module Modulr
|
|
6
6
|
super
|
7
7
|
end
|
8
8
|
|
9
|
-
def
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
def globals
|
10
|
+
if @global == true
|
11
|
+
top_level_modules.map { |m| define_global(m.id) }.join
|
12
|
+
else
|
13
|
+
define_global(@global)
|
14
|
+
end
|
15
15
|
end
|
16
|
+
private :globals
|
16
17
|
|
17
|
-
def define_global
|
18
|
-
if
|
19
|
-
props =
|
18
|
+
def define_global(global)
|
19
|
+
if global.include?('.')
|
20
|
+
props = global.split('.')
|
20
21
|
str = props.shift
|
21
22
|
results = "var #{str};"
|
22
23
|
props.each do |prop|
|
23
24
|
results << "\n#{str} = #{str} || {};"
|
24
25
|
str << ".#{prop}"
|
25
26
|
end
|
26
|
-
"#{results}\n#{str}"
|
27
|
+
"#{results}\n#{str};\n"
|
28
|
+
else
|
29
|
+
"var #{global};\n"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
private :define_global
|
33
|
+
|
34
|
+
def requires
|
35
|
+
if @global == true
|
36
|
+
top_level_modules.map do |m|
|
37
|
+
"\n #{m.id} = require('#{m.id}');"
|
38
|
+
end.join
|
27
39
|
else
|
28
|
-
|
40
|
+
if top_level_modules.size == 1 #export to named global
|
41
|
+
"\n #{@global} = require('#{top_level_modules.first.id}');"
|
42
|
+
else
|
43
|
+
#export to props of named global
|
44
|
+
top_level_modules.inject("\n#{@global} = {};") do |str, m|
|
45
|
+
str << "\n #{@global}.#{m.id} = require('#{m.id}');"
|
46
|
+
end
|
47
|
+
end
|
29
48
|
end
|
30
49
|
end
|
50
|
+
private :requires
|
51
|
+
|
31
52
|
end
|
32
53
|
end
|
@@ -1,16 +1,19 @@
|
|
1
1
|
module Modulr
|
2
2
|
class SyncCollector < Collector
|
3
|
-
def
|
4
|
-
super(path)
|
5
|
-
modules <<
|
3
|
+
def add_module_from_path(path)
|
4
|
+
js_module = super(path)
|
5
|
+
modules << js_module unless modules.include?(js_module)
|
6
6
|
end
|
7
7
|
|
8
|
-
def
|
9
|
-
|
10
|
-
buffer << File.read(PATH_TO_MODULR_SYNC_JS)
|
11
|
-
buffer << transport
|
12
|
-
buffer << "\nrequire('#{main.id}');\n"
|
13
|
-
buffer << "})();\n"
|
8
|
+
def lib
|
9
|
+
File.read(PATH_TO_MODULR_SYNC_JS)
|
14
10
|
end
|
11
|
+
private :lib
|
12
|
+
|
13
|
+
def requires
|
14
|
+
top_level_modules.map { |m| "\n require('#{m.id}');" }.join
|
15
|
+
end
|
16
|
+
private :requires
|
17
|
+
|
15
18
|
end
|
16
19
|
end
|
data/lib/modulr.rb
CHANGED
@@ -17,7 +17,10 @@ module Modulr
|
|
17
17
|
PATH_TO_MODULR_JS = File.join(LIB_DIR, '..', 'assets', 'modulr.js')
|
18
18
|
PATH_TO_MODULR_SYNC_JS = File.join(LIB_DIR, '..', 'assets', 'modulr.sync.js')
|
19
19
|
|
20
|
-
def self.ize(
|
20
|
+
def self.ize(*args)
|
21
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
22
|
+
input_files = args
|
23
|
+
|
21
24
|
if options[:global]
|
22
25
|
collector = GlobalExportCollector.new(options)
|
23
26
|
elsif options[:sync]
|
@@ -25,7 +28,8 @@ module Modulr
|
|
25
28
|
else
|
26
29
|
collector = Collector.new(options)
|
27
30
|
end
|
28
|
-
|
31
|
+
|
32
|
+
collector.parse_files(*input_files)
|
29
33
|
minify(collector.to_js, options[:minify])
|
30
34
|
end
|
31
35
|
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 6
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.6.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Tobie Langel
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-10-31 00:00:00 +02:00
|
18
18
|
default_executable: modulrize
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|