Class: Goat::DOMDistiller

Inherits:
Object show all
Defined in:
lib/goat.rb

Instance Method Summary collapse

Constructor Details

#initialize(dom, cs) ⇒ DOMDistiller

Returns a new instance of DOMDistiller.



713
714
715
716
# File 'lib/goat.rb', line 713

def initialize(dom, cs)
  @dom = dom
  @components = cs
end

Instance Method Details

#all_component_classesObject



722
723
724
725
726
# File 'lib/goat.rb', line 722

def all_component_classes
  @all_component_classes ||= \
    all_components.map(&:class).uniq.\
    map{|cls| cls.superclasses(Component)}.uniq.flatten
end

#all_componentsObject



718
719
720
# File 'lib/goat.rb', line 718

def all_components
  @components
end

#ordered_component_classesObject



728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
# File 'lib/goat.rb', line 728

def ordered_component_classes
  cs = all_component_classes

  i = 0
  # invariant: left of i has no superclasses to right
  while i < cs.size
    c = cs[i]
    if cs[(i+1)..-1].any?{|sup| c.subclass_of?(sup)}
      cs.delete(c)
      cs << c
    else
      i += 1
    end
  end

  cs
end

#scriptObject



752
753
754
755
756
757
758
759
760
# File 'lib/goat.rb', line 752

def script
  cs = unpressed_component_classes

  [
    cs.map(&:__script),
    all_components.select{|c| c.class.wired?}.map(&:wire_script),
    all_components.map(&:__script)
  ].flatten.compact.join(';')
end

#styleObject



762
763
764
# File 'lib/goat.rb', line 762

def style
  unpressed_component_classes.select(&:__css).map(&:scoped_css).join
end

#unpressed_component_classesObject



746
747
748
749
750
# File 'lib/goat.rb', line 746

def unpressed_component_classes
  ordered_component_classes.to_a.reject do |cls|
    Goat.config[:press] && Goat::Static.pressed?(cls)
  end
end