sprockets-helpers 0.7.2 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -35,13 +35,13 @@ class App < Sinatra::Base
35
35
  set :sprockets, Sprockets::Environment.new(root)
36
36
  set :assets_prefix, '/assets'
37
37
  set :digest_assets, false
38
-
38
+
39
39
  configure do
40
40
  # Setup Sprockets
41
41
  sprockets.append_path File.join(root, 'assets', 'stylesheets')
42
42
  sprockets.append_path File.join(root, 'assets', 'javascripts')
43
43
  sprockets.append_path File.join(root, 'assets', 'images')
44
-
44
+
45
45
  # Configure Sprockets::Helpers (if necessary)
46
46
  Sprockets::Helpers.configure do |config|
47
47
  config.environment = sprockets
@@ -50,17 +50,17 @@ class App < Sinatra::Base
50
50
  config.public_path = public_folder
51
51
  end
52
52
  end
53
-
53
+
54
54
  helpers do
55
55
  include Sprockets::Helpers
56
-
56
+
57
57
  # Alternative method for telling Sprockets::Helpers which
58
58
  # Sprockets environment to use.
59
59
  # def assets_environment
60
60
  # settings.sprockets
61
61
  # end
62
62
  end
63
-
63
+
64
64
  get '/' do
65
65
  erb :index
66
66
  end
@@ -123,6 +123,42 @@ Would become:
123
123
  </html>
124
124
  ```
125
125
 
126
+ Even better, you can use #javascript_tag and #stylesheet_tag directly, which optionally handle the expansion of assets for debugging like Rails:
127
+
128
+ ``` html+erb
129
+ <!doctype html>
130
+ <html lang="en">
131
+ <head>
132
+ <meta charset="utf-8">
133
+ <title>Sinatra with Sprockets 2 (Asset Pipeline)</title>
134
+ <%= stylesheet_tag 'application' %>
135
+ <%= javascript_tag 'application', :expand => true %>
136
+ </head>
137
+ <body>
138
+ <img src="<%= image_path 'rails.png' %>">
139
+ </body>
140
+ </html>
141
+ ```
142
+
143
+ Would become:
144
+
145
+ ``` html
146
+ <!doctype html>
147
+ <html lang="en">
148
+ <head>
149
+ <meta charset="utf-8">
150
+ <title>Sinatra with Sprockets 2 (Asset Pipeline)</title>
151
+ <link rel="stylesheet" href="/assets/application.css">
152
+ <script src="/assets/jquery.js?body=1"></script>
153
+ <script src="/assets/jquery.ui.js?body=1"></script>
154
+ <script src="/assets/application.js?body=1"></script>
155
+ </head>
156
+ <body>
157
+ <img src="/assets/rails.png">
158
+ </body>
159
+ </html>
160
+ ```
161
+
126
162
 
127
163
  Fallback to Public Directory
128
164
  ----------------------------
@@ -2,6 +2,7 @@ require 'sprockets'
2
2
  require 'sprockets/helpers/version'
3
3
  require 'sprockets/helpers/base_path'
4
4
  require 'sprockets/helpers/asset_path'
5
+ require 'sprockets/helpers/expanded_asset_paths'
5
6
  require 'sprockets/helpers/file_path'
6
7
  require 'sprockets/helpers/manifest_path'
7
8
  require 'uri'
@@ -15,6 +16,9 @@ module Sprockets
15
16
  # When true, the asset paths will return digest paths.
16
17
  attr_accessor :digest
17
18
 
19
+ # When true, expand assets.
20
+ attr_accessor :expand
21
+
18
22
  # Set the Sprockets environment to search for assets.
19
23
  # This defaults to the context's #environment method.
20
24
  attr_accessor :environment
@@ -120,8 +124,14 @@ module Sprockets
120
124
 
121
125
  # If the source points to an asset in the Sprockets
122
126
  # environment use AssetPath to generate the full path.
127
+ # With expand, return array of paths of assets required by asset.
123
128
  assets_environment.resolve(uri.path) do |path|
124
- return Helpers::AssetPath.new(uri, assets_environment[path], options).to_s
129
+ asset = assets_environment[path]
130
+ if options[:expand]
131
+ return Helpers::ExpandedAssetPaths.new(uri, asset, options).to_a
132
+ else
133
+ return Helpers::AssetPath.new(uri, asset, options).to_s
134
+ end
125
135
  end
126
136
 
127
137
  # Use FilePath for normal files on the file system
@@ -129,6 +139,28 @@ module Sprockets
129
139
  end
130
140
  alias_method :path_to_asset, :asset_path
131
141
 
142
+ def asset_tag(source, options = {}, &block)
143
+ raise ::ArgumentError, 'block missing' unless block
144
+ path = asset_path source, { :expand => Helpers.expand }.merge(options)
145
+ if options[:expand] && path.kind_of?(Array)
146
+ return path.map(&block).join()
147
+ else
148
+ yield path
149
+ end
150
+ end
151
+
152
+ def javascript_tag(source, options = {})
153
+ asset_tag(source, { :ext => 'js' }.merge(options)) do |path|
154
+ %Q(<script src="#{path}"></script>)
155
+ end
156
+ end
157
+
158
+ def stylesheet_tag(source, options = {})
159
+ asset_tag(source, { :ext => 'css' }.merge(options)) do |path|
160
+ %Q(<link rel="stylesheet" href="#{path}">)
161
+ end
162
+ end
163
+
132
164
  # Computes the path to a audio asset either in the Sprockets environment
133
165
  # or the public directory. External URIs are untouched.
134
166
  #
@@ -0,0 +1,17 @@
1
+ module Sprockets
2
+ module Helpers
3
+ class ExpandedAssetPaths
4
+ def initialize(uri, asset, options = {})
5
+ @uri = uri
6
+ @asset = asset
7
+ @options = { :body => true }.merge options
8
+ end
9
+
10
+ def to_a
11
+ @asset.to_a.map do |dependency|
12
+ AssetPath.new(@uri.clone, dependency, @options).to_s
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,5 +1,5 @@
1
1
  module Sprockets
2
2
  module Helpers
3
- VERSION = '0.7.2'
3
+ VERSION = '0.8.0'
4
4
  end
5
5
  end
data/spec/spec_helper.rb CHANGED
@@ -23,4 +23,26 @@ RSpec.configure do |config|
23
23
  pathname ||= Pathname.new(File.join('assets', logical_path)).expand_path
24
24
  env.context_class.new env, logical_path, pathname
25
25
  end
26
+
27
+ # Exemplary file system layout for usage in test-construct
28
+ def assets_layout(construct)
29
+ lambda { |c|
30
+ c.file('assets/main.js') do |f|
31
+ f << "//= require a\n"
32
+ f << "//= require b\n"
33
+ end
34
+ c.file('assets/a.js')
35
+ c.file('assets/b.js')
36
+
37
+ c.file('assets/main.css') do |f|
38
+ f << "/*\n"
39
+ f << "*= require a\n"
40
+ f << "*= require b\n"
41
+ f << "*/\n"
42
+ end
43
+ c.file('assets/a.css')
44
+ c.file('assets/b.css')
45
+ }.call(construct)
46
+ end
47
+
26
48
  end
@@ -371,4 +371,93 @@ describe Sprockets::Helpers do
371
371
  end
372
372
  end
373
373
  end
374
+
375
+ describe '#asset_tag' do
376
+ it 'receives block to generate tag' do
377
+ actual = context.asset_tag('main.js') { |path| "<script src=#{path}></script>" }
378
+ actual.should == '<script src=/main.js></script>'
379
+ end
380
+
381
+ it 'raises when called without block' do
382
+ expect { context.asset_tag('main.js') }.to raise_error(ArgumentError, "block missing")
383
+ end
384
+
385
+ it 'expands when configured' do
386
+ within_construct do |construct|
387
+ assets_layout(construct)
388
+ Sprockets::Helpers.expand = true
389
+ c = context
390
+ c.stub(:asset_path).and_return(context.asset_path('main.js')) # Spy
391
+ c.should_receive(:asset_path).with('main.js', {:expand => true})
392
+ c.asset_tag('main.js') {}
393
+ Sprockets::Helpers.expand = false
394
+ c.should_receive(:asset_path).with('main.js', {:expand => false})
395
+ c.asset_tag('main.js') {}
396
+ end
397
+ end
398
+
399
+ describe 'when expanding' do
400
+ it 'passes uri that is no asset untouched' do
401
+ context.asset_tag('main.js', :expand => true) {}
402
+ end
403
+
404
+ it 'generates tag for each asset' do
405
+ within_construct do |construct|
406
+ assets_layout(construct)
407
+ tags = context.asset_tag('main.js', :expand => true) do |path|
408
+ "<script src=\"#{path}\"></script>"
409
+ end
410
+ tags.split("</script>").should have(3).scripts
411
+ tags.should include('<script src="/assets/main.js?body=1"></script>')
412
+ tags.should include('<script src="/assets/a.js?body=1"></script>')
413
+ tags.should include('<script src="/assets/b.js?body=1"></script>')
414
+ end
415
+ end
416
+
417
+ end
418
+ end
419
+
420
+ describe '#javascript_tag' do
421
+ it 'generates script tag' do
422
+ context.javascript_tag('main.js').should == '<script src="/main.js"></script>'
423
+ end
424
+
425
+ it 'appends extension' do
426
+ context.javascript_tag('main').should == '<script src="/main.js"></script>'
427
+ end
428
+
429
+ describe 'when expanding' do
430
+ it 'generates script tag for each javascript asset' do
431
+ within_construct do |construct|
432
+ assets_layout(construct)
433
+ tags = context.javascript_tag('main.js', :expand => true)
434
+ tags.should include('<script src="/assets/main.js?body=1"></script>')
435
+ tags.should include('<script src="/assets/a.js?body=1"></script>')
436
+ tags.should include('<script src="/assets/b.js?body=1"></script>')
437
+ end
438
+ end
439
+ end
440
+ end
441
+
442
+ describe '#stylesheet_tag' do
443
+ it 'generates stylesheet tag' do
444
+ context.stylesheet_tag('main.css').should == '<link rel="stylesheet" href="/main.css">'
445
+ end
446
+
447
+ it 'generates stylesheet tag' do
448
+ context.stylesheet_tag('main').should == '<link rel="stylesheet" href="/main.css">'
449
+ end
450
+
451
+ describe 'when expanding' do
452
+ it 'generates stylesheet tag for each stylesheet asset' do
453
+ within_construct do |construct|
454
+ assets_layout(construct)
455
+ tags = context.stylesheet_tag('main.css', :expand => true)
456
+ tags.should include('<link rel="stylesheet" href="/assets/main.css?body=1">')
457
+ tags.should include('<link rel="stylesheet" href="/assets/a.css?body=1">')
458
+ tags.should include('<link rel="stylesheet" href="/assets/b.css?body=1">')
459
+ end
460
+ end
461
+ end
462
+ end
374
463
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sprockets-helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.8.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: 2012-09-28 00:00:00.000000000 Z
12
+ date: 2013-01-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sprockets
16
- requirement: &70126313740080 !ruby/object:Gem::Requirement
16
+ requirement: &70280862449120 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '2.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70126313740080
24
+ version_requirements: *70280862449120
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: appraisal
27
- requirement: &70126313739200 !ruby/object:Gem::Requirement
27
+ requirement: &70280862448600 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0.4'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70126313739200
35
+ version_requirements: *70280862448600
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &70126313738400 !ruby/object:Gem::Requirement
38
+ requirement: &70280862448100 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '2.6'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70126313738400
46
+ version_requirements: *70280862448100
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: test-construct
49
- requirement: &70126313737600 !ruby/object:Gem::Requirement
49
+ requirement: &70280862447080 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '1.2'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70126313737600
57
+ version_requirements: *70280862447080
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rake
60
- requirement: &70126313737080 !ruby/object:Gem::Requirement
60
+ requirement: &70280862446380 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70126313737080
68
+ version_requirements: *70280862446380
69
69
  description: Asset path helpers for Sprockets 2.x applications
70
70
  email:
71
71
  - me@petebrowne.com
@@ -90,6 +90,7 @@ files:
90
90
  - lib/sprockets/helpers.rb
91
91
  - lib/sprockets/helpers/asset_path.rb
92
92
  - lib/sprockets/helpers/base_path.rb
93
+ - lib/sprockets/helpers/expanded_asset_paths.rb
93
94
  - lib/sprockets/helpers/file_path.rb
94
95
  - lib/sprockets/helpers/manifest_path.rb
95
96
  - lib/sprockets/helpers/version.rb
@@ -110,7 +111,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
110
111
  version: '0'
111
112
  segments:
112
113
  - 0
113
- hash: -647249405951979289
114
+ hash: -4303612460519246856
114
115
  required_rubygems_version: !ruby/object:Gem::Requirement
115
116
  none: false
116
117
  requirements:
@@ -119,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
120
  version: '0'
120
121
  segments:
121
122
  - 0
122
- hash: -647249405951979289
123
+ hash: -4303612460519246856
123
124
  requirements: []
124
125
  rubyforge_project: sprockets-helpers
125
126
  rubygems_version: 1.8.11