fusion 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/lib/basic.rb +118 -0
  2. data/lib/fusion.rb +3 -215
  3. data/lib/optimized.rb +53 -0
  4. data/lib/quick.rb +20 -0
  5. metadata +9 -6
data/lib/basic.rb ADDED
@@ -0,0 +1,118 @@
1
+ require 'yaml'
2
+ require 'open4'
3
+ require 'uri'
4
+ require 'cgi'
5
+ require 'rubygems' #I'm getting an error loading mechanize ... do I need to load this?
6
+ require 'mechanize'
7
+ require 'logger'
8
+
9
+ module Fusion
10
+
11
+ class Basic
12
+
13
+ def initialize
14
+ @bundle_options = Fusion.instance_variable_get('@options')
15
+ @log = @bundle_options[:logger] || Logger.new(STDOUT)
16
+
17
+ if @bundle_options[:bundle_configs]
18
+ @bundle_configs = @bundle_options[:bundle_configs]
19
+ else
20
+ @bundle_configs = YAML::load(File.open(@bundle_options[:bundle_file_path]))
21
+ end
22
+
23
+ end
24
+
25
+ def run
26
+ start = Time.now
27
+
28
+ bundles = @bundle_configs.collect do |config|
29
+ bundle(config)
30
+ end
31
+
32
+ @log.debug "Javascript Reloaded #{@bundle_configs.size} bundle(s) (#{Time.now - start}s)"
33
+
34
+ bundles
35
+ end
36
+
37
+ def gather_files(config)
38
+ input_files = []
39
+
40
+ if(config[:input_files])
41
+ config[:input_files].each do |input_file|
42
+ if (input_file =~ URI::regexp).nil?
43
+ # Not a URL
44
+ file_path = input_file
45
+
46
+ unless input_file == File.absolute_path(input_file)
47
+ file_path = File.join(@bundle_options[:project_path], input_file)
48
+ end
49
+
50
+ input_files << file_path
51
+ else
52
+ # This is a remote file, if we don't have it, get it
53
+ input_files << get_remote_file(input_file)
54
+ end
55
+ end
56
+ end
57
+
58
+ if (config[:input_directory])
59
+ directory = File.join(@bundle_options[:project_path],config[:input_directory])
60
+
61
+ unless File.exists?(directory)
62
+ @log.debug "Path #{directory} does not exist"
63
+ FileUtils.mkpath(directory)
64
+ @log.debug "Created path: #{directory}"
65
+ end
66
+
67
+ file_names = Dir.open(directory).entries.sort.find_all {|filename| filename.end_with?(".js") }
68
+
69
+ input_files += file_names.collect do |file_name|
70
+ File.join(directory, file_name)
71
+ end
72
+ end
73
+
74
+ input_files.uniq
75
+ end
76
+
77
+ def get_output_file(config)
78
+ raise Exception.new("Undefined js bundler output file") if config[:output_file].nil?
79
+ output_file = File.join(@bundle_options[:project_path], config[:output_file])
80
+ path_directories = output_file.split("/")
81
+
82
+ if path_directories.size > 1
83
+ path = File.join(File.expand_path("."), path_directories[0..-2].join("/"))
84
+ FileUtils::mkpath(File.join(path,"/"))
85
+ end
86
+
87
+ output_file
88
+ end
89
+
90
+ def get_remote_file(url)
91
+ filename = CGI.escape(url)
92
+ local_directory = File.join(@bundle_options[:project_path], ".remote")
93
+ local_file_path = File.join(local_directory, filename)
94
+
95
+ return local_file_path if File.exists?(local_file_path)
96
+
97
+ @log.debug "Fetching remote file (#{url})"
98
+
99
+ m = Mechanize.new
100
+ response = m.get(url)
101
+
102
+ raise Exception.new("Error downloading file (#{url}) -- returned code #{repsonse.code}") unless response.code == "200"
103
+
104
+ @log.debug "Got file (#{url})"
105
+
106
+ unless Dir.exists?(local_directory)
107
+ Dir.mkdir(local_directory)
108
+ end
109
+
110
+ File.open(local_file_path,"w") {|f| f << response.body}
111
+
112
+ local_file_path
113
+ end
114
+
115
+
116
+ end
117
+
118
+ end
data/lib/fusion.rb CHANGED
@@ -1,10 +1,6 @@
1
- require 'yaml'
2
- require 'open4'
3
- require 'uri'
4
- require 'cgi'
5
- require 'rubygems' #I'm getting an error loading mechanize ... do I need to load this?
6
- require 'mechanize'
7
- require 'logger'
1
+ require 'basic'
2
+ require 'quick'
3
+ require 'optimized'
8
4
 
9
5
  module Fusion
10
6
 
@@ -23,212 +19,4 @@ module Fusion
23
19
  # So that the bundler can be configured and run in two different places ... like Sass
24
20
  module_function :configure
25
21
 
26
- class Basic
27
-
28
- def initialize
29
- @bundle_options = Fusion.instance_variable_get('@options')
30
- @log = @bundle_options[:logger] || Logger.new(STDOUT)
31
-
32
- if @bundle_options[:bundle_configs]
33
- @bundle_configs = @bundle_options[:bundle_configs]
34
- else
35
- @bundle_configs = YAML::load(File.open(@bundle_options[:bundle_file_path]))
36
- end
37
-
38
- end
39
-
40
- def run
41
- start = Time.now
42
-
43
- bundles = @bundle_configs.collect do |config|
44
- bundle(config)
45
- end
46
-
47
- @log.debug "Javascript Reloaded #{@bundle_configs.size} bundle(s) (#{Time.now - start}s)"
48
-
49
- bundles
50
- end
51
-
52
- def gather_files(config)
53
- input_files = []
54
-
55
- if(config[:input_files])
56
- config[:input_files].each do |input_file|
57
- if (input_file =~ URI::regexp).nil?
58
- # Not a URL
59
- file_path = input_file
60
-
61
- unless input_file == File.absolute_path(input_file)
62
- file_path = File.join(@bundle_options[:project_path], input_file)
63
- end
64
-
65
- input_files << file_path
66
- else
67
- # This is a remote file, if we don't have it, get it
68
- input_files << get_remote_file(input_file)
69
- end
70
- end
71
- end
72
-
73
- if (config[:input_directory])
74
- directory = File.join(@bundle_options[:project_path],config[:input_directory])
75
-
76
- unless File.exists?(directory)
77
- @log.debug "Path #{directory} does not exist"
78
- FileUtils.mkpath(directory)
79
- @log.debug "Created path: #{directory}"
80
- end
81
-
82
- file_names = Dir.open(directory).entries.sort.find_all {|filename| filename.end_with?(".js") }
83
-
84
- input_files += file_names.collect do |file_name|
85
- File.join(directory, file_name)
86
- end
87
- end
88
-
89
- input_files.uniq
90
- end
91
-
92
- def get_output_file(config)
93
- raise Exception.new("Undefined js bundler output file") if config[:output_file].nil?
94
- output_file = File.join(@bundle_options[:project_path], config[:output_file])
95
- path_directories = output_file.split("/")
96
-
97
- if path_directories.size > 1
98
- path = File.join(File.expand_path("."), path_directories[0..-2].join("/"))
99
- FileUtils::mkpath(File.join(path,"/"))
100
- end
101
-
102
- output_file
103
- end
104
-
105
- def get_remote_file(url)
106
- filename = CGI.escape(url)
107
- local_directory = File.join(@bundle_options[:project_path], ".remote")
108
- local_file_path = File.join(local_directory, filename)
109
-
110
- return local_file_path if File.exists?(local_file_path)
111
-
112
- @log.debug "Fetching remote file (#{url})"
113
-
114
- m = Mechanize.new
115
- response = m.get(url)
116
-
117
- raise Exception.new("Error downloading file (#{url}) -- returned code #{repsonse.code}") unless response.code == "200"
118
-
119
- @log.debug "Got file (#{url})"
120
-
121
- unless Dir.exists?(local_directory)
122
- Dir.mkdir(local_directory)
123
- end
124
-
125
- File.open(local_file_path,"w") {|f| f << response.body}
126
-
127
- local_file_path
128
- end
129
-
130
-
131
- end
132
-
133
- class Quick < Basic
134
-
135
- def bundle(config)
136
- js = []
137
- input_files = gather_files(config)
138
-
139
- input_files.each do |input_file|
140
- js << File.open(input_file, "r").read
141
- end
142
-
143
- js = js.join("\n")
144
-
145
- File.open(get_output_file(config), "w") { |f| f << js }
146
-
147
- js
148
- end
149
-
150
- end
151
-
152
- class Optimized < Basic
153
-
154
- def bundle(config)
155
- options = []
156
-
157
- options << ["js_output_file", get_output_file(config)]
158
- options << ["compilation_level", "SIMPLE_OPTIMIZATIONS"]
159
- options << ["language_in","ECMASCRIPT5"] # This will be compatible w all newer browsers, and helps us avoid old IE quirks
160
-
161
- gather_files(config).each do |input_file|
162
- options << ["js", input_file]
163
- end
164
-
165
- options.collect! do |option|
166
- "--#{option[0]} #{option[1]}"
167
- end
168
-
169
- jar_file = File.join(__FILE__.split("/")[0..-3].join("/"), "/compiler/compiler.jar")
170
- cmd = "java -jar #{jar_file} #{options.join(" ")}"
171
- io = IO.popen(cmd, "w")
172
- io.close
173
-
174
- raise Exception.new("Error creating bundle: #{get_output_file(config)}") unless $?.exitstatus == 0
175
- end
176
-
177
- end
178
-
179
- class DebugOptimized < Optimized
180
- def gather_files(config)
181
- @log.debug "Warning ... using Debug compiler."
182
- input_files = []
183
-
184
- if(config[:input_files])
185
- config[:input_files].each do |input_file|
186
- @log.debug "Remote file? #{!(input_file =~ URI::regexp).nil?}"
187
-
188
- if (input_file =~ URI::regexp).nil?
189
- # Not a URL
190
- input_files << File.join(@bundle_options[:project_path], input_file)
191
- else
192
- # This is a remote file, if we don't have it, get it
193
- input_files << get_remote_file(input_file)
194
- end
195
- end
196
- end
197
-
198
- if (config[:input_directory])
199
- directory = File.join(@bundle_options[:project_path],config[:input_directory])
200
-
201
- file_names = Dir.open(directory).entries.sort.find_all {|filename| filename.end_with?(".js") }
202
-
203
- input_files += file_names.collect do |file_name|
204
- File.join(directory, file_name)
205
- end
206
- end
207
-
208
- input_files.uniq!
209
-
210
- # Now wrap each file in a try/catch block and update the input_files list
211
-
212
- FileUtils::mkpath(File.join(@bundle_options[:project_path],".debug"))
213
-
214
- input_files.collect do |input_file|
215
- contents = File.open(input_file).read
216
- new_input_file =""
217
- file_name = input_file.split("/").last
218
-
219
- if input_file.include?(".remote")
220
- new_input_file = input_file.gsub(".remote",".debug")
221
- else
222
- new_input_file = File.join(@bundle_options[:project_path], ".debug", file_name)
223
- end
224
-
225
- new_contents = "///////////////////\n//mw_bundle: #{input_file}\n///////////////////\n\n try{\n#{contents}\n}catch(e){\nconsole.log('Error (' + e + 'generated in : #{input_file}');\n}"
226
- File.open(new_input_file,"w") {|f| f << new_contents}
227
-
228
- new_input_file
229
- end
230
-
231
- end
232
- end
233
-
234
22
  end
data/lib/optimized.rb ADDED
@@ -0,0 +1,53 @@
1
+ module Fusion
2
+ class Optimized < Fusion::Basic
3
+
4
+ def bundle(config)
5
+ options = get_options(config)
6
+
7
+ jar_file = File.join(__FILE__.split("/")[0..-3].join("/"), "/compiler/compiler.jar")
8
+ cmd = "java -jar #{jar_file} #{options.join(" ")}"
9
+ io = IO.popen(cmd, "w")
10
+ io.close
11
+
12
+ raise Exception.new("Error creating bundle: #{get_output_file(config)}") unless $?.exitstatus == 0
13
+
14
+ File.read(get_output_file(config))
15
+ end
16
+
17
+ private
18
+
19
+ def get_options(config)
20
+ options = []
21
+
22
+ options << ["js_output_file", get_output_file(config)]
23
+ options << ["compilation_level", "SIMPLE_OPTIMIZATIONS"]
24
+ options << ["language_in","ECMASCRIPT5"] # This will be compatible w all newer browsers, and helps us avoid old IE quirks
25
+
26
+ gather_files(config).each do |input_file|
27
+ options << ["js", input_file]
28
+ end
29
+
30
+ options.collect! do |option|
31
+ "--#{option[0]} #{option[1]}"
32
+ end
33
+
34
+ options
35
+ end
36
+
37
+ end
38
+
39
+ class AdvancedOptimized < Fusion::Optimized
40
+
41
+ private
42
+
43
+ def get_options(config)
44
+ options = super(config)
45
+
46
+ compilation_level_index = options.find_index {|opt| opt =~ /compilation_level/}
47
+ options[compilation_level_index] = ["--compilation_level ADVANCED_OPTIMIZATIONS"]
48
+
49
+ options
50
+ end
51
+ end
52
+
53
+ end
data/lib/quick.rb ADDED
@@ -0,0 +1,20 @@
1
+ module Fusion
2
+ class Quick < Fusion::Basic
3
+
4
+ def bundle(config)
5
+ js = []
6
+ input_files = gather_files(config)
7
+
8
+ input_files.each do |input_file|
9
+ js << File.open(input_file, "r").read
10
+ end
11
+
12
+ js = js.join("\n")
13
+
14
+ File.open(get_output_file(config), "w") { |f| f << js }
15
+
16
+ js
17
+ end
18
+
19
+ end
20
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fusion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-10 00:00:00.000000000Z
12
+ date: 2011-10-24 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: open4
16
- requirement: &2153789700 !ruby/object:Gem::Requirement
16
+ requirement: &2152900880 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2153789700
24
+ version_requirements: *2152900880
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: mechanize
27
- requirement: &2153789260 !ruby/object:Gem::Requirement
27
+ requirement: &2152900440 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2153789260
35
+ version_requirements: *2152900440
36
36
  description: Fusion bundles and re-bundles your javascript in two modes - quick (dumb
37
37
  concatenation) and optimized (google closure compiler's SIMPLE_OPTIMIZATIONS level
38
38
  email:
@@ -42,7 +42,10 @@ extensions: []
42
42
  extra_rdoc_files: []
43
43
  files:
44
44
  - README.md
45
+ - lib/basic.rb
45
46
  - lib/fusion.rb
47
+ - lib/optimized.rb
48
+ - lib/quick.rb
46
49
  - compiler/compiler.jar
47
50
  - compiler/COPYING
48
51
  - compiler/README