lib/beautiful-css/engine.rb in beautiful-css-0.0.1 vs lib/beautiful-css/engine.rb in beautiful-css-0.0.3

- old
+ new

@@ -1,6 +1,6 @@ -require "beautiful-css/rule" +require "beautiful-css/rule_parser" require "sass" module BeautifulCss class Engine @@ -16,37 +16,58 @@ render end def render return nil if @input.nil? + rules = build_rules + cleaned = remove_unset rules + groups = build_groups(cleaned) + return format( groups ) + end + + private + + def build_rules text = scss_to_css @input text = text.gsub( /[\n\r\t]/m, " " ) text = text.gsub( / +/m, " " ) text = text.gsub( /\/\*[^*]*\*\//m, " " ) rules = text.split('}') + rules = rules.map{|r| RuleParser.new(r).to_rules }.flatten + end - rules = rules.map{|r| Rule.new(r) } - + def remove_unset rules hash = {} - - ##BUILD rules.each do |r| - r.props.each do |p| - hash[p] = [] if !( hash.has_key? p) - r.selectors.each { |s| hash[p].push s } + hash[r.prop] = {} if !( hash.has_key? r.prop) + hash[r.prop][r.selector] = r.value + end + hash + end + + def build_groups rules + groups = {} + rules.keys.each do |prop| + rules[prop].keys.each do |selector| + val = rules[prop][selector] + prop_val = "{ #{prop}:#{val} }" + groups[prop_val] = [] if !( rules.has_key? prop_val) + groups[prop_val] << selector end end + groups + end - ##PRINT - output = "" - hash.keys.sort.each do |key| + def format groups + output = '' + groups.keys.sort.each do |key| output += "\n" - output += hash[key].join(",\n") + "\n" + output += groups[key].uniq.join(",\n") + "\n" output += key + "\n" end - output.gsub( /: +/, ':' ) end + end end