juicer 1.0.0 → 1.0.1

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.
@@ -1,3 +1,8 @@
1
+ == 1.0.1 / 2010-03-03
2
+ * Don't crash when trying to cache bust non-existent files, simply
3
+ skip them
4
+ * Don't attempt to cache bust data urls
5
+
1
6
  == 1.0.0 / 2010-02-24
2
7
  * Make sure @import rules with url is removed when files are merged
3
8
  * Dependency resolver supports depending on directories
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.0.1
@@ -3,7 +3,7 @@ require "logger"
3
3
  module Juicer
4
4
 
5
5
  # :stopdoc:
6
- VERSION = '1.0.0'
6
+ VERSION = '1.0.1'
7
7
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
8
8
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
9
9
  LOGGER = Logger.new(STDOUT)
@@ -79,6 +79,7 @@ module Juicer
79
79
  # argument.
80
80
  #
81
81
  def self.path(file, type = :soft, parameter = DEFAULT_PARAMETER)
82
+ return file if file =~ /data:.*;base64/
82
83
  file = self.clean(file, parameter)
83
84
  filename = file.split("?").first
84
85
  raise ArgumentError.new("#{file} could not be found") unless File.exists?(filename)
@@ -42,15 +42,15 @@ module Juicer
42
42
 
43
43
  urls(file).each do |asset|
44
44
  begin
45
- next if used.include?(asset.path)
45
+ next if used.include?(asset.path)
46
46
  @contents.gsub!(asset.path, asset.path(:cache_buster_type => @type))
47
47
  rescue Errno::ENOENT
48
48
  puts "Unable to locate file #{asset.path}, skipping cache buster"
49
49
  rescue ArgumentError => e
50
50
  if e.message =~ /No document root/
51
- raise FileNotFoundError.new("Unable to resolve path #{asset.path} without :document_root option")
51
+ puts "Unable to resolve path #{asset.path} without :document_root option"
52
52
  else
53
- raise e
53
+ puts "Unable to locate #{asset.path}, skipping cache buster"
54
54
  end
55
55
  end
56
56
  end
@@ -11,61 +11,83 @@ class TestCssCacheBuster < Test::Unit::TestCase
11
11
  Juicer::Test::FileSetup.new.create
12
12
  end
13
13
 
14
- def test_find_urls
15
- urls = @buster.urls(path("css/test.css"))
16
- assert_equal 3, urls.length
17
- assert_equal "../a1.css../images/1.png2.gif", urls.collect { |a| a.path }.sort.join.gsub(path("/"), "")
14
+ context "finding urls" do
15
+ should "find all urls" do
16
+ urls = @buster.urls(path("css/test.css"))
17
+ assert_equal 3, urls.length
18
+ assert_equal "../a1.css../images/1.png2.gif", urls.collect { |a| a.path }.sort.join.gsub(path("/"), "")
19
+ end
18
20
  end
19
21
 
20
- def test_image_references_should_be_updated
21
- file = path("css/test.css")
22
- buster = Juicer::CssCacheBuster.new
23
- buster.save file
22
+ context "image references" do
23
+ should "update image urls" do
24
+ file = path("css/test.css")
25
+ buster = Juicer::CssCacheBuster.new
26
+ buster.save file
24
27
 
25
- File.read(file).scan(/url\(([^\)]*)\)/m).each do |path|
26
- assert_match(/[^\?]*\?jcb=\d+/, path.first)
28
+ File.read(file).scan(/url\(([^\)]*)\)/m).each do |path|
29
+ assert_match(/[^\?]*\?jcb=\d+/, path.first)
30
+ end
27
31
  end
28
32
  end
29
33
 
30
- def test_absolute_path_without_document_root_should_fail
31
- file = path("css/test2.css")
32
- buster = Juicer::CssCacheBuster.new
34
+ context "absolute paths" do
35
+ # should "fail without document root" do
36
+ # file = path("css/test2.css")
37
+ # buster = Juicer::CssCacheBuster.new
33
38
 
34
- assert_raise FileNotFoundError do
35
- buster.save file
36
- end
37
- end
39
+ # assert_raise FileNotFoundError do
40
+ # buster.save file
41
+ # end
42
+ # end
38
43
 
39
- def test_absolute_path_should_be_resolved_when_document_root_known
40
- file = path("css/test.css")
41
- buster = Juicer::CssCacheBuster.new :document_root => path("")
44
+ should "resolve with document root" do
45
+ file = path("css/test.css")
46
+ buster = Juicer::CssCacheBuster.new :document_root => path("")
42
47
 
43
- assert_nothing_raised do
44
- buster.save file
48
+ assert_nothing_raised do
49
+ buster.save file
50
+ end
51
+
52
+ File.read(file).scan(/url\(([^\)]*)\)/m).each do |path|
53
+ assert_match(/[^\?]*\?jcb=\d+/, path.first)
54
+ end
45
55
  end
56
+ end
57
+
58
+ context "cache busters" do
59
+ should "add mtime to urls" do
60
+ File.open(path("a2.css"), "w") { |f| f.puts "" }
61
+ file = path("path_test2.css")
62
+ output = path("path_test3.css")
63
+ buster = Juicer::CssCacheBuster.new :document_root => path("")
64
+ buster.save file, output
46
65
 
47
- File.read(file).scan(/url\(([^\)]*)\)/m).each do |path|
48
- assert_match(/[^\?]*\?jcb=\d+/, path.first)
66
+ buster.urls(output).each { |url| assert url !~ /(jcb=\d+).*(jcb=\d+)/, url }
49
67
  end
50
68
  end
51
69
 
52
- def test_urls_should_only_have_mtime_appended_once
53
- File.open(path("a2.css"), "w") { |f| f.puts "" }
54
- file = path("path_test2.css")
55
- output = path("path_test3.css")
56
- buster = Juicer::CssCacheBuster.new :document_root => path("")
57
- buster.save file, output
70
+ context "hard cache busters" do
71
+ should "should alter file name" do
72
+ File.open(path("a2.css"), "w") { |f| f.puts "" }
73
+ file = path("path_test2.css")
74
+ output = path("path_test3.css")
75
+ buster = Juicer::CssCacheBuster.new :document_root => path(""), :type => :hard
76
+ buster.save file, output
58
77
 
59
- buster.urls(output).each { |url| assert url !~ /(jcb=\d+).*(jcb=\d+)/, url }
78
+ buster.urls(output).each { |asset| assert_match /-jcb\d+\.[a-z]{3}$/, asset.path }
79
+ end
60
80
  end
61
81
 
62
- def test_type_hard_should_produce_hard_buster_urls
63
- File.open(path("a2.css"), "w") { |f| f.puts "" }
64
- file = path("path_test2.css")
65
- output = path("path_test3.css")
66
- buster = Juicer::CssCacheBuster.new :document_root => path(""), :type => :hard
67
- buster.save file, output
82
+ context "non-existent urls" do
83
+ should "not raise" do
84
+ File.open(path("a2.css"), "w") { |f| f.puts "a { background: url(i/dont/exist.fck); }" }
85
+ file = path("a2.css")
86
+ buster = Juicer::CssCacheBuster.new :document_root => path("")
68
87
 
69
- buster.urls(output).each { |asset| assert_match /-jcb\d+\.[a-z]{3}$/, asset.path }
88
+ assert_nothing_raised do
89
+ buster.save file
90
+ end
91
+ end
70
92
  end
71
93
  end
metadata CHANGED
@@ -1,12 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: juicer
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 1
7
- - 0
8
- - 0
9
- version: 1.0.0
4
+ version: 1.0.1
10
5
  platform: ruby
11
6
  authors:
12
7
  - Christian Johansen
@@ -14,115 +9,79 @@ autorequire:
14
9
  bindir: bin
15
10
  cert_chain: []
16
11
 
17
- date: 2010-02-26 00:00:00 +01:00
12
+ date: 2010-03-03 00:00:00 +01:00
18
13
  default_executable: juicer
19
14
  dependencies:
20
15
  - !ruby/object:Gem::Dependency
21
16
  name: shoulda
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
24
20
  requirements:
25
21
  - - ">="
26
22
  - !ruby/object:Gem::Version
27
- segments:
28
- - 2
29
- - 10
30
- - 2
31
23
  version: 2.10.2
32
- type: :development
33
- version_requirements: *id001
24
+ version:
34
25
  - !ruby/object:Gem::Dependency
35
26
  name: mocha
36
- prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
38
30
  requirements:
39
31
  - - ">="
40
32
  - !ruby/object:Gem::Version
41
- segments:
42
- - 0
43
- - 9
44
- - 8
45
33
  version: 0.9.8
46
- type: :development
47
- version_requirements: *id002
34
+ version:
48
35
  - !ruby/object:Gem::Dependency
49
36
  name: fakefs
50
- prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
52
40
  requirements:
53
41
  - - ">="
54
42
  - !ruby/object:Gem::Version
55
- segments:
56
- - 0
57
- - 2
58
- - 1
59
43
  version: 0.2.1
60
- type: :development
61
- version_requirements: *id003
44
+ version:
62
45
  - !ruby/object:Gem::Dependency
63
46
  name: jeweler
64
- prerelease: false
65
- requirement: &id004 !ruby/object:Gem::Requirement
66
- requirements:
67
- - - ">="
68
- - !ruby/object:Gem::Version
69
- segments:
70
- - 0
71
- - 2
72
- - 1
73
- version: 0.2.1
74
47
  type: :development
75
- version_requirements: *id004
76
- - !ruby/object:Gem::Dependency
77
- name: redgreen
78
- prerelease: false
79
- requirement: &id005 !ruby/object:Gem::Requirement
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
80
50
  requirements:
81
51
  - - ">="
82
52
  - !ruby/object:Gem::Version
83
- segments:
84
- - 1
85
- - 2
86
- - 2
87
- version: 1.2.2
88
- type: :development
89
- version_requirements: *id005
53
+ version: 0.2.1
54
+ version:
90
55
  - !ruby/object:Gem::Dependency
91
56
  name: cmdparse
92
- prerelease: false
93
- requirement: &id006 !ruby/object:Gem::Requirement
57
+ type: :runtime
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
94
60
  requirements:
95
61
  - - ">="
96
62
  - !ruby/object:Gem::Version
97
- segments:
98
- - 0
99
63
  version: "0"
100
- type: :runtime
101
- version_requirements: *id006
64
+ version:
102
65
  - !ruby/object:Gem::Dependency
103
66
  name: nokogiri
104
- prerelease: false
105
- requirement: &id007 !ruby/object:Gem::Requirement
67
+ type: :runtime
68
+ version_requirement:
69
+ version_requirements: !ruby/object:Gem::Requirement
106
70
  requirements:
107
71
  - - ">="
108
72
  - !ruby/object:Gem::Version
109
- segments:
110
- - 0
111
73
  version: "0"
112
- type: :runtime
113
- version_requirements: *id007
74
+ version:
114
75
  - !ruby/object:Gem::Dependency
115
76
  name: rubyzip
116
- prerelease: false
117
- requirement: &id008 !ruby/object:Gem::Requirement
77
+ type: :runtime
78
+ version_requirement:
79
+ version_requirements: !ruby/object:Gem::Requirement
118
80
  requirements:
119
81
  - - ">="
120
82
  - !ruby/object:Gem::Version
121
- segments:
122
- - 0
123
83
  version: "0"
124
- type: :runtime
125
- version_requirements: *id008
84
+ version:
126
85
  description: Resolve dependencies, merge and minify CSS and JavaScript files with Juicer - the command line tool for frontend engineers
127
86
  email: christian@cjohansen.no
128
87
  executables:
@@ -251,20 +210,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
251
210
  requirements:
252
211
  - - ">="
253
212
  - !ruby/object:Gem::Version
254
- segments:
255
- - 0
256
213
  version: "0"
214
+ version:
257
215
  required_rubygems_version: !ruby/object:Gem::Requirement
258
216
  requirements:
259
217
  - - ">="
260
218
  - !ruby/object:Gem::Version
261
- segments:
262
- - 0
263
219
  version: "0"
220
+ version:
264
221
  requirements: []
265
222
 
266
223
  rubyforge_project: juicer
267
- rubygems_version: 1.3.6
224
+ rubygems_version: 1.3.5
268
225
  signing_key:
269
226
  specification_version: 3
270
227
  summary: Command line tool for CSS and JavaScript developers