bagger 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -44,6 +44,13 @@ cache.manifest
44
44
  # the behavior of the stylesheets and javascripts might change
45
45
  stylesheets = ["css/style.css", "css/reset.css"]
46
46
  javascripts = ["js/app.js", "js/utils.js"]
47
+
48
+ # define cache manifest bundles for different devices
49
+ # for convencien, the manfiest defined with `cache_manifest_path`
50
+ # will always contain all resources
51
+ ipad_resources = ["images/troll-big.png"]
52
+ iphone_retina_resources = ["images/troll-retina.png"]
53
+ desktop_browser_resources = ["images/troll.png"]
47
54
 
48
55
  # make sure the target directory exists
49
56
  FileUtils.mkdir_p target_dir
@@ -67,7 +74,21 @@ cache.manifest
67
74
  :files => javascripts
68
75
  }
69
76
  ]
70
- }
77
+ },
78
+ :cache_manifests => [
79
+ {
80
+ :target_path => 'cache/ipad-cache.manifest',
81
+ :files => ipad_resources
82
+ },
83
+ {
84
+ :target_path => 'cache/retina-cache.manifest',
85
+ :files => iphone_retina_resources
86
+ },
87
+ {
88
+ :target_path => 'cache/desktop.manifest',
89
+ :files => desktop_browser_resources
90
+ }
91
+ ]
71
92
  }
72
93
 
73
94
  # run it
data/ROADMAP.md CHANGED
@@ -27,6 +27,11 @@
27
27
 
28
28
  ## v 0.2.0
29
29
 
30
+ * Support for multiple cache manifests (useful if you have different
31
+ resources for different devices)
32
+
33
+ ## v 1.0.0
34
+
30
35
  * generate custom manifest files e.g with support for file size.
31
36
  This can be useful for preloaders
32
37
 
@@ -36,3 +41,8 @@
36
41
  :size => '391'
37
42
  }
38
43
  }
44
+ * Support for lesscss as a preprocessor
45
+ * Support for sass as a preprocessor
46
+ * Support for gzipping files
47
+
48
+
@@ -52,7 +52,7 @@ module Bagger
52
52
  version_files
53
53
  combine_css
54
54
  combine_js
55
- generate_cache_manifest
55
+ generate_cache_manifests
56
56
  write_manifest
57
57
  end
58
58
 
@@ -130,23 +130,38 @@ module Bagger
130
130
  File.open(File.join(@target_dir, javascript_path), 'w'){|f| f.write compressed}
131
131
  end
132
132
 
133
+ def generate_cache_manifests
134
+ cache_manifests = @options[:cache_manifests] || []
135
+ if @cache_manifest_path
136
+ cache_manifests << {
137
+ :target_path => @cache_manifest_path,
138
+ :files => @manifest.keys
139
+ }
140
+ end
141
+ cache_manifests.each do |cache_manifest|
142
+ generate_cache_manifest(cache_manifest)
143
+ end
144
+ end
145
+
133
146
  # IMPORTANT:html 5 cache manifest should not be cached
134
147
  # because that would treat it as a new manifest with
135
148
  # new resources discarding the ones already downloaded
136
149
  # http://diveintohtml5.org/offline.html
137
- def generate_cache_manifest
138
- path = File.join(@target_dir, @cache_manifest_path)
150
+ def generate_cache_manifest(cache_manifest)
151
+ path = File.join(@target_dir, cache_manifest[:target_path])
139
152
  FileUtils.mkdir_p(File.dirname(path))
140
153
  File.open(path, 'w') do |f|
141
154
  f.puts 'CACHE MANIFEST'
142
155
  f.puts ''
143
156
  f.puts '# Explicitely cached entries'
144
- f.puts @manifest.values.join("\n")
157
+ cache_manifest[:files].each do |relative_path|
158
+ f.puts @manifest[File.join('/', relative_path)]
159
+ end
145
160
  f.puts ''
146
161
  f.puts 'NETWORK:'
147
162
  f.puts '*'
148
163
  end
149
- add_to_manifest(File.join("/", @cache_manifest_path), @cache_manifest_path)
164
+ add_to_manifest(File.join("/", cache_manifest[:target_path]), cache_manifest[:target_path])
150
165
  end
151
166
 
152
167
  protected
@@ -1,3 +1,3 @@
1
1
  module Bagger
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
data/test/bagger_test.rb CHANGED
@@ -105,6 +105,46 @@ class BaggerTest < Test::Unit::TestCase
105
105
  expected_path = File.join(@target_dir, manifest_path)
106
106
  assert File.exists?(expected_path), 'custom cache manifest path not found'
107
107
  end
108
+
109
+ context 'packages' do
110
+ setup do
111
+ @images_dir = File.join(@source_dir, 'images')
112
+ FileUtils.mkdir_p(@images_dir)
113
+ FileUtils.touch(File.join(@images_dir, 'retina.png'))
114
+ FileUtils.touch(File.join(@images_dir, 'ipad.png'))
115
+
116
+ @manifest_options = {
117
+ :cache_manifests => [
118
+ {
119
+ :target_path => 'cache/retina-cache.manifest',
120
+ :files => ['images/retina.png']
121
+ },
122
+ {
123
+ :target_path => 'cache/ipad-cache.manifest',
124
+ :files => ['images/ipad.png']
125
+ }
126
+ ]
127
+ }
128
+ end
129
+
130
+ should 'add the cache files' do
131
+ Bagger.bagit!(default_options.merge(@manifest_options))
132
+ assert File.exists?(File.join(@target_dir, 'cache/retina-cache.manifest'))
133
+ assert File.exists?(File.join(@target_dir, 'cache/ipad-cache.manifest'))
134
+ end
135
+
136
+ should 'add the files listed to the respective manifest' do
137
+ Bagger.bagit!(default_options.merge(@manifest_options))
138
+ cache_file_content = File.open(File.join(@target_dir, 'cache/retina-cache.manifest')){|f| f.read}
139
+ assert cache_file_content.include?(manifest['/images/retina.png'])
140
+ end
141
+
142
+ should 'only add the files listed' do
143
+ Bagger.bagit!(default_options.merge(@manifest_options))
144
+ cache_file_content = File.open(File.join(@target_dir, 'cache/retina-cache.manifest')){|f| f.read}
145
+ assert !cache_file_content.include?(manifest['/images/ipad.png'])
146
+ end
147
+ end
108
148
  end
109
149
 
110
150
  context 'css files' do
@@ -178,8 +218,8 @@ class BaggerTest < Test::Unit::TestCase
178
218
  }
179
219
 
180
220
  #multipleUrls {
181
- background-image: url("../images/relative.png"),
182
- url("/images/multiple.png");
221
+ background-image: url(../images/relative.png) no-repeat 0% 20%,
222
+ url(/images/multiple.png) no-repeat -20px 0;
183
223
  }
184
224
 
185
225
  #absoluteUrl {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bagger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
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-09-13 00:00:00.000000000 Z
12
+ date: 2011-09-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
16
- requirement: &70168919709800 !ruby/object:Gem::Requirement
16
+ requirement: &70313945800580 !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: *70168919709800
24
+ version_requirements: *70313945800580
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: addressable
27
- requirement: &70168919709360 !ruby/object:Gem::Requirement
27
+ requirement: &70313945800160 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70168919709360
35
+ version_requirements: *70313945800160
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: uglifier
38
- requirement: &70168919708920 !ruby/object:Gem::Requirement
38
+ requirement: &70313945799720 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70168919708920
46
+ version_requirements: *70313945799720
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rainpress
49
- requirement: &70168919708460 !ruby/object:Gem::Requirement
49
+ requirement: &70313945799280 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70168919708460
57
+ version_requirements: *70313945799280
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rake
60
- requirement: &70168919707920 !ruby/object:Gem::Requirement
60
+ requirement: &70313945798860 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70168919707920
68
+ version_requirements: *70313945798860
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: shoulda-context
71
- requirement: &70168919707480 !ruby/object:Gem::Requirement
71
+ requirement: &70313945798440 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70168919707480
79
+ version_requirements: *70313945798440
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: mocha
82
- requirement: &70168919707000 !ruby/object:Gem::Requirement
82
+ requirement: &70313945798020 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70168919707000
90
+ version_requirements: *70313945798020
91
91
  description: ! 'A framework agnostic packaging solution for your assets: version files,
92
92
  combine them, minify them and create a manifest'
93
93
  email: