padrino-pipeline 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.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/.travis.yml +14 -0
  4. data/Gemfile +10 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.md +60 -0
  7. data/Rakefile +14 -0
  8. data/lib/padrino-pipeline.rb +18 -0
  9. data/lib/padrino-pipeline/ext/padrino-helpers/asset_tag_helper.rb +12 -0
  10. data/lib/padrino-pipeline/pipelines/asset_pack.rb +56 -0
  11. data/lib/padrino-pipeline/pipelines/sprockets.rb +61 -0
  12. data/lib/padrino-pipeline/version.rb +5 -0
  13. data/padrino-pipeline.gemspec +34 -0
  14. data/test/asset_pack/test_css.rb +33 -0
  15. data/test/asset_pack/test_js.rb +33 -0
  16. data/test/asset_pack/test_packages.rb +61 -0
  17. data/test/extra/helper.rb +39 -0
  18. data/test/extra/mini_shoulda.rb +44 -0
  19. data/test/fixtures/asset_pack_app/asset_pack_app.rb +32 -0
  20. data/test/fixtures/asset_pack_app/assets/css/meow.css +3 -0
  21. data/test/fixtures/asset_pack_app/assets/javascripts/app.js +1 -0
  22. data/test/fixtures/asset_pack_app/assets/javascripts/coffee.coffee +1 -0
  23. data/test/fixtures/asset_pack_app/assets/javascripts/other.js +1 -0
  24. data/test/fixtures/asset_pack_app/assets/js/myapp.js +0 -0
  25. data/test/fixtures/asset_pack_app/assets/stylesheets/app.css +3 -0
  26. data/test/fixtures/asset_pack_app/assets/stylesheets/default.scss +3 -0
  27. data/test/fixtures/sprockets_app/assets/images/glass.png +0 -0
  28. data/test/fixtures/sprockets_app/assets/javascripts/app.js +2 -0
  29. data/test/fixtures/sprockets_app/assets/javascripts/coffee.js.coffee +1 -0
  30. data/test/fixtures/sprockets_app/assets/javascripts/second_js_file.js +1 -0
  31. data/test/fixtures/sprockets_app/assets/javascripts/unrequired.js +1 -0
  32. data/test/fixtures/sprockets_app/assets/other/other.css +0 -0
  33. data/test/fixtures/sprockets_app/assets/stylesheets/application.css +1 -0
  34. data/test/fixtures/sprockets_app/assets/stylesheets/sass.scss +5 -0
  35. data/test/fixtures/sprockets_app/assets/stylesheets/second_file.css +3 -0
  36. data/test/fixtures/sprockets_app/sprockets_app.rb +19 -0
  37. data/test/sprockets/test_asset_tag.rb +27 -0
  38. data/test/sprockets/test_assets.rb +40 -0
  39. data/test/sprockets/test_css.rb +68 -0
  40. data/test/sprockets/test_js.rb +79 -0
  41. metadata +223 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c9eb1b49916318fbeb59d6b2f7b44382eaaa7a10
4
+ data.tar.gz: da6aa8f8a18ef8c9df137f719d2110d769016b03
5
+ SHA512:
6
+ metadata.gz: f4325db977da9487c2e10572e7516a7cfc748e9bc0a47200ce7e84ef1805b0dadec2c1c10468e9bd43206634f02a0f25d2b9219dc0c59757c48d5d6317bfba00
7
+ data.tar.gz: beee248b82501aac96ea301bc223492c799e93e62dde8a50853f61da5a960f659b1374693f2ba529e5a2d390792728476f5103d3ddcdde65750e8107318b1ab7
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ Gemfile.lock
2
+ .sass-cache
data/.travis.yml ADDED
@@ -0,0 +1,14 @@
1
+ lang: ruby
2
+ before_install: gem install bundler --pre
3
+ install:
4
+ - gem update --system
5
+ - bundle update
6
+ rvm:
7
+ - 1.8.7
8
+ - 1.9.3
9
+ - 2.0.0
10
+ - rbx-18mode
11
+ - jruby-19mode
12
+ branches:
13
+ only:
14
+ - master
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+ gem "rake"
5
+
6
+ group :test do
7
+ gem "webrat", ">= 0.5.1"
8
+ gem "rack-test", ">= 0.5.0"
9
+ gem "minitest", "~> 4.0"
10
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Padrino
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,60 @@
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
9
+ ```ruby
10
+ gem 'padrino-assets', :github => 'Ortuna/padrino-assets'
11
+ ```
12
+
13
+ ##Basic usage
14
+
15
+ ```ruby
16
+ module Ortuna
17
+ class App < Padrino::Application
18
+ register Padrino::Assets
19
+ configure_assets do |assets|
20
+ assets.pipeline = Padrino::Assets::Sprockets
21
+ end
22
+ end
23
+ end
24
+ ```
25
+
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
30
+ ```ruby
31
+ module Ortuna
32
+ class App < Padrino::Application
33
+ register Padrino::Assets
34
+
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
40
+
41
+ assets.prefix = '/trunk' #general prefix, /trunk/assets/javascripts/xyz.js
42
+ end
43
+ end
44
+ end
45
+ ```
46
+
47
+ visit `http://localhost:3000/custom/location/app.js` will map to the file
48
+ app/assets/javascripts/app.js
49
+
50
+ visit `http://localhost:3000/custom/stylesheets/main.css` will map to the file
51
+ app/assets/stylesheets/main.css
52
+
53
+ use sprockets helpers like you would:
54
+ ```javascript
55
+ //= require stuff
56
+ function stuff() {
57
+
58
+ }
59
+ ```
60
+
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ # coding:utf-8
2
+ RAKE_ROOT = __FILE__
3
+
4
+ require 'rubygems' unless defined?(Gem)
5
+ require 'rake'
6
+ require 'rake/testtask'
7
+ require 'bundler/gem_tasks'
8
+ Rake::TestTask.new(:test) do |test|
9
+ test.libs << 'test'
10
+ test.test_files = Dir['test/**/test_*.rb']
11
+ test.verbose = true
12
+ end
13
+
14
+ task :default => :test
@@ -0,0 +1,18 @@
1
+ require 'padrino-pipeline/pipelines/sprockets'
2
+ require 'padrino-pipeline/pipelines/asset_pack'
3
+ require 'ostruct'
4
+
5
+ module Padrino
6
+ ##
7
+ # Add public api docs here
8
+ module Pipeline
9
+
10
+ def configure_assets(&block)
11
+ assets = OpenStruct.new
12
+ assets.packages = []
13
+ yield assets if block_given?
14
+ assets.pipeline.new(self, assets)
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,12 @@
1
+ module Padrino
2
+ module Helpers
3
+ module AssetTagHelpers
4
+
5
+ # alias :original_asset_path :asset_path
6
+ # def asset_path(kind, source)
7
+ # original_asset_path(kind, source)
8
+ # end
9
+
10
+ end #AssetTagHelpers
11
+ end #Helpers
12
+ end #Padrino
@@ -0,0 +1,56 @@
1
+ require 'sinatra/assetpack' unless defined? Sinatra::AssetPack
2
+
3
+ module Padrino
4
+ module Pipeline
5
+ class AssetPack
6
+ def initialize(app, config)
7
+ @app = app
8
+ @config = config
9
+ setup_enviroment
10
+ setup_pipeline
11
+ end
12
+
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
+ def packages
30
+ @config.packages || []
31
+ end
32
+
33
+ private
34
+ def setup_enviroment
35
+ @app.set :serve_assets, true
36
+ @app.register Sinatra::AssetPack
37
+ end
38
+
39
+ 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
43
+
44
+ @app.assets {
45
+ serve js_prefix, :from => js_assets
46
+ serve css_prefix,:from => css_assets
47
+
48
+ packages.each { |package| send(package.shift, *package) }
49
+
50
+ js_compression :uglify
51
+ css_compression :simple
52
+ }
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,61 @@
1
+ require 'sprockets'
2
+ require 'uglifier'
3
+ require 'padrino-pipeline/ext/padrino-helpers/asset_tag_helper'
4
+
5
+ module Padrino
6
+ module Pipeline
7
+ class Sprockets
8
+ def initialize(app, config)
9
+ @app = app
10
+ @config = config
11
+ setup_enviroment
12
+ setup_sprockets
13
+ end
14
+
15
+ 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"]
22
+ end
23
+
24
+ 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')
29
+ end
30
+
31
+ def setup_enviroment
32
+ @app.set :serve_assets, true
33
+ @app.set :assets, ::Sprockets::Environment.new
34
+ @app.settings.assets.js_compressor = Uglifier.new(:mangle => true)
35
+ end
36
+
37
+ def mount_js_assets(prefix)
38
+ mount_assets(:prefix => prefix,
39
+ :extension => "js",
40
+ :content_type => "application/javascript")
41
+ end
42
+
43
+ def mount_css_assets(prefix)
44
+ mount_assets(:prefix => prefix,
45
+ :extension => "css",
46
+ :content_type => "text/css")
47
+ end
48
+
49
+ def mount_assets(options = {})
50
+ prefix = options[:prefix]
51
+ extension = options[:extension]
52
+ 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
56
+ end
57
+ end
58
+
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,5 @@
1
+ module Padrino
2
+ module Pipeline
3
+ VERSION = '0.2.0'
4
+ end
5
+ end
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env gem build
2
+ # encoding: utf-8
3
+
4
+ require File.expand_path("../lib/padrino-pipeline/version.rb", __FILE__)
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "padrino-pipeline"
8
+ s.rubyforge_project = "padrino-pipeline"
9
+ s.authors = ["Sumeet Singh"]
10
+ s.email = "ortuna@gmail.com"
11
+ s.summary = "The Padrino asset management system"
12
+ s.homepage = "http://www.padrinorb.com"
13
+ s.description = "The Padrino asset management system allowing frictionless serving of assets"
14
+ s.required_rubygems_version = ">= 1.3.6"
15
+ s.version = Padrino::Pipeline::VERSION
16
+ s.date = Time.now.strftime("%Y-%m-%d")
17
+
18
+ s.extra_rdoc_files = Dir["*.rdoc"]
19
+ s.files = `git ls-files`.split("\n")
20
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
22
+ s.require_paths = ["lib"]
23
+ s.rdoc_options = ["--charset=UTF-8"]
24
+
25
+ s.add_dependency("padrino-core", "~> 0.11.0")
26
+ s.add_dependency("padrino-helpers", "~> 0.11.0")
27
+ s.add_dependency("coffee-script", "~> 2.2.0")
28
+ s.add_dependency("sass", "~> 3.2.0")
29
+ s.add_dependency("sprockets", "~> 2.10.0")
30
+ s.add_dependency("uglifier", "~> 2.1.0")
31
+
32
+ s.add_dependency("sinatra-assetpack", "~> 0.2.0")
33
+ s.add_dependency("padrino-core", "~> 0.11.0")
34
+ end
@@ -0,0 +1,33 @@
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
@@ -0,0 +1,33 @@
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
@@ -0,0 +1,61 @@
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 Packages' do
5
+ let(:app) { rack_app }
6
+
7
+ context 'for javascripts' do
8
+ it 'can serve an asset pack' do
9
+ mock_app do
10
+ register Padrino::Pipeline
11
+ configure_assets do |config|
12
+ config.pipeline = Padrino::Pipeline::AssetPack
13
+ config.packages << [:js, :application, '/assets/javascripts/application.js', ['/assets/javascripts/*.js']]
14
+ end
15
+ end
16
+ get '/assets/javascripts/application.js'
17
+ assert_equal 200, last_response.status
18
+ end
19
+
20
+ it 'can serve an asset pack from a non-standard location' do
21
+ mock_app do
22
+ register Padrino::Pipeline
23
+ configure_assets do |config|
24
+ config.pipeline = Padrino::Pipeline::AssetPack
25
+ config.js_prefix = '/meow/javascripts'
26
+ config.packages << [:js, :application, '/meow/javascripts/application.js', ['/assets/javascripts/*.js']]
27
+ end
28
+ end
29
+ get '/meow/javascripts/application.js'
30
+ assert_equal 200, last_response.status
31
+ end
32
+ end
33
+
34
+ context 'for stylesheets' do
35
+ it 'can serve an asset pack' do
36
+ mock_app do
37
+ register Padrino::Pipeline
38
+ configure_assets do |config|
39
+ config.pipeline = Padrino::Pipeline::AssetPack
40
+ config.packages << [:css, :application, '/assets/stylesheets/application.css', ['/assets/stylesheets/*.css']]
41
+ end
42
+ end
43
+ get '/assets/stylesheets/application.css'
44
+ assert_equal 200, last_response.status
45
+ end
46
+
47
+ it 'can serve an asset pack from a non-standard location' do
48
+ mock_app do
49
+ register Padrino::Pipeline
50
+ configure_assets do |config|
51
+ config.pipeline = Padrino::Pipeline::AssetPack
52
+ config.js_prefix = '/meow/stylesheets'
53
+ config.packages << [:css, :application, '/meow/stylesheets/application.css', ['/assets/stylesheets/*.css']]
54
+ end
55
+ end
56
+ get '/meow/stylesheets/application.css'
57
+ assert_equal 200, last_response.status
58
+ end
59
+ end
60
+
61
+ end
@@ -0,0 +1,39 @@
1
+ require File.join(File.dirname(__FILE__), 'mini_shoulda')
2
+ require File.join(File.dirname(__FILE__), '..' , 'fixtures', 'sprockets_app', 'sprockets_app')
3
+
4
+ require 'rack/test'
5
+ require 'webrat'
6
+ require 'padrino-helpers'
7
+
8
+ class MiniTest::Spec
9
+ include Rack::Test::Methods
10
+ include Webrat::Methods
11
+ include Webrat::Matchers
12
+
13
+ Webrat.configure { |config| config.mode = :rack }
14
+
15
+ def mock_app(base=Padrino::Application, &block)
16
+ @app = Sinatra.new(base, &block)
17
+ @app.set :logging, false
18
+ @app.set :padrino_logging, false
19
+ end
20
+
21
+ def rack_app
22
+ Rack::Lint.new(@app)
23
+ end
24
+
25
+ def fixture_path(fixture)
26
+ test_path = File.expand_path(File.dirname(__FILE__) + '/..')
27
+ "#{test_path}/fixtures/#{fixture}"
28
+ end
29
+ end
30
+
31
+ module Webrat
32
+ module Logging
33
+ def logger # @private
34
+ @logger = nil
35
+ end
36
+ end
37
+ end
38
+
39
+
@@ -0,0 +1,44 @@
1
+ gem 'minitest'
2
+ require 'minitest/autorun'
3
+ require 'minitest/spec'
4
+
5
+ begin
6
+ require 'ruby-debug'
7
+ rescue LoadError; end
8
+
9
+ class MiniTest::Spec
10
+ class << self
11
+ alias :setup :before unless defined?(Rails)
12
+ alias :teardown :after unless defined?(Rails)
13
+ alias :should :it
14
+ alias :context :describe
15
+ def should_eventually(desc)
16
+ it("should eventually #{desc}") { skip("Should eventually #{desc}") }
17
+ end
18
+ end
19
+ alias :assert_no_match :refute_match
20
+ alias :assert_not_nil :refute_nil
21
+ alias :assert_not_equal :refute_equal
22
+ end
23
+
24
+ class ColoredIO
25
+ def initialize(io)
26
+ @io = io
27
+ end
28
+
29
+ def print(o)
30
+ case o
31
+ when "." then @io.send(:print, o.green)
32
+ when "E" then @io.send(:print, o.red)
33
+ when "F" then @io.send(:print, o.yellow)
34
+ when "S" then @io.send(:print, o.magenta)
35
+ else @io.send(:print, o)
36
+ end
37
+ end
38
+
39
+ def puts(*o)
40
+ super
41
+ end
42
+ end
43
+
44
+ MiniTest::Unit.output = ColoredIO.new(MiniTest::Unit.output)
@@ -0,0 +1,32 @@
1
+ require 'padrino-core'
2
+ require 'padrino-pipeline'
3
+
4
+ class BaseApp < Sinatra::Base
5
+ register Padrino::Pipeline
6
+
7
+ configure do
8
+ set :logging, false
9
+ set :padrino_logging, false
10
+ set :root, File.dirname(__FILE__)
11
+ end
12
+
13
+ end
14
+
15
+ class AssetsAppAssetPack < BaseApp
16
+ configure_assets do |config|
17
+ config.pipeline = Padrino::Pipeline::AssetPack
18
+ end
19
+ end
20
+
21
+ class AssetsAppAssetPackCustom < BaseApp
22
+ configure_assets do |config|
23
+ config.pipeline = Padrino::Pipeline::AssetPack
24
+ config.js_prefix = '/meow/javascripts'
25
+ config.js_assets = '/assets/js'
26
+
27
+ config.css_prefix = '/meow/stylesheets'
28
+ config.css_assets = '/assets/css'
29
+ end
30
+ end
31
+
32
+ Padrino.load!
@@ -0,0 +1,3 @@
1
+ .meow {
2
+ left: 0px;
3
+ }
@@ -0,0 +1 @@
1
+ var mainApp = true;
@@ -0,0 +1 @@
1
+ var otherFileVar = true;
File without changes
@@ -0,0 +1,3 @@
1
+ body {
2
+ display: none;
3
+ }
@@ -0,0 +1,3 @@
1
+ .content {
2
+ display: none;
3
+ }
@@ -0,0 +1,2 @@
1
+ //= require second_js_file
2
+ //= require coffee
@@ -0,0 +1 @@
1
+ var in_second_file;
@@ -0,0 +1 @@
1
+ var unrequired;
@@ -0,0 +1 @@
1
+ //= require second_file
@@ -0,0 +1,5 @@
1
+ body {
2
+ .div {
3
+ display: none;
4
+ }
5
+ }
@@ -0,0 +1,3 @@
1
+ .home {
2
+ display: none;
3
+ }
@@ -0,0 +1,19 @@
1
+ require 'padrino-core'
2
+ require 'padrino-pipeline'
3
+
4
+ class AssetsAppSprockets < Padrino::Application
5
+ register Padrino::Pipeline
6
+
7
+ configure do
8
+ set :logging, false
9
+ set :padrino_logging, false
10
+ end
11
+
12
+ configure_assets do |assets|
13
+ assets.pipeline = Padrino::Pipeline::Sprockets
14
+ end
15
+
16
+
17
+ end
18
+
19
+ Padrino.load!
@@ -0,0 +1,27 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../extra/helper')
2
+
3
+ describe 'Asset tags' do
4
+
5
+ context 'javascript_include_tag' do
6
+ let(:app) { rack_app }
7
+
8
+ it 'can use the default javascript_include_tag to resolve JS asset' do
9
+ skip
10
+ assets_location = "#{fixture_path('sprockets_app')}/assets/javascripts"
11
+ mock_app do
12
+ register Padrino::Pipeline
13
+ register Padrino::Helpers
14
+ configure_assets do |assets|
15
+ assets.pipeline = Padrino::Pipeline::Sprockets
16
+ assets.paths = [assets_location]
17
+ end
18
+ get('/') { render :erb, "<%= javascript_include_tag 'app.js' %>" }
19
+ end
20
+
21
+ get '/'
22
+ assert_equal '/assets/javascripts/app.js', last_response.body
23
+ end
24
+
25
+ end
26
+ end
27
+
@@ -0,0 +1,40 @@
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
@@ -0,0 +1,68 @@
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
@@ -0,0 +1,79 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../extra/helper')
2
+ require File.expand_path(File.dirname(__FILE__) + '/../fixtures/sprockets_app/sprockets_app')
3
+
4
+
5
+ describe 'Javascripts' do
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
16
+ end
17
+ 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
79
+ end#describe
metadata ADDED
@@ -0,0 +1,223 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: padrino-pipeline
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Sumeet Singh
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-06-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: padrino-core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.11.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 0.11.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: padrino-helpers
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 0.11.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 0.11.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: coffee-script
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 2.2.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 2.2.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: sass
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 3.2.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 3.2.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: sprockets
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 2.10.0
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 2.10.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: uglifier
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 2.1.0
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 2.1.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: sinatra-assetpack
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 0.2.0
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 0.2.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: padrino-core
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 0.11.0
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ version: 0.11.0
125
+ description: The Padrino asset management system allowing frictionless serving of
126
+ assets
127
+ email: ortuna@gmail.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - .gitignore
133
+ - .travis.yml
134
+ - Gemfile
135
+ - LICENSE.txt
136
+ - README.md
137
+ - Rakefile
138
+ - lib/padrino-pipeline.rb
139
+ - lib/padrino-pipeline/ext/padrino-helpers/asset_tag_helper.rb
140
+ - lib/padrino-pipeline/pipelines/asset_pack.rb
141
+ - lib/padrino-pipeline/pipelines/sprockets.rb
142
+ - lib/padrino-pipeline/version.rb
143
+ - padrino-pipeline.gemspec
144
+ - test/asset_pack/test_css.rb
145
+ - test/asset_pack/test_js.rb
146
+ - test/asset_pack/test_packages.rb
147
+ - test/extra/helper.rb
148
+ - test/extra/mini_shoulda.rb
149
+ - test/fixtures/asset_pack_app/asset_pack_app.rb
150
+ - test/fixtures/asset_pack_app/assets/css/meow.css
151
+ - test/fixtures/asset_pack_app/assets/javascripts/app.js
152
+ - test/fixtures/asset_pack_app/assets/javascripts/coffee.coffee
153
+ - test/fixtures/asset_pack_app/assets/javascripts/other.js
154
+ - test/fixtures/asset_pack_app/assets/js/myapp.js
155
+ - test/fixtures/asset_pack_app/assets/stylesheets/app.css
156
+ - test/fixtures/asset_pack_app/assets/stylesheets/default.scss
157
+ - test/fixtures/sprockets_app/assets/images/glass.png
158
+ - test/fixtures/sprockets_app/assets/javascripts/app.js
159
+ - test/fixtures/sprockets_app/assets/javascripts/coffee.js.coffee
160
+ - test/fixtures/sprockets_app/assets/javascripts/second_js_file.js
161
+ - test/fixtures/sprockets_app/assets/javascripts/unrequired.js
162
+ - test/fixtures/sprockets_app/assets/other/other.css
163
+ - test/fixtures/sprockets_app/assets/stylesheets/application.css
164
+ - test/fixtures/sprockets_app/assets/stylesheets/sass.scss
165
+ - test/fixtures/sprockets_app/assets/stylesheets/second_file.css
166
+ - test/fixtures/sprockets_app/sprockets_app.rb
167
+ - test/sprockets/test_asset_tag.rb
168
+ - test/sprockets/test_assets.rb
169
+ - test/sprockets/test_css.rb
170
+ - test/sprockets/test_js.rb
171
+ homepage: http://www.padrinorb.com
172
+ licenses: []
173
+ metadata: {}
174
+ post_install_message:
175
+ rdoc_options:
176
+ - --charset=UTF-8
177
+ require_paths:
178
+ - lib
179
+ required_ruby_version: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - '>='
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ required_rubygems_version: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - '>='
187
+ - !ruby/object:Gem::Version
188
+ version: 1.3.6
189
+ requirements: []
190
+ rubyforge_project: padrino-pipeline
191
+ rubygems_version: 2.0.2
192
+ signing_key:
193
+ specification_version: 4
194
+ summary: The Padrino asset management system
195
+ test_files:
196
+ - test/asset_pack/test_css.rb
197
+ - test/asset_pack/test_js.rb
198
+ - test/asset_pack/test_packages.rb
199
+ - test/extra/helper.rb
200
+ - test/extra/mini_shoulda.rb
201
+ - test/fixtures/asset_pack_app/asset_pack_app.rb
202
+ - test/fixtures/asset_pack_app/assets/css/meow.css
203
+ - test/fixtures/asset_pack_app/assets/javascripts/app.js
204
+ - test/fixtures/asset_pack_app/assets/javascripts/coffee.coffee
205
+ - test/fixtures/asset_pack_app/assets/javascripts/other.js
206
+ - test/fixtures/asset_pack_app/assets/js/myapp.js
207
+ - test/fixtures/asset_pack_app/assets/stylesheets/app.css
208
+ - test/fixtures/asset_pack_app/assets/stylesheets/default.scss
209
+ - test/fixtures/sprockets_app/assets/images/glass.png
210
+ - test/fixtures/sprockets_app/assets/javascripts/app.js
211
+ - test/fixtures/sprockets_app/assets/javascripts/coffee.js.coffee
212
+ - test/fixtures/sprockets_app/assets/javascripts/second_js_file.js
213
+ - test/fixtures/sprockets_app/assets/javascripts/unrequired.js
214
+ - test/fixtures/sprockets_app/assets/other/other.css
215
+ - test/fixtures/sprockets_app/assets/stylesheets/application.css
216
+ - test/fixtures/sprockets_app/assets/stylesheets/sass.scss
217
+ - test/fixtures/sprockets_app/assets/stylesheets/second_file.css
218
+ - test/fixtures/sprockets_app/sprockets_app.rb
219
+ - test/sprockets/test_asset_tag.rb
220
+ - test/sprockets/test_assets.rb
221
+ - test/sprockets/test_css.rb
222
+ - test/sprockets/test_js.rb
223
+ has_rdoc: