bagger 0.1.2 → 0.2.0

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.
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: