modulr 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -55,6 +55,7 @@ Options are as follows:
55
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
56
  If GLOBAL_VAR is specified and multiple modules are being processed, exports each one of them as a property of GLOBAL_VAR.
57
57
  If GLOBAL_VAR isn't specified, exports the module to global variables corresponding to their identifier.
58
+ --main-module=MAIN_MODULE Set the identifier of the main module (available through `require.main`).
58
59
  --sync Load all dependencies synchronously.
59
60
  --dependency-graph[=OUTPUT] Create a dependency graph of the module.
60
61
  -h, --help Show this message.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.0
1
+ 0.7.0
data/bin/modulrize CHANGED
@@ -31,10 +31,14 @@ opts = OptionParser.new do |opts|
31
31
  options[:minify] = minify
32
32
  end
33
33
 
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|
34
+ opts.on('--global-export[=GLOBAL_VAR]', 'If GLOBAL_VAR is specified and only one module is being processed, export it to the GLOBAL_VAR global variable.', 'If GLOBAL_VAR is specified and multiple modules are being processed, export each one of them as a property of GLOBAL_VAR.', 'If GLOBAL_VAR isn\'t specified, export the module to global variables corresponding to their identifier.') do |global|
35
35
  options[:global] = global || true
36
36
  end
37
37
 
38
+ opts.on('--main-module=MAIN_MODULE', 'Set the identifier of the main module (available through `require.main`).') do |main_module|
39
+ options[:main_module] = main_module
40
+ end
41
+
38
42
  opts.on('--sync', 'Load all dependencies synchronously.') do |global|
39
43
  options[:sync] = true
40
44
  end
@@ -3,12 +3,23 @@ module Modulr
3
3
  attr_reader :modules, :top_level_modules
4
4
 
5
5
  def initialize(options = {})
6
+ @options = options
6
7
  @root = options[:root]
7
8
  @lazy_eval = options[:lazy_eval]
8
9
  @modules = []
9
10
  @top_level_modules = []
10
11
  end
11
12
 
13
+ def to_js(buffer = '')
14
+ buffer << globals
15
+ buffer << "\n(function() {"
16
+ buffer << lib
17
+ buffer << transport
18
+ reorder_top_level_modules
19
+ buffer << requires
20
+ buffer << "})();\n"
21
+ end
22
+
12
23
  def parse_file(path)
13
24
  parse_files(path)
14
25
  end
@@ -20,66 +31,69 @@ module Modulr
20
31
  end
21
32
  end
22
33
 
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
-
44
- def to_js(buffer = '')
45
- buffer << globals
46
- buffer << "\n(function() {"
47
- buffer << lib
48
- buffer << transport
49
- buffer << requires
50
- buffer << "})();\n"
51
- end
34
+ private
52
35
 
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
36
+ def reset
37
+ modules.clear
38
+ top_level_modules.clear
39
+ end
40
+
41
+ def main_module?
42
+ !!main_module
43
+ end
44
+
45
+ def main_module
46
+ if mm_id = @options[:main_module]
47
+ @top_level_modules.find { |m| m.id == mm_id }
48
+ end
49
+ end
50
+
51
+ def reorder_top_level_modules
52
+ if mm = main_module
53
+ index = top_level_modules.index(mm)
54
+ top_level_modules[index] = top_level_modules[0]
55
+ top_level_modules[0] = mm
56
+ end
57
+ end
58
+
59
+ def module_from_path(path)
60
+ identifier = File.basename(path, '.js')
61
+ root = @root || File.dirname(path)
62
+ JSModule.new(identifier, root, path)
63
+ end
64
+
65
+ def add_module_from_path(path)
66
+ js_module = module_from_path(path)
67
+ top_level_modules << js_module
68
+ collect_dependencies(js_module)
69
+ js_module
70
+ end
71
+
72
+ def lib
73
+ src = File.read(PATH_TO_MODULR_JS)
74
+ "#{src}\nvar require = modulr.require, module = require.main;\n"
75
+ end
58
76
 
59
- def requires
60
- top_level_modules.map { |m| m.ensure }.join("\n")
61
- end
62
- private :requires
77
+ def requires
78
+ top_level_modules.map { |m| m.ensure }.join("\n")
79
+ end
63
80
 
64
- def globals
65
- ''
66
- end
67
- private :globals
81
+ def globals
82
+ ''
83
+ end
68
84
 
69
- def transport
70
- pairs = modules.map do |m|
71
- if lazy_eval_module?(m)
72
- value = m.escaped_src
73
- else
74
- value = m.factory
85
+ def transport
86
+ pairs = modules.map do |m|
87
+ if lazy_eval_module?(m)
88
+ value = m.escaped_src
89
+ else
90
+ value = m.factory
91
+ end
92
+ "\n'#{m.id}': #{value}"
75
93
  end
76
- "\n'#{m.id}': #{value}"
94
+ "require.define({#{pairs.join(', ')}\n});"
77
95
  end
78
- "require.define({#{pairs.join(', ')}\n});"
79
- end
80
- private :transport
81
96
 
82
- private
83
97
  def collect_dependencies(js_module)
84
98
  js_module.dependencies.each do |dependency|
85
99
  unless modules.include?(dependency)
@@ -1,53 +1,51 @@
1
1
  module Modulr
2
2
  class GlobalExportCollector < SyncCollector
3
3
 
4
- def initialize(options = {})
5
- @global = options[:global]
6
- super
7
- end
8
-
9
- def globals
10
- if @global == true
11
- top_level_modules.map { |m| define_global(m.id) }.join
12
- else
13
- define_global(@global)
4
+ private
5
+ def global_var_name
6
+ @options[:global]
7
+ end
8
+
9
+ def use_module_id_as_var_name?
10
+ @options[:global] == true
11
+ end
12
+
13
+ def globals
14
+ if use_module_id_as_var_name?
15
+ top_level_modules.map { |m| define_global_var(m.id) }.join
16
+ else
17
+ define_global_var(global_var_name)
18
+ end
14
19
  end
15
- end
16
- private :globals
17
20
 
18
- def define_global(global)
19
- if global.include?('.')
20
- props = global.split('.')
21
- str = props.shift
22
- results = "var #{str};"
23
- props.each do |prop|
24
- results << "\n#{str} = #{str} || {};"
25
- str << ".#{prop}"
21
+ def define_global_var(var_name)
22
+ if var_name.include?('.')
23
+ props = var_name.split('.')
24
+ str = props.shift
25
+ results = "var #{str};"
26
+ props.each do |prop|
27
+ results << "\n#{str} = #{str} || {};"
28
+ str << ".#{prop}"
29
+ end
30
+ "#{results}\n#{str};\n"
31
+ else
32
+ "var #{var_name};\n"
26
33
  end
27
- "#{results}\n#{str};\n"
28
- else
29
- "var #{global};\n"
30
34
  end
31
- end
32
- private :define_global
33
35
 
34
- def requires
35
- if @global == true
36
- top_level_modules.map do |m|
37
- "\n #{m.id} = require('#{m.id}');"
38
- end.join
39
- else
40
- if top_level_modules.size == 1 #export to named global
41
- "\n #{@global} = require('#{top_level_modules.first.id}');"
36
+ def requires
37
+ if use_module_id_as_var_name?
38
+ top_level_modules.map { |m| "\n #{m.id} = require('#{m.id}');" }.join
39
+ elsif top_level_modules.size == 1
40
+ #export to named global
41
+ "\n #{global_var_name} = require('#{top_level_modules.first.id}');"
42
42
  else
43
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}');"
44
+ top_level_modules.inject("\n#{global_var_name} = {};") do |str, m|
45
+ str << "\n #{global_var_name}.#{m.id} = require('#{m.id}');"
46
46
  end
47
47
  end
48
48
  end
49
- end
50
- private :requires
51
49
 
52
50
  end
53
51
  end
@@ -5,15 +5,18 @@ module Modulr
5
5
  modules << js_module unless modules.include?(js_module)
6
6
  end
7
7
 
8
- def lib
9
- File.read(PATH_TO_MODULR_SYNC_JS)
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
-
8
+ private
9
+ def lib
10
+ output = File.read(PATH_TO_MODULR_SYNC_JS)
11
+ if top_level_modules.size > 1 && !main_module?
12
+ output << "\nvar module = {};\n"
13
+ output << "\nrequire.main = module;\n"
14
+ end
15
+ output
16
+ end
17
+
18
+ def requires
19
+ top_level_modules.map { |m| "\n require('#{m.id}');" }.join
20
+ end
18
21
  end
19
22
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 6
7
+ - 7
8
8
  - 0
9
- version: 0.6.0
9
+ version: 0.7.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-10-31 00:00:00 +02:00
17
+ date: 2010-11-01 00:00:00 +01:00
18
18
  default_executable: modulrize
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency