class CssCounter

Public Class Methods

new(css) click to toggle source
  # File lib/css_counter.rb
6 def initialize(css)
7   @css = css
8 end

Public Instance Methods

selectors() click to toggle source
   # File lib/css_counter.rb
10 def selectors
11   @selectors ||= count_selectors_in_css_string(@css)
12 end

Private Instance Methods

count_selectors_in_at_rule(item) click to toggle source
   # File lib/css_counter.rb
38 def count_selectors_in_at_rule(item)
39   if item[:name] == "media"
40     startpos = item[:block][:tokens][1][:pos]
41     endpos   = item[:block][:tokens][-2][:pos]
42     local_css = @css[startpos, endpos-startpos]
43     count_selectors_in_css_string(local_css) + 1
44   elsif item[:name] == "font-face"
45     1
46   elsif item[:name] =~ /keyframes\Z/
47     item[:block][:value].select { |item| item[:node] == :percentage }.size
48   else
49     0
50   end
51 end
count_selectors_in_css_string(string) click to toggle source
   # File lib/css_counter.rb
16 def count_selectors_in_css_string(string)
17   tree = Crass.parse(string)
18   tree.map { |item|
19     count_selectors_in_node(item)
20   }.inject(0) { |accum, i|
21     accum += i
22   }
23 end
count_selectors_in_node(item) click to toggle source
   # File lib/css_counter.rb
25 def count_selectors_in_node(item)
26   case item[:node]
27   when :style_rule then count_selectors_in_style_rule(item)
28   when :at_rule    then count_selectors_in_at_rule(item)
29   else
30     0
31   end
32 end
count_selectors_in_style_rule(item) click to toggle source
   # File lib/css_counter.rb
34 def count_selectors_in_style_rule(item)
35   item[:selector][:value].split(",").size
36 end