class MiddlemanInlineStyle::Rack::Middleware
Public Class Methods
new(app, opts = {})
click to toggle source
@param [Hash] opts Middleware options
@option opts [String] :stylesheets_path (env)
Stylesheets root path or app's public directory where the stylesheets are to be found
@option opts [Regexp, Array, String] :paths
Limit processing to the passed absolute paths Can be an array of strings or regular expressions, a single string or regular expression If not passed will process output for every path. Regexps and strings must comence with '/'
@option opts [Boolean] :pseudo (false)
If set to true will inline style for pseudo classes according to the W3C specification: http://www.w3.org/TR/css-style-attr. Should probably be left as false because browsers don't seem to comply with the specification for pseudo class style in the style attribute.
# File lib/middleman-inline-style/rack-middleware.rb, line 18 def initialize app, opts = {} @app = app @opts = opts @paths = /^(?:#{ [*opts[:paths]].join('|') })/ end
Public Instance Methods
call(env)
click to toggle source
# File lib/middleman-inline-style/rack-middleware.rb, line 24 def call env response = @app.call env return response unless @paths === env['PATH_INFO'] status, headers, body = response return response unless headers['Content-Type'] == nil or headers['Content-Type'].start_with?('text/html') newbody = [] body.each { |str| newbody << str } newbody = newbody.join('') newbody = InlineStyle.process(newbody, {:stylesheets_path => "./build/"}.merge(@opts)) headers['Content-Length'] = newbody.bytesize.to_s [status, headers, [newbody]] end