stylo 0.7.0 → 0.8.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.
- data/Rakefile +25 -22
- data/TODO +1 -2
- data/features/javascripts.feature +3 -1
- data/features/response_headers.feature +2 -2
- data/features/step_definitions/stylo_steps.rb +12 -4
- data/features/support/env.rb +2 -1
- data/lib/stylo/asset_loader.rb +2 -2
- data/lib/stylo/config.rb +13 -6
- data/lib/stylo/pipeline_steps/javascript.rb +3 -1
- data/lib/stylo/pipeline_steps/javascript_minifying.rb +2 -2
- data/lib/stylo/pipeline_steps/stylesheet.rb +3 -1
- data/lib/stylo/railtie.rb +1 -1
- data/lib/stylo/version.rb +3 -0
- data/lib/stylo.rb +3 -1
- data/spec/asset_loader_spec.rb +1 -1
- data/spec/pipeline_steps/javascript_minifying_spec.rb +2 -2
- data/spec/pipeline_steps/javascript_spec.rb +2 -2
- data/spec/pipeline_steps/stylesheet_spec.rb +2 -2
- data/spec/spec_helper.rb +2 -1
- data/spec/stylo_spec_helpers.rb +1 -1
- data/stylo.gemspec +22 -119
- metadata +52 -50
- data/features/fixtures/sass_child.scss +0 -4
- data/features/fixtures/sass_mixins.scss +0 -3
- data/features/fixtures/sass_which_uses_mixin.scss +0 -6
- data/features/sass_integration.feature +0 -13
- data/lib/stylo/pipeline_steps/sass.rb +0 -18
- data/spec/pipeline_steps/sass_spec.rb +0 -95
data/Rakefile
CHANGED
@@ -2,29 +2,32 @@ require 'rubygems'
|
|
2
2
|
require 'rake'
|
3
3
|
require 'cucumber'
|
4
4
|
require 'cucumber/rake/task'
|
5
|
+
require 'bundler'
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
gem.
|
12
|
-
gem.
|
13
|
-
gem.
|
14
|
-
gem.
|
15
|
-
gem.
|
16
|
-
gem.
|
17
|
-
gem.add_development_dependency "
|
18
|
-
gem.add_development_dependency "
|
19
|
-
gem.add_development_dependency "
|
20
|
-
gem.
|
21
|
-
gem.
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
7
|
+
Bundler::GemHelper.install_tasks
|
8
|
+
|
9
|
+
#begin
|
10
|
+
# require 'jeweler'
|
11
|
+
# Jeweler::Tasks.new do |gem|
|
12
|
+
# gem.name = "stylo"
|
13
|
+
# gem.summary = %Q{Server side stylesheet combining for readonly hosting environments}
|
14
|
+
# gem.description = %Q{Server side stylesheet combining for readonly hosting environments}
|
15
|
+
# gem.email = "michael@guerillatactics.co.uk"
|
16
|
+
# gem.homepage = "http://github.com/mwagg/stylo"
|
17
|
+
# gem.authors = ["mwagg"]
|
18
|
+
# gem.add_development_dependency "rspec", ">= 0"
|
19
|
+
# gem.add_development_dependency "cucumber", ">= 0"
|
20
|
+
# gem.add_development_dependency "rack-test", ">= 0"
|
21
|
+
# gem.add_development_dependency "sinatra", ">= 0"
|
22
|
+
# gem.add_development_dependency "rails", ">= 3.0.0"
|
23
|
+
# gem.add_runtime_dependency "haml", ">= 3.0.21"
|
24
|
+
# gem.version = "0.7.0"
|
25
|
+
# # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
26
|
+
# end
|
27
|
+
# Jeweler::GemcutterTasks.new
|
28
|
+
#rescue LoadError
|
29
|
+
# puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
30
|
+
#end
|
28
31
|
|
29
32
|
require 'rspec/core/rake_task'
|
30
33
|
desc "Run all examples"
|
data/TODO
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
Feature: Javascript serving
|
2
|
+
Background:
|
3
|
+
Given javascript minifying is disabled
|
2
4
|
|
3
5
|
Scenario: Simple javascript serving
|
4
6
|
Given "child.js" is located at "javascripts" in the asset location
|
@@ -26,7 +28,7 @@ Feature: Javascript serving
|
|
26
28
|
Then the response body should look like "grand_parent_with_parent_with_child.js"
|
27
29
|
|
28
30
|
Scenario: Minifying javascript
|
29
|
-
Given javascript
|
31
|
+
Given javascript minifying is enabled
|
30
32
|
And "child.js" is located at "javascripts" in the asset location
|
31
33
|
When a request is made for "javascripts/child.js"
|
32
34
|
Then the response body should look like "child-min.js"
|
@@ -4,10 +4,10 @@ Feature: Response headers
|
|
4
4
|
Given "child.js" is located at "javascripts" in the asset location
|
5
5
|
When a request is made for "javascripts/child.js"
|
6
6
|
Then the response code should be "200"
|
7
|
-
And the "Content-Length" header should be "
|
7
|
+
And the "Content-Length" header should be "34"
|
8
8
|
And the "Content-Type" header should be "text/javascript"
|
9
9
|
|
10
10
|
Scenario: Content should be cached
|
11
11
|
Given "child.js" is located at "javascripts" in the asset location
|
12
12
|
When a request is made for "javascripts/child.js"
|
13
|
-
Then the "Cache-Control" header should be "public, max-age=86400"
|
13
|
+
Then the "Cache-Control" header should be "public, max-age=86400"
|
@@ -34,13 +34,21 @@ Then /^the response should be from a call back into rack$/ do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
When /^javascript combining is disabled$/ do
|
37
|
-
Stylo::Config.
|
37
|
+
Stylo::Config.options[:js_combining_enabled] = false
|
38
38
|
end
|
39
39
|
|
40
40
|
When /^css combining is disabled$/ do
|
41
|
-
Stylo::Config.css_combining_enabled = false
|
41
|
+
Stylo::Config.options[:css_combining_enabled] = false
|
42
42
|
end
|
43
43
|
|
44
|
-
Given /^javascript compression is enabled$/ do
|
45
|
-
Stylo::Config.javascript_minifying_enabled = true
|
44
|
+
#Given /^javascript compression is enabled$/ do
|
45
|
+
# Stylo::Config.options[:javascript_minifying_enabled] = true
|
46
|
+
#end
|
47
|
+
|
48
|
+
Given /^javascript minifying is disabled$/ do
|
49
|
+
Stylo::Config.options[:js_minifying_enabled] = false
|
50
|
+
end
|
51
|
+
|
52
|
+
Given /^javascript minifying is enabled$/ do
|
53
|
+
Stylo::Config.options[:js_minifying_enabled] = true
|
46
54
|
end
|
data/features/support/env.rb
CHANGED
data/lib/stylo/asset_loader.rb
CHANGED
data/lib/stylo/config.rb
CHANGED
@@ -1,23 +1,30 @@
|
|
1
1
|
module Stylo
|
2
2
|
class Config
|
3
3
|
class << self
|
4
|
-
|
4
|
+
def options
|
5
|
+
@options ||= defaults.clone
|
6
|
+
end
|
7
|
+
|
8
|
+
def defaults
|
9
|
+
{
|
10
|
+
:css_combining_enabled => true,
|
11
|
+
:js_combining_enabled => true,
|
12
|
+
:js_minifying_enabled => true
|
13
|
+
}
|
14
|
+
end
|
5
15
|
|
6
16
|
def pipeline
|
7
17
|
[Stylo::PipelineSteps::Stylesheet.new,
|
8
18
|
Stylo::PipelineSteps::Javascript.new,
|
9
|
-
Stylo::PipelineSteps::Sass.new,
|
10
19
|
Stylo::PipelineSteps::JavascriptMinifying.new,
|
11
20
|
Stylo::PipelineSteps::Caching.new]
|
12
21
|
end
|
13
22
|
|
14
23
|
def reset_to_default
|
15
|
-
|
16
|
-
self.javascript_combining_enabled = true
|
17
|
-
self.javascript_minifying_enabled = false
|
24
|
+
@options = defaults.clone
|
18
25
|
end
|
19
26
|
end
|
20
27
|
|
21
28
|
reset_to_default
|
22
29
|
end
|
23
|
-
end
|
30
|
+
end
|
@@ -4,10 +4,12 @@ module Stylo
|
|
4
4
|
REQUIRE_PATTERN = /\/\/\/require "(.*)";/
|
5
5
|
|
6
6
|
def call(response)
|
7
|
+
raise 'You must set the asset location (Stylo::Config.options[:asset_location]) before stylo can be used.' if !Config.options[:asset_location]
|
8
|
+
|
7
9
|
return if response.has_content? || response.extension != '.js'
|
8
10
|
return unless content = AssetLoader.load_content(response.path)
|
9
11
|
|
10
|
-
if Config.
|
12
|
+
if Config.options[:js_combining_enabled]
|
11
13
|
content = Combiner.new(REQUIRE_PATTERN).process(File.dirname(response.path), content)
|
12
14
|
end
|
13
15
|
|
@@ -2,10 +2,10 @@ module Stylo
|
|
2
2
|
module PipelineSteps
|
3
3
|
class JavascriptMinifying
|
4
4
|
def call(response)
|
5
|
-
if Config.
|
5
|
+
if Config.options[:js_minifying_enabled] and response.extension == '.js' and response.has_content?
|
6
6
|
response.set_body(JSMin.new(response.body).minify, :javascript)
|
7
7
|
end
|
8
8
|
end
|
9
9
|
end
|
10
10
|
end
|
11
|
-
end
|
11
|
+
end
|
@@ -4,10 +4,12 @@ module Stylo
|
|
4
4
|
|
5
5
|
class Stylesheet
|
6
6
|
def call(response)
|
7
|
+
raise 'You must set the asset location (Stylo::Config.options[:asset_location]) before stylo can be used.' if !Config.options[:asset_location]
|
8
|
+
|
7
9
|
return if response.has_content? || response.extension != '.css'
|
8
10
|
return unless content = AssetLoader.load_content(response.path)
|
9
11
|
|
10
|
-
if Config.css_combining_enabled
|
12
|
+
if Config.options[:css_combining_enabled]
|
11
13
|
content = Combiner.new(REQUIRE_PATTERN).process(File.dirname(response.path), content)
|
12
14
|
end
|
13
15
|
|
data/lib/stylo/railtie.rb
CHANGED
@@ -4,7 +4,7 @@ begin
|
|
4
4
|
module Stylo
|
5
5
|
class Railtie < Rails::Railtie
|
6
6
|
initializer "stylo.initialize" do |app|
|
7
|
-
Stylo::Config.asset_location ||= File.join(app.root, 'public')
|
7
|
+
Stylo::Config.options[:asset_location] ||= File.join(app.root, 'public')
|
8
8
|
app.middleware.insert_before ActionDispatch::Static, Stylo::Rack
|
9
9
|
end
|
10
10
|
end
|
data/lib/stylo.rb
CHANGED
data/spec/asset_loader_spec.rb
CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Stylo::PipelineSteps::JavascriptMinifying do
|
4
4
|
before(:each) do
|
5
|
-
Stylo::Config.javascript_minifying_enabled = true
|
5
|
+
Stylo::Config.options[:javascript_minifying_enabled] = true
|
6
6
|
end
|
7
7
|
|
8
8
|
let(:step) { Stylo::PipelineSteps::JavascriptMinifying.new }
|
@@ -44,4 +44,4 @@ describe Stylo::PipelineSteps::JavascriptMinifying do
|
|
44
44
|
response.body.should == minified_javascript
|
45
45
|
end
|
46
46
|
end
|
47
|
-
end
|
47
|
+
end
|
@@ -52,7 +52,7 @@ describe Stylo::PipelineSteps::Javascript do
|
|
52
52
|
|
53
53
|
describe "and combining is enabled" do
|
54
54
|
before(:each) do
|
55
|
-
Stylo::Config.javascript_combining_enabled = true
|
55
|
+
Stylo::Config.options[:javascript_combining_enabled] = true
|
56
56
|
end
|
57
57
|
|
58
58
|
it "should tell the combiner to process the javascript content" do
|
@@ -71,7 +71,7 @@ describe Stylo::PipelineSteps::Javascript do
|
|
71
71
|
|
72
72
|
describe "and combining is disabled" do
|
73
73
|
before(:each) do
|
74
|
-
Stylo::Config.
|
74
|
+
Stylo::Config.options[:js_combining_enabled] = false
|
75
75
|
end
|
76
76
|
|
77
77
|
it "should set the body of the response to the javascript content" do
|
@@ -52,7 +52,7 @@ describe Stylo::PipelineSteps::Stylesheet do
|
|
52
52
|
|
53
53
|
describe "and combining is enabled" do
|
54
54
|
before(:each) do
|
55
|
-
Stylo::Config.css_combining_enabled = true
|
55
|
+
Stylo::Config.options[:css_combining_enabled] = true
|
56
56
|
end
|
57
57
|
|
58
58
|
it "should tell the combiner to process the stylesheet content" do
|
@@ -71,7 +71,7 @@ describe Stylo::PipelineSteps::Stylesheet do
|
|
71
71
|
|
72
72
|
describe "and combining is disabled" do
|
73
73
|
before(:each) do
|
74
|
-
Stylo::Config.css_combining_enabled = false
|
74
|
+
Stylo::Config.options[:css_combining_enabled] = false
|
75
75
|
end
|
76
76
|
|
77
77
|
it "should set the body of the response to the stylesheet content" do
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'rspec'
|
3
|
+
require 'fileutils'
|
3
4
|
|
4
5
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
5
6
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
@@ -11,8 +12,8 @@ RSpec.configure do |config|
|
|
11
12
|
config.include FileUtils
|
12
13
|
|
13
14
|
config.before(:each) do
|
14
|
-
reset_paths
|
15
15
|
Stylo::Config.reset_to_default
|
16
|
+
reset_paths
|
16
17
|
end
|
17
18
|
end
|
18
19
|
|
data/spec/stylo_spec_helpers.rb
CHANGED
data/stylo.gemspec
CHANGED
@@ -1,126 +1,29 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "stylo/version"
|
5
4
|
|
6
5
|
Gem::Specification.new do |s|
|
7
|
-
s.name
|
8
|
-
s.version
|
6
|
+
s.name = "stylo"
|
7
|
+
s.version = Stylo::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Mike Wagg"]
|
10
|
+
s.email = ["michael@guerillatactics.co.uk"]
|
11
|
+
s.homepage = "http://rubygems.org/gems/stylo" # CHECK THIS
|
12
|
+
s.summary = %q{A javascript and css combining/minifying rack middleware}
|
13
|
+
s.description = %q{A rack middleware which does css and javascript combining
|
14
|
+
and minification for sites hosted in readonly filesystem environments
|
15
|
+
such as heroku.com}
|
9
16
|
|
10
|
-
s.
|
11
|
-
s.authors = ["mwagg"]
|
12
|
-
s.date = %q{2010-11-11}
|
13
|
-
s.description = %q{Server side stylesheet combining for readonly hosting environments}
|
14
|
-
s.email = %q{michael@guerillatactics.co.uk}
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"LICENSE",
|
17
|
-
"README.rdoc",
|
18
|
-
"TODO"
|
19
|
-
]
|
20
|
-
s.files = [
|
21
|
-
".document",
|
22
|
-
".gitignore",
|
23
|
-
"LICENSE",
|
24
|
-
"README.rdoc",
|
25
|
-
"Rakefile",
|
26
|
-
"TODO",
|
27
|
-
"cucumber.yml",
|
28
|
-
"features/fixtures.rb",
|
29
|
-
"features/fixtures/child-min.js",
|
30
|
-
"features/fixtures/child.css",
|
31
|
-
"features/fixtures/child.js",
|
32
|
-
"features/fixtures/grand_parent.css",
|
33
|
-
"features/fixtures/grand_parent.js",
|
34
|
-
"features/fixtures/grand_parent_with_parent_with_child.css",
|
35
|
-
"features/fixtures/grand_parent_with_parent_with_child.js",
|
36
|
-
"features/fixtures/nested_folder_grand_parent.css",
|
37
|
-
"features/fixtures/nested_folder_grand_parent_with_parent_with_child.css",
|
38
|
-
"features/fixtures/parent.css",
|
39
|
-
"features/fixtures/parent.js",
|
40
|
-
"features/fixtures/parent_with_child.css",
|
41
|
-
"features/fixtures/parent_with_child.js",
|
42
|
-
"features/fixtures/processed_sass_child.css",
|
43
|
-
"features/fixtures/processed_sass_which_uses_mixin.css",
|
44
|
-
"features/fixtures/sass_child.scss",
|
45
|
-
"features/fixtures/sass_mixins.scss",
|
46
|
-
"features/fixtures/sass_which_uses_mixin.scss",
|
47
|
-
"features/javascripts.feature",
|
48
|
-
"features/response_headers.feature",
|
49
|
-
"features/sass_integration.feature",
|
50
|
-
"features/step_definitions/stylo_steps.rb",
|
51
|
-
"features/stylesheets.feature",
|
52
|
-
"features/stylo_cannot_serve_asset.feature",
|
53
|
-
"features/support/env.rb",
|
54
|
-
"lib/jsmin.rb",
|
55
|
-
"lib/stylo.rb",
|
56
|
-
"lib/stylo/asset_loader.rb",
|
57
|
-
"lib/stylo/combiner.rb",
|
58
|
-
"lib/stylo/config.rb",
|
59
|
-
"lib/stylo/pipeline_steps/caching.rb",
|
60
|
-
"lib/stylo/pipeline_steps/javascript.rb",
|
61
|
-
"lib/stylo/pipeline_steps/javascript_minifying.rb",
|
62
|
-
"lib/stylo/pipeline_steps/sass.rb",
|
63
|
-
"lib/stylo/pipeline_steps/stylesheet.rb",
|
64
|
-
"lib/stylo/processor.rb",
|
65
|
-
"lib/stylo/rack.rb",
|
66
|
-
"lib/stylo/railtie.rb",
|
67
|
-
"lib/stylo/response.rb",
|
68
|
-
"spec/asset_loader_spec.rb",
|
69
|
-
"spec/combiner_spec.rb",
|
70
|
-
"spec/pipeline_steps/caching_spec.rb",
|
71
|
-
"spec/pipeline_steps/javascript_minifying_spec.rb",
|
72
|
-
"spec/pipeline_steps/javascript_spec.rb",
|
73
|
-
"spec/pipeline_steps/sass_spec.rb",
|
74
|
-
"spec/pipeline_steps/stylesheet_spec.rb",
|
75
|
-
"spec/rack_spec.rb",
|
76
|
-
"spec/spec_helper.rb",
|
77
|
-
"spec/stylo_spec_helpers.rb",
|
78
|
-
"stylo.gemspec"
|
79
|
-
]
|
80
|
-
s.homepage = %q{http://github.com/mwagg/stylo}
|
81
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
82
|
-
s.require_paths = ["lib"]
|
83
|
-
s.rubygems_version = %q{1.3.7}
|
84
|
-
s.summary = %q{Server side stylesheet combining for readonly hosting environments}
|
85
|
-
s.test_files = [
|
86
|
-
"spec/asset_loader_spec.rb",
|
87
|
-
"spec/combiner_spec.rb",
|
88
|
-
"spec/pipeline_steps/caching_spec.rb",
|
89
|
-
"spec/pipeline_steps/javascript_minifying_spec.rb",
|
90
|
-
"spec/pipeline_steps/javascript_spec.rb",
|
91
|
-
"spec/pipeline_steps/sass_spec.rb",
|
92
|
-
"spec/pipeline_steps/stylesheet_spec.rb",
|
93
|
-
"spec/rack_spec.rb",
|
94
|
-
"spec/spec_helper.rb",
|
95
|
-
"spec/stylo_spec_helpers.rb"
|
96
|
-
]
|
17
|
+
s.rubyforge_project = "stylo"
|
97
18
|
|
98
|
-
|
99
|
-
|
100
|
-
|
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"]
|
101
23
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
s.add_development_dependency(%q<rails>, [">= 3.0.0"])
|
108
|
-
s.add_runtime_dependency(%q<haml>, [">= 3.0.21"])
|
109
|
-
else
|
110
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
111
|
-
s.add_dependency(%q<cucumber>, [">= 0"])
|
112
|
-
s.add_dependency(%q<rack-test>, [">= 0"])
|
113
|
-
s.add_dependency(%q<sinatra>, [">= 0"])
|
114
|
-
s.add_dependency(%q<rails>, [">= 3.0.0"])
|
115
|
-
s.add_dependency(%q<haml>, [">= 3.0.21"])
|
116
|
-
end
|
117
|
-
else
|
118
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
119
|
-
s.add_dependency(%q<cucumber>, [">= 0"])
|
120
|
-
s.add_dependency(%q<rack-test>, [">= 0"])
|
121
|
-
s.add_dependency(%q<sinatra>, [">= 0"])
|
122
|
-
s.add_dependency(%q<rails>, [">= 3.0.0"])
|
123
|
-
s.add_dependency(%q<haml>, [">= 3.0.21"])
|
124
|
-
end
|
24
|
+
s.add_development_dependency('cucumber')
|
25
|
+
s.add_development_dependency('rspec', '>= 2.1.0')
|
26
|
+
s.add_development_dependency('bundler')
|
27
|
+
s.add_development_dependency('rack-test')
|
28
|
+
s.add_development_dependency('sinatra')
|
125
29
|
end
|
126
|
-
|
metadata
CHANGED
@@ -1,25 +1,25 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stylo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 63
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 8
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.8.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
|
-
-
|
13
|
+
- Mike Wagg
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-11-
|
18
|
+
date: 2010-11-19 00:00:00 +00:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
22
|
+
name: cucumber
|
23
23
|
prerelease: false
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
@@ -33,21 +33,23 @@ dependencies:
|
|
33
33
|
type: :development
|
34
34
|
version_requirements: *id001
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
|
-
name:
|
36
|
+
name: rspec
|
37
37
|
prerelease: false
|
38
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
hash:
|
43
|
+
hash: 11
|
44
44
|
segments:
|
45
|
+
- 2
|
46
|
+
- 1
|
45
47
|
- 0
|
46
|
-
version:
|
48
|
+
version: 2.1.0
|
47
49
|
type: :development
|
48
50
|
version_requirements: *id002
|
49
51
|
- !ruby/object:Gem::Dependency
|
50
|
-
name:
|
52
|
+
name: bundler
|
51
53
|
prerelease: false
|
52
54
|
requirement: &id003 !ruby/object:Gem::Requirement
|
53
55
|
none: false
|
@@ -61,7 +63,7 @@ dependencies:
|
|
61
63
|
type: :development
|
62
64
|
version_requirements: *id003
|
63
65
|
- !ruby/object:Gem::Dependency
|
64
|
-
name:
|
66
|
+
name: rack-test
|
65
67
|
prerelease: false
|
66
68
|
requirement: &id004 !ruby/object:Gem::Requirement
|
67
69
|
none: false
|
@@ -75,47 +77,31 @@ dependencies:
|
|
75
77
|
type: :development
|
76
78
|
version_requirements: *id004
|
77
79
|
- !ruby/object:Gem::Dependency
|
78
|
-
name:
|
80
|
+
name: sinatra
|
79
81
|
prerelease: false
|
80
82
|
requirement: &id005 !ruby/object:Gem::Requirement
|
81
83
|
none: false
|
82
84
|
requirements:
|
83
85
|
- - ">="
|
84
86
|
- !ruby/object:Gem::Version
|
85
|
-
hash:
|
87
|
+
hash: 3
|
86
88
|
segments:
|
87
|
-
- 3
|
88
|
-
- 0
|
89
89
|
- 0
|
90
|
-
version:
|
90
|
+
version: "0"
|
91
91
|
type: :development
|
92
92
|
version_requirements: *id005
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
- - ">="
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
hash: 45
|
102
|
-
segments:
|
103
|
-
- 3
|
104
|
-
- 0
|
105
|
-
- 21
|
106
|
-
version: 3.0.21
|
107
|
-
type: :runtime
|
108
|
-
version_requirements: *id006
|
109
|
-
description: Server side stylesheet combining for readonly hosting environments
|
110
|
-
email: michael@guerillatactics.co.uk
|
93
|
+
description: |-
|
94
|
+
A rack middleware which does css and javascript combining
|
95
|
+
and minification for sites hosted in readonly filesystem environments
|
96
|
+
such as heroku.com
|
97
|
+
email:
|
98
|
+
- michael@guerillatactics.co.uk
|
111
99
|
executables: []
|
112
100
|
|
113
101
|
extensions: []
|
114
102
|
|
115
|
-
extra_rdoc_files:
|
116
|
-
|
117
|
-
- README.rdoc
|
118
|
-
- TODO
|
103
|
+
extra_rdoc_files: []
|
104
|
+
|
119
105
|
files:
|
120
106
|
- .document
|
121
107
|
- .gitignore
|
@@ -140,12 +126,8 @@ files:
|
|
140
126
|
- features/fixtures/parent_with_child.js
|
141
127
|
- features/fixtures/processed_sass_child.css
|
142
128
|
- features/fixtures/processed_sass_which_uses_mixin.css
|
143
|
-
- features/fixtures/sass_child.scss
|
144
|
-
- features/fixtures/sass_mixins.scss
|
145
|
-
- features/fixtures/sass_which_uses_mixin.scss
|
146
129
|
- features/javascripts.feature
|
147
130
|
- features/response_headers.feature
|
148
|
-
- features/sass_integration.feature
|
149
131
|
- features/step_definitions/stylo_steps.rb
|
150
132
|
- features/stylesheets.feature
|
151
133
|
- features/stylo_cannot_serve_asset.feature
|
@@ -158,30 +140,29 @@ files:
|
|
158
140
|
- lib/stylo/pipeline_steps/caching.rb
|
159
141
|
- lib/stylo/pipeline_steps/javascript.rb
|
160
142
|
- lib/stylo/pipeline_steps/javascript_minifying.rb
|
161
|
-
- lib/stylo/pipeline_steps/sass.rb
|
162
143
|
- lib/stylo/pipeline_steps/stylesheet.rb
|
163
144
|
- lib/stylo/processor.rb
|
164
145
|
- lib/stylo/rack.rb
|
165
146
|
- lib/stylo/railtie.rb
|
166
147
|
- lib/stylo/response.rb
|
148
|
+
- lib/stylo/version.rb
|
167
149
|
- spec/asset_loader_spec.rb
|
168
150
|
- spec/combiner_spec.rb
|
169
151
|
- spec/pipeline_steps/caching_spec.rb
|
170
152
|
- spec/pipeline_steps/javascript_minifying_spec.rb
|
171
153
|
- spec/pipeline_steps/javascript_spec.rb
|
172
|
-
- spec/pipeline_steps/sass_spec.rb
|
173
154
|
- spec/pipeline_steps/stylesheet_spec.rb
|
174
155
|
- spec/rack_spec.rb
|
175
156
|
- spec/spec_helper.rb
|
176
157
|
- spec/stylo_spec_helpers.rb
|
177
158
|
- stylo.gemspec
|
178
159
|
has_rdoc: true
|
179
|
-
homepage: http://
|
160
|
+
homepage: http://rubygems.org/gems/stylo
|
180
161
|
licenses: []
|
181
162
|
|
182
163
|
post_install_message:
|
183
|
-
rdoc_options:
|
184
|
-
|
164
|
+
rdoc_options: []
|
165
|
+
|
185
166
|
require_paths:
|
186
167
|
- lib
|
187
168
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -204,18 +185,39 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
204
185
|
version: "0"
|
205
186
|
requirements: []
|
206
187
|
|
207
|
-
rubyforge_project:
|
188
|
+
rubyforge_project: stylo
|
208
189
|
rubygems_version: 1.3.7
|
209
190
|
signing_key:
|
210
191
|
specification_version: 3
|
211
|
-
summary:
|
192
|
+
summary: A javascript and css combining/minifying rack middleware
|
212
193
|
test_files:
|
194
|
+
- features/fixtures.rb
|
195
|
+
- features/fixtures/child-min.js
|
196
|
+
- features/fixtures/child.css
|
197
|
+
- features/fixtures/child.js
|
198
|
+
- features/fixtures/grand_parent.css
|
199
|
+
- features/fixtures/grand_parent.js
|
200
|
+
- features/fixtures/grand_parent_with_parent_with_child.css
|
201
|
+
- features/fixtures/grand_parent_with_parent_with_child.js
|
202
|
+
- features/fixtures/nested_folder_grand_parent.css
|
203
|
+
- features/fixtures/nested_folder_grand_parent_with_parent_with_child.css
|
204
|
+
- features/fixtures/parent.css
|
205
|
+
- features/fixtures/parent.js
|
206
|
+
- features/fixtures/parent_with_child.css
|
207
|
+
- features/fixtures/parent_with_child.js
|
208
|
+
- features/fixtures/processed_sass_child.css
|
209
|
+
- features/fixtures/processed_sass_which_uses_mixin.css
|
210
|
+
- features/javascripts.feature
|
211
|
+
- features/response_headers.feature
|
212
|
+
- features/step_definitions/stylo_steps.rb
|
213
|
+
- features/stylesheets.feature
|
214
|
+
- features/stylo_cannot_serve_asset.feature
|
215
|
+
- features/support/env.rb
|
213
216
|
- spec/asset_loader_spec.rb
|
214
217
|
- spec/combiner_spec.rb
|
215
218
|
- spec/pipeline_steps/caching_spec.rb
|
216
219
|
- spec/pipeline_steps/javascript_minifying_spec.rb
|
217
220
|
- spec/pipeline_steps/javascript_spec.rb
|
218
|
-
- spec/pipeline_steps/sass_spec.rb
|
219
221
|
- spec/pipeline_steps/stylesheet_spec.rb
|
220
222
|
- spec/rack_spec.rb
|
221
223
|
- spec/spec_helper.rb
|
@@ -1,13 +0,0 @@
|
|
1
|
-
Feature: Sass integration
|
2
|
-
|
3
|
-
Scenario: Simple sass stylesheet serving
|
4
|
-
Given "sass_child.scss" is located at "stylesheets" in the asset location
|
5
|
-
When a request is made for "stylesheets/sass_child.css"
|
6
|
-
Then the response body should look like "processed_sass_child.css"
|
7
|
-
|
8
|
-
Scenario: Combined sass stylesheet serving
|
9
|
-
Given "sass_mixins.scss" is located at "stylesheets" in the asset location
|
10
|
-
And "sass_which_uses_mixin.scss" is located at "stylesheets" in the asset location
|
11
|
-
When a request is made for "stylesheets/sass_which_uses_mixin.css"
|
12
|
-
Then the response body should look like "processed_sass_which_uses_mixin.css"
|
13
|
-
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'sass'
|
2
|
-
|
3
|
-
module Stylo
|
4
|
-
module PipelineSteps
|
5
|
-
class Sass
|
6
|
-
def call(response)
|
7
|
-
return if response.has_content? || response.extension != '.css'
|
8
|
-
content = AssetLoader.load_content(response.path.gsub('.css', '.scss'))
|
9
|
-
return if content.nil?
|
10
|
-
|
11
|
-
combined_content = Combiner.new(REQUIRE_PATTERN).process(File.dirname(response.path), content)
|
12
|
-
processed_content = ::Sass::Engine.new(combined_content, {:syntax => :scss}).render
|
13
|
-
|
14
|
-
response.set_body(processed_content, :css)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,95 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Stylo::PipelineSteps::Sass do
|
4
|
-
let(:step) { Stylo::PipelineSteps::Sass.new }
|
5
|
-
|
6
|
-
describe "when the response has not already been set" do
|
7
|
-
describe "and the request is not for a stylesheet" do
|
8
|
-
it "should not set the response" do
|
9
|
-
response = Stylo::Response.new('javascripts/test.js')
|
10
|
-
Stylo::AssetLoader.stub(:load_content).with(response.path).and_return('some-content')
|
11
|
-
|
12
|
-
step.call(response)
|
13
|
-
|
14
|
-
response.has_content?.should be_false
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe "and the request is for a stylesheet" do
|
19
|
-
let(:requested_path) { 'stylesheets/test.css' }
|
20
|
-
let(:sass_path) { 'stylesheets/test.scss' }
|
21
|
-
let(:response) { Stylo::Response.new(requested_path) }
|
22
|
-
let(:base_path) { File.dirname(response.path) }
|
23
|
-
|
24
|
-
it "should ask the asset loader to load the sass stylesheet content" do
|
25
|
-
Stylo::AssetLoader.should_receive(:load_content).with(sass_path).and_return(nil)
|
26
|
-
|
27
|
-
step.call(response)
|
28
|
-
end
|
29
|
-
|
30
|
-
describe "and the asset does not exist" do
|
31
|
-
it "should not set the response" do
|
32
|
-
Stylo::AssetLoader.stub(:load_content).and_return(nil)
|
33
|
-
|
34
|
-
step.call(response)
|
35
|
-
|
36
|
-
response.has_content?.should be_false
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "and the asset exists" do
|
41
|
-
let(:stylesheet_content) { "html { color: $color; }" }
|
42
|
-
let(:combined_stylesheet_content) { "html { color: $red; }" }
|
43
|
-
let(:processed_content) { "html { color: red; }" }
|
44
|
-
let(:sass_engine) { mock(:sass_engine) }
|
45
|
-
let(:combiner) { mock(:combiner) }
|
46
|
-
|
47
|
-
before(:each) do
|
48
|
-
Stylo::AssetLoader.stub(:load_content).and_return(stylesheet_content)
|
49
|
-
Stylo::Combiner.stub(:new).with(/@import "(.*)";/).and_return(combiner)
|
50
|
-
combiner.stub(:process).with(base_path, stylesheet_content).and_return(combined_stylesheet_content)
|
51
|
-
::Sass::Engine.stub(:new).with(combined_stylesheet_content, {:syntax => :scss}).and_return(sass_engine)
|
52
|
-
sass_engine.stub(:render).and_return(processed_content)
|
53
|
-
end
|
54
|
-
|
55
|
-
it "should tell the combiner to process the stylesheet content" do
|
56
|
-
Stylo::Combiner.should_receive(:new).with(/@import "(.*)";/).and_return(combiner)
|
57
|
-
combiner.should_receive(:process).with(base_path, stylesheet_content).and_return(combined_stylesheet_content)
|
58
|
-
|
59
|
-
step.call(response)
|
60
|
-
end
|
61
|
-
|
62
|
-
it "should run the combined content through sass" do
|
63
|
-
::Sass::Engine.should_receive(:new).with(combined_stylesheet_content, {:syntax => :scss}).and_return(sass_engine)
|
64
|
-
sass_engine.should_receive(:render).and_return(processed_content)
|
65
|
-
|
66
|
-
step.call(response)
|
67
|
-
end
|
68
|
-
|
69
|
-
it "should set the body of the response to the combined stylesheet content" do
|
70
|
-
step.call(response)
|
71
|
-
|
72
|
-
response.body.should == processed_content
|
73
|
-
end
|
74
|
-
|
75
|
-
it "should set the content type to text/css" do
|
76
|
-
step.call(response)
|
77
|
-
|
78
|
-
response.headers['Content-Type'].should == 'text/css'
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
describe "when the response has already been set" do
|
85
|
-
it "should not alter the response" do
|
86
|
-
response = Stylo::Response.new('stylesheets/test.css')
|
87
|
-
response.set_body('some-content', :css)
|
88
|
-
|
89
|
-
step.call(response)
|
90
|
-
|
91
|
-
response.body.should == 'some-content'
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
end
|