require 'css_parser' module Caliber class CaliberController < Caliber::ApplicationController include ::CssParser layout 'caliber/application' before_filter :require_local! def index @css_selectors = [] Rails.application.assets.each_file do |pathname| next unless Rails.application.assets.content_type_of(pathname) == 'text/css' #next if @css_selectors.any? parser = CssParser::Parser.new begin link = Rails.application.assets[pathname].to_s parser.add_block! link selectors = parser.to_enum(:each_selector).map do |selectors, declarations, specificity, media_types| declarations = declarations.gsub ";", ";
" { pathname: pathname.to_s, selector: selectors, declarations: declarations, specificity: specificity, media_types: media_types } end @css_selectors.concat selectors rescue end end end private def require_local! unless local_request? render :text => '

For security purposes, this information is only available to local requests.

', :status => :forbidden end end def local_request? Rails.application.config.consider_all_requests_local || request.local? end end end