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.



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

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

Instance Method Details

#all_component_classesObject



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

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

#all_componentsObject



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

def all_components
  @components
end

#ordered_component_classesObject



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

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



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

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



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

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

#unpressed_component_classesObject



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

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