extract compass into core_ext, allow other features to execute after its init, add map support to sinatra, prep Sprockets feature
This commit is contained in:
parent
7828b07dad
commit
01eccafde2
12 changed files with 171 additions and 57 deletions
|
@ -14,7 +14,7 @@ end
|
||||||
|
|
||||||
Given /^cleanup built test app$/ do
|
Given /^cleanup built test app$/ do
|
||||||
target = File.join(File.dirname(File.dirname(File.dirname(__FILE__))), "fixtures", "test-app", "build")
|
target = File.join(File.dirname(File.dirname(File.dirname(__FILE__))), "fixtures", "test-app", "build")
|
||||||
# FileUtils.rm_rf(target)
|
FileUtils.rm_rf(target)
|
||||||
end
|
end
|
||||||
|
|
||||||
Then /^"([^"]*)" should exist and include "([^"]*)"$/ do |target_file, expected|
|
Then /^"([^"]*)" should exist and include "([^"]*)"$/ do |target_file, expected|
|
||||||
|
|
|
@ -73,6 +73,9 @@ module Middleman
|
||||||
end
|
end
|
||||||
|
|
||||||
module CoreExtensions
|
module CoreExtensions
|
||||||
|
# Add Rack::Builder.map support
|
||||||
|
autoload :RackMap, "middleman/core_extensions/rack_map"
|
||||||
|
|
||||||
# Custom Feature API
|
# Custom Feature API
|
||||||
autoload :Features, "middleman/core_extensions/features"
|
autoload :Features, "middleman/core_extensions/features"
|
||||||
|
|
||||||
|
@ -92,6 +95,12 @@ module Middleman
|
||||||
# Extended version of Padrino's rendering
|
# Extended version of Padrino's rendering
|
||||||
autoload :Rendering, "middleman/core_extensions/rendering"
|
autoload :Rendering, "middleman/core_extensions/rendering"
|
||||||
|
|
||||||
|
# Compass framework for Sass
|
||||||
|
autoload :Compass, "middleman/core_extensions/compass"
|
||||||
|
|
||||||
|
# Sprockets 2
|
||||||
|
autoload :Sprockets, "middleman/core_extensions/sprockets"
|
||||||
|
|
||||||
# Pass custom options to views
|
# Pass custom options to views
|
||||||
autoload :Routing, "middleman/core_extensions/routing"
|
autoload :Routing, "middleman/core_extensions/routing"
|
||||||
end
|
end
|
||||||
|
@ -131,9 +140,6 @@ module Middleman
|
||||||
# Proxy web services requests in dev mode only
|
# Proxy web services requests in dev mode only
|
||||||
autoload :Proxy, "middleman/features/proxy"
|
autoload :Proxy, "middleman/features/proxy"
|
||||||
|
|
||||||
# Sprockets 2
|
|
||||||
# autoload :Sprockets, "middleman/features/sprockets"
|
|
||||||
|
|
||||||
# Automatically resize images for mobile devises
|
# Automatically resize images for mobile devises
|
||||||
# autoload :TinySrc, "middleman/features/tiny_src"
|
# autoload :TinySrc, "middleman/features/tiny_src"
|
||||||
|
|
||||||
|
|
59
lib/middleman/core_extensions/compass.rb
Normal file
59
lib/middleman/core_extensions/compass.rb
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
module Middleman::CoreExtensions::Compass
|
||||||
|
class << self
|
||||||
|
def registered(app)
|
||||||
|
app.extend ClassMethods
|
||||||
|
|
||||||
|
require "compass"
|
||||||
|
|
||||||
|
# Susy grids
|
||||||
|
begin
|
||||||
|
require "susy"
|
||||||
|
rescue LoadError
|
||||||
|
end
|
||||||
|
|
||||||
|
app.after_feature_init do
|
||||||
|
views_root = File.basename(app.views)
|
||||||
|
::Compass.configuration do |config|
|
||||||
|
config.cache = false # For sassc files
|
||||||
|
config.project_path = app.root
|
||||||
|
config.sass_dir = File.join(views_root, app.css_dir)
|
||||||
|
config.output_style = :nested
|
||||||
|
config.fonts_dir = File.join(views_root, app.fonts_dir)
|
||||||
|
config.css_dir = File.join(views_root, app.css_dir)
|
||||||
|
config.images_dir = File.join(views_root, app.images_dir)
|
||||||
|
config.http_images_path = app.http_images_path rescue File.join(app.http_prefix || "/", app.images_dir)
|
||||||
|
config.http_stylesheets_path = app.http_css_path rescue File.join(app.http_prefix || "/", app.css_dir)
|
||||||
|
config.asset_cache_buster :none
|
||||||
|
|
||||||
|
config.add_import_path(config.sass_dir)
|
||||||
|
end
|
||||||
|
|
||||||
|
# configure :build do
|
||||||
|
# build_root = File.basename(self.build_dir)
|
||||||
|
# ::Compass.configuration do |config|
|
||||||
|
# config.css_dir = File.join(build_root, self.css_dir)
|
||||||
|
# config.images_dir = File.join(build_root, self.images_dir)
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
|
||||||
|
app.execute_after_compass_init!
|
||||||
|
|
||||||
|
app.set :sass, ::Compass.configuration.to_sass_engine_options
|
||||||
|
end
|
||||||
|
end
|
||||||
|
alias :included :registered
|
||||||
|
end
|
||||||
|
|
||||||
|
module ClassMethods
|
||||||
|
# Add a block/proc to be run after features have been setup
|
||||||
|
def after_compass_init(&block)
|
||||||
|
@run_after_compass ||= []
|
||||||
|
@run_after_compass << block
|
||||||
|
end
|
||||||
|
|
||||||
|
def execute_after_compass_init!
|
||||||
|
@run_after_compass ||= []
|
||||||
|
@run_after_compass.each { |block| class_eval(&block) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -84,7 +84,7 @@ module Middleman::CoreExtensions::Features
|
||||||
end
|
end
|
||||||
|
|
||||||
# Add in defaults
|
# Add in defaults
|
||||||
default_extensions.each do |ext|
|
default_features.each do |ext|
|
||||||
activate ext
|
activate ext
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
34
lib/middleman/core_extensions/rack_map.rb
Normal file
34
lib/middleman/core_extensions/rack_map.rb
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
module Middleman::CoreExtensions::RackMap
|
||||||
|
class << self
|
||||||
|
def registered(app)
|
||||||
|
app.extend ClassMethods
|
||||||
|
end
|
||||||
|
alias :included :registered
|
||||||
|
end
|
||||||
|
|
||||||
|
module ClassMethods
|
||||||
|
def map(path, &block)
|
||||||
|
@maps ||= []
|
||||||
|
@maps << [path, block]
|
||||||
|
end
|
||||||
|
|
||||||
|
def maps
|
||||||
|
@maps || []
|
||||||
|
end
|
||||||
|
|
||||||
|
# Creates a Rack::Builder instance with all the middleware set up and
|
||||||
|
# an instance of this class as end point.
|
||||||
|
def build(*args, &bk)
|
||||||
|
builder = ::Rack::Builder.new
|
||||||
|
builder.use ::Sinatra::ShowExceptions if show_exceptions?
|
||||||
|
builder.use ::Rack::CommonLogger if logging?
|
||||||
|
builder.use ::Rack::Head
|
||||||
|
middleware.each { |c,a,b| builder.use(c, *a, &b) }
|
||||||
|
maps.each { |p,b| builder.map(p, &b) }
|
||||||
|
builder.map "/" do
|
||||||
|
run Middleman::Server.new!(*args, &bk)
|
||||||
|
end
|
||||||
|
builder
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
29
lib/middleman/core_extensions/sprockets.rb
Normal file
29
lib/middleman/core_extensions/sprockets.rb
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
require "sprockets"
|
||||||
|
|
||||||
|
module Middleman::CoreExtensions::Sprockets
|
||||||
|
class << self
|
||||||
|
def registered(app)
|
||||||
|
# app.map '/assets' do
|
||||||
|
# run ::Sprockets::Environment.new
|
||||||
|
# end
|
||||||
|
end
|
||||||
|
alias :included :registered
|
||||||
|
end
|
||||||
|
|
||||||
|
class Environment < Sprockets::Environment
|
||||||
|
|
||||||
|
# Pass in the project you want the pipeline to manage.
|
||||||
|
def initialize(app, mode = :debug)
|
||||||
|
# Views/ ?
|
||||||
|
super app.root
|
||||||
|
|
||||||
|
# Disable css for now
|
||||||
|
# unregister_processor "text/css", Sprockets::DirectiveProcessor
|
||||||
|
|
||||||
|
# configure search paths
|
||||||
|
# append_path File.dirname project_path
|
||||||
|
# append_path File.join project_path, 'assets'
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,7 +1,7 @@
|
||||||
module Middleman::Features::AssetHost
|
module Middleman::Features::AssetHost
|
||||||
class << self
|
class << self
|
||||||
def registered(app)
|
def registered(app)
|
||||||
app.after_feature_init do
|
app.after_compass_init do
|
||||||
if app.asset_host.is_a?(Proc)
|
if app.asset_host.is_a?(Proc)
|
||||||
::Compass.configuration.asset_host(&app.asset_host)
|
::Compass.configuration.asset_host(&app.asset_host)
|
||||||
end
|
end
|
||||||
|
|
|
@ -25,7 +25,7 @@ module Middleman::Features::CacheBuster
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
app.after_feature_init do
|
app.after_compass_init do
|
||||||
::Compass.configuration do |config|
|
::Compass.configuration do |config|
|
||||||
config.asset_cache_buster do |path, real_path|
|
config.asset_cache_buster do |path, real_path|
|
||||||
real_path = real_path.path if real_path.is_a? File
|
real_path = real_path.path if real_path.is_a? File
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
module Middleman::Features::MinifyCss
|
module Middleman::Features::MinifyCss
|
||||||
class << self
|
class << self
|
||||||
def registered(app)
|
def registered(app)
|
||||||
app.after_feature_init do
|
app.after_compass_init do
|
||||||
::Compass.configuration.output_style = :compressed
|
::Compass.configuration.output_style = :compressed
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,41 +1,11 @@
|
||||||
require "sass"
|
require "sass"
|
||||||
require "sass/plugin"
|
require "sass/plugin"
|
||||||
require "compass"
|
|
||||||
|
|
||||||
module Middleman::Renderers::Sass
|
module Middleman::Renderers::Sass
|
||||||
class << self
|
class << self
|
||||||
def registered(app)
|
def registered(app)
|
||||||
# Susy grids
|
# Default sass options
|
||||||
begin
|
app.set :sass, {}
|
||||||
require "susy"
|
|
||||||
rescue LoadError
|
|
||||||
end
|
|
||||||
|
|
||||||
app.after_feature_init do
|
|
||||||
views_root = File.basename(app.views)
|
|
||||||
::Compass.configuration do |config|
|
|
||||||
config.cache = false # For sassc files
|
|
||||||
config.project_path = app.root
|
|
||||||
config.sass_dir = File.join(views_root, app.css_dir)
|
|
||||||
config.output_style = :nested
|
|
||||||
config.fonts_dir = File.join(views_root, app.fonts_dir)
|
|
||||||
config.css_dir = File.join(views_root, app.css_dir)
|
|
||||||
config.images_dir = File.join(views_root, app.images_dir)
|
|
||||||
config.http_images_path = app.http_images_path rescue File.join(app.http_prefix || "/", app.images_dir)
|
|
||||||
config.http_stylesheets_path = app.http_css_path rescue File.join(app.http_prefix || "/", app.css_dir)
|
|
||||||
config.asset_cache_buster :none
|
|
||||||
|
|
||||||
config.add_import_path(config.sass_dir)
|
|
||||||
end
|
|
||||||
|
|
||||||
# configure :build do
|
|
||||||
# build_root = File.basename(self.build_dir)
|
|
||||||
# ::Compass.configuration do |config|
|
|
||||||
# config.css_dir = File.join(build_root, self.css_dir)
|
|
||||||
# config.images_dir = File.join(build_root, self.images_dir)
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
alias :included :registered
|
alias :included :registered
|
||||||
end
|
end
|
||||||
|
@ -44,14 +14,16 @@ module Middleman::Renderers::Sass
|
||||||
def sass_options
|
def sass_options
|
||||||
return super if basename.nil?
|
return super if basename.nil?
|
||||||
|
|
||||||
location_of_sass_file = Middleman::Server.environment == :build ?
|
location_of_sass_file = if Middleman::Server.environment == :build
|
||||||
File.join(Middleman::Server.root, Middleman::Server.build_dir) :
|
File.join(Middleman::Server.root, Middleman::Server.build_dir)
|
||||||
|
else
|
||||||
Middleman::Server.views
|
Middleman::Server.views
|
||||||
|
end
|
||||||
|
|
||||||
parts = basename.split('.')
|
parts = basename.split('.')
|
||||||
parts.pop
|
parts.pop
|
||||||
css_filename = File.join(location_of_sass_file, Middleman::Server.css_dir, parts.join("."))
|
css_filename = File.join(location_of_sass_file, Middleman::Server.css_dir, parts.join("."))
|
||||||
super.merge(::Compass.configuration.to_sass_engine_options).merge(:css_filename => css_filename)
|
super.merge(Middleman::Server.settings.sass).merge(:css_filename => css_filename)
|
||||||
end
|
end
|
||||||
|
|
||||||
def evaluate(scope, locals, &block)
|
def evaluate(scope, locals, &block)
|
||||||
|
@ -74,7 +46,7 @@ module Middleman::Renderers::Sass
|
||||||
::Tilt.prefer(ScssPlusCSSFilenameTemplate)
|
::Tilt.prefer(ScssPlusCSSFilenameTemplate)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Use compass settings in Haml filters
|
# Use sass settings in Haml filters
|
||||||
# Other, tilt-based filters (like those used in Slim) will
|
# Other, tilt-based filters (like those used in Slim) will
|
||||||
# work automatically.
|
# work automatically.
|
||||||
module Middleman::Renderers::Haml
|
module Middleman::Renderers::Haml
|
||||||
|
@ -82,8 +54,8 @@ module Middleman::Renderers::Haml
|
||||||
include ::Haml::Filters::Base
|
include ::Haml::Filters::Base
|
||||||
|
|
||||||
def render(text)
|
def render(text)
|
||||||
compass_options = ::Compass.configuration.to_sass_engine_options
|
sass_options = Middleman::Server.settings.sass
|
||||||
::Sass::Engine.new(text, compass_options).render
|
::Sass::Engine.new(text, sass_options).render
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -3,6 +3,20 @@ require "sinatra/base"
|
||||||
|
|
||||||
module Middleman
|
module Middleman
|
||||||
class Server < Sinatra::Base
|
class Server < Sinatra::Base
|
||||||
|
class << self
|
||||||
|
# Override Sinatra's set to accept a block
|
||||||
|
# Specifically for the asset_host feature
|
||||||
|
def set(option, value=self, &block)
|
||||||
|
if block_given?
|
||||||
|
value = Proc.new { block }
|
||||||
|
end
|
||||||
|
|
||||||
|
super(option, value, &nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
def build?; environment == :build; end
|
||||||
|
end
|
||||||
|
|
||||||
# Basic Sinatra config
|
# Basic Sinatra config
|
||||||
set :app_file, __FILE__
|
set :app_file, __FILE__
|
||||||
set :root, ENV["MM_DIR"] || Dir.pwd
|
set :root, ENV["MM_DIR"] || Dir.pwd
|
||||||
|
@ -28,12 +42,21 @@ module Middleman
|
||||||
|
|
||||||
set :views, "source"
|
set :views, "source"
|
||||||
|
|
||||||
|
# Add Rack::Builder.map to Sinatra
|
||||||
|
register Middleman::CoreExtensions::RackMap
|
||||||
|
|
||||||
# Activate custom features
|
# Activate custom features
|
||||||
register Middleman::CoreExtensions::Features
|
register Middleman::CoreExtensions::Features
|
||||||
|
|
||||||
# Setup custom rendering
|
# Setup custom rendering
|
||||||
register Middleman::CoreExtensions::Rendering
|
register Middleman::CoreExtensions::Rendering
|
||||||
|
|
||||||
|
# Compass framework
|
||||||
|
register Middleman::CoreExtensions::Compass
|
||||||
|
|
||||||
|
# Sprockets asset handling
|
||||||
|
register Middleman::CoreExtensions::Sprockets
|
||||||
|
|
||||||
# Setup asset path pipeline
|
# Setup asset path pipeline
|
||||||
register Middleman::CoreExtensions::Assets
|
register Middleman::CoreExtensions::Assets
|
||||||
|
|
||||||
|
@ -53,16 +76,6 @@ module Middleman
|
||||||
:lorem
|
:lorem
|
||||||
]
|
]
|
||||||
|
|
||||||
# Override Sinatra's set to accept a block
|
|
||||||
# Specifically for the asset_host feature
|
|
||||||
def self.set(option, value=self, &block)
|
|
||||||
if block_given?
|
|
||||||
value = Proc.new { block }
|
|
||||||
end
|
|
||||||
|
|
||||||
super(option, value, &nil)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Default layout name
|
# Default layout name
|
||||||
set :layout, :layout
|
set :layout, :layout
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@ Gem::Specification.new do |s|
|
||||||
s.add_runtime_dependency("haml", ["~> 3.1.0"])
|
s.add_runtime_dependency("haml", ["~> 3.1.0"])
|
||||||
s.add_runtime_dependency("sass", ["~> 3.1.0"])
|
s.add_runtime_dependency("sass", ["~> 3.1.0"])
|
||||||
s.add_runtime_dependency("compass", ["~> 0.11.3"])
|
s.add_runtime_dependency("compass", ["~> 0.11.3"])
|
||||||
|
s.add_runtime_dependency("sprockets", ["2.0.0.beta.10"])
|
||||||
s.add_runtime_dependency("httparty", ["~> 0.7.0"])
|
s.add_runtime_dependency("httparty", ["~> 0.7.0"])
|
||||||
s.add_development_dependency("spork", ["~> 0.9.0.rc8"])
|
s.add_development_dependency("spork", ["~> 0.9.0.rc8"])
|
||||||
s.add_development_dependency("cucumber", ["~> 0.10.0"])
|
s.add_development_dependency("cucumber", ["~> 0.10.0"])
|
||||||
|
|
Loading…
Add table
Reference in a new issue