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.



701
702
703
704
# File 'lib/goat.rb', line 701

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

Instance Method Details

#all_component_classesObject



710
711
712
713
714
# File 'lib/goat.rb', line 710

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

#all_componentsObject



706
707
708
# File 'lib/goat.rb', line 706

def all_components
  @components
end

#ordered_component_classesObject



716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
# File 'lib/goat.rb', line 716

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



740
741
742
743
744
745
746
747
748
# File 'lib/goat.rb', line 740

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



750
751
752
# File 'lib/goat.rb', line 750

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

#unpressed_component_classesObject



734
735
736
737
738
# File 'lib/goat.rb', line 734

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