jsus 0.3.6 → 0.4.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.
Files changed (71) hide show
  1. data/.travis.yml +2 -0
  2. data/CHANGELOG +5 -0
  3. data/Gemfile +7 -4
  4. data/VERSION +1 -1
  5. data/bin/jsus +1 -5
  6. data/cucumber.yml +1 -1
  7. data/features/command-line/external_dependency_resolution.feature +4 -4
  8. data/features/command-line/generate_includes.feature +34 -0
  9. data/features/command-line/mooforge_compatibility_layer.feature +1 -1
  10. data/features/command-line/postproc.feature +12 -3
  11. data/features/command-line/structure_json.feature +5 -40
  12. data/features/data/ExternalDependencyWithExternalDependency/Leonardo/Source/Core.js +2 -2
  13. data/features/step_definitions/cli_steps.rb +15 -9
  14. data/features/support/env.rb +1 -1
  15. data/jsus.gemspec +25 -7
  16. data/lib/extensions/rgl.rb +2 -1
  17. data/lib/jsus/cli.rb +43 -27
  18. data/lib/jsus/container.rb +71 -51
  19. data/lib/jsus/middleware.rb +2 -3
  20. data/lib/jsus/package.rb +27 -129
  21. data/lib/jsus/packager.rb +10 -6
  22. data/lib/jsus/pool.rb +48 -20
  23. data/lib/jsus/source_file.rb +119 -198
  24. data/lib/jsus/tag.rb +72 -106
  25. data/lib/jsus/util.rb +14 -4
  26. data/lib/jsus/util/compressor.rb +1 -1
  27. data/lib/jsus/util/documenter.rb +1 -1
  28. data/lib/jsus/util/mixins.rb +7 -0
  29. data/lib/jsus/util/mixins/operates_on_sources.rb +29 -0
  30. data/lib/jsus/util/post_processor.rb +35 -0
  31. data/lib/jsus/util/post_processor/base.rb +32 -0
  32. data/lib/jsus/util/post_processor/moocompat12.rb +19 -0
  33. data/lib/jsus/util/post_processor/mooltie8.rb +19 -0
  34. data/lib/jsus/util/post_processor/semicolon.rb +18 -0
  35. data/lib/jsus/util/validator/base.rb +3 -23
  36. data/lib/jsus/util/watcher.rb +8 -6
  37. data/spec/data/Extensions/app/javascripts/Core/Source/Hash.js +13 -0
  38. data/spec/data/Extensions/app/javascripts/Core/Source/Mash.js +13 -0
  39. data/spec/data/Extensions/app/javascripts/Core/package.yml +3 -1
  40. data/spec/data/Extensions/app/javascripts/Orwik/Extensions/Mash.js +16 -0
  41. data/spec/data/Extensions/app/javascripts/Orwik/package.yml +2 -1
  42. data/spec/data/OutsideDependencies/app/javascripts/Orwik/package.yml +3 -3
  43. data/spec/data/SimpleSources/dependent_source_one.js +15 -0
  44. data/spec/data/SimpleSources/replacement_source_one.js +13 -0
  45. data/spec/data/SimpleSources/simple_source_one.js +13 -0
  46. data/spec/data/SimpleSources/simple_source_two.js +13 -0
  47. data/spec/data/extension_1.js +15 -0
  48. data/spec/data/extension_2.js +15 -0
  49. data/spec/data/replacement.js +15 -0
  50. data/spec/jsus/container_spec.rb +72 -14
  51. data/spec/jsus/package_spec.rb +10 -128
  52. data/spec/jsus/packager_spec.rb +11 -11
  53. data/spec/jsus/pool_spec.rb +13 -22
  54. data/spec/jsus/source_file_spec.rb +66 -215
  55. data/spec/jsus/tag_spec.rb +24 -69
  56. data/spec/jsus/util/documenter_spec.rb +1 -1
  57. data/spec/jsus/util/post_processor/moocompat12_spec.rb +23 -0
  58. data/spec/jsus/util/post_processor/mooltie8_spec.rb +23 -0
  59. data/spec/jsus/util/post_processor/semicolon_spec.rb +21 -0
  60. data/spec/jsus/util/post_processors/base_spec.rb +6 -0
  61. data/spec/jsus/util/tree_spec.rb +3 -3
  62. data/spec/jsus/util/validator/base_spec.rb +4 -2
  63. data/spec/jsus/util/watcher_spec.rb +12 -2
  64. data/spec/shared/mixins_segs.rb +38 -0
  65. data/spec/spec_helper.rb +6 -0
  66. metadata +28 -10
  67. data/features/data/tmp2/package.js +0 -35
  68. data/features/data/tmp2/scripts.json +0 -13
  69. data/features/data/tmp2/tree.json +0 -26
  70. data/lib/jsus/compiler.rb +0 -28
  71. data/spec/shared/class_stubs.rb +0 -31
@@ -2,5 +2,7 @@ script: "bundle exec rake"
2
2
  rvm:
3
3
  - 1.8.7
4
4
  - 1.9.2
5
+ - 1.9.3
5
6
  - ree
6
7
  - jruby
8
+ - rbx-2.0
data/CHANGELOG CHANGED
@@ -1,4 +1,9 @@
1
1
  = Jsus Changelog
2
+ == Version 0.4.0
3
+ Other changes:
4
+ * Redesigned class interaction API, trying to avoid cyclic dependencies at all
5
+ costs.
6
+
2
7
  == Version 0.3.6
3
8
  * Rebuilt with 1.8.7 ruby
4
9
 
data/Gemfile CHANGED
@@ -15,12 +15,15 @@ group :development do
15
15
 
16
16
  gem "jeweler"
17
17
  gem "murdoc", "~> 0.1.11"
18
- gem "ruby-debug19", :platforms => :ruby_19
19
18
 
20
- # FIXME: linecache being ruby1.9+only
21
- gem "linecache", "= 0.45", :platforms => :ruby_18
19
+ unless ENV["CI"]
20
+ gem "ruby-debug19", :platforms => :ruby_19
21
+
22
+ # FIXME: linecache being ruby1.9+only
23
+ gem "linecache", "= 0.45", :platforms => :mri_18
24
+ gem "ruby-debug", :platforms => :mri_18
25
+ end
22
26
 
23
- gem "ruby-debug", :platforms => :ruby_18
24
27
  gem 'fssm'
25
28
 
26
29
  gem 'yuicompressor', :require => false
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.6
1
+ 0.4.0
data/bin/jsus CHANGED
@@ -68,7 +68,7 @@ cli = OptionParser.new do |opts|
68
68
  options[:validators] = (validators || []).map {|v| v.downcase }
69
69
  end
70
70
 
71
- 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|
71
+ 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\n* semicolon -- adds a semicolon in the beggining of every source file') do |postprocs|
72
72
  options[:postproc] = postprocs
73
73
  end
74
74
 
@@ -97,10 +97,6 @@ cli = OptionParser.new do |opts|
97
97
  options[:without_scripts_info] = true
98
98
  end
99
99
 
100
- opts.on_tail('--without-tree-info', 'do not generate tree.json') do
101
- options[:without_tree_info] = true
102
- end
103
-
104
100
  opts.on_tail('--watch', 'watch file system events for *.js files in subdirectories and rerun jsus with the same parameters') do
105
101
  options[:watch] = true
106
102
  end
@@ -1 +1 @@
1
- default: --format pretty --color
1
+ default: "--format pretty --color --tags ~@wip"
@@ -1,7 +1,7 @@
1
1
  Feature: external dependencies
2
2
  In order to resolve dependencies, jsus should be able to preload them into
3
3
  pool.
4
-
4
+
5
5
  Scenario: basic external dependency
6
6
  When I run "jsus ExternalDependency tmp -d ExternalDependency/Mootools"
7
7
  Then the following files should exist:
@@ -48,7 +48,7 @@ Feature: external dependencies
48
48
  */
49
49
  """
50
50
  And file "tmp/package.js" should have "script: Core.js" before "script: Color.js"
51
-
51
+
52
52
  Scenario: external dependency with external dependency
53
53
  When I run "jsus ExternalDependencyWithExternalDependency tmp -d ExternalDependencyWithExternalDependency"
54
54
  Then the following files should exist:
@@ -67,7 +67,7 @@ Feature: external dependencies
67
67
  authors:
68
68
  - Mark Abramov
69
69
 
70
- requires:
70
+ requires:
71
71
  - Mootools/Core
72
72
 
73
73
  provides: [Core]
@@ -117,4 +117,4 @@ Feature: external dependencies
117
117
  */
118
118
  """
119
119
  And file "tmp/package.js" should have "Mootools fake core" before "Leonardo fake core"
120
- And file "tmp/package.js" should have "Leonardo fake core" before "script: Color.js"
120
+ And file "tmp/package.js" should have "Leonardo fake core" before "script: Color.js"
@@ -0,0 +1,34 @@
1
+ Feature: generate includes.js
2
+ In order to be able to quickly iterate over js files, I need to be able to generate
3
+ includes.js files with load instructions for browser in correct order.
4
+
5
+ Scenario: using -g option
6
+ When I run "jsus Basic tmp -g"
7
+ Then the following files should exist:
8
+ | tmp/includes.js |
9
+ And file "tmp/includes.js" should contain
10
+ """
11
+ Library/Color.js
12
+ """
13
+ And file "tmp/includes.js" should contain
14
+ """
15
+ Widget/Input/Input.Color.js
16
+ """
17
+
18
+ Scenario: using --generate-include option to override includes root
19
+ When I run "jsus Basic tmp --generate-includes=Basic/Source/Library"
20
+ Then the following files should exist:
21
+ | tmp/includes.js |
22
+ And file "tmp/includes.js" should contain
23
+ """
24
+ Color.js
25
+ """
26
+ And file "tmp/includes.js" should not contain
27
+ """
28
+ Library/Color.js
29
+ """
30
+ And file "tmp/includes.js" should contain
31
+ """
32
+ ../Widget/Input/Input.Color.js
33
+ """
34
+ And file "tmp/includes.js" should have "Color.js" before "Input.Color.js"
@@ -72,4 +72,4 @@ Feature: MooForge compatibility layer
72
72
  ...
73
73
  */
74
74
  """
75
- And file "tmp/plugin.js" should have "script: plugin-support.js" before "script: plugin.js"
75
+ And file "tmp/plugin.js" should have "script: plugin-support.js" before "script: plugin.js"
@@ -1,7 +1,7 @@
1
1
  Feature: postprocessing
2
- In order to leave unneccessary compatibility code out, I should be able to
2
+ In order to leave unneccessary compatibility code out, I should be able to
3
3
  use postprocessing feature.
4
-
4
+
5
5
  Scenario: compat12
6
6
  When I run "jsus Postprocessing/MootoolsCompat12 tmp --postproc moocompat12"
7
7
  Then the following files should exist:
@@ -37,7 +37,7 @@ Feature: postprocessing
37
37
  """
38
38
  var incompatible = true;
39
39
  """
40
-
40
+
41
41
  Scenario: mooltIE8
42
42
  When I run "jsus Postprocessing/MootoolsLtIE8 tmp --postproc mooltIE8"
43
43
  Then the following files should exist:
@@ -73,3 +73,12 @@ Feature: postprocessing
73
73
  """
74
74
  var incompatible = true;
75
75
  """
76
+
77
+ Scenario: semicolon
78
+ When I run "jsus Postprocessing/MootoolsLtIE8 tmp --postproc semicolon"
79
+ Then the following files should exist:
80
+ | tmp/package.js |
81
+ And file "tmp/package.js" should begin with
82
+ """
83
+ ;
84
+ """
@@ -1,42 +1,9 @@
1
1
  Feature: structure json files
2
2
  In order to have programmatic ability to introspect resulting packages, we
3
3
  generate some extra files.
4
-
5
- Scenario: auto-generation of tree.json and scripts.json
6
- When I run "jsus Basic tmp"
7
- Then the following files should exist:
8
- | tmp/tree.json |
9
- | tmp/scripts.json |
10
- And file "tmp/tree.json" should contain valid JSON
11
- And file "tmp/tree.json" should contain JSON equivalent to
12
- """
13
- {
14
- "Library": {
15
- "Color": {
16
- "desc": "A library to work with colors",
17
- "requires": [
18
4
 
19
- ],
20
- "provides": [
21
- "Color"
22
- ]
23
- }
24
- },
25
- "Widget": {
26
- "Input": {
27
- "Input.Color": {
28
- "desc": "Cool colorpicker for everyone to enjoy",
29
- "requires": [
30
- "Color"
31
- ],
32
- "provides": [
33
- "Input.Color"
34
- ]
35
- }
36
- }
37
- }
38
- }
39
- """
5
+ Scenario: auto-generation scripts.json
6
+ When I run "jsus Basic tmp"
40
7
  And file "tmp/scripts.json" should contain valid JSON
41
8
  And file "tmp/scripts.json" should contain JSON equivalent to
42
9
  """
@@ -44,13 +11,11 @@ Feature: structure json files
44
11
  "Package": {
45
12
  "desc": "Jsus package with correct order set",
46
13
  "provides": [
47
- "Color",
48
- "Input.Color"
14
+ "Package/Color",
15
+ "Package/Input.Color"
49
16
  ],
50
17
  "requires": [
51
-
52
18
  ]
53
19
  }
54
- }
20
+ }
55
21
  """
56
-
@@ -10,10 +10,10 @@ license: Public Domain, http://unlicense.org/UNLICENSE
10
10
  authors:
11
11
  - Mark Abramov
12
12
 
13
- requires:
13
+ requires:
14
14
  - Mootools/Core
15
15
 
16
16
  provides: [Core]
17
17
 
18
18
  ...
19
- */
19
+ */
@@ -1,7 +1,7 @@
1
1
  When /^I run "jsus (.*?)"$/ do |args|
2
2
  Dir.chdir DATA_DIR do
3
3
  `#{JSUS_CLI_PATH} #{args}`
4
- end
4
+ end
5
5
  end
6
6
 
7
7
  Then /^the following files should exist:$/ do |table|
@@ -14,16 +14,22 @@ Then /^the following files should exist:$/ do |table|
14
14
  end
15
15
 
16
16
  Then /^file "(.*?)" should contain$/ do |filename, content|
17
- Dir.chdir DATA_DIR do
17
+ Dir.chdir DATA_DIR do
18
18
  File.read(filename).should include(content)
19
- end
19
+ end
20
+ end
21
+
22
+ Then /^file "(.*?)" should begin with$/ do |filename, content|
23
+ Dir.chdir DATA_DIR do
24
+ File.read(filename).index(content).should == 0
25
+ end
20
26
  end
21
27
 
22
28
 
23
29
  Then /^file "(.*?)" should not contain$/ do |filename, content|
24
- Dir.chdir DATA_DIR do
30
+ Dir.chdir DATA_DIR do
25
31
  File.read(filename).should_not include(content)
26
- end
32
+ end
27
33
  end
28
34
 
29
35
  Then /^file "(.*?)" should contain valid JSON$/i do |filename|
@@ -31,7 +37,7 @@ Then /^file "(.*?)" should contain valid JSON$/i do |filename|
31
37
  json = nil
32
38
  lambda { json = JSON.load(File.read(filename)) }.should_not raise_error
33
39
  json.should_not be_nil
34
- end
40
+ end
35
41
  end
36
42
 
37
43
  Then /^file "(.*?)" should contain JSON equivalent to$/i do |filename, expected_json|
@@ -39,7 +45,7 @@ Then /^file "(.*?)" should contain JSON equivalent to$/i do |filename, expected_
39
45
  json = JSON.load(File.read(filename))
40
46
  expected = JSON.load(expected_json)
41
47
  json.should == expected
42
- end
48
+ end
43
49
  end
44
50
 
45
51
 
@@ -49,7 +55,7 @@ Then /^file "(.*?)" should have "(.*?)" (before|after) "(.*?)"$/ do |filename, w
49
55
  contents = File.read(filename)
50
56
  position << contents.index(what)
51
57
  position << contents.index(other)
52
-
58
+
53
59
  case position
54
60
  when "before"
55
61
  position[0].should < position[1]
@@ -57,4 +63,4 @@ Then /^file "(.*?)" should have "(.*?)" (before|after) "(.*?)"$/ do |filename, w
57
63
  position[1].should < position[0]
58
64
  end
59
65
  end
60
- end
66
+ end
@@ -6,4 +6,4 @@ require 'rspec/expectations'
6
6
  require 'fileutils'
7
7
  After do
8
8
  FileUtils.rm_rf(TMP_DIR)
9
- end
9
+ end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{jsus}
8
- s.version = "0.3.6"
8
+ s.version = "0.4.0"
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-09-18}
12
+ s.date = %q{2011-11-01}
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}
@@ -38,6 +38,7 @@ Gem::Specification.new do |s|
38
38
  "features/command-line/compression.feature",
39
39
  "features/command-line/extensions.feature",
40
40
  "features/command-line/external_dependency_resolution.feature",
41
+ "features/command-line/generate_includes.feature",
41
42
  "features/command-line/json_package.feature",
42
43
  "features/command-line/mooforge_compatibility_layer.feature",
43
44
  "features/command-line/postproc.feature",
@@ -88,16 +89,12 @@ Gem::Specification.new do |s|
88
89
  "features/data/Replacements/Source/Library/Color.js",
89
90
  "features/data/Replacements/package.yml",
90
91
  "features/data/compression.min.js",
91
- "features/data/tmp2/package.js",
92
- "features/data/tmp2/scripts.json",
93
- "features/data/tmp2/tree.json",
94
92
  "features/step_definitions/cli_steps.rb",
95
93
  "features/support/env.rb",
96
94
  "jsus.gemspec",
97
95
  "lib/extensions/rgl.rb",
98
96
  "lib/jsus.rb",
99
97
  "lib/jsus/cli.rb",
100
- "lib/jsus/compiler.rb",
101
98
  "lib/jsus/container.rb",
102
99
  "lib/jsus/middleware.rb",
103
100
  "lib/jsus/package.rb",
@@ -112,6 +109,13 @@ Gem::Specification.new do |s|
112
109
  "lib/jsus/util/file_cache.rb",
113
110
  "lib/jsus/util/inflection.rb",
114
111
  "lib/jsus/util/logger.rb",
112
+ "lib/jsus/util/mixins.rb",
113
+ "lib/jsus/util/mixins/operates_on_sources.rb",
114
+ "lib/jsus/util/post_processor.rb",
115
+ "lib/jsus/util/post_processor/base.rb",
116
+ "lib/jsus/util/post_processor/moocompat12.rb",
117
+ "lib/jsus/util/post_processor/mooltie8.rb",
118
+ "lib/jsus/util/post_processor/semicolon.rb",
115
119
  "lib/jsus/util/tree.rb",
116
120
  "lib/jsus/util/validator.rb",
117
121
  "lib/jsus/util/validator/base.rb",
@@ -151,8 +155,11 @@ Gem::Specification.new do |s|
151
155
  "spec/data/DependenciesWildcards/app/javascripts/Mash/Source/Mash.js",
152
156
  "spec/data/DependenciesWildcards/app/javascripts/Mash/package.yml",
153
157
  "spec/data/Extensions/app/javascripts/Core/Source/Class.js",
158
+ "spec/data/Extensions/app/javascripts/Core/Source/Hash.js",
159
+ "spec/data/Extensions/app/javascripts/Core/Source/Mash.js",
154
160
  "spec/data/Extensions/app/javascripts/Core/package.yml",
155
161
  "spec/data/Extensions/app/javascripts/Orwik/Extensions/Class.js",
162
+ "spec/data/Extensions/app/javascripts/Orwik/Extensions/Mash.js",
156
163
  "spec/data/Extensions/app/javascripts/Orwik/package.yml",
157
164
  "spec/data/ExternalDependencies/app/javascripts/Orwik/Source/Test.js",
158
165
  "spec/data/ExternalDependencies/app/javascripts/Orwik/package.yml",
@@ -193,9 +200,16 @@ Gem::Specification.new do |s|
193
200
  "spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Widget/Input/Input.js",
194
201
  "spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Widget/Widget.js",
195
202
  "spec/data/OutsideDependencies/app/javascripts/Orwik/package.yml",
203
+ "spec/data/SimpleSources/dependent_source_one.js",
204
+ "spec/data/SimpleSources/replacement_source_one.js",
205
+ "spec/data/SimpleSources/simple_source_one.js",
206
+ "spec/data/SimpleSources/simple_source_two.js",
196
207
  "spec/data/bad_test_source_one.js",
197
208
  "spec/data/bad_test_source_two.js",
209
+ "spec/data/extension_1.js",
210
+ "spec/data/extension_2.js",
198
211
  "spec/data/mooforge_quirky_source.js",
212
+ "spec/data/replacement.js",
199
213
  "spec/data/test_source_one.js",
200
214
  "spec/data/unicode_source.js",
201
215
  "spec/data/unicode_source_with_bom.js",
@@ -212,12 +226,16 @@ Gem::Specification.new do |s|
212
226
  "spec/jsus/util/file_cache_spec.rb",
213
227
  "spec/jsus/util/inflection_spec.rb",
214
228
  "spec/jsus/util/logger_spec.rb",
229
+ "spec/jsus/util/post_processor/moocompat12_spec.rb",
230
+ "spec/jsus/util/post_processor/mooltie8_spec.rb",
231
+ "spec/jsus/util/post_processor/semicolon_spec.rb",
232
+ "spec/jsus/util/post_processors/base_spec.rb",
215
233
  "spec/jsus/util/tree_spec.rb",
216
234
  "spec/jsus/util/validator/base_spec.rb",
217
235
  "spec/jsus/util/validator/mooforge_spec.rb",
218
236
  "spec/jsus/util/watcher_spec.rb",
219
237
  "spec/jsus/util_spec.rb",
220
- "spec/shared/class_stubs.rb",
238
+ "spec/shared/mixins_segs.rb",
221
239
  "spec/spec_helper.rb"
222
240
  ]
223
241
  s.homepage = %q{http://github.com/jsus/jsus}
@@ -1,3 +1,4 @@
1
+ # Extensions for Ruby Graph Library
1
2
  module RGL
2
3
  class TopsortedGraphHasCycles < Exception; end
3
4
  class DirectedAdjacencyGraph
@@ -5,7 +6,7 @@ module RGL
5
6
  # cycles.
6
7
  #
7
8
  # @note Default implementation of topsort iterator is a bit faster, but it doesn't
8
- # check for that condition.
9
+ # check for cycles.
9
10
  # @return [Array] sorted vertices list
10
11
  # @raise [TopsortedGraphHasCycles] if graph has cycles
11
12
  # @api public
@@ -10,8 +10,9 @@ module Jsus
10
10
 
11
11
  if options[:watch]
12
12
  input_dirs = [ options[:input_dir], options[:deps_dir] ].compact
13
+ output_dir = options[:output_dir]
13
14
  Jsus.logger.info "Jsus enters watch mode, it will watch your files for changes and relaunch itself"
14
- Jsus::Util::Watcher.watch(input_dirs) do |filename|
15
+ Jsus::Util::Watcher.watch(input_dirs, output_dir) do |filename|
15
16
  Jsus.logger.info "#{filename} changed, recompiling..."
16
17
  new.launch
17
18
  Jsus.logger.info "... done"
@@ -27,29 +28,31 @@ module Jsus
27
28
  end
28
29
 
29
30
  def setup_output_directory
30
- output_dir = Pathname.new(options[:output_dir])
31
- output_dir.mkpath
31
+ output_dir = File.expand_path(options[:output_dir])
32
+ FileUtils.mkdir_p(output_dir)
32
33
  output_dir
33
34
  end
34
35
 
35
36
  def launch
36
37
  checkpoint(:start)
37
38
  @output_dir = setup_output_directory
38
- @pool = preload_pool
39
- @package = load_package
39
+ @pool = preload_pool
40
+ @package = load_package
41
+ @pool << @package
40
42
  display_pool_stats(@pool) if options[:display_pool_stats]
41
- @package_content = compile_package(@package)
42
- post_process!(@package_content, options[:postproc]) if options[:postproc]
43
43
 
44
- package_filename = @output_dir + @package.filename
44
+ @resulting_sources = @resulting_sources_container = @pool.compile_package(@package)
45
+ @resulting_sources = post_process(@resulting_sources, options[:postproc]) if options[:postproc]
46
+ @package_content = compile_package(@resulting_sources)
47
+ package_filename = File.join(@output_dir, @package.filename)
45
48
 
46
49
  if options[:compress]
47
- File.open(package_filename.to_s.chomp(".js") + ".min.js", 'w') do |f|
50
+ File.open(package_filename.chomp(".js") + ".min.js", 'w') do |f|
48
51
  f.write compress_package(@package_content)
49
52
  end
50
53
  end
51
54
 
52
- package_filename.open('w') {|f| f << @package_content }
55
+ File.open(package_filename, 'w') {|f| f << @package_content }
53
56
 
54
57
  generate_supplemental_files
55
58
  validate_sources
@@ -57,21 +60,21 @@ module Jsus
57
60
  generate_docs if options[:documented_classes] && !options[:documented_classes].empty?
58
61
  output_benchmarks
59
62
  rescue Exception => e
60
- output_benchmarks
63
+ $stderr.puts "Exception was raised: #{e.inspect}\n\nBacktrace: #{e.backtrace.join("\n")}"
61
64
  end
62
65
 
63
66
  def preload_pool
64
- if options[:deps_dir]
67
+ result = if options[:deps_dir]
65
68
  Jsus::Pool.new(options[:deps_dir])
66
69
  else
67
70
  Jsus::Pool.new
68
- end.tap { checkpoint(:pool) }
71
+ end
72
+ checkpoint(:pool)
73
+ result
69
74
  end
70
75
 
71
76
  def load_package
72
- package = Jsus::Package.new(Pathname.new(options[:input_dir]), :pool => @pool)
73
- package.include_dependencies!
74
- checkpoint(:dependencies)
77
+ package = Jsus::Package.new(Pathname.new(options[:input_dir]))
75
78
  package
76
79
  end
77
80
 
@@ -92,21 +95,24 @@ EOF
92
95
  def display_package(package)
93
96
  result = "Package: #{package.name}\n"
94
97
  package.source_files.to_a.sort_by {|sf| sf.filename}.each do |sf|
95
- result << " [#{sf.relative_filename}]\n"
96
- result << " Provides: [#{sf.provides_names.join(", ")}]\n"
97
- result << " Requires: [#{sf.requires_names.join(", ")}]\n"
98
+ result << " [#{sf.filename}]\n"
99
+ result << " Provides: [#{sf.provides.map {|tag| tag.full_name }.join(", ")}]\n"
100
+ result << " Requires: [#{sf.requires.map {|tag| tag.full_name }.join(", ")}]\n"
98
101
  end
99
102
  result << "\n"
100
103
  end
101
104
 
102
- def compile_package(package)
103
- package.compile(nil).tap { checkpoint(:compilation) }
105
+ def compile_package(sources)
106
+ result = Packager.new(sources).pack(nil)
107
+ checkpoint(:compilation)
108
+ result
104
109
  end
105
110
 
106
111
  # Modificate content string
107
- def post_process!(content, postproc)
108
- Compiler.post_process!(content, postproc)
112
+ def post_process(source_files, processors)
113
+ result = Util::PostProcessor.process(source_files, processors)
109
114
  checkpoint(:postproc)
115
+ result
110
116
  end
111
117
 
112
118
  def compress_package(content)
@@ -125,14 +131,24 @@ EOF
125
131
  end
126
132
 
127
133
  def generate_supplemental_files
128
- @package.generate_scripts_info(@output_dir) unless options[:without_scripts_info]
129
- @package.generate_tree(@output_dir) unless options[:without_tree_info]
134
+ unless options[:without_scripts_info]
135
+ File.open(options[:output_dir] + "/scripts.json", "w+") do |f|
136
+ scripts_hash = {
137
+ @package.name => {
138
+ :desc => @package.description,
139
+ :provides => @resulting_sources_container.provides.map {|tag| tag.to_s},
140
+ :requires => @resulting_sources_container.requires.map {|tag| tag.to_s}
141
+ }
142
+ }
143
+ f.puts JSON.pretty_generate(scripts_hash)
144
+ end
145
+ end
130
146
  checkpoint(:supplemental_files)
131
147
  end
132
148
 
133
149
  def generate_includes
134
- includes_root = Pathname.new(options[:includes_root] || @output_dir)
135
- Compiler.generate_includes(@package, includes_root, @output_dir + "includes.js")
150
+ includes_root = Pathname.new(options[:includes_root] || @output_dir).to_s
151
+ File.open(File.join(@output_dir, "includes.js"), "w+") {|f| f.puts Util::CodeGenerator.generate_includes(@resulting_sources.required_files(includes_root)) }
136
152
  checkpoint(:includes)
137
153
  end
138
154