jscat 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +24 -0
- data/lib/jscat.rb +69 -0
- data/spec/jscat_spec.rb +23 -0
- metadata +49 -0
data/README.rdoc
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
= jscat
|
2
|
+
|
3
|
+
Grabs all the javascript files in a directory and smooshes them into a single file for caching & transfer. Optional YUI compression, file order prioritisation and ignore list (so you don't recursively add the output to itself)
|
4
|
+
|
5
|
+
Do this:
|
6
|
+
|
7
|
+
javascript = JsCat.new({
|
8
|
+
:js_dir => 'scripts', # read javascript files from this directory
|
9
|
+
:compress => 'true', # uses/requires yui/compressor
|
10
|
+
:prioritize => ['framework.js'], # puts framework.js at the top of the file
|
11
|
+
:ignore => ["script_c.js"], # files to ignore
|
12
|
+
:output => "output/javascript.js" # write the compressed javsascript here
|
13
|
+
})
|
14
|
+
|
15
|
+
Get this:
|
16
|
+
|
17
|
+
var Framework={};function script_a(){alert("I am script a")}function script_b(){alert("I am script b")};
|
18
|
+
|
19
|
+
|
20
|
+
== Copyright
|
21
|
+
|
22
|
+
Copyright (c) 2011 Daniel Sim. See LICENSE.txt for
|
23
|
+
further details.
|
24
|
+
|
data/lib/jscat.rb
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
class JsCat
|
2
|
+
attr_reader :js
|
3
|
+
def initialize(params = {})
|
4
|
+
@js_dir = params[:js_dir] || "public"
|
5
|
+
@compress = params[:compress] || false
|
6
|
+
@output = params[:output] || false
|
7
|
+
@priority_files = params[:prioritize] || false
|
8
|
+
@ignore_files = params[:ignore] || false
|
9
|
+
require "yui/compressor" if @compress
|
10
|
+
render_js
|
11
|
+
write_js if @output
|
12
|
+
end
|
13
|
+
def list_scripts
|
14
|
+
@scripts = Dir.glob("#{@js_dir}/*.js")
|
15
|
+
if @ignore_files then
|
16
|
+
@ignore_files.uniq.each {|file|
|
17
|
+
@scripts.delete(@js_dir+'/'+file)
|
18
|
+
}
|
19
|
+
end
|
20
|
+
if @priority_files then
|
21
|
+
@priority_files_full = []
|
22
|
+
@priority_files.uniq.each {|file|
|
23
|
+
@priority_files_full << @js_dir+'/'+file
|
24
|
+
}
|
25
|
+
@priority_files_full.each {|file|
|
26
|
+
if @scripts.include? file then
|
27
|
+
@scripts.delete(file)
|
28
|
+
else
|
29
|
+
@priority_files_full.delete file
|
30
|
+
end
|
31
|
+
}
|
32
|
+
@scripts = @priority_files_full + @scripts
|
33
|
+
end
|
34
|
+
return @scripts
|
35
|
+
end
|
36
|
+
def set_scripts(scripts_array)
|
37
|
+
@scripts = scripts_array
|
38
|
+
end
|
39
|
+
def render_js
|
40
|
+
@js = ""
|
41
|
+
list_scripts.each { |script|
|
42
|
+
File.open(script, 'r') do |f1|
|
43
|
+
while line = f1.gets
|
44
|
+
@js = @js + line
|
45
|
+
end
|
46
|
+
@js = @js + "\n"
|
47
|
+
end
|
48
|
+
}
|
49
|
+
compress_js if @compress
|
50
|
+
return @js
|
51
|
+
end
|
52
|
+
def compress_js
|
53
|
+
begin
|
54
|
+
compressor = YUI::JavaScriptCompressor.new
|
55
|
+
compressed_js = compressor.compress(@js)
|
56
|
+
compress_success = true
|
57
|
+
puts "compressed js"
|
58
|
+
rescue Exception=>e
|
59
|
+
puts 'Warning: Could not write javascript file, syntax error in javascript'
|
60
|
+
end
|
61
|
+
@js = compressed_js if compress_success
|
62
|
+
return @js
|
63
|
+
end
|
64
|
+
def write_js
|
65
|
+
File.open(@output,'w') { |f|
|
66
|
+
f.write(@js)
|
67
|
+
}
|
68
|
+
end
|
69
|
+
end
|
data/spec/jscat_spec.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'yui/compressor'
|
3
|
+
|
4
|
+
require_relative '../lib/jscat'
|
5
|
+
|
6
|
+
describe JsCat do
|
7
|
+
|
8
|
+
before :all do
|
9
|
+
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should concatenate javascript without catching fire' do
|
13
|
+
javascript = JsCat.new({
|
14
|
+
:js_dir => 'scripts', #read javascript files from this directory
|
15
|
+
:compress => 'true', #uses/requires yui/compressor
|
16
|
+
:prioritize => ['framework.js'], #puts framework.js at the top of the file
|
17
|
+
:ignore => ["script_c.js"], #dont include these files
|
18
|
+
:output => "output/javascript.js" #write the file here
|
19
|
+
})
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jscat
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Daniel Sim
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-10-28 00:00:00.000000000Z
|
13
|
+
dependencies: []
|
14
|
+
description: Joins and compresses a directory of javascript files to a single file
|
15
|
+
email: dan@explodingbox.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- README.rdoc
|
21
|
+
- lib/jscat.rb
|
22
|
+
- spec/jscat_spec.rb
|
23
|
+
homepage: http://www.daniel-sim.com
|
24
|
+
licenses: []
|
25
|
+
post_install_message:
|
26
|
+
rdoc_options: []
|
27
|
+
require_paths:
|
28
|
+
- lib
|
29
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
30
|
+
none: false
|
31
|
+
requirements:
|
32
|
+
- - ! '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
36
|
+
none: false
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
requirements: []
|
42
|
+
rubyforge_project:
|
43
|
+
rubygems_version: 1.8.6
|
44
|
+
signing_key:
|
45
|
+
specification_version: 3
|
46
|
+
summary: Grabs all the javascript files in a directory and smooshes them into a single
|
47
|
+
file for caching & transfer. Optional YUI compression, file order prioritisation
|
48
|
+
and ignore list (so you don't recursively add the output to itself)
|
49
|
+
test_files: []
|