diff --git a/css_splitter.gemspec b/css_splitter.gemspec index d9effe1..447330d 100644 --- a/css_splitter.gemspec +++ b/css_splitter.gemspec @@ -16,5 +16,5 @@ Gem::Specification.new do |s| s.files = Dir["{app,config,db,lib}/**/*"] + ["MIT-LICENSE", "Rakefile", "README.md"] s.test_files = Dir["test/**/*"] - s.add_dependency "rails", "~> 3.1" + s.add_dependency "rails", "> 3.1" end diff --git a/lib/css_splitter/application_helper.rb b/lib/css_splitter/application_helper.rb index 2a0bef5..ebe2490 100644 --- a/lib/css_splitter/application_helper.rb +++ b/lib/css_splitter/application_helper.rb @@ -4,7 +4,7 @@ def split_stylesheet_link_tag(*sources) original_sources = sources.dup options = sources.extract_options! - sources.collect!{ |source| head, tail = source.split('.'); "#{head}_split2.#{Array.wrap(tail).join('.')}" } + sources.collect!{ |source| "#{source}_split2" } sources << options [ diff --git a/lib/css_splitter/splitter.rb b/lib/css_splitter/splitter.rb index 5a58c5e..7b9bbb1 100644 --- a/lib/css_splitter/splitter.rb +++ b/lib/css_splitter/splitter.rb @@ -1,12 +1,16 @@ +require "sass" + module CssSplitter class Splitter - MAX_SELECTORS_DEFAULT = 4095 + MAX_SELECTORS_DEFAULT = 2500 class << self def split(data, part=1, max_selectors=MAX_SELECTORS_DEFAULT) - rules = StringIO.new(data).readlines('}') + engine = Sass::Engine.new(data, syntax: :scss) + rules = engine.to_tree.children.reject{|node| node.is_a?(Sass::Tree::CommentNode)} + .map{|node| node.to_scss} return if rules.first.nil? charset_statement, rules[0] = rules.first.partition(/^\@charset[^;]+;/)[1,2] output = charset_statement @@ -27,7 +31,7 @@ def index_for_rule_with_max_selector(rules, max_selectors) selectors_count += rule_selectors_count return index if selectors_count > max_selectors end - rules.length -1 + rules.length - 1 end end