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