IE_SELECTOR_LIMIT = 4095

namespace :css_counter do

task default: :check_selectors

desc "Ensure no compiled CSS file has more than 4095 selectors"
task check_selectors: [:environment] do
  sprockets = Rails.application.assets

  css_paths = %w{application.css}
  css_paths += Rails.application.config.assets.precompile.select { |item|
    item.is_a?(String) && item[-4,4] == ".css"
  }
  exit_non_zero = false
  css_paths.each do |path|
    css = sprockets[path]
    if css
      selector_count = CssCounter.new(css.source).selectors
      if selector_count > IE_SELECTOR_LIMIT
        $stderr.puts "#{path} has #{selector_count} CSS selectors, must not exceed #{IE_SELECTOR_LIMIT}"
        exit_non_zero = true
      else
        puts "#{path} has #{selector_count} CSS selectors"
      end
    end
  end

  exit(1) if exit_non_zero
end

end