modulr 0.6.0 → 0.7.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 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