sinatra-assetpack 0.0.12.pre1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.9.3"
4
+ - "1.9.2"
5
+ - "1.8.7"
6
+ branches:
7
+ only:
8
+ - master
data/HISTORY.md CHANGED
@@ -1,3 +1,16 @@
1
+ v0.1.0 - Jan 14, 2013
2
+ ----------------------
3
+
4
+ ### Changed
5
+ * Using `file` utility instead `identify` utility. (#26)
6
+
7
+ ### Fixed
8
+ * Deal with different encodings in combined assets. (#47)
9
+ * Serve files with dots in name. (#32, #66)
10
+ * Deal with character encoding issues in ruby 1.8. (#51)
11
+ * Add missing depedency for development unit test. (#63)
12
+ * Deal with binary files copy (ex. images), fix errors like `"\x89" from ASCII-8BIT to UTF-8"`. (#38, #67)
13
+
1
14
  v0.0.11 - Feb 21, 2012
2
15
  ----------------------
3
16
 
data/README.md CHANGED
@@ -9,11 +9,13 @@ render Sass or whatever. No-siree!
9
9
  * JavaScript/CoffeeScript files in `/app/js`
10
10
  * CSS/Sass/Less/CSS files in `/app/css`
11
11
  * Images into `/app/images`
12
- 3. Add `register Sinatra::AssetPack` and set up options to your app (see below)
13
- 4. Use `<%= css :application %>` to your layouts. Use this instead of
14
- messy *script* and *link* tags
12
+ 3. Add `register Sinatra::AssetPack` and set up options to your app (see below).
13
+ 4. Use `<%= js :app %>` and `<%= css :application %>` to your layouts. Use these instead of
14
+ messy *script* and *link* tags.
15
15
  5. BOOM! You're in business baby!
16
16
 
17
+ [![Build Status](https://travis-ci.org/rstacruz/sinatra-assetpack.png)](https://travis-ci.org/rstacruz/sinatra-assetpack)
18
+
17
19
  Installation
18
20
  ------------
19
21
 
@@ -30,8 +30,8 @@ module Sinatra
30
30
  def dimensions
31
31
  return @dimensions unless @dimensions.nil?
32
32
 
33
- _, _, dim = `identify "#{@file}"`.split(' ')
34
- w, h = dim.split('x')
33
+ dim = /(\d+) x (\d+)/.match(`file "#{@file}"`)
34
+ w, h = dim[1,2]
35
35
 
36
36
  if w.to_i != 0 && h.to_i != 0
37
37
  @dimensions = [w.to_i, h.to_i]
@@ -170,7 +170,7 @@ module Sinatra
170
170
  @css_compression_options = options if options.is_a?(Hash)
171
171
  @css_compression
172
172
  end
173
-
173
+
174
174
  # =====================================================================
175
175
  # Stuff
176
176
 
@@ -237,14 +237,19 @@ module Sinatra
237
237
  # Returns the local file for a given URI path. (for dynamic files)
238
238
  # Returns nil if a file is not found.
239
239
  # TODO: consolidate with local_file_for
240
- def dyn_local_file_for(file, from)
240
+ def dyn_local_file_for(requested_file, from)
241
241
  # Remove extension
242
- file = $1 if file =~ /^(.*)(\.[^\.]+)$/
242
+ file = requested_file
243
+ extension = ''
244
+
245
+ file.sub(/^(.*)(\.[^\.]+)$/) { file, extension = $1, $2 }
243
246
 
244
247
  # Remove cache-buster (/js/app.28389.js => /js/app)
245
248
  file = $1 if file =~ /^(.*)\.[0-9]+$/
246
249
 
247
- Dir[File.join(app.root, from, "#{file}.*")].first
250
+ matches = Dir[File.join(app.root, from, "#{file}.*")]
251
+ # Fix for filenames with dots (can't do this with glob)
252
+ matches.select { |f| f =~ /#{file}\.[^.]+$/ }.first
248
253
  end
249
254
 
250
255
  # Writes `public/#{path}` based on contents of `output`.
@@ -255,7 +260,7 @@ module Sinatra
255
260
  yield path if block_given?
256
261
 
257
262
  FileUtils.mkdir_p File.dirname(path)
258
- File.open(path, 'w') { |f| f.write output }
263
+ File.open(path, 'wb') { |f| f.write output }
259
264
 
260
265
  if mtime
261
266
  File.utime mtime, mtime, path
@@ -96,9 +96,12 @@ module Sinatra
96
96
  session = Rack::Test::Session.new(@assets.app)
97
97
  paths.map { |path|
98
98
  result = session.get(path)
99
- response_encoding = result.content_type.split(/;\s*charset\s*=\s*/).last.upcase rescue 'ASCII-8BIT'
100
- # p [:combined, path, result.body.encoding.name, response_encoding]
101
- result.body.force_encoding(response_encoding).encode(Encoding.default_external || 'ASCII-8BIT') if result.status == 200
99
+ if result.body.respond_to?(:force_encoding)
100
+ response_encoding = result.content_type.split(/;\s*charset\s*=\s*/).last.upcase rescue 'ASCII-8BIT'
101
+ result.body.force_encoding(response_encoding).encode(Encoding.default_external || 'ASCII-8BIT') if result.status == 200
102
+ else
103
+ result.body if result.status == 200
104
+ end
102
105
  }.join("\n")
103
106
  end
104
107
 
@@ -1,7 +1,7 @@
1
1
  module Sinatra
2
2
  module AssetPack
3
3
  def self.version
4
- "0.0.12.pre1"
4
+ "0.1.0"
5
5
  end
6
6
  end
7
7
  end
@@ -23,4 +23,5 @@ Gem::Specification.new do |s|
23
23
  s.add_development_dependency "mocha"
24
24
  s.add_development_dependency "stylus"
25
25
  s.add_development_dependency "uglifier"
26
+ s.add_development_dependency "rake"
26
27
  end
@@ -0,0 +1 @@
1
+ $(function() { alert("Hello.2"); });
@@ -5,7 +5,7 @@ class AppTest < UnitTest
5
5
  get '/js/hello.js'
6
6
  assert body == '$(function() { alert("Hello"); });'
7
7
  end
8
-
8
+
9
9
  test '/js/hi.js (coffeescript)' do
10
10
  get '/js/hi.js'
11
11
  assert body.include? 'yo'
@@ -17,11 +17,16 @@ class AppTest < UnitTest
17
17
  assert last_response.status == 404
18
18
  end
19
19
 
20
- test '/js/hi.2834987.js (with cache buster)' do
20
+ test '/js/hello.2834987.js (with cache buster)' do
21
21
  get '/js/hello.283947.js'
22
22
  assert body == '$(function() { alert("Hello"); });'
23
23
  end
24
24
 
25
+ test '/js/hello.2.2834987.js (with cache buster)' do
26
+ get '/js/hello.2.283947.js'
27
+ assert body == '$(function() { alert("Hello.2"); });'
28
+ end
29
+
25
30
  test '/js/hi.2834987.js (coffeescript with cache buster)' do
26
31
  get '/js/hi.283947.js'
27
32
  assert last_response.status == 200
@@ -33,12 +38,12 @@ class AppTest < UnitTest
33
38
  get '/js/hello.css'
34
39
  assert last_response.status == 404
35
40
  end
36
-
41
+
37
42
  test 'matches only from the site root' do
38
43
  get '/not-the-root/js/hello.js'
39
44
  assert last_response.status == 404
40
45
  end
41
-
46
+
42
47
  test 'wrong extension for dynamic coffeescript file' do
43
48
  get '/js/hi.css'
44
49
  assert last_response.status == 404
metadata CHANGED
@@ -1,148 +1,224 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-assetpack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12.pre1
5
- prerelease: 7
4
+ version: 0.1.0
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Rico Sta. Cruz
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-19 00:00:00.000000000 Z
12
+ date: 2013-01-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: tilt
16
- requirement: &2152235760 !ruby/object:Gem::Requirement
17
- none: false
16
+ prerelease: false
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
21
  version: 1.3.0
22
+ none: false
22
23
  type: :runtime
23
- prerelease: false
24
- version_requirements: *2152235760
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ! '>='
27
+ - !ruby/object:Gem::Version
28
+ version: 1.3.0
29
+ none: false
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: sinatra
27
- requirement: &2152235300 !ruby/object:Gem::Requirement
28
- none: false
32
+ prerelease: false
33
+ requirement: !ruby/object:Gem::Requirement
29
34
  requirements:
30
35
  - - ! '>='
31
36
  - !ruby/object:Gem::Version
32
37
  version: '0'
38
+ none: false
33
39
  type: :runtime
34
- prerelease: false
35
- version_requirements: *2152235300
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ none: false
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: jsmin
38
- requirement: &2152234800 !ruby/object:Gem::Requirement
39
- none: false
48
+ prerelease: false
49
+ requirement: !ruby/object:Gem::Requirement
40
50
  requirements:
41
51
  - - ! '>='
42
52
  - !ruby/object:Gem::Version
43
53
  version: '0'
54
+ none: false
44
55
  type: :runtime
45
- prerelease: false
46
- version_requirements: *2152234800
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ! '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ none: false
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: rack-test
49
- requirement: &2152234320 !ruby/object:Gem::Requirement
50
- none: false
64
+ prerelease: false
65
+ requirement: !ruby/object:Gem::Requirement
51
66
  requirements:
52
67
  - - ! '>='
53
68
  - !ruby/object:Gem::Version
54
69
  version: '0'
70
+ none: false
55
71
  type: :runtime
56
- prerelease: false
57
- version_requirements: *2152234320
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ none: false
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: yui-compressor
60
- requirement: &2152233840 !ruby/object:Gem::Requirement
61
- none: false
80
+ prerelease: false
81
+ requirement: !ruby/object:Gem::Requirement
62
82
  requirements:
63
83
  - - ! '>='
64
84
  - !ruby/object:Gem::Version
65
85
  version: '0'
86
+ none: false
66
87
  type: :development
67
- prerelease: false
68
- version_requirements: *2152233840
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ! '>='
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ none: false
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: sass
71
- requirement: &2152233320 !ruby/object:Gem::Requirement
72
- none: false
96
+ prerelease: false
97
+ requirement: !ruby/object:Gem::Requirement
73
98
  requirements:
74
99
  - - ! '>='
75
100
  - !ruby/object:Gem::Version
76
101
  version: '0'
102
+ none: false
77
103
  type: :development
78
- prerelease: false
79
- version_requirements: *2152233320
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ! '>='
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ none: false
80
110
  - !ruby/object:Gem::Dependency
81
111
  name: haml
82
- requirement: &2152232700 !ruby/object:Gem::Requirement
83
- none: false
112
+ prerelease: false
113
+ requirement: !ruby/object:Gem::Requirement
84
114
  requirements:
85
115
  - - ! '>='
86
116
  - !ruby/object:Gem::Version
87
117
  version: '0'
118
+ none: false
88
119
  type: :development
89
- prerelease: false
90
- version_requirements: *2152232700
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ none: false
91
126
  - !ruby/object:Gem::Dependency
92
127
  name: coffee-script
93
- requirement: &2152231900 !ruby/object:Gem::Requirement
94
- none: false
128
+ prerelease: false
129
+ requirement: !ruby/object:Gem::Requirement
95
130
  requirements:
96
131
  - - ! '>='
97
132
  - !ruby/object:Gem::Version
98
133
  version: '0'
134
+ none: false
99
135
  type: :development
100
- prerelease: false
101
- version_requirements: *2152231900
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ! '>='
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ none: false
102
142
  - !ruby/object:Gem::Dependency
103
143
  name: contest
104
- requirement: &2152246000 !ruby/object:Gem::Requirement
105
- none: false
144
+ prerelease: false
145
+ requirement: !ruby/object:Gem::Requirement
106
146
  requirements:
107
147
  - - ! '>='
108
148
  - !ruby/object:Gem::Version
109
149
  version: '0'
150
+ none: false
110
151
  type: :development
111
- prerelease: false
112
- version_requirements: *2152246000
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ! '>='
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ none: false
113
158
  - !ruby/object:Gem::Dependency
114
159
  name: mocha
115
- requirement: &2152245260 !ruby/object:Gem::Requirement
116
- none: false
160
+ prerelease: false
161
+ requirement: !ruby/object:Gem::Requirement
117
162
  requirements:
118
163
  - - ! '>='
119
164
  - !ruby/object:Gem::Version
120
165
  version: '0'
166
+ none: false
121
167
  type: :development
122
- prerelease: false
123
- version_requirements: *2152245260
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ! '>='
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ none: false
124
174
  - !ruby/object:Gem::Dependency
125
175
  name: stylus
126
- requirement: &2152244580 !ruby/object:Gem::Requirement
127
- none: false
176
+ prerelease: false
177
+ requirement: !ruby/object:Gem::Requirement
128
178
  requirements:
129
179
  - - ! '>='
130
180
  - !ruby/object:Gem::Version
131
181
  version: '0'
182
+ none: false
132
183
  type: :development
133
- prerelease: false
134
- version_requirements: *2152244580
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - ! '>='
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ none: false
135
190
  - !ruby/object:Gem::Dependency
136
191
  name: uglifier
137
- requirement: &2152243720 !ruby/object:Gem::Requirement
138
- none: false
192
+ prerelease: false
193
+ requirement: !ruby/object:Gem::Requirement
139
194
  requirements:
140
195
  - - ! '>='
141
196
  - !ruby/object:Gem::Version
142
197
  version: '0'
198
+ none: false
143
199
  type: :development
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - ! '>='
203
+ - !ruby/object:Gem::Version
204
+ version: '0'
205
+ none: false
206
+ - !ruby/object:Gem::Dependency
207
+ name: rake
144
208
  prerelease: false
145
- version_requirements: *2152243720
209
+ requirement: !ruby/object:Gem::Requirement
210
+ requirements:
211
+ - - ! '>='
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ none: false
215
+ type: :development
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ requirements:
218
+ - - ! '>='
219
+ - !ruby/object:Gem::Version
220
+ version: '0'
221
+ none: false
146
222
  description: Package your assets for Sinatra.
147
223
  email:
148
224
  - rico@sinefunc.com
@@ -151,6 +227,7 @@ extensions: []
151
227
  extra_rdoc_files: []
152
228
  files:
153
229
  - .gitignore
230
+ - .travis.yml
154
231
  - Gemfile
155
232
  - HISTORY.md
156
233
  - README.md
@@ -219,6 +296,7 @@ files:
219
296
  - test/app/app/images/background.jpg
220
297
  - test/app/app/images/email.png
221
298
  - test/app/app/js/_ignoreme.js
299
+ - test/app/app/js/hello.2.js
222
300
  - test/app/app/js/hello.js
223
301
  - test/app/app/js/helloe.js
224
302
  - test/app/app/js/hi.coffee
@@ -260,21 +338,22 @@ rdoc_options: []
260
338
  require_paths:
261
339
  - lib
262
340
  required_ruby_version: !ruby/object:Gem::Requirement
263
- none: false
264
341
  requirements:
265
342
  - - ! '>='
266
343
  - !ruby/object:Gem::Version
267
344
  version: '0'
268
- required_rubygems_version: !ruby/object:Gem::Requirement
269
345
  none: false
346
+ required_rubygems_version: !ruby/object:Gem::Requirement
270
347
  requirements:
271
- - - ! '>'
348
+ - - ! '>='
272
349
  - !ruby/object:Gem::Version
273
- version: 1.3.1
350
+ version: '0'
351
+ none: false
274
352
  requirements: []
275
353
  rubyforge_project:
276
- rubygems_version: 1.8.17
354
+ rubygems_version: 1.8.24
277
355
  signing_key:
278
356
  specification_version: 3
279
357
  summary: Asset packager for Sinatra.
280
358
  test_files: []
359
+ has_rdoc: