see-less-ess-ess 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 1.9.2
5
+ - 1.8.7
6
+ script: bundle exec rspec
data/README.md CHANGED
@@ -1,6 +1,9 @@
1
1
  # See-less-ess-ess
2
2
 
3
- TODO: Write a gem description
3
+ [![Build Status](https://travis-ci.org/glenjamin/see-less-ess-ess.png)](https://travis-ci.org/glenjamin/see-less-ess-ess)
4
+
5
+ A compass extension that scans HTML files, makes a note of which tags and
6
+ classes are in use - and then removes anything else from the CSS file
4
7
 
5
8
  ## Installation
6
9
 
@@ -1,41 +1,53 @@
1
+ require 'set'
2
+
1
3
  require 'sass'
2
4
  require 'nokogiri'
3
5
 
4
6
  module SeeLessEssEss
5
- VERSION = '0.0.1'
7
+ VERSION = '0.0.2'
6
8
 
7
9
  class Extractor
8
- def initialize(location)
9
- @location = location
10
+ def initialize(glob)
11
+ @glob = glob
12
+ @extracted = false
10
13
  end
11
14
 
12
15
  def css_classes
13
- @css_classes ||= extract_css_classes!
16
+ extract_if_needed
17
+ @css_classes
18
+ end
19
+ def html_tags
20
+ extract_if_needed
21
+ @html_tags
14
22
  end
15
23
 
16
24
  protected
17
25
 
18
26
  def files
19
- Dir.glob("#{@location}/*.html")
27
+ Dir.glob(@glob)
20
28
  end
21
- def extract_css_classes!
22
- files.map do |file|
23
- collector = Collector.new()
29
+ def extract_if_needed
30
+ collector = Collector.new()
31
+ files.each do |file|
24
32
  parser = Nokogiri::HTML::SAX::Parser.new(collector)
25
- contents = open(file, 'rb').read
26
- parser.parse(contents)
27
- collector.css_classes
28
- end.flatten
33
+ parser.parse(open(file, 'rb').read)
34
+ end
35
+ @css_classes = collector.css_classes
36
+ @html_tags = collector.html_tags
29
37
  end
30
38
 
31
39
  class Collector < Nokogiri::XML::SAX::Document
32
40
  def css_classes
33
- @css_classes ||= []
41
+ @css_classes ||= Set.new
34
42
  end
35
- def start_element(name, attrs = [])
43
+ def html_tags
44
+ @html_tags ||= Set.new
45
+ end
46
+ def start_element(tag, attrs = [])
47
+ html_tags << tag
36
48
  attrs.each do |name, value|
37
49
  if name == "class"
38
- css_classes << value.split
50
+ css_classes.merge(value.split)
39
51
  end
40
52
  end
41
53
  end
@@ -61,13 +73,18 @@ module SeeLessEssEss
61
73
  def unused(simple)
62
74
  if simple.is_a?(Sass::Selector::Class)
63
75
  !css_classes_whitelist.include?(simple.name[0].to_s)
76
+ elsif simple.is_a?(Sass::Selector::Element)
77
+ !html_tags_whitelist.include?(simple.name[0].to_s)
64
78
  else
65
79
  false
66
80
  end
67
81
  end
68
82
 
69
83
  def css_classes_whitelist
70
- @whitelist ||= @extractor.css_classes + @used_classes
84
+ @class_whitelist ||= @extractor.css_classes + @used_classes
85
+ end
86
+ def html_tags_whitelist
87
+ @tag_whitelist ||= @extractor.html_tags
71
88
  end
72
89
  end
73
90
 
@@ -126,9 +143,9 @@ module SeeLessEssEss
126
143
  @@initialised = true
127
144
 
128
145
  Compass::Configuration.add_configuration_property(
129
- :templates_location, "Directory to scan for template files") do
146
+ :templates_glob, "Glob to scan for template files") do
130
147
 
131
- project_path
148
+ "#{project_path}/**/*.html"
132
149
  end
133
150
  Compass::Configuration.add_configuration_property(
134
151
  :used_css_classes, "CSS classes to explicity declare as 'used'") do
@@ -140,7 +157,7 @@ module SeeLessEssEss
140
157
  alias_method :_slss_to_tree, :_to_tree
141
158
  def _to_tree
142
159
  conf = Compass.configuration
143
- extractor = SeeLessEssEss::Extractor.new(conf.templates_location)
160
+ extractor = SeeLessEssEss::Extractor.new(conf.templates_glob)
144
161
  checker = SeeLessEssEss::Checker.new(extractor, conf.used_css_classes)
145
162
 
146
163
  tree = _slss_to_tree
@@ -1,8 +1,10 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
+ require File.expand_path('../lib/see-less-ess-ess', __FILE__)
4
+
3
5
  Gem::Specification.new do |gem|
4
6
  gem.name = "see-less-ess-ess"
5
- gem.version = '0.0.1'
7
+ gem.version = SeeLessEssEss::VERSION
6
8
  gem.authors = ["Glen Mailer"]
7
9
  gem.email = ["glenjamin@gmail.com"]
8
10
  gem.description = %q{Remove unused CSS rules from a compass project by scanning template files}
@@ -5,8 +5,10 @@ module SeeLessEssEss
5
5
  let(:extractor) do
6
6
  mock("Extractor").tap do |m|
7
7
  m.stub!(:css_classes).and_return(parsed_css_classes)
8
+ m.stub!(:html_tags).and_return(parsed_html_tags)
8
9
  end
9
10
  end
11
+ let(:parsed_html_tags) { %w(html head title body h1 p td) }
10
12
  let(:parsed_css_classes) { %w(row columns one two top-bar) }
11
13
  let(:used_css_classes) { %w(zebra) }
12
14
 
@@ -48,6 +50,16 @@ module SeeLessEssEss
48
50
  sequence(simple_sequence(className('class')))
49
51
  ).should be_true
50
52
  end
53
+ it "should reject ul" do
54
+ subject.does_not_use(
55
+ sequence(simple_sequence(tag('ul')))
56
+ ).should be_true
57
+ end
58
+ it "should reject ul.row" do
59
+ subject.does_not_use(
60
+ sequence(simple_sequence(tag('ul'),className('class')))
61
+ ).should be_true
62
+ end
51
63
  it "should reject .row .class" do
52
64
  subject.does_not_use(
53
65
  sequence(
@@ -3,12 +3,18 @@ require File.expand_path('../../lib/see-less-ess-ess.rb', __FILE__)
3
3
  module SeeLessEssEss
4
4
  describe "Extractor" do
5
5
 
6
- let(:subject) { Extractor.new(location) }
7
- let(:location) { File.expand_path('../fixtures', __FILE__) }
6
+ let(:subject) { Extractor.new(glob) }
7
+ let(:glob) { "#{File.expand_path('../fixtures', __FILE__)}/**/*.html" }
8
8
 
9
9
  it "should read all css classes from html files in location" do
10
+ subject.should have(6).css_classes
10
11
  subject.css_classes.should include(*%w(body1 body2 title main left lead))
11
12
  end
12
13
 
14
+ it "should read all tags from html files in location" do
15
+ subject.should have(6).html_tags
16
+ subject.html_tags.should include(*%w(html head title body h1 p))
17
+ end
18
+
13
19
  end
14
20
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: see-less-ess-ess
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-20 00:00:00.000000000 Z
12
+ date: 2012-12-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sass
@@ -68,6 +68,7 @@ extra_rdoc_files: []
68
68
  files:
69
69
  - .gitignore
70
70
  - .rspec
71
+ - .travis.yml
71
72
  - Gemfile
72
73
  - LICENSE.txt
73
74
  - README.md