sqweeze 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest CHANGED
@@ -1,4 +1,3 @@
1
- Manifest
2
1
  README.rdoc
3
2
  Rakefile
4
3
  bin/sqweeze
@@ -17,4 +16,4 @@ lib/sqweezeUtils.rb
17
16
  spec/confManager_spec.rb
18
17
  spec/domCompiler_spec.rb
19
18
  spec/sqw_spec_helper.rb
20
- sqweeze.gemspec
19
+ Manifest
data/README.rdoc CHANGED
@@ -6,31 +6,31 @@ A command line web asset optimisation tool.
6
6
  _Sqweeze_ cuts the unnecessary bytes out of your web assets, helping you delivering your web project more fast and efficiently.
7
7
  With a little help from a number of well known open source third party tools, _Sqweeze_ does the following:
8
8
 
9
- 1. Lossless compresses .PNG, .JPEG and .GIF image assets.
10
- 2. Compresses and concatenates into single files multiple Stylesheets and Javascript files.
11
- 3. Embeds the compressed image assets into the stylesheet, using {Data-uris}[https://developer.mozilla.org/En/The_data_URL_scheme] (for proper browsers and IE8) and {MHTML}[http://en.wikipedia.org/wiki/MHTML] (for IE6 and IE7).
12
- 4. Finally, it provides some basic functionality for linking the compressed Javascript and CSS just created, to the main HTML document,
9
+ * Lossless compresses .PNG, .JPEG and .GIF image assets.
10
+ * Compresses and concatenates into single files multiple Stylesheets and Javascript files.
11
+ * Embeds the compressed assets referenced into the stylesheet, using using {Data-uris}[https://developer.mozilla.org/En/The_data_URL_scheme] (for proper browsers and IE8) and {MHTML}[http://en.wikipedia.org/wiki/MHTML] (for IE6-7).
12
+ * Finally, it provides some basic functionality for linking the compressed Javascript and CSS just created to the main HTML document,
13
13
  and removing automatically the links pointing to the old uncompressed ones.
14
14
 
15
15
  === Installing it
16
16
 
17
17
  Sqweeze relies on a few command-line image compression tools, namely Pngcrush, Jpegtrain, and Gifsicle, which have to be installed first.
18
- On an Ubuntu box, you can install these all in once by running a single command line
18
+ On an Ubuntu box, you can install these by running a single command line
19
19
 
20
20
  sudo apt-get install pngcrush gifsicle libjpeg-progs
21
21
 
22
+ (This assumes you have ruby, ruby1.8-dev, and gem installed).
23
+
22
24
  Mac OSX users can install the first two as Macports packages. The third (part of libjpeg) instead, has to be
23
25
  {compiled manually}[http://www.phpied.com/installing-jpegtran-mac-unix-linux].
24
26
 
25
- Once installed these third party tools, you can install _Sqweeze_ using the rubygems package manager
27
+ Once installed these, you can install _Sqweeze_ using rubygems
26
28
 
27
29
  gem install sqweeze
28
30
 
29
- (this assumes that you have both ruby and rugygems installed).
30
-
31
31
  === Configuration
32
32
 
33
- When run for the first time, the script creates a configuration file in the user's $HOME directory, and sets therein the default file paths of Pngcrush and friends.
33
+ When run for the first time, the script creates a config file in the user's $HOME directory and sets therein the default paths of command line tools such as pngcrush and friends.
34
34
 
35
35
  # file $HOME/.sqweeze.yml
36
36
 
@@ -39,45 +39,4 @@ When run for the first time, the script creates a configuration file in the user
39
39
  - jpegtran: /usr/bin/jpegtran
40
40
  - gifsicle: /usr/bin/gifsicle
41
41
 
42
- If you have installed those anywhere else than in <code>/usr/bin</code>, you will have to edit this file with your own paths, so that sqweeze can find them.
43
-
44
- === Usage
45
-
46
-
47
- sqweeze input_dir [target_dir]
48
-
49
- When invoked with no options, sqweeze will simply copy the content of a source directory, compress its Image assets, and finally generate three new files in the target directory:
50
-
51
- [javascripts.min.js]
52
- A file concatenating and compressing together all the other javascript files in the source directory
53
- [styleshees.min.js]
54
- A file concatenating and compressing together all the other Stylesheets in the source directory
55
- [styleshees.min.datauri.js]
56
- Same as stylesheets.min.js, but embedding the image referenced in the stylesheets through the data URI scheme.
57
-
58
- ==== MHTML Support
59
-
60
- Whilst the generated <code>stylesheets.all.datauri.css</code> will work fine in most recent web-browsers (i.e Chrome, Safari, Firefox, IE 8), it will
61
- fail displaying images in Internet Explorer 6 and 7. A viable way around to this limitation, however, is that of using
62
- Microsoft's MIME HTML. In order to have sqweeze generate also a MHTML stylesheet suitable to be read by IE6 and IE7, one has to specify the parameter <code>--MHTML-ROOT</code>; that is the URL of the directory where the stylesheet will be deployed.
63
-
64
- sqweeze --mhtml-root=http://example.com/css example-sourcedir
65
-
66
- At this point, both the Data URI and the MHTML stylesheet can be linked to the main index.html and loaded selectively through {Internet Explorer's Conditional Comments}[http://en.wikipedia.org/wiki/Conditional_comment]
67
-
68
- <!--[if (!IE)|(gte IE 8)]><!-->
69
- <link href="css/stylesheets.min.datauri.css" media="screen" rel="stylesheet" type="text/css" />
70
- <!--<![endif]-->
71
- <!--[if lte IE 7]>
72
- <link href="css/stylesheets.min.mhtml.css" media="screen" rel="stylesheet" type="text/css" />
73
- <![endif]-->
74
-
75
- ==== Inline asset optimisation
76
-
77
- Although the process described above is the most broadly adopted by already established Web optimisation tools (e.g. Jammit),
78
- sometimes it can be useful - in order to reduce the amount of HTTP requests - to render compressed assets in-line, directly in the HTML file
79
- (as opposed to linking them to an external stylesheet or javascript ). Although this is still very experimental and does not support base64 image embedding yet, sqweeze provides a functionality for compiling assets inline into an HTML file.
80
-
81
- sqweeze -S all_inline -D source_dir/index.html source_dir
82
-
83
- [....]
42
+ If you have installed these anywhere else than in /usr/bin+, you will have to edit this file so that sqweeze can find them.
data/bin/sqweeze CHANGED
@@ -1,7 +1,5 @@
1
1
  #! /usr/bin/env ruby
2
-
3
-
4
- # third party libs
2
+ # rubygems
5
3
  %w[rubygems yui/compressor closure-compiler hpricot].each{|lib| require lib}
6
4
  # ruby standard library
7
5
  %w[logger singleton yaml base64 open-uri pathname optparse fileutils].each{|lib| require lib}
@@ -26,7 +24,7 @@ op=OptionParser.new do |opts|
26
24
 
27
25
  opts.banner = "Usage: sqweeze [options] SOURCE_DIR [TARGET_DIR]"
28
26
  opts.program_name= 'sqweeze'
29
- opts.on("-S", "--optimisation-strategy=ALL_IN_ONE",
27
+ opts.on("-s", "--optimisation-strategy=ALL_IN_ONE",
30
28
  "JavaScript/CSS optimisation strategy to be adopted ") do |s|
31
29
  raise OptionParser::InvalidArgument unless ['all_inline','all_in_one'].include?(s)
32
30
  options[:optimisation_strategy] = s.downcase.to_sym
@@ -40,7 +38,7 @@ op=OptionParser.new do |opts|
40
38
  opts.on('-e','--exclude-files=PATTERN', "Exclude a file/directory pattern (e.g. doc/**/*.* )") do |exc|
41
39
  options[:exclude_files] = exc
42
40
  end
43
- opts.on('-D','--dom-documents=PATTERN', "Dom document/s to which CSS/JS should be linked (e.g. **/index.html )") do |dom|
41
+ opts.on('-d','--dom-documents=PATTERN', "Dom document/s to which CSS/JS should be linked (e.g. **/index.html )") do |dom|
44
42
  options[:dom_documents] = dom
45
43
  end
46
44
 
@@ -82,7 +80,7 @@ op=OptionParser.new do |opts|
82
80
  opts.separator ""
83
81
  opts.separator "Console output:"
84
82
 
85
- opts.on('-q',"--quite", "suppress console output ") do |q|
83
+ opts.on('-q',"--quiet", "suppress console output ") do |q|
86
84
  options[:suppress_warn] = true
87
85
  options[:suppress_info] = true
88
86
  end
@@ -95,13 +93,12 @@ begin
95
93
  op.parse!
96
94
  Proc.new { puts "Missing SOURCE_DIR argument"; exit(1) }.call unless ARGV[0]
97
95
  Proc.new { puts "source directory #{ARGV[0]} does not exist, please provide a valid path"
98
- exit(1) }.call unless ARGV[0] and File.exists?(ARGV[0])
96
+ exit(1) }.call unless File.exists?(ARGV[0])
99
97
 
100
98
 
101
99
  cm=ConfManager.instance
102
100
  cm.prepare(ARGV[0], ARGV[1], options)
103
-
104
-
101
+
105
102
  # Compress images
106
103
  { :compress_png => PngCompressor.new,
107
104
  :compress_gif => GifCompressor.new,
@@ -112,17 +109,16 @@ begin
112
109
 
113
110
  case cm.get_conf(:optimisation_strategy)
114
111
  when :all_inline
115
- raise "You must specify a valid DOM document to use the inline strategy" unless File.exists?(cm.get_conf(:dom_documents).first)
116
- JsDomCompiler.new.compile
117
- CssDomCompiler.new.compile
112
+ puts "not implemented yet.."
113
+ exit
114
+
118
115
 
119
116
  when :all_in_one
120
-
121
117
  { :compress_js => JsCompressor.new,
122
118
  :compress_css => CssCompressor.new
123
119
  }.each do |opt, cmp|
124
120
  cmp.compress unless cm.get_conf(opt) == false
125
- end
121
+ end
126
122
  # link assets to main HTML file
127
123
  AssetLinker.new.compile unless cm.get_conf(:dom_documents).empty?
128
124
  end
@@ -7,32 +7,27 @@ class AssetLinker < DOMCompiler
7
7
  # Otherwise delete.
8
8
  elm.parent.children.delete(elm)
9
9
  end
10
-
11
10
  dom_documents.each do |path|
12
- target_path=remap_filepath(path)
13
-
14
11
  # Append concatenated JavaScript file.
15
-
16
12
  doc = Hpricot(open(path))
17
13
  doc.search(@cm.get_conf(:append_scripts_to).to_s.downcase).append( "<script type='text/javascript' src='javascripts.min.js'></script>")
18
-
19
- notify("#{ansi_bold(target_path)}:".ljust(60) + ansi_green("Appending Sylesheets"),:info)
20
-
14
+
21
15
  stylesheets_html=<<EOF
22
-
23
- <!--[if (!IE)|(gte IE 8)]><!-->
24
- <link href="stylesheets.min.datauri.css" media="screen" rel="stylesheet" type="text/css" />
25
- <!--<![endif]-->
26
- <!--[if lte IE 7]>
27
- <link href="stylesheets.min.mhtml.css" media="screen" rel="stylesheet" type="text/css" />
28
- <![endif]-->
16
+ <!--[if lte IE 8]>
17
+ <link href="stylesheets.min.mhtml.css" rel="stylesheet" />
18
+ <![endif]-->
19
+ <!--[if IE 8]>
20
+ <link href="stylesheets.min.datauri.css" rel="stylesheet" />
21
+ <![endif]-->
22
+ <!--[if !IE]>
23
+ <link href="stylesheets.min.datauri.css" rel="stylesheet" />
24
+ <![endif]-->
29
25
  EOF
30
-
31
- # Append concatenated CSS files, wrapping them within IE conditional tags
32
- doc.search('head').append(stylesheets_html)
33
- notify("#{ansi_bold(target_path)}:".ljust(60)+ansi_green("Appending Sylesheets"),:info)
34
- write_file(doc.innerHTML, target_path)
35
- end
26
+
27
+ # Append ie conditional tags
28
+ doc.search('head').append(stylesheets_html)
29
+ write_file(doc.innerHTML,path)
30
+ end
36
31
  end
37
32
 
38
33
  end
@@ -12,7 +12,7 @@ class JsDomCompiler < DOMCompiler
12
12
 
13
13
 
14
14
  def compress(fbody)
15
- unless @cm.get_conf(:default_js_compressor) == :closure
15
+ unless @cm.default_js_compressor == :closure
16
16
  compressor, method = YUI::JavaScriptCompressor.new( :munge => true), :compress
17
17
  else
18
18
  compressor, method = Closure::Compiler.new, :compiler
@@ -19,8 +19,9 @@ class CssCompressor < Compressor
19
19
  EMBED_DETECTOR = /url\(['"]?([^\s)]+\.[a-z]+)(\?\d+)?['"]?\)/
20
20
 
21
21
  # MHTML file constants.
22
- MHTML_START = "/*\r\nContent-Type: multipart/related; boundary=\"SQWEEZED_ASSET\"\r\n\r\n"
23
- MHTML_SEPARATOR= "--SQWEEZED_ASSET\r\n"
22
+ MHTML_START = "/*\nContent-Type: multipart/related; boundary=\"SQWEEZED_ASSET\"\n"
23
+ MHTML_SEPARATOR= "--SQWEEZED_ASSET"
24
+ MHTML_END = "*/\n"
24
25
 
25
26
  def initialize
26
27
  super('css')
@@ -58,27 +59,22 @@ class CssCompressor < Compressor
58
59
  end
59
60
 
60
61
  def embed_datauris(compressed_css)
61
-
62
62
  out=compressed_css.gsub(EMBED_DETECTOR) do |url|
63
-
64
- compressed_asset_path=remap_filepath($1)
65
- mime_t=mime_type(compressed_asset_path)
66
- if compressed_asset_path and File.exists?(compressed_asset_path) and File.size(compressed_asset_path) < MAX_IMAGE_SIZE and mime_t
67
-
68
- base64_asset=encoded_contents( compressed_asset_path )
63
+
64
+ compressed_asset_path=remap_filepath($1)
65
+ mime_t=mime_type(compressed_asset_path)
69
66
 
70
- notify("file:#{compressed_asset_path}; mime-type: #{mime_type($1)}#",:debug)
67
+ if compressed_asset_path and File.exists?(compressed_asset_path) and File.size(compressed_asset_path) < MAX_IMAGE_SIZE and mime_t
68
+ base64_asset=encoded_contents( compressed_asset_path )
69
+ $log.debug("file:#{compressed_asset_path}; mime-type: #{mime_type($1)}#")
71
70
  # label the image
72
71
  @assets[ compressed_asset_path ] = base64_asset
73
72
  "url(\"data:#{mime_t};charset=utf-8;base64,#{base64_asset}\")"
74
73
  else
75
74
  "url(#{$1})"
76
- end
77
- end
78
-
79
- total_file_weight=@assets.keys.inject(0){|sum,path| sum+File.size(path)}
80
-
81
- notify("Converting #{ansi_bold(@assets.size)} images (#{ansi_bold(total_file_weight)} bytes) into base64".ljust(60),:info)
75
+ end
76
+ end
77
+
82
78
  write_file(out,"#{@cm.target_dir}/stylesheets.min.datauri.css")
83
79
  end
84
80
 
@@ -87,18 +83,18 @@ class CssCompressor < Compressor
87
83
  mhtml= MHTML_START
88
84
 
89
85
  @assets.each do |mhtml_loc,base64|
90
- mhtml << [MHTML_SEPARATOR,
91
- "Content-location: #{mhtml_loc}\r\n",
92
- "Content-Transfer-Encoding: base64\r\n",
93
- "Content-type: #{mime_type(mhtml_loc)} \r\n\r\n",
94
- "#{base64}\r\n"
95
- ].join('')
86
+ mhtml <<"
87
+ #{MHTML_SEPARATOR}
88
+ Content-location: #{ mhtml_loc }
89
+ Content-Transfer-Encoding:base64
90
+
91
+ #{base64}\n"
96
92
  end
97
- mhtml << "*/\r\n"
93
+ mhtml << "*/\n"
98
94
  mhtml << compressed_css.gsub(EMBED_DETECTOR) do |css|
99
95
  compressed_asset_path=remap_filepath($1)
100
96
  if compressed_asset_path
101
- "url(mhtml:#{@cm.get_conf(:mhtml_root).gsub(/\/$/,'')}/stylesheets.min.mhtml.css!#{compressed_asset_path})"
97
+ "url(mhtml:#{@cm.get_conf(:mhtml_root).gsub(/\/$/,'')}/stylesheets.min.mhtml.css!#{mhtml_location( compressed_asset_path)})"
102
98
  else
103
99
  "url(#{$1})"
104
100
  end
@@ -2,7 +2,7 @@ class PngCompressor < Compressor
2
2
 
3
3
  def initialize
4
4
  super('png')
5
- set_command(:pngcrush,'%executable% -q -rem text %input% %output%')
5
+ set_command(:pngcrush,'%executable% -q -rem alla -brute -reduce %input% %output%')
6
6
 
7
7
  end
8
8
 
data/lib/confManager.rb CHANGED
@@ -37,7 +37,7 @@ class ConfManager
37
37
  }
38
38
  end
39
39
  attr_reader :target_dir,:source_dir,
40
- :files,:conf_filename,:conf
40
+ :files,:conf_filename,:conf
41
41
 
42
42
 
43
43
  # Setter method used to populate the <code>@conf</code> attribute with key value pairs.
@@ -93,7 +93,7 @@ class ConfManager
93
93
  FileUtils.rm_r(nested_dir) if File.directory?(nested_dir)
94
94
  end
95
95
 
96
- # Re-maps a file path from the source to the target directory.
96
+ # Remaps a filepath from the source to the target directory.
97
97
  #
98
98
  # TODO:check if this works with relative paths (i.e. <code>../imgs/bar.png</code>)
99
99
 
@@ -103,6 +103,7 @@ class ConfManager
103
103
 
104
104
 
105
105
  # Generates a file pattern suitable to be expanded by ruby's {Dir[]}[http://ruby-doc.org/core/classes/Dir.html] method.
106
+
106
107
  def mkpath(pattern,dir=@source_dir)
107
108
  dir.to_a.push(pattern).join('/')
108
109
  end
@@ -126,6 +127,7 @@ class ConfManager
126
127
  end
127
128
 
128
129
  # Parses configuration files and sets user-defined file inclusion/exlusion patterns.
130
+
129
131
  def parse_conf(configfile="#{ENV['HOME']}/#{@conf_filename}")
130
132
  notify("Parsing configuration file: #{configfile}",:debug)
131
133
  conf=YAML::load_file( configfile )
data/lib/domCompiler.rb CHANGED
@@ -7,32 +7,29 @@ class DOMCompiler
7
7
  # @dom_extnames=['.html','.svg']
8
8
  @cm=ConfManager.instance
9
9
  #if @cm.link_assets_to and not @cm.link_assets_to.empty?
10
- @dom_documents=@cm.get_conf(:dom_documents).collect{|path| remap_filepath(path) }
10
+ @dom_documents=@cm.get_conf(:dom_documents).to_a
11
11
  end
12
12
  # Retrieves a resource, being this either a URL or a file.
13
13
  def get_resource(path_or_url)
14
- puts "opening ..#{path_or_url}"
15
- target_path=remap_filepath(path_or_url)
16
- puts "tp: #{target_path}"
17
- f=open(target_path)
14
+ f=open(remap_filepath(path_or_url))
18
15
  (f.is_a? File)? f.read : f
19
16
  end
20
-
21
- # Iterates over a DOM element and allows to apply a custom block over it.
17
+ # Iterates over a DOM element and allows to apply a custom block over it.
18
+
22
19
  def iterate_over(selector)
23
20
  @dom_documents.each do |path|
24
- raise "File #{path} does not seem to exist" unless File.exists?(path)
25
- doc=Hpricot(open(path))
26
-
27
- if doc
21
+ doc=Hpricot(open(path))
22
+ if doc
28
23
  doc.search(selector).each do |element|
29
- yield(element, doc)
24
+
25
+ #$log.debug..
26
+ yield(element, doc)
27
+ # save document
28
+ #write_file(doc.innerHTML, [@cm.target_dir, File.basename(path) ].join('/') )
30
29
  write_file(doc.innerHTML, path )
31
30
  end
32
31
  else
33
- notify("DOMCompiler cannot parse #{path}",
34
- :error
35
- )
32
+ notify("DOMCompiler cannot parse #{path}",:error)
36
33
  end
37
34
  end
38
35
  end
data/lib/sqweezeUtils.rb CHANGED
@@ -10,8 +10,9 @@ module SqweezeUtils
10
10
  '.tiff' => 'image/tiff',
11
11
  '.ttf' => 'font/truetype',
12
12
  '.otf' => 'font/opentype'
13
- }
13
+ }
14
14
 
15
+
15
16
  def write_file(fbody,fpath)
16
17
  File.open(fpath,'w') do |f|
17
18
  f.write(fbody)
@@ -31,46 +32,26 @@ module SqweezeUtils
31
32
  # Otherwise, if the resource is a relative url in the source dir, try
32
33
  # to map it to its compressed version in the target directory
33
34
 
34
- def remap_filepath(path)
35
- parent_dir, path_basename = path.split('/')[-2..-1]
36
-
37
- # Handle file paths at 0 level of depth 'style.css'
38
- path_basename = path if path_basename.nil?
39
-
40
- parent_dir = get_confManager().target_dir if parent_dir.gsub(/\/$/,'') == get_confManager().source_dir.gsub(/\/$/,'')
41
-
42
-
43
-
35
+ def remap_filepath(path)
36
+ path=Pathname.new(path)
37
+ parent_dir, path_basename = path.parent, path.basename
44
38
  is_absolute = URI.parse(path).absolute?
45
39
  unless is_absolute
46
-
47
- find_file_in_targetdir([parent_dir, path_basename].join('/'))
40
+ find_file_in_targetdir( [parent_dir, path_basename].join('/'))
48
41
  else
49
- path
42
+ path.to_s
50
43
  end
51
44
  end
52
45
 
53
-
54
-
55
- # Find a file in the target directory
56
- # endpath is a string containing parent directory and file name
57
- # (e.g imgs/separator.png)
58
-
59
- def find_file_in_targetdir(endpath)
60
- pattern= [get_confManager.target_dir,"**/**"].join('/')
61
- # puts "Searching for #{endpath} into #{pattern}"
62
- Dir[pattern].find{|path| path =~ Regexp.new("#{endpath}$")}
63
- end
64
-
65
-
66
-
67
46
  # Return the Base64-encoded contents of an asset on a single line.
68
47
  def encoded_contents(asset_path)
69
48
  data = open(asset_path, 'rb'){|f| f.read }
70
49
  Base64.encode64(data).gsub(/\n/, '')
71
50
  end
72
51
 
73
- # Gets the byte weight of input strames, wether these are file paths or just strings
52
+
53
+ # Gets the byte weight of input strames, wether these are file paths or just strings
54
+
74
55
  def byteweight(path_or_string)
75
56
  path_or_string="" if path_or_string.nil?
76
57
 
@@ -87,6 +68,18 @@ module SqweezeUtils
87
68
  sprintf('%.2f',after_bweight/before_bweight.to_f * 100)
88
69
  end
89
70
 
71
+
72
+ # Find a file in the target directory
73
+ # endpath is a string containing parent directory and file name
74
+ # (e.g imgs/separator.png)
75
+
76
+ # TODO: rewrite this! (it sucks..)
77
+
78
+ def find_file_in_targetdir(endpath)
79
+ pattern= [get_confManager.target_dir,"**/*#{File.extname(endpath)}"].join('/')
80
+ #puts "searcing for files in #{pattern} ending with #{endpath}"
81
+ Dir[pattern].find{|path| path =~ Regexp.new("#{endpath}$")}
82
+ end
90
83
 
91
84
 
92
85
  # Prints to STDERR and adds a log entry.
@@ -1,5 +1,6 @@
1
1
  require 'sqw_spec_helper'
2
2
 
3
+
3
4
  describe ConfManager do
4
5
  context "Starting up" do
5
6
 
@@ -9,7 +10,7 @@ describe ConfManager do
9
10
 
10
11
  after(:each) do
11
12
  @cm=nil
12
- # clean up local configuration file
13
+ # clean up config files
13
14
  %w( ENV['home'] test_dir ).each do |f|
14
15
  f << "/.sqweeze.yml"
15
16
  FileUtils.rm(f) if File.exists?(f)
@@ -17,37 +18,44 @@ describe ConfManager do
17
18
  end
18
19
 
19
20
  it "Should create a .sqweeze.yml file in the home directory" do
20
- @cm.prepare('test_dir', 'test_dir_sqweeze', {:suppress_info => true} )
21
+ @cm.prepare('test_dir')
21
22
  File.exists?("#{ENV['HOME']}/.sqweeze.yml").should be_true
22
23
  end
23
24
 
24
25
  it "Should select the list of files provided by the user if the *include:* section of the .sqweeze.yml is not empty" do
25
26
  extra_lines= ["include:","- js/**/*.js",'- color/**/*.png']
26
27
  write_configfile(extra_lines[0..1].join("\n"))
27
- @cm.prepare('test_dir', 'test_dir_sqweeze', {:suppress_info => true} )
28
+ @cm.prepare('test_dir')
28
29
  @cm.should have(3).files
29
30
 
30
31
  write_configfile(extra_lines.join("\n"))
31
-
32
- @cm.prepare('test_dir', 'test_dir_sqweeze', {:suppress_info => true} )
32
+ @cm.prepare('test_dir')
33
33
  @cm.should have(5).files
34
34
  end
35
+
35
36
  it "Should select all files in the project if the include: section of .sqweeze.yml is left empty" do
36
37
  project_file_count= Dir['test_dir/**/*'].reject{|f| File.directory?(f)}.size
37
- @cm.prepare('test_dir', 'test_dir_sqweeze',:suppress_info => true)
38
+ @cm.prepare('test_dir')
38
39
  @cm.should have(project_file_count).files
39
40
  end
41
+
40
42
  it "Should always exclude the files specified by the user in the .sqweeze.yml exclude section " do
41
43
  write_configfile(["exclude:","- js/**/*.js"].join("\n"))
42
44
  project_file_count= Dir['test_dir/**/*'].reject{|f| File.directory?(f)}.size
43
- @cm.prepare('test_dir', 'test_dir_sqweeze',:suppress_info => true)
45
+ @cm.prepare('test_dir')
44
46
  @cm.should have(46).files
45
47
  end
46
-
48
+
47
49
  it "Should search *dom_documents* in the the target directory " do
48
- write_configfile("dom_documents: test_dir/**/*.php")
49
- @cm.prepare('test_dir', 'test_dir_sqweeze',:suppress_info => true)
50
- @cm.get_conf(:dom_documents).should include('test_dir_sqweeze/tpl/page.tpl.php')
51
- end
50
+ write_configfile("dom_documents: test_dir/*/page.tpl.php")
51
+ @cm.prepare('test_dir')
52
+ @cm.get_conf(:dom_documents).should include('test_dir_sqweezed/tpl/page.tpl.php')
53
+ end
54
+
55
+
56
+
57
+
58
+
59
+
52
60
  end
53
61
  end
@@ -1,37 +1,38 @@
1
+ require '../lib/confManager'
2
+ require '../lib/DomCompiler'
3
+ require '../lib/jsDomCompiler'
4
+ require '../lib/cssDomCompiler'
1
5
  require 'sqw_spec_helper'
2
6
 
3
7
  describe DOMCompiler do
4
8
  before(:each) do
5
- wget_webpage('http://www.dreamhost.com/domains.html','dom-testdir')
9
+ wget_webpage('http://www.dreamhost.com/domains.html','dom-testdir')
6
10
  cm = ConfManager.instance
7
- cm.prepare('dom-testdir','dom-testdir-build',{
8
- :suppress_info => true,
9
- :dom_documents => '*.html'
10
- })
11
- @js_c=JsDomCompiler.new
12
- end
11
+ cm.prepare('dom-testdir','dom-testdir-build')
12
+ @js_c=JSDOMCompiler.new
13
+ end
13
14
 
14
15
  after(:each) do
15
- #FileUtils.rm_r('dom-testdir')
16
- #FileUtils.rm_r('dom-testdir-build')
16
+ FileUtils.rm_r('dom-testdir')
17
+ FileUtils.rm_r('dom-testdir-build')
17
18
  end
18
19
 
19
20
  it "(all subclasses) should look for *dom_documents* in target directory" do
20
21
  @js_c.should have(1).dom_documents
21
- @js_c.dom_documents.should include('dom-testdir-build/domains.html')
22
+ @js_c.dom_documents.should include('dom-testdir-build/index.html')
22
23
  end
23
24
 
24
25
  it "Should fill each script element having a src attribute with the compressed content of the javascript file therin referenciated" do
25
26
  @js_c.compile
26
27
 
27
- Hpricot( open('dom-testdir-build/domains.html')).search('script').each do |element|
28
+ Hpricot( open('dom-testdir-build/index.html')).search('script').each do |element|
28
29
  element.innerHTML.should_not be_empty
29
30
  element.get_attribute('src').should be_nil
30
31
  end
31
32
  end
32
33
 
33
34
  it "Should fill each link tag having a href attribute with the compressed content of the css file therein referenced" do
34
- @css_c=CssDomCompiler.new
35
+ @css_c=CSSDOMCompiler.new
35
36
  @css_c.compile()
36
37
  end
37
38
 
@@ -1,21 +1,5 @@
1
- require 'singleton'
2
- require 'hpricot'
3
- require 'fileutils'
4
- require 'logger'
5
- require 'open-uri'
6
- require 'pp'
7
- require 'yui/compressor'
8
- require 'closure-compiler'
9
- require 'hpricot'
10
- require '../lib/sqweezeUtils'
11
- require '../lib/confManager'
12
- require '../lib/domCompiler'
13
- require '../lib/compilers/jsDomCompiler'
14
- require '../lib/compilers/cssDomCompiler'
15
-
16
-
17
- SQW_CONF_FILE='test_dir/.sqweeze.yml'
18
- SQW_FBODY=<<EOF
1
+ SQW_CONF_FILE='test_dir/.sqweeze.yml'
2
+ SQW_FBODY=<<EOF
19
3
  bin_paths:
20
4
  - pngcrush: /usr/bin/pngcrush
21
5
  - jpegtran: /usr/bin/jpegtran
data/sqweeze.gemspec CHANGED
@@ -2,18 +2,18 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{sqweeze}
5
- s.version = "0.0.6"
5
+ s.version = "0.0.7"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Andrea Fiore"]
9
- s.date = %q{2010-05-01}
9
+ s.date = %q{2010-08-20}
10
10
  s.default_executable = %q{sqweeze}
11
11
  s.description = %q{A command line web-asset optimisation tool}
12
12
  s.email = %q{and@inventati.org}
13
13
  s.executables = ["sqweeze"]
14
14
  s.extra_rdoc_files = ["README.rdoc", "bin/sqweeze", "lib/compilers/assetLinker.rb", "lib/compilers/cssDomCompiler.rb", "lib/compilers/jsDomCompiler.rb", "lib/compressor.rb", "lib/compressors/cssCompressor.rb", "lib/compressors/gifCompressor.rb", "lib/compressors/jpegCompressor.rb", "lib/compressors/jsCompressor.rb", "lib/compressors/pngCompressor.rb", "lib/confManager.rb", "lib/domCompiler.rb", "lib/sqweezeUtils.rb"]
15
- s.files = ["Manifest", "README.rdoc", "Rakefile", "bin/sqweeze", "lib/compilers/assetLinker.rb", "lib/compilers/cssDomCompiler.rb", "lib/compilers/jsDomCompiler.rb", "lib/compressor.rb", "lib/compressors/cssCompressor.rb", "lib/compressors/gifCompressor.rb", "lib/compressors/jpegCompressor.rb", "lib/compressors/jsCompressor.rb", "lib/compressors/pngCompressor.rb", "lib/confManager.rb", "lib/domCompiler.rb", "lib/sqweezeUtils.rb", "spec/confManager_spec.rb", "spec/domCompiler_spec.rb", "spec/sqw_spec_helper.rb", "sqweeze.gemspec"]
16
- s.homepage = %q{http://github.com/premasagar/sqweeze}
15
+ s.files = ["README.rdoc", "Rakefile", "bin/sqweeze", "lib/compilers/assetLinker.rb", "lib/compilers/cssDomCompiler.rb", "lib/compilers/jsDomCompiler.rb", "lib/compressor.rb", "lib/compressors/cssCompressor.rb", "lib/compressors/gifCompressor.rb", "lib/compressors/jpegCompressor.rb", "lib/compressors/jsCompressor.rb", "lib/compressors/pngCompressor.rb", "lib/confManager.rb", "lib/domCompiler.rb", "lib/sqweezeUtils.rb", "spec/confManager_spec.rb", "spec/domCompiler_spec.rb", "spec/sqw_spec_helper.rb", "Manifest", "sqweeze.gemspec"]
16
+ s.homepage = %q{http://github.com/afiore/sqwidget-builder}
17
17
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Sqweeze", "--main", "README.rdoc"]
18
18
  s.require_paths = ["lib"]
19
19
  s.rubyforge_project = %q{sqweeze}
metadata CHANGED
@@ -1,12 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqweeze
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 0
8
- - 6
9
- version: 0.0.6
4
+ version: 0.0.7
10
5
  platform: ruby
11
6
  authors:
12
7
  - Andrea Fiore
@@ -14,61 +9,45 @@ autorequire:
14
9
  bindir: bin
15
10
  cert_chain: []
16
11
 
17
- date: 2010-05-01 00:00:00 +01:00
12
+ date: 2010-08-20 00:00:00 +01:00
18
13
  default_executable: sqweeze
19
14
  dependencies:
20
15
  - !ruby/object:Gem::Dependency
21
16
  name: hpricot
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
24
20
  requirements:
25
21
  - - ">="
26
22
  - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
23
  version: "0"
30
24
  - - "="
31
25
  - !ruby/object:Gem::Version
32
- segments:
33
- - 0
34
- - 8
35
- - 2
36
26
  version: 0.8.2
37
- type: :runtime
38
- version_requirements: *id001
27
+ version:
39
28
  - !ruby/object:Gem::Dependency
40
29
  name: closure-compiler
41
- prerelease: false
42
- requirement: &id002 !ruby/object:Gem::Requirement
30
+ type: :runtime
31
+ version_requirement:
32
+ version_requirements: !ruby/object:Gem::Requirement
43
33
  requirements:
44
34
  - - ">="
45
35
  - !ruby/object:Gem::Version
46
- segments:
47
- - 0
48
- - 2
49
- - 2
50
36
  version: 0.2.2
51
- type: :runtime
52
- version_requirements: *id002
37
+ version:
53
38
  - !ruby/object:Gem::Dependency
54
39
  name: yui-compressor
55
- prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ type: :runtime
41
+ version_requirement:
42
+ version_requirements: !ruby/object:Gem::Requirement
57
43
  requirements:
58
44
  - - ">="
59
45
  - !ruby/object:Gem::Version
60
- segments:
61
- - 0
62
46
  version: "0"
63
47
  - - "="
64
48
  - !ruby/object:Gem::Version
65
- segments:
66
- - 0
67
- - 9
68
- - 1
69
49
  version: 0.9.1
70
- type: :runtime
71
- version_requirements: *id003
50
+ version:
72
51
  description: A command line web-asset optimisation tool
73
52
  email: and@inventati.org
74
53
  executables:
@@ -91,7 +70,6 @@ extra_rdoc_files:
91
70
  - lib/domCompiler.rb
92
71
  - lib/sqweezeUtils.rb
93
72
  files:
94
- - Manifest
95
73
  - README.rdoc
96
74
  - Rakefile
97
75
  - bin/sqweeze
@@ -110,9 +88,10 @@ files:
110
88
  - spec/confManager_spec.rb
111
89
  - spec/domCompiler_spec.rb
112
90
  - spec/sqw_spec_helper.rb
91
+ - Manifest
113
92
  - sqweeze.gemspec
114
93
  has_rdoc: true
115
- homepage: http://github.com/premasagar/sqweeze
94
+ homepage: http://github.com/afiore/sqwidget-builder
116
95
  licenses: []
117
96
 
118
97
  post_install_message:
@@ -129,21 +108,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
129
108
  requirements:
130
109
  - - ">="
131
110
  - !ruby/object:Gem::Version
132
- segments:
133
- - 0
134
111
  version: "0"
112
+ version:
135
113
  required_rubygems_version: !ruby/object:Gem::Requirement
136
114
  requirements:
137
115
  - - ">="
138
116
  - !ruby/object:Gem::Version
139
- segments:
140
- - 1
141
- - 2
142
117
  version: "1.2"
118
+ version:
143
119
  requirements: []
144
120
 
145
121
  rubyforge_project: sqweeze
146
- rubygems_version: 1.3.6
122
+ rubygems_version: 1.3.5
147
123
  signing_key:
148
124
  specification_version: 3
149
125
  summary: A command line web-asset optimisation tool