padrino-pipeline 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c9eb1b49916318fbeb59d6b2f7b44382eaaa7a10
4
- data.tar.gz: da6aa8f8a18ef8c9df137f719d2110d769016b03
3
+ metadata.gz: 9ae583739b857e66675c501c51fb349afe552eb7
4
+ data.tar.gz: 6401ed2ffbe33dba531735a533f79b15b911e411
5
5
  SHA512:
6
- metadata.gz: f4325db977da9487c2e10572e7516a7cfc748e9bc0a47200ce7e84ef1805b0dadec2c1c10468e9bd43206634f02a0f25d2b9219dc0c59757c48d5d6317bfba00
7
- data.tar.gz: beee248b82501aac96ea301bc223492c799e93e62dde8a50853f61da5a960f659b1374693f2ba529e5a2d390792728476f5103d3ddcdde65750e8107318b1ab7
6
+ metadata.gz: a3b001b81d9e56971e911575aaa4faec94da4859db068ceef9b52863bc576c9cb2e2af3ad8094edb5017f0dc4d3cc232ba1c35dadba5079359991b9004f92af1
7
+ data.tar.gz: 015dc113ce5d617544322d968807d5236e641c6041590e940e15b4881f71b6d5fd624094c4b8124a6c7e9e76fafd1ec8699a4247cead44b68d6300502796f137
data/.gitignore CHANGED
@@ -1,2 +1,3 @@
1
1
  Gemfile.lock
2
2
  .sass-cache
3
+ pkg/*
data/Gemfile CHANGED
@@ -2,6 +2,7 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
  gem "rake"
5
+ gem "nokogiri", "~> 1.5.10"
5
6
 
6
7
  group :test do
7
8
  gem "webrat", ">= 0.5.1"
data/README.md CHANGED
@@ -1,60 +1,88 @@
1
- [![Build Status](https://travis-ci.org/Ortuna/padrino-assets.png?branch=master)](https://travis-ci.org/Ortuna/padrino-assets)
2
- [![Code Climate](https://codeclimate.com/github/Ortuna/padrino-assets.png)](https://codeclimate.com/github/Ortuna/padrino-assets)
3
-
4
- #padrino-assets
5
- This is an early version and work in progress for padrino pipeline
6
-
7
- #Usage
8
- include in your padrino project
1
+ #Padrino Pipeline
2
+ Padrino Pipeline is a gem for [Padrino](http://www.padrinorb.com). It provides
3
+ a unified way to use several different asset management systems.
4
+
5
+ [![Build Status](https://travis-ci.org/Ortuna/padrino-pipeline.png?branch=master)](https://travis-ci.org/Ortuna/padrino-pipeline)
6
+ [![Code Climate](https://codeclimate.com/github/Ortuna/padrino-pipeline.png)](https://codeclimate.com/github/Ortuna/padrino-pipeline)
7
+ [![Dependency Status](https://gemnasium.com/Ortuna/padrino-pipeline.png)](https://gemnasium.com/Ortuna/padrino-pipeline)
8
+
9
+
10
+ ##Supported Pipelines
11
+ - [Sprockets](https://github.com/sstephenson/sprockets)
12
+ - [sinatra-assetpack](https://github.com/rstacruz/sinatra-assetpack)
13
+
14
+ ##Simple Usage
15
+
16
+ ### Gemfile
17
+ Add to your Gemfile:
9
18
  ```ruby
10
- gem 'padrino-assets', :github => 'Ortuna/padrino-assets'
19
+ gem 'padrino-pipeline'
11
20
  ```
12
21
 
13
- ##Basic usage
22
+ These examples examples setup a pipeline with defaulted options(see default options):
14
23
 
24
+ ### Sprockets pipeline
15
25
  ```ruby
16
- module Ortuna
26
+ module Example
17
27
  class App < Padrino::Application
18
- register Padrino::Assets
19
- configure_assets do |assets|
20
- assets.pipeline = Padrino::Assets::Sprockets
28
+ register Padrino::Pipeline
29
+ configure_assets do |config|
30
+ config.pipeline = Padrino::Pipeline::Sprockets
21
31
  end
22
32
  end
23
33
  end
24
34
  ```
25
35
 
26
- This should default app/assets/javascripts and app/assets/stylesheets to be served
27
- from http://localhost:3000/assets/javascripts and http://localhost:3000/assets/styleseets
28
-
29
- ##Usage with options
36
+ ### Sinatra AssetPack pipeline
30
37
  ```ruby
31
- module Ortuna
38
+ module Example
32
39
  class App < Padrino::Application
33
- register Padrino::Assets
40
+ register Padrino::Pipeline
41
+ configure_assets do |config|
42
+ config.pipeline = Padrino::Pipeline::AssetPack
43
+ end
44
+ end
45
+ end
46
+ ```
34
47
 
35
- configure_assets do |assets|
36
- assets.pipeline = Padrino::Assets::Sprockets
37
- assets.paths = ['assets/javascripts', 'assets/stylesheets'] # defaults to assets/stylesheets
38
- assets.js_prefix = '/custom/location' # defaults to /assets/javascripts
39
- assets.css_prefix = '/custom/stylesheets' # defaults to /assets/stylesheets
48
+ ## Options
49
+ Certain options can be configured to change the behavior of the pipelines.
50
+ These options should be used within the configure_assets block.
40
51
 
41
- assets.prefix = '/trunk' #general prefix, /trunk/assets/javascripts/xyz.js
52
+ for example:
53
+ ```ruby
54
+ module Example
55
+ class App < Padrino::Application
56
+ register Padrino::Pipeline
57
+ configure_assets do |config|
58
+ config.pipeline = Padrino::Pipeline::AssetPack
59
+ config.css_prefix = '/xyz'
42
60
  end
43
61
  end
44
62
  end
45
63
  ```
46
64
 
47
- visit `http://localhost:3000/custom/location/app.js` will map to the file
48
- app/assets/javascripts/app.js
65
+ The following options can be set
49
66
 
50
- visit `http://localhost:3000/custom/stylesheets/main.css` will map to the file
51
- app/assets/stylesheets/main.css
67
+ ### Pipeline
68
+ - #pipeline
52
69
 
53
- use sprockets helpers like you would:
54
- ```javascript
55
- //= require stuff
56
- function stuff() {
70
+ ### Assets URI(mounting location) String
71
+ - #css_prefix
72
+ - #js_prefix
57
73
 
58
- }
59
- ```
74
+ ### Asset location(path to files) String/Array
75
+ - #css_assets
76
+ - #js_assets
77
+
78
+ ### Prefix prepend this prefix before all assets
79
+ - #prefix
80
+
81
+ ### Default option values
82
+ TODO
83
+
84
+ ## Asset pack packages
85
+ TODO
60
86
 
87
+ ## Sprocket directive require/include/require tree
88
+ TODO
@@ -1,5 +1,6 @@
1
1
  require 'padrino-pipeline/pipelines/sprockets'
2
2
  require 'padrino-pipeline/pipelines/asset_pack'
3
+ require 'padrino-pipeline/ext/padrino-helpers/asset_tag_helper'
3
4
  require 'ostruct'
4
5
 
5
6
  module Padrino
@@ -1,8 +1,11 @@
1
1
  require 'sinatra/assetpack' unless defined? Sinatra::AssetPack
2
+ require 'padrino-pipeline/pipelines/common'
2
3
 
3
4
  module Padrino
4
5
  module Pipeline
5
6
  class AssetPack
7
+ include Padrino::Pipeline::Common
8
+
6
9
  def initialize(app, config)
7
10
  @app = app
8
11
  @config = config
@@ -10,22 +13,6 @@ module Padrino
10
13
  setup_pipeline
11
14
  end
12
15
 
13
- def js_prefix
14
- (@config.prefix || '') + (@config.js_prefix || '/assets/javascripts')
15
- end
16
-
17
- def css_prefix
18
- (@config.prefix || '') + (@config.css_prefix || '/assets/stylesheets')
19
- end
20
-
21
- def js_assets
22
- @config.js_assets || 'assets/javascripts'
23
- end
24
-
25
- def css_assets
26
- @config.css_assets || 'assets/stylesheets'
27
- end
28
-
29
16
  def packages
30
17
  @config.packages || []
31
18
  end
@@ -37,13 +24,22 @@ module Padrino
37
24
  end
38
25
 
39
26
  def setup_pipeline
40
- js_prefix, css_prefix = self.js_prefix, self.css_prefix
41
- js_assets, css_assets = self.js_assets, self.css_assets
42
- packages = self.packages
27
+ js_prefix, css_prefix, image_prefix = self.js_prefix, self.css_prefix, self.image_prefix
28
+ js_assets, css_assets, image_assets = self.js_assets, self.css_assets, self.image_assets
29
+ packages = self.packages
43
30
 
44
31
  @app.assets {
45
- serve js_prefix, :from => js_assets
46
- serve css_prefix,:from => css_assets
32
+ def mount_asset(prefix, assets)
33
+ if assets.respond_to?(:each)
34
+ assets.each {|asset| serve prefix, :from => asset}
35
+ else
36
+ serve prefix, :from => assets
37
+ end
38
+ end
39
+
40
+ mount_asset js_prefix, js_assets
41
+ mount_asset css_prefix, css_assets
42
+ mount_asset image_prefix, image_assets
47
43
 
48
44
  packages.each { |package| send(package.shift, *package) }
49
45
 
@@ -0,0 +1,35 @@
1
+ module Padrino
2
+ module Pipeline
3
+ module Common
4
+
5
+ def app_root
6
+ @app.settings.root
7
+ end
8
+
9
+ def js_assets
10
+ @config.js_assets || "#{app_root}/assets/javascripts"
11
+ end
12
+
13
+ def css_assets
14
+ @config.css_assets || "#{app_root}/assets/stylesheets"
15
+ end
16
+
17
+ def image_assets
18
+ @config.image_assets || "#{app_root}/assets/images"
19
+ end
20
+
21
+ def image_prefix
22
+ (@config.prefix || '') + (@config.image_prefix || '/assets/images')
23
+ end
24
+
25
+ def js_prefix
26
+ (@config.prefix || '') + (@config.js_prefix || '/assets/javascripts')
27
+ end
28
+
29
+ def css_prefix
30
+ (@config.prefix || '') + (@config.css_prefix || '/assets/stylesheets')
31
+ end
32
+
33
+ end
34
+ end
35
+ end
@@ -1,31 +1,32 @@
1
1
  require 'sprockets'
2
2
  require 'uglifier'
3
- require 'padrino-pipeline/ext/padrino-helpers/asset_tag_helper'
3
+ require 'padrino-pipeline/pipelines/common'
4
4
 
5
5
  module Padrino
6
6
  module Pipeline
7
7
  class Sprockets
8
+ include Padrino::Pipeline::Common
9
+
8
10
  def initialize(app, config)
9
- @app = app
10
- @config = config
11
+ @app = app
12
+ @config = config
11
13
  setup_enviroment
12
14
  setup_sprockets
13
15
  end
14
16
 
15
17
  private
16
- def app_root
17
- @app.settings.root
18
- end
19
-
20
- def default_paths
21
- ["#{app_root}/assets/javascripts", "#{app_root}/assets/stylesheets"]
18
+ def paths
19
+ js_assets = self.js_assets.kind_of?(Array) ? self.js_assets : [self.js_assets]
20
+ css_assets = self.css_assets.kind_of?(Array) ? self.css_assets : [self.css_assets]
21
+ image_assets = self.image_assets.kind_of?(Array) ? self.image_assets : [self.image_assets]
22
+ js_assets + css_assets + image_assets
22
23
  end
23
24
 
24
25
  def setup_sprockets
25
- @config.paths ||= default_paths
26
- @config.paths.each { |path| @app.settings.assets.append_path path }
27
- mount_js_assets (@config.prefix || '') + (@config.js_prefix || '/assets/javascripts')
28
- mount_css_assets (@config.prefix || '') + (@config.css_prefix || '/assets/stylesheets')
26
+ paths.each { |path| @app.settings.assets.append_path path }
27
+ mount_js_assets js_prefix
28
+ mount_css_assets css_prefix
29
+ mount_image_assets image_prefix
29
30
  end
30
31
 
31
32
  def setup_enviroment
@@ -34,14 +35,18 @@ module Padrino
34
35
  @app.settings.assets.js_compressor = Uglifier.new(:mangle => true)
35
36
  end
36
37
 
38
+ def mount_image_assets(prefix)
39
+ mount_assets(:prefix => prefix)
40
+ end
41
+
37
42
  def mount_js_assets(prefix)
38
- mount_assets(:prefix => prefix,
43
+ mount_assets(:prefix => prefix,
39
44
  :extension => "js",
40
45
  :content_type => "application/javascript")
41
46
  end
42
47
 
43
48
  def mount_css_assets(prefix)
44
- mount_assets(:prefix => prefix,
49
+ mount_assets(:prefix => prefix,
45
50
  :extension => "css",
46
51
  :content_type => "text/css")
47
52
  end
@@ -50,9 +55,10 @@ module Padrino
50
55
  prefix = options[:prefix]
51
56
  extension = options[:extension]
52
57
  content_type = options[:content_type]
53
- @app.get "#{prefix}/:file.#{extension}" do
54
- content_type(content_type)
55
- settings.assets["#{params[:file]}.#{extension}"] || not_found
58
+ @app.get "#{prefix}/:path.:ext" do |path, ext|
59
+ return not_found if (extension && ext != extension)
60
+ content_type(content_type || Rack::Mime::MIME_TYPES[".#{ext}"])
61
+ settings.assets["#{path}.#{ext}"] || not_found
56
62
  end
57
63
  end
58
64
 
@@ -1,5 +1,5 @@
1
1
  module Padrino
2
2
  module Pipeline
3
- VERSION = '0.2.0'
3
+ VERSION = '0.2.1'
4
4
  end
5
5
  end
@@ -0,0 +1,104 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../extra/helper')
2
+
3
+ shared_examples_for 'A Pipeline' do
4
+ describe 'default options' do
5
+ let(:app) { rack_app }
6
+ before do
7
+ pipeline = @pipeline
8
+ app_root = fixture_path('asset_pack_app')
9
+ mock_app do
10
+ set :root, app_root
11
+ register Padrino::Pipeline
12
+ configure_assets{ |c| c.pipeline = pipeline }
13
+ end
14
+ end
15
+
16
+ it 'can get a stylesheet file' do
17
+ get '/assets/stylesheets/app.css'
18
+ assert_equal 200, last_response.status
19
+ end
20
+
21
+ it 'makes sure that sass is compiled' do
22
+ get '/assets/stylesheets/default.css'
23
+ assert_equal 200, last_response.status
24
+ assert_match ".content {\n display: none; }\n", last_response.body
25
+ end
26
+
27
+ it 'can not get a file other than .css' do
28
+ skip if @pipeline == Padrino::Pipeline::AssetPack #http_router issue :(
29
+ get '/assets/stylesheets/default.scss'
30
+ assert_equal 404, last_response.status
31
+ end
32
+
33
+ it 'gives 404 for unknown files' do
34
+ skip if @pipeline == Padrino::Pipeline::AssetPack #http_router issue :(
35
+ get '/assets/stylesheets/omg.css'
36
+ assert_equal 404, last_response.status
37
+ end
38
+ end
39
+
40
+
41
+ describe 'custom options' do
42
+ let(:app) { rack_app }
43
+ before do
44
+ @assets_location = "#{fixture_path('asset_pack_app')}/assets/stylesheets"
45
+ end
46
+
47
+ it 'get CSS asset from a custom location' do
48
+ assets_location = @assets_location
49
+ pipeline = @pipeline
50
+ mock_app do
51
+ register Padrino::Pipeline
52
+ configure_assets do |assets|
53
+ assets.pipeline = pipeline
54
+ assets.css_assets = assets_location
55
+ end
56
+ end
57
+
58
+ get '/assets/stylesheets/app.css'
59
+ assert_equal 200, last_response.status
60
+ end
61
+
62
+ it 'get CSS asset from custom location(Array)' do
63
+ assets_location = @assets_location
64
+ pipeline = @pipeline
65
+ mock_app do
66
+ register Padrino::Pipeline
67
+ configure_assets do |assets|
68
+ assets.pipeline = pipeline
69
+ assets.css_assets = ['some/unknown/source', assets_location]
70
+ assets.css_prefix = '/custom/location'
71
+ end
72
+ end
73
+ get '/custom/location/app.css'
74
+ assert_equal 200, last_response.status
75
+ end
76
+
77
+ it 'get CSS asset form custom URI' do
78
+ assets_location = @assets_location
79
+ pipeline = @pipeline
80
+ mock_app do
81
+ register Padrino::Pipeline
82
+ configure_assets do |assets|
83
+ assets.pipeline = pipeline
84
+ assets.css_assets = assets_location
85
+ assets.css_prefix = '/custom/location'
86
+ end
87
+ end#mock-app
88
+ get '/custom/location/app.css'
89
+ assert_equal 200, last_response.status
90
+ end
91
+ end
92
+ end
93
+
94
+ describe Padrino::Pipeline::Sprockets do
95
+ before { @pipeline = Padrino::Pipeline::Sprockets }
96
+ it_behaves_like 'A Pipeline'
97
+ end
98
+
99
+ describe Padrino::Pipeline::AssetPack do
100
+ before { @pipeline = Padrino::Pipeline::AssetPack}
101
+ it_behaves_like 'A Pipeline'
102
+ end
103
+
104
+
@@ -0,0 +1,113 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../extra/helper')
2
+
3
+ shared_examples_for 'A Pipeline' do
4
+ describe 'default options' do
5
+ let(:app) { rack_app }
6
+ before do
7
+ pipeline = @pipeline
8
+ app_root = fixture_path('sprockets_app')
9
+ mock_app do
10
+ set :root, app_root
11
+ register Padrino::Pipeline
12
+ configure_assets{ |c| c.pipeline = pipeline }
13
+ end
14
+
15
+ end
16
+
17
+ it 'can get an image' do
18
+ get '/assets/images/glass.png'
19
+ assert_equal 200, last_response.status
20
+ end
21
+
22
+ it 'should have the right content type' do
23
+ get '/assets/images/glass.png'
24
+ assert_equal 'image/png', last_response.content_type
25
+ end
26
+
27
+ it 'gives 404 for unkown image files' do
28
+ skip if @pipeline == Padrino::Pipeline::AssetPack #http_router issue :(
29
+ get '/assets/images/unkown.png'
30
+ assert_equal 404, last_response.status
31
+ end
32
+ end
33
+
34
+ describe 'custom options' do
35
+ let(:app) { rack_app }
36
+ before do
37
+ @assets_location = "#{fixture_path('sprockets_app')}/assets/images"
38
+ end
39
+
40
+ it 'get image asset from a custom location' do
41
+ assets_location = @assets_location
42
+ pipeline = @pipeline
43
+ mock_app do
44
+ register Padrino::Pipeline
45
+ configure_assets do |assets|
46
+ assets.pipeline = pipeline
47
+ assets.image_assets = assets_location
48
+ end
49
+ end
50
+
51
+ get '/assets/images/glass.png'
52
+ assert_equal 200, last_response.status
53
+ end
54
+
55
+ it 'get image asset from a custom location(Array)' do
56
+ assets_location = @assets_location
57
+ pipeline = @pipeline
58
+ mock_app do
59
+ register Padrino::Pipeline
60
+ configure_assets do |assets|
61
+ assets.pipeline = pipeline
62
+ assets.image_assets = ['some/unkown/place', assets_location]
63
+ end
64
+ end
65
+
66
+ get '/assets/images/glass.png'
67
+ assert_equal 200, last_response.status
68
+ end
69
+
70
+ it 'get image asset form custom URI' do
71
+ assets_location = @assets_location
72
+ pipeline = @pipeline
73
+ mock_app do
74
+ register Padrino::Pipeline
75
+ configure_assets do |assets|
76
+ assets.pipeline = pipeline
77
+ assets.image_assets = assets_location
78
+ assets.image_prefix = '/custom/location'
79
+ end
80
+ end#mock-app
81
+ get '/custom/location/glass.png'
82
+ assert_equal 200, last_response.status
83
+ end
84
+
85
+ it 'get image asset form custom prefix' do
86
+ assets_location = @assets_location
87
+ pipeline = @pipeline
88
+ mock_app do
89
+ register Padrino::Pipeline
90
+ configure_assets do |assets|
91
+ assets.pipeline = pipeline
92
+ assets.image_assets = assets_location
93
+ assets.prefix = '/custom'
94
+ end
95
+ end#mock-app
96
+ get '/custom/assets/images/glass.png'
97
+ assert_equal 200, last_response.status
98
+ end
99
+
100
+ end
101
+ end
102
+
103
+ describe Padrino::Pipeline::Sprockets do
104
+ before { @pipeline = Padrino::Pipeline::Sprockets }
105
+ it_behaves_like 'A Pipeline'
106
+ end
107
+
108
+ describe Padrino::Pipeline::AssetPack do
109
+ before { @pipeline = Padrino::Pipeline::AssetPack}
110
+ it_behaves_like 'A Pipeline'
111
+ end
112
+
113
+
@@ -0,0 +1,111 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../extra/helper')
2
+
3
+ shared_examples_for 'A Pipeline' do
4
+ describe 'default options' do
5
+ let(:app) { rack_app }
6
+ before do
7
+ pipeline = @pipeline
8
+ app_root = fixture_path('asset_pack_app')
9
+ mock_app do
10
+ set :root, app_root
11
+ register Padrino::Pipeline
12
+ configure_assets{ |c| c.pipeline = pipeline }
13
+ end
14
+ end
15
+
16
+ it 'GET a basic JS file' do
17
+ get '/assets/javascripts/app.js'
18
+ assert_equal 200, last_response.status
19
+ assert_match 'var mainApp', last_response.body
20
+ end
21
+
22
+ it 'GET a coffee script file' do
23
+ get '/assets/javascripts/coffee.js'
24
+ assert_equal 200, last_response.status
25
+ assert_match 'coffee', last_response.body
26
+ end
27
+
28
+ it 'is the right content type' do
29
+ get '/assets/javascripts/app.js'
30
+ assert_match 'application/javascript', last_response.content_type
31
+ end
32
+
33
+ it 'can not get a file other than .js' do
34
+ skip if @pipeline == Padrino::Pipeline::AssetPack #http_router issue :(
35
+ get '/assets/javscripts/coffee.coffee'
36
+ assert_equal 404, last_response.status
37
+ end
38
+
39
+
40
+ it 'gives 404 for unknown JS file' do
41
+ skip if @pipeline == Padrino::Pipeline::AssetPack #http_router issue :(
42
+ get '/assets/javascripts/doesnotexist.js'
43
+ assert_equal 404, last_response.status
44
+ end
45
+ end
46
+
47
+
48
+ describe 'custom options' do
49
+ let(:app) { rack_app }
50
+ before do
51
+ @assets_location = "#{fixture_path('asset_pack_app')}/assets/javascripts"
52
+ end
53
+
54
+ it 'get JS asset from a custom location' do
55
+ assets_location = @assets_location
56
+ pipeline = @pipeline
57
+ mock_app do
58
+ register Padrino::Pipeline
59
+ configure_assets do |assets|
60
+ assets.pipeline = pipeline
61
+ assets.js_assets = assets_location
62
+ end
63
+ end
64
+
65
+ get '/assets/javascripts/app.js'
66
+ assert_equal 200, last_response.status
67
+ end
68
+
69
+ it 'get JS asset from custom location(Array)' do
70
+ assets_location = @assets_location
71
+ pipeline = @pipeline
72
+ mock_app do
73
+ register Padrino::Pipeline
74
+ configure_assets do |assets|
75
+ assets.pipeline = pipeline
76
+ assets.js_assets = ['some/unknown/source', assets_location]
77
+ assets.js_prefix = '/custom/location'
78
+ end
79
+ end
80
+ get '/custom/location/app.js'
81
+ assert_equal 200, last_response.status
82
+ end
83
+
84
+ it 'get JS asset form custom URI' do
85
+ assets_location = @assets_location
86
+ pipeline = @pipeline
87
+ mock_app do
88
+ register Padrino::Pipeline
89
+ configure_assets do |assets|
90
+ assets.pipeline = pipeline
91
+ assets.js_assets = assets_location
92
+ assets.js_prefix = '/custom/location'
93
+ end
94
+ end#mock-app
95
+ get '/custom/location/app.js'
96
+ assert_equal 200, last_response.status
97
+ end
98
+ end
99
+ end
100
+
101
+ describe Padrino::Pipeline::Sprockets do
102
+ before { @pipeline = Padrino::Pipeline::Sprockets }
103
+ it_behaves_like 'A Pipeline'
104
+ end
105
+
106
+ describe Padrino::Pipeline::AssetPack do
107
+ before { @pipeline = Padrino::Pipeline::AssetPack}
108
+ it_behaves_like 'A Pipeline'
109
+ end
110
+
111
+
@@ -0,0 +1,47 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../extra/helper')
2
+
3
+ shared_examples_for 'A Pipeline' do
4
+ describe 'non-default options' do
5
+ let(:app) { rack_app }
6
+ before do
7
+ @assets_location = "#{fixture_path('asset_pack_app')}/assets/javascripts"
8
+ end
9
+
10
+ it 'knows that assets should be served' do
11
+ pipeline = @pipeline
12
+ mock_app do
13
+ register Padrino::Pipeline
14
+ configure_assets {|c| c.pipeline = pipeline}
15
+ end
16
+
17
+ assert_equal true, @app.serve_assets?
18
+ end
19
+
20
+ it 'can set a general prefix for all asset types' do
21
+ assets_location = @assets_location
22
+ pipeline = @pipeline
23
+ mock_app do
24
+ register Padrino::Pipeline
25
+ configure_assets do |assets|
26
+ assets.pipeline = pipeline
27
+ assets.js_assets = assets_location
28
+ assets.prefix = '/trunk'
29
+ end
30
+ end
31
+
32
+ get '/trunk/assets/javascripts/app.js'
33
+ assert_equal 200, last_response.status
34
+ end
35
+ end
36
+ end
37
+
38
+
39
+ describe Padrino::Pipeline::Sprockets do
40
+ before { @pipeline = Padrino::Pipeline::Sprockets }
41
+ it_behaves_like 'A Pipeline'
42
+ end
43
+
44
+ describe Padrino::Pipeline::AssetPack do
45
+ before { @pipeline = Padrino::Pipeline::AssetPack}
46
+ it_behaves_like 'A Pipeline'
47
+ end
data/test/extra/helper.rb CHANGED
@@ -28,6 +28,27 @@ class MiniTest::Spec
28
28
  end
29
29
  end
30
30
 
31
+ MiniTest::Spec.class_eval do
32
+ def self.shared_examples
33
+ @shared_examples ||= {}
34
+ end
35
+ end
36
+
37
+ module MiniTest::Spec::SharedExamples
38
+ def shared_examples_for(desc, &block)
39
+ MiniTest::Spec.shared_examples[desc] = block
40
+ end
41
+
42
+ def it_behaves_like(desc)
43
+ self.instance_eval do
44
+ MiniTest::Spec.shared_examples[desc].call
45
+ end
46
+ end
47
+ end
48
+
49
+ Object.class_eval { include(MiniTest::Spec::SharedExamples) }
50
+
51
+
31
52
  module Webrat
32
53
  module Logging
33
54
  def logger # @private
@@ -22,10 +22,10 @@ class AssetsAppAssetPackCustom < BaseApp
22
22
  configure_assets do |config|
23
23
  config.pipeline = Padrino::Pipeline::AssetPack
24
24
  config.js_prefix = '/meow/javascripts'
25
- config.js_assets = '/assets/js'
25
+ config.js_assets = 'assets/js'
26
26
 
27
27
  config.css_prefix = '/meow/stylesheets'
28
- config.css_assets = '/assets/css'
28
+ config.css_assets = 'assets/css'
29
29
  end
30
30
  end
31
31
 
@@ -12,8 +12,8 @@ describe 'Asset tags' do
12
12
  register Padrino::Pipeline
13
13
  register Padrino::Helpers
14
14
  configure_assets do |assets|
15
- assets.pipeline = Padrino::Pipeline::Sprockets
16
- assets.paths = [assets_location]
15
+ assets.pipeline = Padrino::Pipeline::Sprockets
16
+ assets.js_assets = [assets_location]
17
17
  end
18
18
  get('/') { render :erb, "<%= javascript_include_tag 'app.js' %>" }
19
19
  end
@@ -4,76 +4,11 @@ require File.expand_path(File.dirname(__FILE__) + '/../fixtures/sprockets_app/sp
4
4
 
5
5
  describe 'Javascripts' do
6
6
  let(:app) { AssetsAppSprockets }
7
- context 'for coffeescript assets' do
8
- it 'can get a coffeescript' do
9
- get '/assets/javascripts/coffee.js'
10
- assert_equal 200, last_response.status
11
- end
12
-
13
- it 'is compiled' do
14
- get '/assets/javascripts/coffee.js'
15
- assert_match 'a="yes"', last_response.body
7
+ context 'for //= require' do
8
+ it 'picks up require statements' do
9
+ get '/assets/javascripts/app.js'
10
+ assert_match 'var in_second_file;', last_response.body
16
11
  end
17
12
  end
18
-
19
- context 'for javascript assets' do
20
- it 'can retrieve a js asset by file name' do
21
- get '/assets/javascripts/unrequired.js'
22
- assert_match 'var unrequired;', last_response.body
23
- end
24
-
25
- it 'is the right content type' do
26
- get '/assets/javascripts/unrequired.js'
27
- assert_match 'application/javascript', last_response.content_type
28
- end
29
-
30
- it 'shows a 404 for unkown assets' do
31
- get '/assets/javascripts/xyz.js'
32
- assert_not_equal 200, last_response.status
33
- end
34
-
35
- context 'for //= require' do
36
- it 'picks up require statements' do
37
- get '/assets/javascripts/app.js'
38
- assert_match 'var in_second_file;', last_response.body
39
- end
40
- end
41
-
42
- context 'for custom options' do
43
- let(:app) { rack_app }
44
- before do
45
- @assets_location = "#{fixture_path('sprockets_app')}/assets/javascripts"
46
- end
47
-
48
- it '#append_asset_path' do
49
- assets_location = @assets_location
50
- mock_app do
51
- register Padrino::Pipeline
52
- configure_assets do |assets|
53
- assets.pipeline = Padrino::Pipeline::Sprockets
54
- assets.paths = [assets_location]
55
- end
56
- end
57
-
58
- get '/assets/javascripts/app.js'
59
- assert_match 'var in_second_file', last_response.body
60
- end
61
-
62
- it '#js_prefix mounts assets to the correct spot' do
63
- assets_location = @assets_location
64
- mock_app do
65
- register Padrino::Pipeline
66
- configure_assets do |assets|
67
- assets.pipeline = Padrino::Pipeline::Sprockets
68
- assets.paths = [assets_location]
69
- assets.js_prefix = '/custom/location'
70
- end
71
- end#mock-app
72
- get '/custom/location/app.js'
73
- assert_match 'var in_second_file', last_response.body
74
- assert_equal 200, last_response.status
75
- end
76
-
77
- end#context
78
- end#context
13
+
79
14
  end#describe
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: padrino-pipeline
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sumeet Singh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-08 00:00:00.000000000 Z
11
+ date: 2013-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: padrino-core
@@ -138,11 +138,14 @@ files:
138
138
  - lib/padrino-pipeline.rb
139
139
  - lib/padrino-pipeline/ext/padrino-helpers/asset_tag_helper.rb
140
140
  - lib/padrino-pipeline/pipelines/asset_pack.rb
141
+ - lib/padrino-pipeline/pipelines/common.rb
141
142
  - lib/padrino-pipeline/pipelines/sprockets.rb
142
143
  - lib/padrino-pipeline/version.rb
143
144
  - padrino-pipeline.gemspec
144
- - test/asset_pack/test_css.rb
145
- - test/asset_pack/test_js.rb
145
+ - test/api/test_css.rb
146
+ - test/api/test_images.rb
147
+ - test/api/test_js.rb
148
+ - test/api/test_other.rb
146
149
  - test/asset_pack/test_packages.rb
147
150
  - test/extra/helper.rb
148
151
  - test/extra/mini_shoulda.rb
@@ -165,8 +168,6 @@ files:
165
168
  - test/fixtures/sprockets_app/assets/stylesheets/second_file.css
166
169
  - test/fixtures/sprockets_app/sprockets_app.rb
167
170
  - test/sprockets/test_asset_tag.rb
168
- - test/sprockets/test_assets.rb
169
- - test/sprockets/test_css.rb
170
171
  - test/sprockets/test_js.rb
171
172
  homepage: http://www.padrinorb.com
172
173
  licenses: []
@@ -193,8 +194,10 @@ signing_key:
193
194
  specification_version: 4
194
195
  summary: The Padrino asset management system
195
196
  test_files:
196
- - test/asset_pack/test_css.rb
197
- - test/asset_pack/test_js.rb
197
+ - test/api/test_css.rb
198
+ - test/api/test_images.rb
199
+ - test/api/test_js.rb
200
+ - test/api/test_other.rb
198
201
  - test/asset_pack/test_packages.rb
199
202
  - test/extra/helper.rb
200
203
  - test/extra/mini_shoulda.rb
@@ -217,7 +220,5 @@ test_files:
217
220
  - test/fixtures/sprockets_app/assets/stylesheets/second_file.css
218
221
  - test/fixtures/sprockets_app/sprockets_app.rb
219
222
  - test/sprockets/test_asset_tag.rb
220
- - test/sprockets/test_assets.rb
221
- - test/sprockets/test_css.rb
222
223
  - test/sprockets/test_js.rb
223
224
  has_rdoc:
@@ -1,33 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../extra/helper')
2
- require File.expand_path(File.dirname(__FILE__) + '/../fixtures/asset_pack_app/asset_pack_app')
3
-
4
- describe 'AssetPack Stylesheets' do
5
- let(:app) { AssetsAppAssetPack }
6
-
7
- it 'can get a stylesheet file' do
8
- get '/assets/stylesheets/app.css'
9
- assert_equal 200, last_response.status
10
- end
11
-
12
- it 'makes sure that sass is compiled' do
13
- get '/assets/stylesheets/default.css'
14
- assert_equal 200, last_response.status
15
- assert_match ".content {\n display: none; }\n", last_response.body
16
- end
17
-
18
- it 'gives 404 for unknown files' do
19
- get '/assets/stylesheets/omg.css'
20
- assert_equal 404, last_response.status
21
- end
22
-
23
- context 'for non-defualt options' do
24
- let(:app) { AssetsAppAssetPackCustom }
25
-
26
- it 'can serve from another stylesheets path' do
27
- get '/meow/stylesheets/meow.css'
28
- assert_equal 200, last_response.status
29
- assert_match '.meow', last_response.body
30
- end
31
-
32
- end
33
- end
@@ -1,33 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../extra/helper')
2
- require File.expand_path(File.dirname(__FILE__) + '/../fixtures/asset_pack_app/asset_pack_app')
3
-
4
- describe 'AssetPack Javascripts' do
5
- let(:app) { AssetsAppAssetPack }
6
-
7
- it 'can get a javascript file' do
8
- get '/assets/javascripts/app.js'
9
- assert_equal 200, last_response.status
10
- assert_match 'var mainApp = true;', last_response.body
11
- end
12
-
13
- it 'makes sure that coffeescript is compiled' do
14
- get '/assets/javascripts/coffee.js'
15
- assert_equal 200, last_response.status
16
- assert_match 'coffee = true', last_response.body
17
- end
18
-
19
- it 'gives 404 for unknown files' do
20
- get '/assets/javascripts/omg.js'
21
- assert_equal 404, last_response.status
22
- end
23
-
24
- context 'for non-defualt options' do
25
- let(:app) { AssetsAppAssetPackCustom }
26
-
27
- it 'can serve from another javascript path' do
28
- get '/meow/javascripts/myapp.js'
29
- assert_equal 200, last_response.status
30
- end
31
-
32
- end
33
- end
@@ -1,40 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../extra/helper')
2
-
3
- describe Padrino::Pipeline do
4
- let(:app) { AssetsAppSprockets }
5
-
6
- context 'for application behavior' do
7
- it 'knows that assets should be served' do
8
- assert_equal app.serve_assets?, true
9
- end
10
-
11
- it 'detects the root location of the running app' do
12
- app_path = fixture_path('sprockets_app')
13
- assert_equal app_path, app.root
14
- end
15
- end
16
-
17
- context 'general options' do
18
- let(:app) { rack_app }
19
-
20
- before do
21
- @assets_location = "#{fixture_path('sprockets_app')}/assets/javascripts"
22
- end
23
-
24
- it 'can set a general prefix for all asset types' do
25
- assets_location = @assets_location
26
- mock_app do
27
- register Padrino::Pipeline
28
- configure_assets do |assets|
29
- assets.pipeline = Padrino::Pipeline::Sprockets
30
- assets.paths = [assets_location]
31
- assets.prefix = '/trunk'
32
- end
33
- end
34
-
35
- get '/trunk/assets/javascripts/app.js'
36
- assert_equal 200, last_response.status
37
- end
38
- end
39
-
40
- end#describe
@@ -1,68 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../extra/helper')
2
-
3
- describe 'Stylesheets' do
4
- let(:app) { AssetsAppSprockets }
5
-
6
- context 'for css assets' do
7
- it 'can retrieve an css asset by file name' do
8
- get '/assets/stylesheets/application.css'
9
- assert_equal 200, last_response.status
10
- end
11
-
12
- it 'is the right content type' do
13
- get '/assets/stylesheets/application.css'
14
- assert_match 'text/css', last_response.content_type
15
- end
16
-
17
- it 'works with directives' do
18
- get '/assets/stylesheets/application.css'
19
- assert_match '.home {', last_response.body
20
- end
21
-
22
- context 'for SASS assets' do
23
-
24
- it 'can retrieve a .scss asset by file name' do
25
- get '/assets/stylesheets/sass.css'
26
- assert_match 'body .div', last_response.body
27
- end
28
-
29
- end
30
-
31
- context 'for custom options' do
32
- let(:app) { rack_app }
33
- before do
34
- @assets_location = "#{fixture_path('sprockets_app')}/assets/stylesheets"
35
- end
36
-
37
- it 'can modify the default asset path by configuration' do
38
- assets_location = "#{fixture_path('sprockets_app')}/assets/other"
39
- mock_app do
40
- register Padrino::Pipeline
41
- configure_assets do |assets|
42
- assets.pipeline = Padrino::Pipeline::Sprockets
43
- assets.paths = [assets_location]
44
- end
45
- end
46
-
47
- get '/assets/stylesheets/other.css'
48
- assert_equal 200, last_response.status
49
- end
50
-
51
- it 'can modify the default css prefix by configuration' do
52
- assets_location = @assets_location
53
- mock_app do
54
- register Padrino::Pipeline
55
- configure_assets do |assets|
56
- assets.pipeline = Padrino::Pipeline::Sprockets
57
- assets.paths = [assets_location]
58
- assets.css_prefix = '/myassets/items'
59
- end
60
- end
61
-
62
- get '/myassets/items/application.css'
63
- assert_equal 200, last_response.status
64
- end
65
-
66
- end #context
67
- end #context
68
- end #describe