Module: Hamlizer

Defined in:
lib/hamlizer.rb,
lib/hamlizer/version.rb,
lib/hamlizer/html_element.rb,
lib/hamlizer/content_printer.rb,
lib/hamlizer/erb_content_printer.rb,
lib/hamlizer/element_name_printer.rb,
lib/hamlizer/text_content_printer.rb,
lib/hamlizer/element_haml_converter.rb,
lib/hamlizer/content_printer_factory.rb,
lib/hamlizer/non_erb_content_printer.rb,
lib/hamlizer/attributes_haml_converter.rb

Defined Under Namespace

Classes: AttributesHamlConverter, ContentPrinter, ContentPrinterFactory, ElementHamlConverter, ElementNamePrinter, ErbContentPrinter, HtmlElement, NonErbContentPrinter, TextContentPrinter

Constant Summary collapse

VERSION =
'0.0.4'

Class Method Summary collapse

Class Method Details

.convert_erb_to_parseable_xml!(html) ⇒ Object



42
43
44
45
# File 'lib/hamlizer.rb', line 42

def self.convert_erb_to_parseable_xml!(html)
  remove_erb_printing_code!(html)
  remove_erb_non_printing_code!(html)
end

.current_levelObject



55
56
57
# File 'lib/hamlizer.rb', line 55

def self.current_level
  @@current_level
end

.current_level=(level) ⇒ Object



59
60
61
# File 'lib/hamlizer.rb', line 59

def self.current_level= level
  @@current_level = level
end

.hamlize(html) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/hamlizer.rb', line 14

def self.hamlize(html)
  self.current_level = 0
  html.strip!
  html.squeeze! ' '
  convert_erb_to_parseable_xml! html

  if html.start_with? '<html>'
    root = Nokogiri::HTML.parse(html).root
  else
    root = Nokogiri::HTML::DocumentFragment.parse(html)
  end

  return '' if root.nil?

  children_haml = root.children.map do |element|
    haml = ElementHamlConverter.new(HtmlElement.new(element)).haml
    haml && !haml.empty? ? haml : nil
  end.compact.join("\n")

  if html.start_with?('<html>')
    haml = "%html"
    haml += "\n  #{children_haml}" unless children_haml.empty?
    haml
  else
    children_haml
  end
end

.remove_erb_non_printing_code!(html) ⇒ Object



47
48
49
# File 'lib/hamlizer.rb', line 47

def self.remove_erb_non_printing_code!(html)
  html.gsub!(/<%(.+?)%>/, '<erb:erb_non_print>\1</erb:erb_non_print>')
end

.remove_erb_printing_code!(html) ⇒ Object



51
52
53
# File 'lib/hamlizer.rb', line 51

def self.remove_erb_printing_code!(html)
  html.gsub!(/<%=(.+?)%>/, '<erb:erb_print>\1</erb:erb_print>')
end