padrino-assets 0.2.2 → 0.3.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.
@@ -1,5 +1,6 @@
1
- module Padrino
2
- module Assets
3
- VERSION = '0.2.2'
4
- end
1
+ # encoding: utf-8
2
+ module Padrino
3
+ module Assets
4
+ VERSION = '0.3.0'
5
+ end
5
6
  end
@@ -1,8 +1,9 @@
1
- namespace :assets do
2
- desc 'Removes backups for existing assets'
3
- task :cleanup, :quanity do |task, args|
4
- quanity = args['quanity'] || 2
5
- manifest = Padrino::Assets.manifest
6
- manifest.cleanup(quanity)
7
- end
1
+ # encoding: utf-8
2
+ namespace :assets do
3
+ desc 'Removes backups for existing assets'
4
+ task :cleanup, :quanity do |task, args|
5
+ quanity = args['quanity'] || 2
6
+ manifest = Padrino::Assets.manifest
7
+ manifest.cleanup(quanity)
8
+ end
8
9
  end
@@ -1,7 +1,8 @@
1
- namespace :assets do
2
- desc 'Deletes all compiled assets'
3
- task :clobber do
4
- manifest = Padrino::Assets.manifest
5
- manifest.clobber
6
- end
1
+ # encoding: utf-8
2
+ namespace :assets do
3
+ desc 'Deletes all compiled assets'
4
+ task :clobber do
5
+ manifest = Padrino::Assets.manifest
6
+ manifest.clobber
7
+ end
7
8
  end
@@ -1,14 +1,15 @@
1
- namespace :assets do
2
- desc 'Compresses all compiled assets'
3
- task :compress do
4
- environment = Padrino::Assets.environment
5
- manifest = Padrino::Assets.manifest
6
-
7
- manifest.assets.each do |asset, digested_asset|
8
- if asset = environment[asset]
9
- compressed_asset = File.join(manifest.dir, digested_asset)
10
- asset.write_to(compressed_asset + '.gz') if compressed_asset =~ /\.(?:css|html|js|svg|txt|xml)$/
11
- end
12
- end
13
- end
1
+ # encoding: utf-8
2
+ namespace :assets do
3
+ desc 'Compresses all compiled assets'
4
+ task :compress do
5
+ environment = Padrino::Assets.environment
6
+ manifest = Padrino::Assets.manifest
7
+
8
+ manifest.assets.each do |asset, digested_asset|
9
+ if asset = environment[asset]
10
+ compressed_asset = File.join(manifest.dir, digested_asset)
11
+ asset.write_to(compressed_asset + '.gz') if compressed_asset =~ /\.(?:css|html|js|svg|txt|xml)$/
12
+ end
13
+ end
14
+ end
14
15
  end
@@ -1,30 +1,33 @@
1
- namespace :assets do
2
- desc 'Compiles all assets'
3
- task :precompile do
4
- environment = Padrino::Assets.environment
5
- manifest = Padrino::Assets.manifest
6
- apps = Padrino.mounted_apps
7
- apps.each do |app|
8
- app = app.app_obj
9
-
10
- app.precompile_assets.each do |path|
11
- environment.each_logical_path.each do |logical_path|
12
- case path
13
- when Regexp
14
- next unless path.match(logical_path)
15
- when Proc
16
- next unless path.call(logical_path)
17
- else
18
- next unless File.fnmatch(path.to_s, logical_path)
19
- end
20
-
21
- manifest.compile(logical_path)
22
- end
23
- end
24
-
25
- if app.compress_assets?
26
- Rake::Task['assets:compress'].invoke
27
- end
28
- end
29
- end
1
+ # encoding: utf-8
2
+ namespace :assets do
3
+ desc 'Compiles all assets'
4
+ task :precompile do
5
+ environment = Padrino::Assets.environment
6
+ manifest = Padrino::Assets.manifest
7
+ apps = Padrino.mounted_apps
8
+ apps.each do |app|
9
+ app = app.app_obj
10
+
11
+ next unless app.extensions.include?(Padrino::Assets)
12
+
13
+ app.precompile_assets.each do |path|
14
+ environment.each_logical_path.each do |logical_path|
15
+ case path
16
+ when Regexp
17
+ next unless path.match(logical_path)
18
+ when Proc
19
+ next unless path.call(logical_path)
20
+ else
21
+ next unless File.fnmatch(path.to_s, logical_path)
22
+ end
23
+
24
+ manifest.compile(logical_path)
25
+ end
26
+ end
27
+
28
+ if app.compress_assets?
29
+ Rake::Task['assets:compress'].invoke
30
+ end
31
+ end
32
+ end
30
33
  end
@@ -1,25 +1,26 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path('../lib', __FILE__)
3
- require 'padrino-assets/version'
4
-
5
- Gem::Specification.new do |s|
6
- s.name = 'padrino-assets'
7
- s.version = Padrino::Assets::VERSION
8
- s.authors = ['Benjamin Bloch']
9
- s.email = ['cirex@gamesol.org']
10
- s.homepage = 'https://github.com/Cirex/padrino-assets'
11
- s.description = 'A plugin for the Padrino web framework which uses Sprockets to manage and compile assets'
12
- s.summary = s.description
13
-
14
- s.files = `git ls-files`.split("\n")
15
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
- s.require_paths = ['lib']
18
-
19
- s.add_dependency 'sprockets', '~> 2.3.0'
20
- s.add_dependency 'padrino-core'
21
- s.add_dependency 'padrino-helpers'
22
-
23
- s.add_development_dependency 'minitest'
24
- s.add_development_dependency 'webrat'
1
+ # encoding: utf-8
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'padrino-assets/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'padrino-assets'
7
+ s.version = Padrino::Assets::VERSION
8
+ s.authors = ['Benjamin Bloch']
9
+ s.email = ['cirex@gamesol.org']
10
+ s.homepage = 'https://github.com/Cirex/padrino-assets'
11
+ s.description = 'A plugin for the Padrino web framework which uses Sprockets to manage and compile assets'
12
+ s.summary = s.description
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.require_paths = ['lib']
18
+
19
+ s.add_dependency 'sprockets', '~> 2.3.0'
20
+ s.add_dependency 'padrino-core'
21
+ s.add_dependency 'padrino-helpers'
22
+
23
+ s.add_development_dependency 'rake'
24
+ s.add_development_dependency 'rspec', '>= 2.0.0'
25
+ s.add_development_dependency 'rspec-html-matchers'
25
26
  end
@@ -0,0 +1,61 @@
1
+ require_relative 'spec'
2
+
3
+ class TestCompressor; end
4
+ class AnotherCompressor; end
5
+
6
+ describe Padrino::Assets do
7
+ before do
8
+ app.set :css_compressor, nil
9
+ app.set :js_compressor, nil
10
+ end
11
+
12
+ it 'can append paths to the Sprockets environment' do
13
+ Padrino::Assets.load_paths << my_path = File.dirname(__FILE__) + '/fixtures/paths_test'
14
+
15
+ Padrino.after_load.each(&:call)
16
+ Padrino.clear!
17
+
18
+ environment.paths.should include(my_path)
19
+ end
20
+
21
+ it 'can register a css compressor for use' do
22
+ Padrino::Assets.register_compressor :css, :test => 'TestCompressor'
23
+ Padrino::Assets.compressors[:css][:test].should == 'TestCompressor'
24
+ end
25
+
26
+ it 'can register a js compressor for use' do
27
+ Padrino::Assets.register_compressor :js, :another => 'AnotherCompressor'
28
+ Padrino::Assets.compressors[:js][:another].should == 'AnotherCompressor'
29
+ end
30
+
31
+ context '#find_registered_compressor' do
32
+ before { Padrino::Assets.compressors.clear }
33
+
34
+ it 'should allow you to manually locate a js compressor object' do
35
+ Padrino::Assets.register_compressor :js, :test => 'TestCompressor'
36
+ Padrino::Assets.register_compressor :js, :another => 'AnotherCompressor'
37
+
38
+ compressor = Padrino::Assets.find_registered_compressor(:js, :test)
39
+ compressor.class.should == TestCompressor
40
+
41
+ compressor = Padrino::Assets.find_registered_compressor(:js, :another)
42
+ compressor.class.should == AnotherCompressor
43
+ end
44
+
45
+ it 'should allow you to manually locate a css compressor object' do
46
+ Padrino::Assets.register_compressor :css, :test => 'TestCompressor'
47
+ Padrino::Assets.register_compressor :css, :another => 'AnotherCompressor'
48
+
49
+ compressor = Padrino::Assets.find_registered_compressor(:css, :test)
50
+ compressor.class.should == TestCompressor
51
+
52
+ compressor = Padrino::Assets.find_registered_compressor(:css, :another)
53
+ compressor.class.should == AnotherCompressor
54
+ end
55
+
56
+ it 'should return nil when no compressor object is found' do
57
+ compressor = Padrino::Assets.find_registered_compressor(:css, :simple)
58
+ compressor.should be_nil
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,11 @@
1
+ * {
2
+ margin: 0;
3
+ padding: 0; }
4
+
5
+ body {
6
+ background: black;
7
+ color: white;
8
+ text-align: center; }
9
+
10
+ article, section, header, footer {
11
+ display: block; }
@@ -0,0 +1 @@
1
+ alert('Hello World');
Binary file
@@ -0,0 +1,11 @@
1
+ * {
2
+ margin: 0;
3
+ padding: 0; }
4
+
5
+ body {
6
+ background: black;
7
+ color: white;
8
+ text-align: center; }
9
+
10
+ article, section, header, footer {
11
+ display: block; }
@@ -0,0 +1 @@
1
+ {"files":{"application-b8588c6975a4539fbf2c11471870bdca.css":{"logical_path":"application.css","mtime":"2012-02-13T05:18:43-05:00","digest":"b8588c6975a4539fbf2c11471870bdca"}},"assets":{"application.css":"application-b8588c6975a4539fbf2c11471870bdca.css"}}
@@ -0,0 +1,293 @@
1
+ require_relative 'spec'
2
+
3
+ describe Padrino::Assets::Helpers do
4
+ include Padrino::Helpers::OutputHelpers
5
+ include Padrino::Helpers::TagHelpers
6
+ include Padrino::Assets::Helpers
7
+
8
+ context '#assets_path' do
9
+ before do
10
+ Padrino.after_load.each(&:call)
11
+ Padrino.clear!
12
+ end
13
+
14
+ it 'should prepend :assets_host when present' do
15
+ app.set :assets_host, 'http://www.test.com'
16
+ asset = asset_path('application.css')
17
+ asset.should == 'http://www.test.com/assets/application.css'
18
+ end
19
+
20
+ it 'should allow :assets_host to use a Proc' do
21
+ app.set :assets_host, ->(asset, request) { 'http://test.com' }
22
+ asset = asset_path('application.css')
23
+ asset.should == 'http://test.com/assets/application.css'
24
+ end
25
+
26
+ it 'should pass the current source to :assets_host when a Proc is used' do
27
+ app.set :assets_host, ->(asset, request) do
28
+ if asset =~ /application.css/
29
+ 'http://true.com'
30
+ else
31
+ 'http://false.com'
32
+ end
33
+ end
34
+ asset = asset_path('application.css')
35
+ asset.should == 'http://true.com/assets/application.css'
36
+ end
37
+
38
+ it 'should pass the current request to :assets_host when a Proc is used' do
39
+ app.set :assets_host, ->(asset, request) do
40
+ if request.ssl?
41
+ 'https://test.com'
42
+ else
43
+ 'http://test.com'
44
+ end
45
+ end
46
+ asset = asset_path('application.css')
47
+ asset.should == 'http://test.com/assets/application.css'
48
+ end
49
+
50
+ it 'should append extension when provided' do
51
+ asset = asset_path(:application, :css)
52
+ asset.should == '/assets/application.css'
53
+ end
54
+
55
+ it 'should not append extension when one is present' do
56
+ asset = asset_path('application.css', :css)
57
+ asset.should_not == '/assets/application.css.css'
58
+ end
59
+
60
+ it 'should prepend :assets_prefix when present' do
61
+ app.set :assets_prefix, '/test'
62
+ asset = asset_path('application.css')
63
+ asset.should == '/test/application.css'
64
+ end
65
+
66
+ it 'should prepend a forward slash to :assets_prefix when missing' do
67
+ app.set :assets_prefix, 'test'
68
+ asset = asset_path('application.css')
69
+ asset.should == '/test/application.css'
70
+ end
71
+
72
+ it 'should not interfere with a reference URI' do
73
+ asset = asset_path('/application.css')
74
+ asset.should == '/application.css'
75
+
76
+ asset = asset_path('//test.com/application.css')
77
+ asset.should == '//test.com/application.css'
78
+ end
79
+
80
+ it 'should not interfere with an absolute URI' do
81
+ asset = asset_path('http://test.com/application.css')
82
+ asset.should == 'http://test.com/application.css'
83
+
84
+ asset = asset_path('https://test.com/application.css')
85
+ asset.should == 'https://test.com/application.css'
86
+ end
87
+
88
+ it 'should use precompiled asset when assets are indexed' do
89
+ app.enable :index_assets
90
+ asset = asset_path('application.css')
91
+ asset.should == '/assets/application-b8588c6975a4539fbf2c11471870bdca.css'
92
+ end
93
+
94
+ it 'should allow assets that have not been precompiled when assets are index' do
95
+ app.enable :index_assets
96
+ asset = asset_path('application.js')
97
+ asset.should == '/assets/application.js'
98
+ end
99
+ end
100
+
101
+ context '#is_uri?' do
102
+ it 'should return true when given an absolute URI' do
103
+ is_uri?('https://example.com/application.css').should be_true
104
+ is_uri?('http://example.com/application.css').should be_true
105
+ is_uri?('ftp://example.com/application.css').should be_true
106
+ end
107
+
108
+ it 'should return true when given a reference URI' do
109
+ is_uri?('//example.com/assets/application.css').should be_true
110
+ is_uri?('/assets/application.css').should be_true
111
+ end
112
+
113
+ it 'should return false when given a host without a protocol' do
114
+ is_uri?('example.com/assets/application.css').should be_false
115
+ end
116
+
117
+ it 'should return false when given an asset' do
118
+ is_uri?('application.css').should be_false
119
+ end
120
+ end
121
+
122
+ context '#stylesheet' do
123
+ it 'should accept multiple sources' do
124
+ stylesheets = stylesheets(:application, :theme)
125
+ stylesheets.should have_tag(:link, count: 1, with: { href: '/assets/application.css' })
126
+ stylesheets.should have_tag(:link, count: 1, with: { href: '/assets/theme.css' })
127
+ end
128
+
129
+ it 'should accept multiple sources with attributes' do
130
+ stylesheets = stylesheets(:application, :theme, media: 'handheld')
131
+ stylesheets.should have_tag(:link, count: 1, with: { href: '/assets/application.css', media: 'handheld' })
132
+ stylesheets.should have_tag(:link, count: 1, with: { href: '/assets/theme.css', media: 'handheld' })
133
+ end
134
+
135
+ it 'should accept a single source' do
136
+ stylesheet = stylesheet(:application)
137
+ stylesheet.should have_tag(:link, count: 1, with: { href: '/assets/application.css' })
138
+ end
139
+
140
+ it 'should accept a single source with attributes' do
141
+ stylesheet = stylesheet(:application, media: 'handheld')
142
+ stylesheet.should have_tag(:link, count: 1, with: { href: '/assets/application.css', media: 'handheld' })
143
+ end
144
+
145
+ it 'should be aliased for compatibility' do
146
+ respond_to?(:stylesheet_link_tag).should be_true
147
+ end
148
+ end
149
+
150
+ context '#javascript' do
151
+ it 'should accept multiple sources' do
152
+ javascripts = javascripts(:application, :jquery)
153
+ javascripts.should have_tag(:script, count: 1, with: { src: '/assets/application.js' })
154
+ javascripts.should have_tag(:script, count: 1, with: { src: '/assets/jquery.js' })
155
+ end
156
+
157
+ it 'should accept a single source' do
158
+ javascripts = javascript(:application)
159
+ javascripts.should have_tag(:script, count: 1, with: { src: '/assets/application.js' })
160
+ end
161
+
162
+ it 'should be aliased for compatibility' do
163
+ respond_to?(:javascript_include_tag).should be_true
164
+ end
165
+ end
166
+
167
+ context '#image' do
168
+ it 'should accept multiple sources' do
169
+ images = images('application.jpg', 'application.png')
170
+ images.should have_tag(:img, count: 1, with: { src: '/assets/application.jpg' })
171
+ images.should have_tag(:img, count: 1, with: { src: '/assets/application.png' })
172
+ end
173
+
174
+ it 'should accept multiple sources with attributes' do
175
+ images = images('application.jpg', 'application.png', width: 40, height: 40)
176
+ images.should have_tag(:img, count: 1, with: { src: '/assets/application.jpg', width: 40, height: 40 })
177
+ images.should have_tag(:img, count: 1, with: { src: '/assets/application.png', width: 40, height: 40 })
178
+ end
179
+
180
+ it 'should accept a single source' do
181
+ image = image('application.jpg')
182
+ image.should have_tag(:img, count: 1, with: { src: '/assets/application.jpg' })
183
+ end
184
+
185
+ it 'should accept a single source with attributes' do
186
+ image = image('application.jpg', width: 40, height: 40)
187
+ image.should have_tag(:img, count: 1, with: { src: '/assets/application.jpg', width: 40, height: 40 })
188
+ end
189
+
190
+ it 'should allow you to set the :width and :height with :size' do
191
+ image = image('application.jpg', size: '40x40')
192
+ image.should have_tag(:img, with: { width: 40, height: 40 })
193
+ end
194
+
195
+ it 'should allow you to use an array with :size' do
196
+ image = image('application.jpg', size: [40, 40])
197
+ image.should have_tag(:img, with: { width: 40, height: 40 })
198
+ end
199
+
200
+ it 'should automatically set an alternate text when none present' do
201
+ images = images('application.jpg', 'test.jpg')
202
+ images.should have_tag(:img, with: { alt: 'Application' })
203
+ images.should have_tag(:img, with: { alt: 'Test' })
204
+ end
205
+
206
+ it 'should allow you to manually set the alternate text' do
207
+ image = image('application.jpg', alt: 'My Little Pony')
208
+ image.should have_tag(:img, with: { alt: 'My Little Pony' })
209
+ end
210
+
211
+ it 'should be aliased for compatibility' do
212
+ respond_to?(:image_tag).should be_true
213
+ end
214
+ end
215
+
216
+ context '#alternate_text' do
217
+ it 'should capitalize the first letter' do
218
+ alternate_text = alternate_text('application.jpg')
219
+ alternate_text.should == 'Application'
220
+ end
221
+
222
+ it 'should seperate underscores' do
223
+ alternate_text = alternate_text('my_pony.jpg')
224
+ alternate_text.should == 'My pony'
225
+ end
226
+ end
227
+
228
+ context '#video' do
229
+ it 'should accept multiple sources' do
230
+ videos = videos('test.webm', 'test.mov')
231
+ videos.should have_tag(:video, count: 1) do
232
+ with_tag(:source, count: 1, with: { src: '/assets/test.webm' })
233
+ with_tag(:source, count: 1, with: { src: '/assets/test.mov' })
234
+ end
235
+ end
236
+
237
+ it 'should accept multiple sources with attributes' do
238
+ videos = videos('test.webm', 'test.mov', width: 40, height: 40)
239
+ videos.should have_tag(:video, count: 1, with: { width: 40, height: 40 }) do
240
+ with_tag(:source, count: 1, with: { src: '/assets/test.webm' })
241
+ with_tag(:source, count: 1, with: { src: '/assets/test.mov' })
242
+ end
243
+ end
244
+
245
+ it 'should accept a single source' do
246
+ video = video('test.webm')
247
+ video.should have_tag(:video, count: 1, with: { src: '/assets/test.webm' })
248
+ end
249
+
250
+ it 'should accept a single source with attributes' do
251
+ video = video('test.webm', width: 40, height: 40)
252
+ video.should have_tag(:video, count: 1, with: { src: '/assets/test.webm', width: 40, height: 40 })
253
+ end
254
+
255
+ it 'should allow you to set the :width and :height with :size' do
256
+ video = video('test.webm', size: '40x40')
257
+ video.should have_tag(:video, with: { width: 40, height: 40 })
258
+ end
259
+
260
+ it 'should allow you to use an array with :size' do
261
+ video = video('test.webm', size: [40, 40])
262
+ video.should have_tag(:video, with: { width: 40, height: 40 })
263
+ end
264
+ end
265
+
266
+ context '#audio' do
267
+ it 'should accept multiple sources' do
268
+ audios = audios('test.ogg', 'test.aac')
269
+ audios.should have_tag(:audio, count: 1) do
270
+ with_tag(:source, count: 1, with: { src: '/assets/test.ogg' })
271
+ with_tag(:source, count: 1, with: { src: '/assets/test.aac' })
272
+ end
273
+ end
274
+
275
+ it 'should accept multiple sources with attributes' do
276
+ audios = audios('test.ogg', 'test.aac', id: 'audio')
277
+ audios.should have_tag(:audio, count: 1, with: { id: 'audio' }) do
278
+ with_tag(:source, count: 1, with: { src: '/assets/test.ogg' })
279
+ with_tag(:source, count: 1, with: { src: '/assets/test.aac' })
280
+ end
281
+ end
282
+
283
+ it 'should accept a single source' do
284
+ audio = audio('test.ogg')
285
+ audio.should have_tag(:audio, count: 1, with: { src: '/assets/test.ogg' })
286
+ end
287
+
288
+ it 'should accept a single source with attributes' do
289
+ audio = audio('test.ogg', id: 'audio')
290
+ audio.should have_tag(:audio, count: 1, with: { src: '/assets/test.ogg', id: 'audio' })
291
+ end
292
+ end
293
+ end